{const r=new a.Pane,i=r.addFolder({title:"Grid"});i.addInput(l,"margin",{label:"Margin",min:0,max:200,step:1}),i.addInput(l,"gutter",{label:"Gutter",min:0,max:25,step:1}),i.addInput(l,"cells",{label:"Rows/Lines",min:2,max:10,step:1}),i.addInput(l,"background",{label:"Fill"});const c=r.addFolder({title:"Shape"});c.addInput(l,"size",{label:"Diameter",min:5,max:100,step:1}),c.addInput(l,"amount",{label:"Amount",min:2,max:100,step:1}),c.addInput(l,"color",{label:"Fill"});const p=r.addFolder({title:"Actions"}),d=p.addButton({title:"Randomize",label:"Generate"});p.addSeparator();const m=p.addButton({title:"PNG",label:"Export"});return d.on("click",()=>{s=h(l),t()}),m.on("click",()=>n()),r.on("change",()=>{s=h(l),e({dimensions:u(l)}),t()}),s=h(l),({context:t,width:e,height:n})=>{t.fillStyle=l.background,t.fillRect(0,0,e,n),t.fillStyle=l.color,f(l,({x:e,y:n,pos:r})=>{t.save(),t.translate(e,n),s[r].isActive&&(t.beginPath(),t.arc(0,0,.5*l.size,0,2*Math.PI),t.fill()),t.restore()}),t.fillStyle=l.color,f(l,({x:e,y:n,pos:r})=>{if(t.save(),t.translate(e,n),s[r].isActive){const{e:e,s:n}=s[r].siblings;null!==n&&t.fillRect(.5*-l.size,0,l.size,l.size+l.gutter),null!==e&&t.fillRect(0,.5*-l.size,l.size+l.gutter,l.size)}t.restore()}),t.fillStyle=l.color,f(l,({x:e,y:n,pos:r})=>{if(t.save(),t.translate(e,n),s[r].isActive){const{se:e,sw:n}=s[r].siblings,i=l.size+l.gutter,a=Math.hypot(i,i),u=Math.hypot(.5*l.size,.5*l.size);null!==e&&(t.save(),t.rotate(o.math.degToRad(-45)),t.fillRect(-.5*u,0,u,a),t.restore()),null!==n&&(t.save(),t.rotate(o.math.degToRad(45)),t.fillRect(-.5*u,0,u,a),t.restore())}t.restore()}),t.fillStyle=l.color,f(l,({x:e,y:n,pos:r})=>{if(t.save(),t.translate(e,n),!s[r].isActive){const{n:e,s:n,e:i,w:o}=s[r].siblings;null!==e&&null!==o&&t.fillRect(0,0,-(.5*l.size+l.gutter),-(.5*l.size+l.gutter)),null!==e&&null!==i&&t.fillRect(0,0,.5*l.size+l.gutter,-(.5*l.size+l.gutter)),null!==n&&null!==i&&t.fillRect(0,0,.5*l.size+l.gutter,.5*l.size+l.gutter),null!==n&&null!==o&&t.fillRect(0,0,-(.5*l.size+l.gutter),.5*l.size+l.gutter)}t.restore()}),t.fillStyle=l.background,f(l,({x:e,y:n,pos:r})=>{t.save(),t.translate(e,n),s[r].isActive||(t.beginPath(),t.arc(0,0,.5*l.size+l.gutter,0,2*Math.PI),t.fill()),t.restore()})}},d)},{"canvas-sketch":26,"canvas-sketch-util":10,tweakpane:46}],49:[function(t,e,n){"use strict";n.byteLength=function(t){var e=u(t),n=e[1];return 3*(e[0]+n)/4-n},n.toByteArray=function(t){var e,n,r=u(t),a=r[0],s=r[1],l=new o(function(t,e,n){return 3*(e+n)/4-n}(0,a,s)),c=0,p=s>0?a-4:a;for(n=0;n>16&255,l[c++]=e>>8&255,l[c++]=255&e;2===s&&(e=i[t.charCodeAt(n)]<<2|i[t.charCodeAt(n+1)]>>4,l[c++]=255&e);1===s&&(e=i[t.charCodeAt(n)]<<10|i[t.charCodeAt(n+1)]<<4|i[t.charCodeAt(n+2)]>>2,l[c++]=e>>8&255,l[c++]=255&e);return l},n.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],a=0,s=n-i;as?s:a+16383));1===i?o.push(r[(e=t[n-1])>>2]+r[e<<4&63]+"=="):2===i&&o.push(r[(e=(t[n-2]<<8)+t[n-1])>>10]+r[e>>4&63]+r[e<<2&63]+"=");return o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,l=a.length;s0)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 c(t,e,n){for(var i,o=[],a=e;a>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],50:[function(t,e,n){(function(e){(function(){"use strict";var e=t("base64-js"),r=t("ieee754");n.Buffer=a,n.SlowBuffer=function(t){+t!=t&&(t=0);return a.alloc(+t)},n.INSPECT_MAX_BYTES=50;var i=2147483647;function o(t){if(t>i)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return e.__proto__=a.prototype,e}function a(t,e,n){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return u(t)}return s(t,e,n)}function s(t,e,n){if("string"==typeof t)return function(t,e){"string"==typeof e&&""!==e||(e="utf8");if(!a.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var n=0|h(t,e),r=o(n),i=r.write(t,e);i!==n&&(r=r.slice(0,i));return r}(t,e);if(ArrayBuffer.isView(t))return c(t);if(null==t)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(F(t,ArrayBuffer)||t&&F(t.buffer,ArrayBuffer))return function(t,e,n){if(e<0||t.byteLength=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|t}function h(t,e){if(a.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||F(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var n=t.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return R(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return I(t).length;default:if(i)return r?-1:R(t).length;e=(""+e).toLowerCase(),i=!0}}function f(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function d(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),z(n=+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=a.from(e,r)),a.isBuffer(e))return 0===e.length?-1:m(t,e,n,r,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):m(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,n,r,i){var o,a=1,s=t.length,l=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;a=2,s/=2,l/=2,n/=2}function u(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){var c=-1;for(o=n;os&&(n=s-l),o=n;o>=0;o--){for(var p=!0,h=0;hi&&(r=i):r=i;var o=e.length;r>o/2&&(r=o/2);for(var a=0;a>8,i.push(n%256),i.push(r);return i}(e,t.length-n),t,n,r)}function x(t,n,r){return e.fromByteArray(0===n&&r===t.length?t:t.slice(n,r))}function k(t,e,n){n=Math.min(t.length,n);for(var r=[],i=e;i239?4:u>223?3:u>191?2:1;if(i+p<=n)switch(p){case 1:u<128&&(c=u);break;case 2:128==(192&(o=t[i+1]))&&(l=(31&u)<<6|63&o)>127&&(c=l);break;case 3:a=t[i+2],128==(192&(o=t[i+1]))&&128==(192&a)&&(l=(15&u)<<12|(63&o)<<6|63&a)>2047&&(l<55296||l>57343)&&(c=l);break;case 4:a=t[i+2],s=t[i+3],128==(192&(o=t[i+1]))&&128==(192&a)&&128==(192&s)&&(l=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&l<1114112&&(c=l)}null===c?(c=65533,p=1):c>65535&&(r.push((c-=65536)>>>10&1023|55296),c=56320|1023&c),r.push(c),i+=p}return function(t){var e=t.length;if(e<=C)return String.fromCharCode.apply(String,t);var n="",r=0;for(;rthis.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 A(this,e,n);case"utf8":case"utf-8":return k(this,e,n);case"ascii":return E(this,e,n);case"latin1":case"binary":return P(this,e,n);case"base64":return x(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}}.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="",e=n.INSPECT_MAX_BYTES;return t=this.toString("hex",0,e).replace(/(.{2})/g,"$1 ").trim(),this.length>e&&(t+=" ... "),""},a.prototype.compare=function(t,e,n,r,i){if(F(t,Uint8Array)&&(t=a.from(t,t.offset,t.byteLength)),!a.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);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),l=Math.min(o,s),u=this.slice(r,i),c=t.slice(e,n),p=0;p>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(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 b(this,t,e,n);case"ascii":return g(this,t,e,n);case"latin1":case"binary":return y(this,t,e,n);case"base64":return w(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var C=4096;function E(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 T(t,e,n,r,i,o){if(!a.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 V(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,i,o){return e=+e,n>>>=0,o||V(t,0,n,4),r.write(t,e,n,i,23,4),n+4}function D(t,e,n,i,o){return e=+e,n>>>=0,o||V(t,0,n,8),r.write(t,e,n,i,52,8),n+8}a.prototype.slice=function(t,e){var n=this.length;(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),e>>=0,e>>>=0,n||S(t,e,this.length);for(var r=this[t],i=1,o=0;++o>>=0,e>>>=0,n||S(t,e,this.length);for(var r=this[t+--e],i=1;e>0&&(i*=256);)r+=this[t+--e]*i;return r},a.prototype.readUInt8=function(t,e){return t>>>=0,e||S(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return t>>>=0,e||S(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return t>>>=0,e||S(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return t>>>=0,e||S(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 t>>>=0,e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,n){t>>>=0,e>>>=0,n||S(t,e,this.length);for(var r=this[t],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*e)),r},a.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||S(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},a.prototype.readInt8=function(t,e){return t>>>=0,e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){t>>>=0,e||S(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt16BE=function(t,e){t>>>=0,e||S(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt32LE=function(t,e){return t>>>=0,e||S(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 t>>>=0,e||S(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 t>>>=0,e||S(t,4,this.length),r.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return t>>>=0,e||S(t,4,this.length),r.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return t>>>=0,e||S(t,8,this.length),r.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return t>>>=0,e||S(t,8,this.length),r.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,n,r){(t=+t,e>>>=0,n>>>=0,r)||T(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[e]=255&t;++o>>=0,n>>>=0,r)||T(this,t,e,n,Math.pow(2,8*n)-1,0);var i=n-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+n},a.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||T(this,t,e,1,255,0),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||T(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||T(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||T(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},a.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||T(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var i=Math.pow(2,8*n-1);T(this,t,e,n,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+n},a.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var i=Math.pow(2,8*n-1);T(this,t,e,n,i-1,-i)}var o=n-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+n},a.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||T(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||T(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||T(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||T(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},a.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||T(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeFloatLE=function(t,e,n){return j(this,t,e,!0,n)},a.prototype.writeFloatBE=function(t,e,n){return j(this,t,e,!1,n)},a.prototype.writeDoubleLE=function(t,e,n){return D(this,t,e,!0,n)},a.prototype.writeDoubleBE=function(t,e,n){return D(this,t,e,!1,n)},a.prototype.copy=function(t,e,n,r){if(!a.isBuffer(t))throw new TypeError("argument should be a Buffer");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("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--o)t[o+e]=this[o+n];else Uint8Array.prototype.set.call(t,this.subarray(n,r),e);return i},a.prototype.fill=function(t,e,n,r){if("string"==typeof t){if("string"==typeof e?(r=e,e=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!a.isEncoding(r))throw new TypeError("Unknown encoding: "+r);if(1===t.length){var i=t.charCodeAt(0);("utf8"===r&&i<128||"latin1"===r)&&(t=i)}}else"number"==typeof t&&(t&=255);if(e<0||this.length>>=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(a+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 I(t){return e.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(O,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function B(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function F(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function z(t){return t!=t}}).call(this)}).call(this,t("buffer").Buffer)},{"base64-js":49,buffer:50,ieee754:51}],51:[function(t,e,n){n.read=function(t,e,n,r,i){var o,a,s=8*i-r-1,l=(1<>1,c=-7,p=n?i-1:0,h=n?-1:1,f=t[e+p];for(p+=h,o=f&(1<<-c)-1,f>>=-c,c+=s;c>0;o=256*o+t[e+p],p+=h,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=r;c>0;a=256*a+t[e+p],p+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return a?NaN:Infinity*(f?-1:1);a+=Math.pow(2,r),o-=u}return(f?-1:1)*a*Math.pow(2,o-r)},n.write=function(t,e,n,r,i,o){var a,s,l,u=8*o-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:o-1,d=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||Infinity===e?(s=isNaN(e)?1:0,a=c):(a=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-a))<1&&(a--,l*=2),(e+=a+p>=1?h/l:h*Math.pow(2,1-p))*l>=2&&(a++,l/=2),a+p>=c?(s=0,a=c):a+p>=1?(s=(e*l-1)*Math.pow(2,i),a+=p):(s=e*Math.pow(2,p-1)*Math.pow(2,i),a=0));i>=8;t[n+f]=255&s,f+=d,s/=256,i-=8);for(a=a<0;t[n+f]=255&a,f+=d,a/=256,u-=8);t[n+f-d]|=128*m}},{}],52:[function(t,e,n){(function(t){(function(){t.CANVAS_SKETCH_DEFAULT_STORAGE_KEY=window.location.href}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[48,52]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYWJzLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FkYXB0aXZlLWJlemllci1jdXJ2ZS9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9hZGFwdGl2ZS1iZXppZXItY3VydmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWxtb3N0LWVxdWFsL2FsbW9zdF9lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9hbi1hcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hcnJheS1hbG1vc3QtZXF1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYXJyYXktYWxtb3N0LWVxdWFsL25vZGVfbW9kdWxlcy9hbG1vc3QtZXF1YWwvYWxtb3N0X2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9jb2xvci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvZ2VvbWV0cnkuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvY2xpcC9jbGlwLWxpbmUtdG8tY2lyY2xlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvY2xpcC9jbGlwLXNlZ21lbnQtdG8tY2lyY2xlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvY3NzLWNvbG9yLW5hbWVzLmpzb24iLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9jc3MtY29sb3IuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9oZXgtdG8tcmdiYS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL2hzbC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL29wdGltaXplLXBlbnBsb3QtcGF0aHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9yZWxhdGl2ZS1sdW1pbmFuY2UuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9yZ2JhLXRvLWhleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3ZlYzIuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi93cmFwLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9tYXRoLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9wZW5wbG90LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9yYW5kb20uanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL3NoYWRlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yaWdodC1ub3cvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLXByb21pc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9pcy1kb20vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi91dGlsLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcmVwZWF0LXN0cmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2tleXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9pc19hcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGF0ZWZvcm1hdC9saWIvZGF0ZWZvcm1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3BhZC1sZWZ0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvc2F2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2FjY2Vzc2liaWxpdHkuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9wYXBlci1zaXplcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZmluZWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9jb252ZXJ0LWxlbmd0aC9jb252ZXJ0LWxlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2Rpc3RhbmNlcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvcmVzaXplQ2FudmFzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZ2V0LWNhbnZhcy1jb250ZXh0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9jcmVhdGVDYW52YXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL1NrZXRjaE1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2tleWJvYXJkU2hvcnRjdXRzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY2FudmFzLXNrZXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9jbG9uZS9jbG9uZS5qcyIsIm5vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0L2NvbnZlcnNpb25zLmpzIiwibm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29udmVydC1sZW5ndGgvY29udmVydC1sZW5ndGguanMiLCJub2RlX21vZHVsZXMvZDMtcGF0aC9kaXN0L2QzLXBhdGguanMiLCJub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mbG9hdC1oc2wycmdiL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zsb2F0LXJnYjJoc2wvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbGluZWNsaXAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbm9ybWFsaXplLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLWNvbG9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3ByaW1pdGl2ZS1xdWFkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlZ2wvZGlzdC9yZWdsLmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZXgtbm9pc2Uvc2ltcGxleC1ub2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9zdmctYXJjLXRvLWN1YmljLWJlemllci9janMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3ZnLXBhdGgtY29udG91cnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3ZnLXBhdGgtY29udG91cnMvbm9kZV9tb2R1bGVzL25vcm1hbGl6ZS1zdmctcGF0aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90d2Vha3BhbmUvZGlzdC90d2Vha3BhbmUuanMiLCJub2RlX21vZHVsZXMvdmVjMi1jb3B5L2luZGV4LmpzIiwic2tldGNoLmpzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC1jbGkvbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLWNsaS9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsImNhbnZhcy1za2V0Y2gtY2xpL2luamVjdGVkL3N0b3JhZ2Uta2V5LmpzIl0sIm5hbWVzIjpbInIiLCJlIiwibiIsInQiLCJvIiwiaSIsImYiLCJjIiwicmVxdWlyZSIsInUiLCJhIiwiRXJyb3IiLCJjb2RlIiwicCIsImV4cG9ydHMiLCJjYWxsIiwibGVuZ3RoIiwiMSIsIm1vZHVsZSIsInBhdGgiLCJzdGFydFgiLCJzdGFydFkiLCJ4IiwieSIsIm1hcCIsInNlZyIsInR5cGUiLCJzbGljZSIsImNvbW1hbmQiLCJ0b1VwcGVyQ2FzZSIsImNsb25lIiwicG9pbnQiLCJ2ZWMyIiwib3B0IiwiUkVDVVJTSU9OX0xJTUlUIiwicmVjdXJzaW9uIiwiRkxUX0VQU0lMT04iLCJlcHNpbG9uIiwiUEFUSF9ESVNUQU5DRV9FUFNJTE9OIiwicGF0aEVwc2lsb24iLCJjdXJ2ZV9hbmdsZV90b2xlcmFuY2VfZXBzaWxvbiIsImFuZ2xlRXBzaWxvbiIsIm1fYW5nbGVfdG9sZXJhbmNlIiwiYW5nbGVUb2xlcmFuY2UiLCJtX2N1c3BfbGltaXQiLCJjdXNwTGltaXQiLCJzdGFydCIsImMxIiwiYzIiLCJlbmQiLCJzY2FsZSIsInBvaW50cyIsImRpc3RhbmNlVG9sZXJhbmNlIiwicHVzaCIsInJlY3Vyc2l2ZSIsIngxIiwieTEiLCJ4MiIsInkyIiwieDMiLCJ5MyIsIng0IiwieTQiLCJsZXZlbCIsInBpIiwiTWF0aCIsIlBJIiwieDEyIiwieTEyIiwieDIzIiwieTIzIiwieDM0IiwieTM0IiwieDEyMyIsInkxMjMiLCJ4MjM0IiwieTIzNCIsIngxMjM0IiwieTEyMzQiLCJkYTEiLCJkYTIiLCJkeCIsImR5IiwiZDIiLCJhYnMiLCJkMyIsImEyMyIsImF0YW4yIiwiYmVnaW4iLCJtaW4iLCJhbG1vc3RFcXVhbCIsImIiLCJhYnNvbHV0ZUVycm9yIiwicmVsYXRpdmVFcnJvciIsImQiLCJEQkxfRVBTSUxPTiIsInN0ciIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiYXJyIiwiQllURVNfUEVSX0VMRU1FTlQiLCJidWZmZXIiLCJBcnJheSIsImlzQXJyYXkiLCJhbG1vc3QiLCJhYnNvbHV0ZVRvbGVyYW5jZSIsInJlbGF0aXZlVG9sZXJhbmNlIiwiZXZlcnkiLCJhMCIsImIwIiwiY3NzQ29sb3IiLCJuYW1lcyIsInJnYkx1bWluYW5jZSIsIkhTTFV0aWwiLCJoZXhUb1JHQkEiLCJSR0JBVG9IZXgiLCJwYXJzZSIsInN0eWxlIiwicmVsYXRpdmVMdW1pbmFuY2UiLCJjb2xvciIsInJlc3VsdCIsInJnYiIsImNvbnRyYXN0UmF0aW8iLCJjb2xvckEiLCJjb2xvckIiLCJtYXgiLCJvZmZzZXRIU0wiLCJoIiwicyIsImwiLCJoc2xhIiwiYmxlbmQiLCJiYWNrZ3JvdW5kIiwiZm9yZWdyb3VuZCIsIm9wYWNpdHkiLCJiZyIsImZnIiwiYzAiLCJyZ2JhIiwiYWxwaGEiLCJpc0Zpbml0ZSIsIlJHQkFUb0hTTEEiLCJIU0xBVG9SR0JBIiwibGluZWNsaXAiLCJhcnJheUFsbW9zdEVxdWFsIiwic3F1YXJlZERpc3RhbmNlIiwiYXJlUG9pbnRzQ29sbGluZWFyIiwicG9pbnQwIiwicG9pbnQxIiwicG9pbnQyIiwieDAiLCJ5MCIsInJlbW92ZUR1cGxpY2F0ZVBvaW50cyIsImxhc3RQb2ludCIsIm5ld1BhdGgiLCJjdXJQb2ludCIsInJlbW92ZUNvbGxpbmVhclBvaW50cyIsInJlbWFpbmluZ1BvaW50cyIsInAwIiwicDEiLCJwMiIsImNvbGxpbmVhciIsInNwbGljZSIsInNoaWZ0IiwiY2xpcFNlZ21lbnRUb0NpcmNsZSIsImNsaXBMaW5lVG9DaXJjbGUiLCJjbGlwUG9seWxpbmVzVG9Cb3giLCJwb2x5bGluZXMiLCJiYm94IiwiYm9yZGVyIiwiY2xvc2VMaW5lcyIsIkJvb2xlYW4iLCJsaW5lIiwicG9seWdvbiIsImZpbHRlciIsImxpbmVzIiwicG9seWxpbmUiLCJyZWR1Y2UiLCJjb25jYXQiLCJjcmVhdGVIYXRjaExpbmVzIiwiYm91bmRzIiwiYW5nbGUiLCJzcGFjaW5nIiwib3V0IiwieG1pbiIsInltaW4iLCJ4bWF4IiwieW1heCIsInciLCJzcXJ0Iiwicm90QW5nbGUiLCJjYSIsImNvcyIsInNhIiwic2luIiwiY3giLCJjeSIsImdldEJvdW5kcyIsImxvIiwiaGkiLCJqIiwicmFuZG9tIiwibWF0aCIsInBlbnBsb3QiLCJnZW9tZXRyeSIsInNoYWRlciIsInNxciIsImNpcmNsZSIsImNpcmNsZVJhZGl1cyIsImhpdHMiLCJkZWx0YSIsImRldCIsInNxcnREZXQiLCJwb2ludEluQ2lyY2xlIiwicHgiLCJweSIsInJhZGl1cyIsImRpc3RhbmNlIiwicHJvamVjdFBvaW50Iiwic3JjeCIsInNyY3kiLCJkZXN0eCIsImRlc3R5IiwiZGlzdCIsImNsb3Nlc3RQb2ludCIsInAxSW5DaXJjbGUiLCJwMkluQ2lyY2xlIiwidngiLCJ2eSIsInJhdGlvIiwiY2xvc2VzdFBvaW50T25MaW5lRnJvbVBvaW50IiwiaGl0QSIsImhpdEIiLCJjbG9zZXN0UG9pbnRPblNlZ21lbnRGcm9tUG9pbnQiLCJpbnRlcnNlY3QiLCJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsIndyYXAiLCJwYXJzZVN0eWxlIiwiVHlwZUVycm9yIiwiaGV4IiwidG9Mb3dlckNhc2UiLCJ0ZXN0IiwibWF0Y2giLCJleGVjIiwicmVwbGFjZSIsInBhcnRzIiwic3BsaXQiLCJyb3VuZCIsInBhcnNlRmxvYXQiLCJoc2wiLCJyZ2JTdHlsZSIsImciLCJqb2luIiwiaHNsU3R5bGUiLCJyZ2JTdHIiLCJwYXJzZUludCIsInJlcGVhdCIsIm51bSIsImZsb2F0SFNMMlJHQiIsImZsb2F0UkdCMkhTTCIsImZsb2F0SFNMIiwiaHVlIiwiZmxvYXRSR0IiLCJtZXJnZVBhdGhzIiwicGF0aHMiLCJwYXRoMUlkeCIsInBhdGgySWR4IiwibWluSWR4IiwibWF4SWR4IiwibWVyZ2VkUGF0aCIsInNvcnQiLCJuZXdQYXRocyIsImxhc3RQYXRoIiwiY3VyUHQiLCJjbG9zZXN0IiwibGFzdFB0IiwiZGlzdGFuY2VUb0ZpcnN0IiwiZGlzdGFuY2VUb0xhc3QiLCJpZHgiLCJyZXZlcnNlIiwiY2xvc2VzdFBhdGgiLCJtZXJnZSIsIm1lcmdlVGhyZWhzb2xkIiwibWVyZ2VUaHJlaHNvbGRTcSIsInJjIiwiZ2MiLCJiYyIsImxvd2MiLCJhZGp1c3RHYW1tYSIsInBvdyIsInJzcmdiIiwiZ3NyZ2IiLCJic3JnYiIsImFscGhhUGFyYW0iLCJwdDEiLCJwdDIiLCJ2YWx1ZSIsImZyb20iLCJ0byIsImN5Y2xlIiwiZmxvb3IiLCJkZWZpbmVkIiwiRVBTSUxPTiIsIk51bWJlciIsImNsYW1wIiwibGVycCIsImludmVyc2VMZXJwIiwidG9GaW5pdGUiLCJkZWZhdWx0VmFsdWUiLCJleHBhbmRWZWN0b3IiLCJkaW1zIiwic2NhbGFyIiwibGVycEFycmF5IiwibmV3QXJyYXkiLCJpbml0aWFsVmFsdWUiLCJtb2QiLCJkYW1wIiwibGFtYmRhIiwiZHQiLCJleHAiLCJmcmFjdCIsInNpZ24iLCJkZWdUb1JhZCIsInJhZFRvRGVnIiwicGluZ1BvbmciLCJsaW5zcGFjZSIsIm9wdHMiLCJlbmRwb2ludCIsIm9mZnNldCIsIl8iLCJsZXJwRnJhbWVzIiwidmFsdWVzIiwibGVuIiwid2hvbGUiLCJmcmFtZSIsIm5leHRGcmFtZSIsImNsYW1wMDEiLCJ2Iiwic21vb3Roc3RlcCIsImRhbXBBcnJheSIsIm1hcFJhbmdlIiwiaW5wdXRNaW4iLCJpbnB1dE1heCIsIm91dHB1dE1pbiIsIm91dHB1dE1heCIsIm91dFZhbCIsImV4cGFuZDJEIiwiZXhwYW5kM0QiLCJleHBhbmQ0RCIsImNvbnZlcnQiLCJzdmdQYXRoQ29udG91cnMiLCJzdmdQYXRoUGFyc2UiLCJzdmdQYXRoQWJzIiwic3ZnUGF0aEFyY3MiLCJvcHRpbWl6ZXIiLCJERUZBVUxUX1BFTl9USElDS05FU1MiLCJERUZBVUxUX1BFTl9USElDS05FU1NfVU5JVCIsIkRFRkFVTFRfUElYRUxTX1BFUl9JTkNIIiwicGF0aHNUb1NWR1BhdGhzIiwiaW5wdXRzIiwic3ZnUGF0aCIsImNvbnZlcnRUb1NWR1BhdGgiLCJwYXRoc1RvUG9seWxpbmVzIiwiY3VydmVSZXNvbHV0aW9uIiwidW5pdHMiLCJjb250b3VycyIsImVhY2hQYXRoIiwiZmVhdHVyZSIsImNvbW1hbmRzIiwiZm9yRWFjaCIsInN1YkNvbnRvdXIiLCJwYXRoc1RvU1ZHIiwid2lkdGgiLCJoZWlnaHQiLCJjb252ZXJ0T3B0aW9ucyIsInZpZXdVbml0cyIsInJvdW5kUGl4ZWwiLCJwcmVjaXNpb24iLCJwaXhlbHNQZXJJbmNoIiwiYXNzaWduIiwidW5kZWZpbmVkIiwib3B0aW1pemUiLCJvcHRpbWl6ZU9wdHMiLCJyZW1vdmVEdXBsaWNhdGVzIiwicmVtb3ZlQ29sbGluZWFyIiwic2hvdWxkU29ydCIsInNob3VsZE1lcmdlIiwic2hvdWxkUmVtb3ZlQ29sbGluZWFyIiwibWVyZ2VUaHJlc2hvbGQiLCJzdmdQYXRocyIsInZpZXdXaWR0aCIsInZpZXdIZWlnaHQiLCJmaWxsU3R5bGUiLCJzdHJva2VTdHlsZSIsImxpbmVXaWR0aCIsImxpbmVKb2luIiwibGluZUNhcCIsInBhdGhFbGVtZW50cyIsInRvQXR0ckxpc3QiLCJhcmdzIiwiYXR0ciIsInJlbmRlclBhdGhzIiwiY29udGV4dCIsImNsZWFyUmVjdCIsImZpbGxSZWN0IiwiYmVnaW5QYXRoIiwiZHJhd1NWR1BhdGgiLCJsaW5lVG8iLCJzdHJva2UiLCJjYW52YXMiLCJkYXRhIiwiZXh0ZW5zaW9uIiwiaW5wdXQiLCJpc0VtcHR5IiwiaXNQYXRoIiwiaXNQb2x5bGluZSIsInBvbHlsaW5lVG9TVkdQYXRoIiwiY2IiLCJtb3ZlVG8iLCJiZXppZXJDdXJ2ZVRvIiwiY3JlYXRlUGF0aCIsImZuIiwicXVhZHJhdGljQ3VydmVUbyIsImFyZ3VtZW50cyIsIl94MSIsIl95MSIsImFwcGx5IiwicG9seWxpbmVzVG9TVkciLCJjb25zb2xlIiwid2FybiIsInJlbmRlclBvbHlsaW5lcyIsInNlZWRSYW5kb20iLCJTaW1wbGV4Tm9pc2UiLCJjcmVhdGVSYW5kb20iLCJkZWZhdWx0U2VlZCIsImN1cnJlbnRTZWVkIiwiY3VycmVudFJhbmRvbSIsIm5vaXNlR2VuZXJhdG9yIiwiZGVmYXVsdFJhbmRvbSIsIl9uZXh0R2F1c3NpYW4iLCJfaGFzTmV4dEdhdXNzaWFuIiwic2V0U2VlZCIsImdldFNlZWQiLCJnZXRSYW5kb21TZWVkIiwiU3RyaW5nIiwidmFsdWVOb25aZXJvIiwicGVybXV0ZU5vaXNlIiwiY3JlYXRlTm9pc2UiLCJub2lzZTFEIiwiZnJlcXVlbmN5IiwiYW1wbGl0dWRlIiwibm9pc2UyRCIsIm5vaXNlM0QiLCJ6Iiwibm9pc2U0RCIsImJvb2xlYW4iLCJjaGFuY2UiLCJyYW5nZSIsInJhbmdlRmxvb3IiLCJwaWNrIiwiYXJyYXkiLCJzaHVmZmxlIiwicmFuZCIsInRtcCIsInJldCIsIm9uQ2lyY2xlIiwiaW5zaWRlQ2lyY2xlIiwib25TcGhlcmUiLCJwaGkiLCJ0aGV0YSIsImFjb3MiLCJpbnNpZGVTcGhlcmUiLCJrIiwiY2JydCIsInF1YXRlcm5pb24iLCJ1MSIsInUyIiwidTMiLCJzcTEiLCJzcTIiLCJ0aGV0YTEiLCJ0aGV0YTIiLCJ3ZWlnaHRlZCIsIndlaWdodGVkU2V0Iiwic2V0Iiwid2VpZ2h0ZWRTZXRJbmRleCIsImdhdXNzaWFuIiwibWVhbiIsInN0YW5kYXJkRGVyaXZhdGlvbiIsInYxIiwidjIiLCJtdWx0aXBsaWVyIiwibG9nIiwic2VlZCIsIndlaWdodCIsIndlaWdodHMiLCJ0b3RhbFdlaWdodCIsImNyZWF0ZVJlZ2wiLCJjcmVhdGVRdWFkIiwicGFyc2VDb2xvciIsImlzVGV4dHVyZUxpa2UiLCJnbCIsInJlZ2xPcHRzIiwiZXh0ZW5zaW9ucyIsIm9wdGlvbmFsRXh0ZW5zaW9ucyIsInByb2ZpbGUiLCJvbkRvbmUiLCJkcmF3UXVhZENvbW1hbmQiLCJyZWdsIiwicXVhZCIsInRleHR1cmVNYXAiLCJNYXAiLCJ1bmlmb3Jtc01hcCIsInVuaWZvcm1zIiwia2V5cyIsImtleSIsInN0YXRlIiwicHJvcHMiLCJiYXRjaElEIiwiaGFzIiwicHJldlRleCIsImdldCIsInRleHR1cmUiLCJzY2lzc29yIiwiZW5hYmxlIiwiYm94IiwicHJvcCIsImZyYWciLCJ2ZXJ0IiwiZnVuYyIsInNyY1JHQiIsInNyY0FscGhhIiwiZHN0UkdCIiwiZHN0QWxwaGEiLCJhdHRyaWJ1dGVzIiwicG9zaXRpb24iLCJwb3NpdGlvbnMiLCJlbGVtZW50cyIsImNlbGxzIiwiZXJyIiwiaGFuZGxlRXJyb3IiLCJjbGVhckNvbG9yIiwicGFyc2VkIiwiY2xlYXJBbHBoYSIsImNsZWFyIiwicmVuZGVyIiwicG9sbCIsImRlcHRoIiwic3RlbmNpbCIsImRyYXdRdWFkIiwiZmx1c2giLCJ1bmxvYWQiLCJkZXN0cm95IiwibWVzc2FnZSIsImdldE93blByb3BlcnR5U3ltYm9scyIsImhhc093blByb3BlcnR5IiwicHJvcElzRW51bWVyYWJsZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwib2JqZWN0QXNzaWduIiwidGVzdDEiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwidGVzdDIiLCJmcm9tQ2hhckNvZGUiLCJ0ZXN0MyIsImxldHRlciIsInNob3VsZFVzZU5hdGl2ZSIsInRhcmdldCIsInNvdXJjZSIsInN5bWJvbHMiLCJ2YWwiLCJ0b09iamVjdCIsImJyb3dzZXIiLCJjb21tb25qc0dsb2JhbCIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsImlzUHJvbWlzZV8xIiwib2JqIiwidGhlbiIsImlzRG9tIiwid2luZG93IiwiTm9kZSIsIm5vZGVUeXBlIiwibm9kZU5hbWUiLCJnZXRDbGllbnRBUEkiLCJhcmd1bWVudHMkMSIsImlzQnJvd3NlciIsImRvY3VtZW50IiwiY2FjaGUiLCJzaGltIiwic3VwcG9ydHNBcmd1bWVudHNDbGFzcyIsInN1cHBvcnRlZCIsIm9iamVjdCIsInVuc3VwcG9ydGVkIiwicFNsaWNlIiwiZGVlcEVxdWFsIiwiYWN0dWFsIiwiZXhwZWN0ZWQiLCJnZXRUaW1lIiwic3RyaWN0IiwiaXNVbmRlZmluZWRPck51bGwiLCJpc19hcmd1bWVudHMiLCJpc0J1ZmZlciIsImthIiwia2IiLCJvYmpFcXVpdiIsImNvcHkiLCJnbG9iYWwiLCJ0b2tlbiIsInRpbWV6b25lIiwidGltZXpvbmVDbGlwIiwiZGF0ZUZvcm1hdCIsImRhdGUiLCJtYXNrIiwidXRjIiwiZ210IiwiaXNOYU4iLCJtYXNrU2xpY2UiLCJtYXNrcyIsIkQiLCJtIiwiSCIsIk0iLCJMIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJXIiwidGFyZ2V0VGh1cnNkYXkiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInNldERhdGUiLCJnZXREYXkiLCJmaXJzdFRodXJzZGF5IiwiZHMiLCJzZXRIb3VycyIsImdldEhvdXJzIiwiZ2V0V2VlayIsIk4iLCJkb3ciLCJnZXREYXlPZldlZWsiLCJmbGFncyIsImRkIiwicGFkIiwiZGRkIiwiaTE4biIsImRheU5hbWVzIiwiZGRkZCIsIm1tIiwibW1tIiwibW9udGhOYW1lcyIsIm1tbW0iLCJ5eSIsInl5eXkiLCJoaCIsIkhIIiwiTU0iLCJzcyIsInRpbWVOYW1lcyIsInR0IiwiVCIsIlRUIiwiWiIsInBvcCIsIlMiLCJkZWZhdWx0Iiwic2hvcnREYXRlIiwibWVkaXVtRGF0ZSIsImxvbmdEYXRlIiwiZnVsbERhdGUiLCJzaG9ydFRpbWUiLCJtZWRpdW1UaW1lIiwibG9uZ1RpbWUiLCJpc29EYXRlIiwiaXNvVGltZSIsImlzb0RhdGVUaW1lIiwiaXNvVXRjRGF0ZVRpbWUiLCJleHBpcmVzSGVhZGVyRm9ybWF0IiwicmVzIiwicmVwZWF0U3RyaW5nIiwic3Vic3RyIiwibGluayIsInBhZExlZnQiLCJjaCIsIm5vb3AiLCJkZWZhdWx0RXh0cyIsInByZWZpeCIsInN1ZmZpeCIsInN1cHBvcnRlZEVuY29kaW5ncyIsInN0cmVhbSIsImlzU3RhcnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZpbGVuYW1lIiwicmVzb2x2ZUZpbGVuYW1lIiwiY2xpZW50Iiwib3V0cHV0IiwiZXYiLCJzYXZlRGF0YVVSTCIsImRhdGFVUkwiLCJzcGxpdEluZGV4IiwiaW5kZXhPZiIsImJhc2U2NCIsImJ5dGVTdHJpbmciLCJhdG9iIiwibWltZU1hdGNoIiwibWltZSIsImFiIiwiQXJyYXlCdWZmZXIiLCJpYSIsIlVpbnQ4QXJyYXkiLCJjaGFyQ29kZUF0IiwiQmxvYiIsImNyZWF0ZUJsb2JGcm9tRGF0YVVSTCIsImJsb2IiLCJzYXZlQmxvYiIsImNyZWF0ZUVsZW1lbnQiLCJ2aXNpYmlsaXR5IiwiZG93bmxvYWQiLCJocmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYm9keSIsImFwcGVuZENoaWxkIiwib25jbGljayIsInNldFRpbWVvdXQiLCJyZXZva2VPYmplY3RVUkwiLCJwYXJlbnRFbGVtZW50IiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVBdHRyaWJ1dGUiLCJjbGljayIsImZpbGUiLCJ0b3RhbEZyYW1lcyIsImxheWVyU3RyIiwidG90YWxMYXllcnMiLCJsYXllciIsIm5hbWUiLCJ0aW1lU3RhbXAiLCJoYXNoIiwiY29tbW9uVHlwb3MiLCJkaW1lbnNpb24iLCJhbmltYXRlZCIsImFuaW1hdGluZyIsInVuaXQiLCJQNSIsInBpeGVsbGF0ZWQiLCJsb29waW5nIiwicGl4ZWxQZXJJbmNoIiwiYWxsS2V5cyIsImNoZWNrU2V0dGluZ3MiLCJzZXR0aW5ncyIsImluY2x1ZGVzIiwicGFwZXJTaXplcyIsImRpY3QiLCJwcmVzZXQiLCJpdGVtIiwiZGltZW5zaW9ucyIsImRlZmluZWQkMSIsImNvbnZlcnNpb25zIiwic3lzdGVtIiwiZmFjdG9yIiwiY20iLCJwdCIsInBjIiwiaW4iLCJmdCIsImFuY2hvcnMiLCJtZXRyaWMiLCJpbXBlcmlhbCIsImNvbnZlcnRMZW5ndGgiLCJmcm9tVW5pdCIsInRvVW5pdCIsInRvRmFjdG9yIiwiZnJvbUZhY3RvciIsImlzVG9QaXhlbCIsImZyb21Vbml0RGF0YSIsInRvVW5pdERhdGEiLCJhbmNob3IiLCJkZWNpbWFscyIsImNvbnZlcnREaXN0YW5jZSQxIiwidW5pdHNGcm9tIiwidW5pdHNUbyIsInJlc2l6ZUNhbnZhcyIsInN0eWxlV2lkdGgiLCJzdHlsZUhlaWdodCIsImNhbnZhc1dpZHRoIiwiY2FudmFzSGVpZ2h0IiwiaGFzRGltZW5zaW9ucyIsImNoZWNrSWZIYXNEaW1lbnNpb25zIiwiZXhwb3J0aW5nIiwic2NhbGVUb0ZpdCIsInNjYWxlVG9WaWV3IiwicGl4ZWxSYXRpbyIsImV4cG9ydFBpeGVsUmF0aW8iLCJibGVlZCIsImRldmljZVBpeGVsUmF0aW8iLCJiYXNlUGl4ZWxSYXRpbyIsIm1heFBpeGVsUmF0aW8iLCJ0cmltV2lkdGgiLCJ0cmltSGVpZ2h0IiwicmVmIiwiZWxlbWVudCIsInBhcmVudCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImdldFBhcmVudFNpemUiLCJwYXJlbnRXaWR0aCIsInBhcmVudEhlaWdodCIsImdldERpbWVuc2lvbnNGcm9tUHJlc2V0IiwiaGlnaGVzdCIsImxvd2VzdCIsIm9yaWVudGF0aW9uIiwibGFuZHNjYXBlIiwicmVhbFdpZHRoIiwicmVhbEhlaWdodCIsImFzcGVjdCIsIndpbmRvd0FzcGVjdCIsInNjYWxlVG9GaXRQYWRkaW5nIiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJnZXRDYW52YXNDb250ZXh0XzEiLCJhdHRyaWJzIiwiZ2V0Q29udGV4dCIsImNyZWF0ZUNhbnZhcyIsIm93bnNDYW52YXMiLCJuZXdDYW52YXMiLCJjcmVhdGVDYW52YXNFbGVtZW50IiwicGl4ZWxhdGVkIiwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwibW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwib0ltYWdlU21vb3RoaW5nRW5hYmxlZCIsIndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCIsIm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwiU2tldGNoTWFuYWdlciIsIl9zZXR0aW5ncyIsIl9wcm9wcyIsIl9za2V0Y2giLCJfcmFmIiwiX3JlY29yZFRpbWVvdXQiLCJfbGFzdFJlZHJhd1Jlc3VsdCIsIl9pc1A1UmVzaXppbmciLCJfa2V5Ym9hcmRTaG9ydGN1dHMiLCJoYW5kbGVyIiwiZW5hYmxlZCIsImtleUNvZGUiLCJhbHRLZXkiLCJtZXRhS2V5IiwiY3RybEtleSIsInRvZ2dsZVBsYXkiLCJwcmV2ZW50RGVmYXVsdCIsImNvbW1pdCIsInNhdmUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImtleWJvYXJkU2hvcnRjdXRzIiwidGhpcyQxIiwiaG90a2V5cyIsInNoaWZ0S2V5IiwicmVjb3JkaW5nIiwiZW5kUmVjb3JkIiwicnVuIiwicmVjb3JkIiwiZXhwb3J0RnJhbWUiLCJwbGF5aW5nIiwicGF1c2UiLCJwbGF5IiwiX2FuaW1hdGVIYW5kbGVyIiwiYW5pbWF0ZSIsIl9yZXNpemVIYW5kbGVyIiwicmVzaXplIiwic2tldGNoIiwidGhpcyIsIl9jb21wdXRlUGxheWhlYWQiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX2NvbXB1dGVGcmFtZSIsInBsYXloZWFkIiwidGltZSIsImZwcyIsIl9jb21wdXRlQ3VycmVudEZyYW1lIiwiX2dldFNpemVQcm9wcyIsInZpZXdwb3J0V2lkdGgiLCJ2aWV3cG9ydEhlaWdodCIsImRpc3Bvc2UiLCJzdGFydGVkIiwiX3NpZ25hbEJlZ2luIiwidGljayIsIl9jYW5jZWxUaW1lb3V0cyIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2xhc3RUaW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXJyb3IiLCJzdG9wIiwiZGVsdGFUaW1lIiwiZXhwb3J0T3B0cyIsIl9jcmVhdGVFeHBvcnRPcHRpb25zIiwiZnJhbWVJbnRlcnZhbCIsIl9zaWduYWxFbmQiLCJiZWdpblJlY29yZCIsIl93cmFwQ29udGV4dFNjYWxlIiwiY2F0Y2giLCJyZXNwb25zZSIsIndhc1JlY29yZGluZyIsInNlcXVlbmNlIiwiZW5jb2RpbmciLCJlbmNvZGluZ1F1YWxpdHkiLCJkYXRlZm9ybWF0IiwiYWxsIiwicHJlRXhwb3J0IiwiY29tbWl0T3B0cyIsIl9kb0V4cG9ydEZyYW1lIiwiZHJhd1Jlc3VsdCIsImhhc0RhdGFPYmplY3QiLCJ0b0RhdGFVUkwiLCJleHBvcnRDYW52YXMiLCJsYXllckxpc3QiLCJjdXJPcHQiLCJzYXZlUGFyYW0iLCJzYXZlUHJvbWlzZSIsInNhdmVGaWxlIiwic2F2ZVJlc3VsdCIsInNhdmVkRXZlbnRzIiwiZXZlbnRXaXRoT3V0cHV0IiwiZmluZCIsIm91dHB1dE5hbWUiLCJpc0NsaWVudCIsInNvbWUiLCJpc1N0cmVhbWluZyIsIm9mU2VxIiwicG9zdEV4cG9ydCIsIl9wcmVSZW5kZXIiLCJfcG9zdFJlbmRlciIsInA1Iiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVDb250ZXh0IiwicmVzdG9yZSIsInJlZHJhdyIsInN1Ym1pdERyYXdDYWxsIiwidXBkYXRlIiwibm90WWV0U3VwcG9ydGVkIiwib2xkQ2FudmFzIiwib2xkQ29udGV4dCIsInRpbWVPcHRzIiwidGltZVByb3BzIiwiZ2V0VGltZVByb3BzIiwiX3NldHVwR0xLZXkiLCJfYXBwZW5kQ2FudmFzSWZOZWVkZWQiLCJkcmF3Iiwib2xkU2l6ZXMiLCJuZXdQcm9wcyIsInBpeGVsRGVuc2l0eSIsInN0eWxlQ2FudmFzIiwibmV3U2l6ZXMiLCJjaGFuZ2VkIiwiZGVlcEVxdWFsXzEiLCJfc2l6ZUNoYW5nZWQiLCJmcmFtZUludGVydmFsTVMiLCJkZWx0YVRpbWVNUyIsImhhc0R1cmF0aW9uIiwiaXNOZXdGcmFtZSIsInBsYXliYWNrUmF0ZSIsIm5ld1RpbWUiLCJ0aW1lU2NhbGUiLCJpc0ZpbmlzaGVkIiwiaXNMb29wU3RhcnQiLCJsb29wIiwibGFzdEZyYW1lIiwiZGlzcGF0Y2giLCJtb3VudCIsInVubW91bnQiLCJkZXRhY2giLCJjdHgiLCJidWZmZXJEYXRhIiwiaGFzVG90YWxGcmFtZXMiLCJ0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiIsImR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzIiwiSW5maW5pdHkiLCJzdGFydFRpbWUiLCJzdGFydEZyYW1lIiwiaGFzU3RhcnRUaW1lIiwiaGFzU3RhcnRGcmFtZSIsInNldHVwIiwibG9hZEFuZFJ1biIsImNhbnZhc1NrZXRjaCIsIm5ld1NldHRpbmdzIiwibG9hZCIsImNyZWF0ZVNrZXRjaCIsInByZWxvYWQiLCJQNUNvbnN0cnVjdG9yIiwicDVTa2V0Y2giLCJpc0dMIiwicmVuZGVyZXIiLCJXRUJHTCIsIlAyRCIsIm5vTG9vcCIsInNldEF0dHJpYnV0ZXMiLCJfcmVuZGVyZXIiLCJkcmF3aW5nQ29udGV4dCIsImxvYWRlciIsImF0dGFjaCIsIkNBQ0hFIiwicnVudGltZUNvbGxpc2lvbnMiLCJob3RJRCIsImlzSG90IiwiaG90IiwiaWQiLCJpc0luamVjdGluZyIsInByZXZpb3VzRGF0YSIsImNhY2hlR2V0IiwibmV4dCIsIm9sZE1hbmFnZXIiLCJtYW5hZ2VyIiwiUGFwZXJTaXplcyIsIl9pbnN0YW5jZW9mIiwibmF0aXZlTWFwIiwibmF0aXZlU2V0IiwibmF0aXZlUHJvbWlzZSIsIlNldCIsImNpcmN1bGFyIiwiaW5jbHVkZU5vbkVudW1lcmFibGUiLCJhbGxQYXJlbnRzIiwiYWxsQ2hpbGRyZW4iLCJ1c2VCdWZmZXIiLCJCdWZmZXIiLCJfY2xvbmUiLCJjaGlsZCIsInByb3RvIiwiX19pc0FycmF5IiwiX19pc1JlZ0V4cCIsIlJlZ0V4cCIsIl9fZ2V0UmVnRXhwRmxhZ3MiLCJsYXN0SW5kZXgiLCJfX2lzRGF0ZSIsImFsbG9jVW5zYWZlIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJpbmRleCIsImtleUNoaWxkIiwidmFsdWVDaGlsZCIsImVudHJ5Q2hpbGQiLCJhZGQiLCJhdHRycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInN5bWJvbCIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJhbGxQcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiX19vYmpUb1N0ciIsInJlIiwiaWdub3JlQ2FzZSIsIm11bHRpbGluZSIsImNsb25lUHJvdG90eXBlIiwicmdiMmhzbCIsInJnYjJoc3YiLCJyZ2IyaHdiIiwicmdiMmNteWsiLCJyZ2Iya2V5d29yZCIsInJldmVyc2VLZXl3b3JkcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZ2IyeHl6IiwicmdiMmxhYiIsInh5eiIsImhzbDJyZ2IiLCJ0MSIsInQyIiwidDMiLCJoc3YycmdiIiwiaHN2IiwicSIsImh3YjJyZ2IiLCJod2IiLCJ3aCIsImJsIiwiY215azJyZ2IiLCJjbXlrIiwieHl6MnJnYiIsInh5ejJsYWIiLCJsYWIyeHl6IiwibGFiIiwibGFiMmxjaCIsImxhYjJyZ2IiLCJsY2gybGFiIiwibGNoIiwiaHIiLCJrZXl3b3JkMnJnYiIsImtleXdvcmQiLCJjc3NLZXl3b3JkcyIsInJnYjJsY2giLCJoc2wyaHN2IiwiaHNsMmh3YiIsImhzbDJjbXlrIiwiaHNsMmtleXdvcmQiLCJoc3YyaHNsIiwic2wiLCJoc3YyaHdiIiwiaHN2MmNteWsiLCJoc3Yya2V5d29yZCIsImh3YjJoc2wiLCJod2IyaHN2IiwiaHdiMmNteWsiLCJod2Iya2V5d29yZCIsImNteWsyaHNsIiwiY215azJoc3YiLCJjbXlrMmh3YiIsImNteWsya2V5d29yZCIsImtleXdvcmQyaHNsIiwia2V5d29yZDJoc3YiLCJrZXl3b3JkMmh3YiIsImtleXdvcmQyY215ayIsImtleXdvcmQybGFiIiwia2V5d29yZDJ4eXoiLCJ4eXoybGNoIiwibGNoMnh5eiIsImxjaDJyZ2IiLCJDb252ZXJ0ZXIiLCJhcmciLCJwYWlyIiwiY29udnMiLCJyb3V0ZVNwYWNlIiwic3BhY2UiLCJnZXRWYWx1ZXMiLCJzZXRWYWx1ZXMiLCJ2YWxzIiwiZnNwYWNlIiwiZmFjdG9yeSIsInRhdSIsInRhdUVwc2lsb24iLCJQYXRoIiwiX3gwIiwiX3kwIiwiY29uc3RydWN0b3IiLCJjbG9zZVBhdGgiLCJhcmNUbyIsIngyMSIsInkyMSIsIngwMSIsInkwMSIsImwwMV8yIiwieDIwIiwieTIwIiwibDIxXzIiLCJsMjBfMiIsImwyMSIsImwwMSIsInQwMSIsInQyMSIsImFyYyIsImExIiwiY2N3IiwiY3ciLCJkYSIsInJlY3QiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiY29kZUIiLCJsYXN0Q29kZSIsImNvZGVBIiwiYml0Q29kZSIsInBhcnQiLCJlZGdlIiwicHJldiIsInByZXZJbnNpZGUiLCJpbnNpZGUiLCJiZXppZXJYIiwiYmV6aWVyWSIsInF1YWRYIiwicXVhZFkiLCJjdXJ2ZXMiLCJhcmNUb0N1cnZlIiwicngiLCJyeSIsInhBeGlzUm90YXRpb24iLCJsYXJnZUFyY0ZsYWciLCJzd2VlcEZsYWciLCJxdWFkcmF0aWMiLCJjc3RyIiwiY29udiIsInNpemUiLCJiYXNlIiwiaHN2YSIsImNteWthIiwic2VnbWVudCIsIm51bWJlcnMiLCJudW1iZXIiLCJwYXJzZVZhbHVlcyIsInVuc2hpZnQiLCJub3JtYWxzIiwidXZzIiwiaXNUeXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJleHRlbmQiLCJlbmRsIiwicmFpc2UiLCJjaGVjayIsInByZWQiLCJlbmNvbG9uIiwic3RhbmRhcmRUeXBlRWgiLCJjaGVja09uZU9mIiwibGlzdCIsImNvbnN0cnVjdG9yS2V5cyIsImxlZnRQYWQiLCJTaGFkZXJGaWxlIiwiaGFzRXJyb3JzIiwiU2hhZGVyTGluZSIsImVycm9ycyIsIlNoYWRlckVycm9yIiwiZmlsZU51bWJlciIsImxpbmVOdW1iZXIiLCJndWVzc0NvbW1hbmQiLCJzdGFjayIsInBhdCIsInBhdDIiLCJndWVzc0NhbGxTaXRlIiwicGFyc2VTb3VyY2UiLCJmaWxlcyIsInVua25vd24iLCIwIiwibGluZU51bWJlckluZm8iLCJuYW1lSW5mbyIsInNhdmVDb21tYW5kUmVmIiwiX2NvbW1hbmRSZWYiLCJjb21tYW5kUmFpc2UiLCJjYWxsU2l0ZSIsImNoZWNrQ29tbWFuZFR5cGUiLCJHTF9DTEFNUF9UT19FREdFIiwiR0xfTkVBUkVTVCIsIkdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QiLCJHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QiLCJHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIiLCJHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiIsIkdMX0ZMT0FUIiwiR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCIsIkdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEiLCJHTF9VTlNJR05FRF9TSE9SVF81XzZfNSIsIkdMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMIiwiVFlQRV9TSVpFIiwicGl4ZWxTaXplIiwiY2hhbm5lbHMiLCJpc1BvdzIiLCJjaGVjayQxIiwib3B0aW9uYWwiLCJibG9jayIsInBhcmFtZXRlciIsInBhcmFtIiwicG9zc2liaWxpdGllcyIsImNvbW1hbmRQYXJhbWV0ZXIiLCJjb21tYW5kVHlwZSIsIm5uaSIsIm9uZU9mIiwic2hhZGVyRXJyb3IiLCJnZXRTaGFkZXJQYXJhbWV0ZXIiLCJDT01QSUxFX1NUQVRVUyIsImVyckxvZyIsImdldFNoYWRlckluZm9Mb2ciLCJ0eXBlTmFtZSIsIkZSQUdNRU5UX1NIQURFUiIsImVyck1zZyIsInRyaW0iLCJwYXJzZUVycm9yTG9nIiwiYW5ub3RhdGVGaWxlcyIsInN0cmluZ3MiLCJzdHlsZXMiLCJ0b2tlblBhdCIsImNocm9tZSIsImxpbmtFcnJvciIsInByb2dyYW0iLCJmcmFnU2hhZGVyIiwidmVydFNoYWRlciIsImdldFByb2dyYW1QYXJhbWV0ZXIiLCJMSU5LX1NUQVRVUyIsImdldFByb2dyYW1JbmZvTG9nIiwiZnJhZ1BhcnNlIiwiaGVhZGVyIiwic2F2ZURyYXdJbmZvIiwic3RyaW5nU3RvcmUiLCJhZGRQcm9wcyIsIl9mcmFnSWQiLCJzdGF0aWMiLCJfdmVydElkIiwidW5pZm9ybVNldCIsIl91bmlmb3JtU2V0IiwiZHluYW1pYyIsImF0dHJpYnV0ZVNldCIsIl9hdHRyaWJ1dGVTZXQiLCJfaGFzQ291bnQiLCJmcmFtZWJ1ZmZlckZvcm1hdCIsImF0dGFjaG1lbnQiLCJ0ZXhGb3JtYXRzIiwicmJGb3JtYXRzIiwiX3RleHR1cmUiLCJpbnRlcm5hbGZvcm1hdCIsInJlbmRlcmJ1ZmZlciIsIl9yZW5kZXJidWZmZXIiLCJmb3JtYXQiLCJ0ZXh0dXJlMkQiLCJpbmZvIiwibWlwRGF0YSIsImxpbWl0cyIsIm1heFRleHR1cmVTaXplIiwid3JhcFMiLCJ3cmFwVCIsIm1pcG1hc2siLCJtaW5GaWx0ZXIiLCJtYWdGaWx0ZXIiLCJnZW5NaXBtYXBzIiwibWlwaW1hZ2VzIiwiaW1hZ2VzIiwibXciLCJtaCIsImltZyIsImNvbXByZXNzZWQiLCJyb3dTaXplIiwiY2VpbCIsInVucGFja0FsaWdubWVudCIsImJ5dGVMZW5ndGgiLCJ0ZXh0dXJlQ3ViZSIsImZhY2VzIiwiZmFjZSIsIm1pcG1hcHMiLCJWQVJJQUJMRV9DT1VOVEVSIiwiRFlOX0ZVTkMiLCJEWU5fQ09OU1RBTlQiLCJEWU5fQVJSQVkiLCJEeW5hbWljVmFyaWFibGUiLCJlc2NhcGVTdHIiLCJ0b0FjY2Vzc29yU3RyaW5nIiwic3BsaXRQYXJ0cyIsImZpcnN0Q2hhciIsImNoYXJBdCIsImxhc3RDaGFyIiwic3VicGFydHMiLCJpc0R5bmFtaWMiLCJfcmVnbFR5cGUiLCJ1bmJveCIsImFjY2Vzc29yIiwicmFmIiwiY2FuY2VsIiwiY2xlYXJUaW1lb3V0IiwiY2xvY2siLCJwYXJzZUV4dGVuc2lvbnMiLCJnZXRFbGVtZW50IiwiZGVzYyIsInF1ZXJ5U2VsZWN0b3IiLCJwYXJzZUFyZ3MiLCJhcmdzXyIsImNvbnRhaW5lciIsImNvbnRleHRBdHRyaWJ1dGVzIiwib25EZXN0cm95IiwiZHJhd0FycmF5cyIsImRyYXdFbGVtZW50cyIsImlzV2ViR0xDb250ZXh0IiwicmVzaXplT2JzZXJ2ZXIiLCJyaWdodCIsImxlZnQiLCJib3R0b20iLCJ0b3AiLCJtYXJnaW4iLCJwYWRkaW5nIiwiUmVzaXplT2JzZXJ2ZXIiLCJvYnNlcnZlIiwiZGlzY29ubmVjdCIsInByZW11bHRpcGxpZWRBbHBoYSIsImNyZWF0ZUNvbnRleHQiLCJHTF9CWVRFJDEiLCJHTF9VTlNJR05FRF9CWVRFJDIiLCJHTF9TSE9SVCQxIiwiR0xfVU5TSUdORURfU0hPUlQkMSIsIkdMX0lOVCQxIiwiR0xfVU5TSUdORURfSU5UJDEiLCJHTF9GTE9BVCQyIiwibG9nMiIsImNyZWF0ZVBvb2wiLCJidWZmZXJQb29sIiwiYWxsb2MiLCJzeiIsIm5leHRQb3cxNiIsImJpbiIsImZyZWUiLCJidWYiLCJhbGxvY1R5cGUiLCJzdWJhcnJheSIsImZyZWVUeXBlIiwicG9vbCIsInplcm8iLCJ3cmFwTGltaXRzIiwibWF4QW5pc290cm9waWMiLCJleHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiLCJnZXRQYXJhbWV0ZXIiLCJtYXhEcmF3YnVmZmVycyIsIm1heENvbG9yQXR0YWNobWVudHMiLCJ3ZWJnbF9kcmF3X2J1ZmZlcnMiLCJyZWFkRmxvYXQiLCJvZXNfdGV4dHVyZV9mbG9hdCIsInJlYWRGbG9hdFRleHR1cmUiLCJjcmVhdGVUZXh0dXJlIiwiYmluZFRleHR1cmUiLCJ0ZXhJbWFnZTJEIiwiZmJvIiwiY3JlYXRlRnJhbWVidWZmZXIiLCJiaW5kRnJhbWVidWZmZXIiLCJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCJ2aWV3cG9ydCIsInBpeGVscyIsInJlYWRQaXhlbHMiLCJnZXRFcnJvciIsImRlbGV0ZUZyYW1lYnVmZmVyIiwiZGVsZXRlVGV4dHVyZSIsIm5wb3RUZXh0dXJlQ3ViZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImFwcFZlcnNpb24iLCJjdWJlVGV4dHVyZSIsImFjdGl2ZVRleHR1cmUiLCJjb2xvckJpdHMiLCJkZXB0aEJpdHMiLCJzdGVuY2lsQml0cyIsInN1YnBpeGVsQml0cyIsImV4dCIsInBvaW50U2l6ZURpbXMiLCJsaW5lV2lkdGhEaW1zIiwibWF4Vmlld3BvcnREaW1zIiwibWF4Q29tYmluZWRUZXh0dXJlVW5pdHMiLCJtYXhDdWJlTWFwU2l6ZSIsIm1heFJlbmRlcmJ1ZmZlclNpemUiLCJtYXhUZXh0dXJlVW5pdHMiLCJtYXhBdHRyaWJ1dGVzIiwibWF4VmVydGV4VW5pZm9ybXMiLCJtYXhWZXJ0ZXhUZXh0dXJlVW5pdHMiLCJtYXhWYXJ5aW5nVmVjdG9ycyIsIm1heEZyYWdtZW50VW5pZm9ybXMiLCJnbHNsIiwidmVuZG9yIiwidmVyc2lvbiIsImlzTkRBcnJheUxpa2UiLCJzaGFwZSIsInN0cmlkZSIsImZsYXR0ZW5VdGlscyIsImFycmF5XyIsImZsYXR0ZW4iLCJvdXRfIiwibngiLCJmbGF0dGVuMUQiLCJueSIsInB0ciIsInJvdyIsImZsYXR0ZW4yRCIsImZsYXR0ZW4zRCIsImZsYXR0ZW5SZWMiLCJueiIsInB0cl8iLCJjb2wiLCJhcnJheVR5cGVzIiwiW29iamVjdCBJbnQ4QXJyYXldIiwiW29iamVjdCBJbnQxNkFycmF5XSIsIltvYmplY3QgSW50MzJBcnJheV0iLCJbb2JqZWN0IFVpbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLCJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDY0QXJyYXldIiwiW29iamVjdCBBcnJheUJ1ZmZlcl0iLCJnbFR5cGVzIiwiaW50OCIsImludDE2IiwiaW50MzIiLCJ1aW50OCIsInVpbnQxNiIsInVpbnQzMiIsImZsb2F0IiwiZmxvYXQzMiIsInVzYWdlVHlwZXMiLCJhcnJheUZsYXR0ZW4iLCJhcnJheVNoYXBlIiwiR0xfU1RBVElDX0RSQVciLCJHTF9TVFJFQU1fRFJBVyIsIkdMX1VOU0lHTkVEX0JZVEUkMyIsIkdMX0ZMT0FUJDMiLCJEVFlQRVNfU0laRVMiLCJ0eXBlZEFycmF5Q29kZSIsImNvcHlBcnJheSIsImlucCIsInRyYW5zcG9zZSIsInNoYXBlWCIsInNoYXBlWSIsInN0cmlkZVgiLCJzdHJpZGVZIiwicHJpbVR5cGVzIiwidHJpYW5nbGVzIiwidHJpYW5nbGUiLCJsaW5lIGxvb3AiLCJsaW5lIHN0cmlwIiwidHJpYW5nbGUgc3RyaXAiLCJ0cmlhbmdsZSBmYW4iLCJHTF9QT0lOVFMiLCJHTF9MSU5FUyIsIkdMX1RSSUFOR0xFUyIsIkdMX0JZVEUkMiIsIkdMX1VOU0lHTkVEX0JZVEUkNCIsIkdMX1NIT1JUJDIiLCJHTF9VTlNJR05FRF9TSE9SVCQyIiwiR0xfSU5UJDIiLCJHTF9VTlNJR05FRF9JTlQkMiIsIkdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSIiwiR0xfU1RSRUFNX0RSQVckMSIsIkdMX1NUQVRJQ19EUkFXJDEiLCJGTE9BVCIsIklOVCIsIkdMX1VOU0lHTkVEX1NIT1JUJDQiLCJjb252ZXJ0VG9IYWxmRmxvYXQiLCJ1c2hvcnRzIiwic2duIiwiZnJhYyIsImlzQXJyYXlMaWtlIiwiaXNQb3cyJDEiLCJHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIsIkdMX1RFWFRVUkVfMkQkMSIsIkdMX1RFWFRVUkVfQ1VCRV9NQVAkMSIsIkdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQxIiwiR0xfUkdCQSQxIiwiR0xfQUxQSEEiLCJHTF9SR0IiLCJHTF9MVU1JTkFOQ0UiLCJHTF9MVU1JTkFOQ0VfQUxQSEEiLCJHTF9SR0JBNCIsIkdMX1JHQjVfQTEiLCJHTF9SR0I1NjUiLCJHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80JDEiLCJHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xJDEiLCJHTF9VTlNJR05FRF9TSE9SVF81XzZfNSQxIiwiR0xfVU5TSUdORURfSU5UXzI0XzhfV0VCR0wkMSIsIkdMX0RFUFRIX0NPTVBPTkVOVCIsIkdMX0RFUFRIX1NURU5DSUwiLCJHTF9TUkdCX0VYVCIsIkdMX1NSR0JfQUxQSEFfRVhUIiwiR0xfSEFMRl9GTE9BVF9PRVMkMSIsIkdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQiLCJHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCIsIkdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUIiwiR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQiLCJHTF9DT01QUkVTU0VEX1JHQl9BVENfV0VCR0wiLCJHTF9DT01QUkVTU0VEX1JHQkFfQVRDX0VYUExJQ0lUX0FMUEhBX1dFQkdMIiwiR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19JTlRFUlBPTEFURURfQUxQSEFfV0VCR0wiLCJHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HIiwiR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyIsIkdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HIiwiR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUciLCJHTF9DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMIiwiR0xfVU5TSUdORURfQllURSQ1IiwiR0xfVU5TSUdORURfU0hPUlQkMyIsIkdMX1VOU0lHTkVEX0lOVCQzIiwiR0xfRkxPQVQkNCIsIkdMX1RFWFRVUkVfV1JBUF9TIiwiR0xfVEVYVFVSRV9XUkFQX1QiLCJHTF9SRVBFQVQiLCJHTF9DTEFNUF9UT19FREdFJDEiLCJHTF9NSVJST1JFRF9SRVBFQVQiLCJHTF9URVhUVVJFX01BR19GSUxURVIiLCJHTF9URVhUVVJFX01JTl9GSUxURVIiLCJHTF9ORUFSRVNUJDEiLCJHTF9MSU5FQVIiLCJHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDEiLCJHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSIsIkdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiQxIiwiR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMSIsIkdMX0dFTkVSQVRFX01JUE1BUF9ISU5UIiwiR0xfRE9OVF9DQVJFIiwiR0xfRkFTVEVTVCIsIkdMX05JQ0VTVCIsIkdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUIiwiR0xfVU5QQUNLX0FMSUdOTUVOVCIsIkdMX1VOUEFDS19GTElQX1lfV0VCR0wiLCJHTF9VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiLCJHTF9VTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIiwiR0xfQlJPV1NFUl9ERUZBVUxUX1dFQkdMIiwiR0xfVEVYVFVSRTAkMSIsIk1JUE1BUF9GSUxURVJTIiwiQ0hBTk5FTFNfRk9STUFUIiwiRk9STUFUX0NIQU5ORUxTIiwib2JqZWN0TmFtZSIsIkNBTlZBU19DTEFTUyIsIk9GRlNDUkVFTkNBTlZBU19DTEFTUyIsIkNPTlRFWFQyRF9DTEFTUyIsIkJJVE1BUF9DTEFTUyIsIklNQUdFX0NMQVNTIiwiVklERU9fQ0xBU1MiLCJQSVhFTF9DTEFTU0VTIiwiVFlQRV9TSVpFUyIsIkZPUk1BVF9TSVpFU19TUEVDSUFMIiwiaXNOdW1lcmljQXJyYXkiLCJpc1JlY3RBcnJheSIsImNsYXNzU3RyaW5nIiwiaXNDYW52YXNFbGVtZW50IiwiaXNPZmZzY3JlZW5DYW52YXMiLCJpc1BpeGVsRGF0YSIsImNsYXNzTmFtZSIsInR5cGVkQXJyYXlDb2RlJDEiLCJwcmVDb252ZXJ0IiwiaW1hZ2UiLCJwb3N0Q29udmVydCIsImdldFRleHR1cmVTaXplIiwiaXNNaXBtYXAiLCJpc0N1YmUiLCJ0b3RhbCIsImNyZWF0ZVRleHR1cmVTZXQiLCJyZWdsUG9sbCIsImNvbnRleHRTdGF0ZSIsInN0YXRzIiwiY29uZmlnIiwibWlwbWFwSGludCIsImRvbid0IGNhcmUiLCJkb250IGNhcmUiLCJuaWNlIiwiZmFzdCIsIndyYXBNb2RlcyIsIm1pcnJvciIsIm1hZ0ZpbHRlcnMiLCJuZWFyZXN0IiwibGluZWFyIiwibWluRmlsdGVycyIsIm1pcG1hcCIsIm5lYXJlc3QgbWlwbWFwIG5lYXJlc3QiLCJsaW5lYXIgbWlwbWFwIG5lYXJlc3QiLCJuZWFyZXN0IG1pcG1hcCBsaW5lYXIiLCJsaW5lYXIgbWlwbWFwIGxpbmVhciIsImNvbG9yU3BhY2UiLCJub25lIiwidGV4dHVyZVR5cGVzIiwicmdiYTQiLCJyZ2I1NjUiLCJyZ2I1IGExIiwidGV4dHVyZUZvcm1hdHMiLCJsdW1pbmFuY2UiLCJsdW1pbmFuY2UgYWxwaGEiLCJjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMiLCJleHRfc3JnYiIsInNyZ2IiLCJzcmdiYSIsIm9lc190ZXh0dXJlX2hhbGZfZmxvYXQiLCJ3ZWJnbF9kZXB0aF90ZXh0dXJlIiwiZGVwdGggc3RlbmNpbCIsIndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiwicmdiIHMzdGMgZHh0MSIsInJnYmEgczN0YyBkeHQxIiwicmdiYSBzM3RjIGR4dDMiLCJyZ2JhIHMzdGMgZHh0NSIsIndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiLCJyZ2IgYXRjIiwicmdiYSBhdGMgZXhwbGljaXQgYWxwaGEiLCJyZ2JhIGF0YyBpbnRlcnBvbGF0ZWQgYWxwaGEiLCJ3ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiLCJyZ2IgcHZydGMgNGJwcHYxIiwicmdiIHB2cnRjIDJicHB2MSIsInJnYmEgcHZydGMgNGJwcHYxIiwicmdiYSBwdnJ0YyAyYnBwdjEiLCJ3ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIsInN1cHBvcnRlZENvbXByZXNzZWRGb3JtYXRzIiwic3VwcG9ydGVkRm9ybWF0cyIsInRleHR1cmVGb3JtYXRzSW52ZXJ0IiwidGV4dHVyZVR5cGVzSW52ZXJ0IiwibWFnRmlsdGVyc0ludmVydCIsIm1pbkZpbHRlcnNJbnZlcnQiLCJ3cmFwTW9kZXNJbnZlcnQiLCJjb2xvckZvcm1hdHMiLCJnbGVudW0iLCJUZXhGbGFncyIsInByZW11bHRpcGx5QWxwaGEiLCJmbGlwWSIsImNvcHlGbGFncyIsIm90aGVyIiwicGFyc2VGbGFncyIsIm9wdGlvbnMiLCJhbGlnbm1lbnQiLCJoYXNDaGFubmVscyIsImhhc0Zvcm1hdCIsImZvcm1hdFN0ciIsInNldEZsYWdzIiwicGl4ZWxTdG9yZWkiLCJUZXhJbWFnZSIsInhPZmZzZXQiLCJ5T2Zmc2V0IiwibmVlZHNGcmVlIiwibmVlZHNDb3B5IiwicGFyc2VJbWFnZSIsInZpZXdXIiwidmlld0giLCJjb252ZXJ0ZWQiLCJjb252ZXJ0RGF0YSIsInNoYXBlQyIsInN0cmlkZUMiLCJ0cmFuc3Bvc2VEYXRhIiwiaXNCaXRtYXAiLCJpc0ltYWdlRWxlbWVudCIsIm5hdHVyYWxXaWR0aCIsIm5hdHVyYWxIZWlnaHQiLCJpc1ZpZGVvRWxlbWVudCIsInZpZGVvV2lkdGgiLCJ2aWRlb0hlaWdodCIsImFsbG9jRGF0YSIsInNldEltYWdlIiwibWlwbGV2ZWwiLCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsImNvcHlUZXhJbWFnZTJEIiwic2V0U3ViSW1hZ2UiLCJ0ZXhTdWJJbWFnZTJEIiwiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCJjb3B5VGV4U3ViSW1hZ2UyRCIsImltYWdlUG9vbCIsImFsbG9jSW1hZ2UiLCJmcmVlSW1hZ2UiLCJNaXBNYXAiLCJwYXJzZU1pcE1hcEZyb21TaGFwZSIsInBhcnNlTWlwTWFwRnJvbU9iamVjdCIsImltZ0RhdGEiLCJzZXRNaXBNYXAiLCJtaXBQb29sIiwiYWxsb2NNaXBNYXAiLCJmcmVlTWlwTWFwIiwiVGV4SW5mbyIsImFuaXNvdHJvcGljIiwicGFyc2VUZXhJbmZvIiwibWFnIiwib3B0V3JhcFMiLCJvcHRXcmFwVCIsImhhc01pcE1hcCIsInNldFRleEluZm8iLCJ0ZXhQYXJhbWV0ZXJpIiwiaGludCIsImdlbmVyYXRlTWlwbWFwIiwidGV4dHVyZUNvdW50IiwidGV4dHVyZVNldCIsIm51bVRleFVuaXRzIiwidGV4dHVyZVVuaXRzIiwiUkVHTFRleHR1cmUiLCJyZWZDb3VudCIsImJpbmRDb3VudCIsInRleEluZm8iLCJ0ZW1wQmluZCIsInRlbXBSZXN0b3JlIiwiaGFuZGxlIiwicGFyYW1zIiwiYmluZCIsInVuYmluZCIsImRlY1JlZiIsImdldFRvdGFsVGV4dHVyZVNpemUiLCJjcmVhdGUyRCIsInJlZ2xUZXh0dXJlMkQiLCJzdWJpbWFnZSIsInhfIiwieV8iLCJsZXZlbF8iLCJpbWFnZURhdGEiLCJ3XyIsImhfIiwiX3ciLCJfaCIsImNyZWF0ZUN1YmUiLCJhMiIsImEzIiwiYTQiLCJhNSIsImN1YmVDb3VudCIsInJlZ2xUZXh0dXJlQ3ViZSIsImZhY2VJbnB1dCIsInJhZGl1c18iLCJnZXRUZXh0dXJlIiwid3JhcHBlciIsInRleCIsInJlZnJlc2giLCJHTF9SRU5ERVJCVUZGRVIiLCJHTF9SR0JBNCQxIiwiRk9STUFUX1NJWkVTIiwiZ2V0UmVuZGVyYnVmZmVyU2l6ZSIsIndyYXBSZW5kZXJidWZmZXJzIiwiZm9ybWF0VHlwZXMiLCJleHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiLCJ3ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQiLCJmb3JtYXRUeXBlc0ludmVydCIsInJlbmRlcmJ1ZmZlckNvdW50IiwicmVuZGVyYnVmZmVyU2V0IiwiUkVHTFJlbmRlcmJ1ZmZlciIsInJiIiwiYmluZFJlbmRlcmJ1ZmZlciIsImRlbGV0ZVJlbmRlcmJ1ZmZlciIsImdldFRvdGFsUmVuZGVyYnVmZmVyU2l6ZSIsImNyZWF0ZVJlbmRlcmJ1ZmZlciIsInJlZ2xSZW5kZXJidWZmZXIiLCJyZW5kZXJidWZmZXJTdG9yYWdlIiwiR0xfRlJBTUVCVUZGRVIkMSIsIkdMX1JFTkRFUkJVRkZFUiQxIiwiR0xfVEVYVFVSRV8yRCQyIiwiR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDIiLCJHTF9DT0xPUl9BVFRBQ0hNRU5UMCQxIiwiR0xfREVQVEhfQVRUQUNITUVOVCIsIkdMX1NURU5DSUxfQVRUQUNITUVOVCIsIkdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCIsIkdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFJDEiLCJHTF9ERVBUSF9DT01QT05FTlQkMSIsImNvbG9yVGV4dHVyZUZvcm1hdEVudW1zIiwidGV4dHVyZUZvcm1hdENoYW5uZWxzIiwidGV4dHVyZVR5cGVTaXplcyIsIkdMX0RFUFRIX0NPTVBPTkVOVDE2JDEiLCJHTF9TVEVOQ0lMX0lOREVYOCQxIiwiR0xfREVQVEhfU1RFTkNJTCQyIiwiY29sb3JSZW5kZXJidWZmZXJGb3JtYXRFbnVtcyIsInN0YXR1c0NvZGUiLCJHTF9GTE9BVCQ2IiwiR0xfQVJSQVlfQlVGRkVSJDEiLCJBdHRyaWJ1dGVSZWNvcmQiLCJub3JtYWxpemVkIiwiZGl2aXNvciIsIkdMX0ZSQUdNRU5UX1NIQURFUiIsIkdMX1ZFUlRFWF9TSEFERVIiLCJHTF9BQ1RJVkVfVU5JRk9STVMiLCJHTF9BQ1RJVkVfQVRUUklCVVRFUyIsIkdMX1JHQkEkMyIsIkdMX1VOU0lHTkVEX0JZVEUkNyIsIkdMX1BBQ0tfQUxJR05NRU5UIiwiR0xfRkxPQVQkNyIsIndyYXBSZWFkUGl4ZWxzIiwiZnJhbWVidWZmZXJTdGF0ZSIsImdsQXR0cmlidXRlcyIsInJlYWRQaXhlbHNJbXBsIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwiY29sb3JBdHRhY2htZW50cyIsImZyYW1lYnVmZmVyV2lkdGgiLCJmcmFtZWJ1ZmZlckhlaWdodCIsInNldEZCTyIsImZyYW1lYnVmZmVyIiwicmVhZFBpeGVsc0ZCTyIsIkNVVEVfQ09NUE9ORU5UUyIsIkdMX1VOU0lHTkVEX0JZVEUkOCIsIkFUVFJJQl9TVEFURV9QT0lOVEVSIiwiQVRUUklCX1NUQVRFX0NPTlNUQU5UIiwiRFlOX0ZVTkMkMSIsIkRZTl9QUk9QJDEiLCJEWU5fQ09OVEVYVCQxIiwiRFlOX1NUQVRFJDEiLCJEWU5fVEhVTksiLCJEWU5fQ09OU1RBTlQkMSIsIkRZTl9BUlJBWSQxIiwiU19ESVRIRVIiLCJTX0JMRU5EX0VOQUJMRSIsIlNfQkxFTkRfQ09MT1IiLCJTX0JMRU5EX0VRVUFUSU9OIiwiU19CTEVORF9GVU5DIiwiU19ERVBUSF9FTkFCTEUiLCJTX0RFUFRIX0ZVTkMiLCJTX0RFUFRIX1JBTkdFIiwiU19ERVBUSF9NQVNLIiwiU19DT0xPUl9NQVNLIiwiU19DVUxMX0VOQUJMRSIsIlNfQ1VMTF9GQUNFIiwiU19GUk9OVF9GQUNFIiwiU19MSU5FX1dJRFRIIiwiU19QT0xZR09OX09GRlNFVF9FTkFCTEUiLCJTX1BPTFlHT05fT0ZGU0VUX09GRlNFVCIsIlNfU0FNUExFX0FMUEhBIiwiU19TQU1QTEVfRU5BQkxFIiwiU19TQU1QTEVfQ09WRVJBR0UiLCJTX1NURU5DSUxfRU5BQkxFIiwiU19TVEVOQ0lMX01BU0siLCJTX1NURU5DSUxfRlVOQyIsIlNfU1RFTkNJTF9PUEZST05UIiwiU19TVEVOQ0lMX09QQkFDSyIsIlNfU0NJU1NPUl9FTkFCTEUiLCJTX1NDSVNTT1JfQk9YIiwiU19WSUVXUE9SVCIsIlNfUFJPRklMRSIsIlNfRlJBTUVCVUZGRVIiLCJTX1ZFUlQiLCJTX0ZSQUciLCJTX0VMRU1FTlRTIiwiU19QUklNSVRJVkUiLCJTX0NPVU5UIiwiU19PRkZTRVQiLCJTX0lOU1RBTkNFUyIsIlNfVkFPIiwiU19GUkFNRUJVRkZFUl9XSURUSCIsIlNfRlJBTUVCVUZGRVJfSEVJR0hUIiwiU19WSUVXUE9SVF9XSURUSCIsIlNfVklFV1BPUlRfSEVJR0hUIiwiU19EUkFXSU5HQlVGRkVSX1dJRFRIIiwiU19EUkFXSU5HQlVGRkVSIiwiU19EUkFXSU5HQlVGRkVSX0hFSUdIVCIsIk5FU1RFRF9PUFRJT05TIiwiR0xfQVJSQVlfQlVGRkVSJDIiLCJHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiQxIiwiR0xfVEVYVFVSRV8yRCQzIiwiR0xfVEVYVFVSRV9DVUJFX01BUCQyIiwiR0xfQ1VMTF9GQUNFIiwiR0xfQkxFTkQiLCJHTF9ESVRIRVIiLCJHTF9TVEVOQ0lMX1RFU1QiLCJHTF9ERVBUSF9URVNUIiwiR0xfU0NJU1NPUl9URVNUIiwiR0xfUE9MWUdPTl9PRkZTRVRfRklMTCIsIkdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSIsIkdMX1NBTVBMRV9DT1ZFUkFHRSIsIkdMX0ZMT0FUJDgiLCJHTF9GTE9BVF9WRUMyIiwiR0xfRkxPQVRfVkVDMyIsIkdMX0ZMT0FUX1ZFQzQiLCJHTF9JTlQkMyIsIkdMX0lOVF9WRUMyIiwiR0xfSU5UX1ZFQzMiLCJHTF9JTlRfVkVDNCIsIkdMX0JPT0wiLCJHTF9CT09MX1ZFQzIiLCJHTF9CT09MX1ZFQzMiLCJHTF9CT09MX1ZFQzQiLCJHTF9GTE9BVF9NQVQyIiwiR0xfRkxPQVRfTUFUMyIsIkdMX0ZMT0FUX01BVDQiLCJHTF9TQU1QTEVSXzJEIiwiR0xfU0FNUExFUl9DVUJFIiwiR0xfVFJJQU5HTEVTJDEiLCJHTF9GUk9OVCIsIkdMX0JBQ0siLCJHTF9DVyIsIkdMX0NDVyIsIkdMX01JTl9FWFQiLCJHTF9NQVhfRVhUIiwiR0xfQUxXQVlTIiwiR0xfS0VFUCIsIkdMX1pFUk8iLCJHTF9PTkUiLCJHTF9GVU5DX0FERCIsIkdMX0xFU1MiLCJHTF9GUkFNRUJVRkZFUiQyIiwiR0xfQ09MT1JfQVRUQUNITUVOVDAkMiIsImJsZW5kRnVuY3MiLCJvbmUiLCJzcmMgY29sb3IiLCJvbmUgbWludXMgc3JjIGNvbG9yIiwic3JjIGFscGhhIiwib25lIG1pbnVzIHNyYyBhbHBoYSIsImRzdCBjb2xvciIsIm9uZSBtaW51cyBkc3QgY29sb3IiLCJkc3QgYWxwaGEiLCJvbmUgbWludXMgZHN0IGFscGhhIiwiY29uc3RhbnQgY29sb3IiLCJvbmUgbWludXMgY29uc3RhbnQgY29sb3IiLCJjb25zdGFudCBhbHBoYSIsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSIsInNyYyBhbHBoYSBzYXR1cmF0ZSIsImludmFsaWRCbGVuZENvbWJpbmF0aW9ucyIsImNvbXBhcmVGdW5jcyIsIm5ldmVyIiwibGVzcyIsIjwiLCJlcXVhbCIsIj0iLCI9PSIsIj09PSIsImxlcXVhbCIsIjw9IiwiZ3JlYXRlciIsIj4iLCJub3RlcXVhbCIsIiE9IiwiIT09IiwiZ2VxdWFsIiwiPj0iLCJhbHdheXMiLCJzdGVuY2lsT3BzIiwia2VlcCIsImluY3JlbWVudCIsImRlY3JlbWVudCIsImluY3JlbWVudCB3cmFwIiwiZGVjcmVtZW50IHdyYXAiLCJpbnZlcnQiLCJzaGFkZXJUeXBlIiwib3JpZW50YXRpb25UeXBlIiwiaXNCdWZmZXJBcmdzIiwic29ydFN0YXRlIiwiRGVjbGFyYXRpb24iLCJ0aGlzRGVwIiwiY29udGV4dERlcCIsInByb3BEZXAiLCJhcHBlbmQiLCJpc1N0YXRpYyIsImRlY2wiLCJjcmVhdGVTdGF0aWNEZWNsIiwiY3JlYXRlRHluYW1pY0RlY2wiLCJkeW4iLCJudW1BcmdzIiwic3ViRHluIiwic3ViQXJncyIsIlNDT1BFX0RFQ0wiLCJyZWdsQ29yZSIsImJ1ZmZlclN0YXRlIiwiZWxlbWVudFN0YXRlIiwidGV4dHVyZVN0YXRlIiwidW5pZm9ybVN0YXRlIiwiYXR0cmlidXRlU3RhdGUiLCJzaGFkZXJTdGF0ZSIsImRyYXdTdGF0ZSIsInRpbWVyIiwiUmVjb3JkIiwiYmxlbmRFcXVhdGlvbnMiLCJzdWJ0cmFjdCIsInJldmVyc2Ugc3VidHJhY3QiLCJleHRfYmxlbmRfbWlubWF4IiwiZXh0SW5zdGFuY2luZyIsImFuZ2xlX2luc3RhbmNlZF9hcnJheXMiLCJleHREcmF3QnVmZmVycyIsImN1cnJlbnRTdGF0ZSIsImRpcnR5IiwibmV4dFN0YXRlIiwiR0xfU1RBVEVfTkFNRVMiLCJHTF9GTEFHUyIsIkdMX1ZBUklBQkxFUyIsInByb3BOYW1lIiwic3RhdGVGbGFnIiwic25hbWUiLCJjYXAiLCJpbml0Iiwic3RhdGVWYXJpYWJsZSIsImRyYXdpbmdCdWZmZXJXaWR0aCIsImRyYXdpbmdCdWZmZXJIZWlnaHQiLCJzaGFyZWRTdGF0ZSIsImN1cnJlbnQiLCJ2YW8iLCJzaGFyZWRDb25zdGFudHMiLCJiYWNrQnVmZmVyIiwiZHJhd0J1ZmZlciIsImRyYXdDYWxsQ291bnRlciIsImNyZWF0ZVJFR0xFbnZpcm9ubWVudCIsImVudiIsInZhckNvdW50ZXIiLCJsaW5rZWROYW1lcyIsImxpbmtlZFZhbHVlcyIsInZhcnMiLCJkZWYiLCJzY29wZSIsImVudHJ5IiwiZXhpdCIsImVudHJ5VG9TdHJpbmciLCJleGl0VG9TdHJpbmciLCJnbG9iYWxCbG9jayIsInByb2NlZHVyZXMiLCJwcm9jIiwiY291bnQiLCJib2R5VG9TdHJpbmciLCJjb25kIiwidGhlbkJsb2NrIiwiZWxzZUJsb2NrIiwidGhlblRvU3RyaW5nIiwiZWxzZVRvU3RyaW5nIiwiZWxzZSIsImVsc2VDbGF1c2UiLCJjb21waWxlIiwic3JjIiwiRnVuY3Rpb24iLCJjcmVhdGVFbnZpcm9ubWVudCIsImJhdGNoSWQiLCJTSEFSRUQiLCJzaGFyZWQiLCJDSEVDSyIsImNvbW1hbmRTdHIiLCJhc3NlcnQiLCJuZXh0VmFycyIsImN1cnJlbnRWYXJzIiwidmFyaWFibGUiLCJjb25zdGFudHMiLCJpbnZva2UiLCJhcmdMaXN0IiwiYXR0cmliQ2FjaGUiLCJzY29wZUF0dHJpYnMiLCJzY29wZUF0dHJpYiIsImJpbmRpbmciLCJwYXJzZUFyZ3VtZW50cyIsInN0YXRpY09wdGlvbnMiLCJkeW5hbWljT3B0aW9ucyIsIktFWV9OQU1FUyIsImNoZWNrS2V5cyIsImF0dHJpYkxvY2F0aW9ucyIsInN0YXRpY0F0dHJpYnV0ZXMiLCJzQXR0cmlidXRlcyIsImJpbmRpbmdzIiwicGFyc2VBdHRyaWJMb2NhdGlvbnMiLCJnZXRGcmFtZWJ1ZmZlciIsIkZSQU1FQlVGRkVSIiwiQ09OVEVYVCIsIkZSQU1FQlVGRkVSX0ZVTkMiLCJGUkFNRUJVRkZFUl9TVEFURSIsInBhcnNlRnJhbWVidWZmZXIiLCJ2aWV3cG9ydEFuZFNjaXNzb3IiLCJwYXJzZUJveCIsIkJPWF9XIiwiQk9YX0giLCJkeW5Cb3giLCJCT1giLCJCT1hfWCIsIkJPWF9ZIiwicHJldlZpZXdwb3J0IiwiVklFV1BPUlQiLCJzY2lzc29yX2JveCIsInBhcnNlVmlld3BvcnRTY2lzc29yIiwiZ2V0RWxlbWVudHMiLCJFTEVNRU5UUyIsIklTX0JVRkZFUl9BUkdTIiwiRUxFTUVOVF9TVEFURSIsImVsZW1lbnREZWZuIiwiZWxlbWVudFN0cmVhbSIsImlmdGUiLCJwYXJzZUVsZW1lbnRzIiwicGFyc2VQYXJhbSIsImlzT2Zmc2V0IiwiT0ZGU0VUIiwiZHluVmFsdWUiLCJwcmltaXRpdmUiLCJkeW5QcmltaXRpdmUiLCJQUklNX1RZUEVTIiwicHJpbSIsInBhcnNlUHJpbWl0aXZlIiwiZHluQ291bnQiLCJNSVNTSU5HIiwiRFlOQU1JQyIsInBhcnNlVmVydENvdW50IiwiaW5zdGFuY2VzIiwicGFyc2VEcmF3IiwiU1RBVEUiLCJwYXJzZVN0YXRpYyIsInBhcnNlRHluYW1pYyIsIkNPTVBBUkVfRlVOQ1MiLCJkc3QiLCJCTEVORF9GVU5DUyIsInJlYWQiLCJTUkNfUkdCIiwiU1JDX0FMUEhBIiwiQkxFTkRfRVFVQVRJT05TIiwiUkdCIiwiQUxQSEEiLCJjaGVja1Byb3AiLCJjbXAiLCJmYWlsIiwiemZhaWwiLCJ6cGFzcyIsIlNURU5DSUxfT1BTIiwic2FtcGxlVmFsdWUiLCJzYW1wbGVJbnZlcnQiLCJwYXJzZUdMU3RhdGUiLCJwYXJzZVNoYWRlciIsInByb2dWYXIiLCJmcmFnSWQiLCJTSEFERVJfU1RBVEUiLCJwcm9nRGVmIiwicGFyc2VQcm9ncmFtIiwiY29weUJveCIsImRlZm4iLCJzY29wZVZBTyIsImRyYXdWQU8iLCJ1c2VWQU8iLCJwcm9maWxlRW5hYmxlIiwicGFyc2VQcm9maWxlIiwic3RhdGljVW5pZm9ybXMiLCJkeW5hbWljVW5pZm9ybXMiLCJVTklGT1JNUyIsInJlZ2xUeXBlIiwicGFyc2VVbmlmb3JtcyIsImdldFZBTyIsImNyZWF0ZVZBTyIsInZhb1JlZiIsInBhcnNlVkFPIiwic3RhdGljQmluZGluZ3MiLCJkeW5hbWljQXR0cmlidXRlcyIsImF0dHJpYnV0ZURlZnMiLCJhdHRyaWJ1dGUiLCJnZXRCdWZmZXIiLCJjb25zdGFudCIsIlZBTElEX0tFWVMiLCJkdHlwZSIsImlzU3RyZWFtIiwiVkFMVUUiLCJCVUZGRVJfU1RBVEUiLCJkZWZhdWx0UmVjb3JkIiwiQlVGRkVSIiwiVFlQRSIsImVtaXRSZWFkUmVjb3JkIiwicGFyc2VBdHRyaWJ1dGVzIiwic3RhdGljQ29udGV4dCIsImR5bmFtaWNDb250ZXh0IiwicGFyc2VDb250ZXh0IiwiZW1pdENvbnRleHQiLCJjb250ZXh0RW50ZXIiLCJlbWl0UG9sbEZyYW1lYnVmZmVyIiwic2tpcENoZWNrIiwiRVhUX0RSQVdfQlVGRkVSUyIsIkdMIiwiTkVYVCIsIkRSQVdfQlVGRkVSUyIsIkJBQ0tfQlVGRkVSIiwiZW1pdFBvbGxTdGF0ZSIsIkNVUlJFTlRfVkFSUyIsIk5FWFRfVkFSUyIsIkNVUlJFTlRfU1RBVEUiLCJORVhUX1NUQVRFIiwiQ1VSUkVOVCIsImVtaXRTZXRPcHRpb25zIiwiZmxhZyIsImluamVjdEV4dGVuc2lvbnMiLCJpbnN0YW5jaW5nIiwiZW1pdFByb2ZpbGUiLCJ1c2VTY29wZSIsImluY3JlbWVudENvdW50ZXIiLCJDUFVfU1RBUlQiLCJRVUVSWV9DT1VOVEVSIiwiVVNFX1BST0ZJTEUiLCJTVEFUUyIsIlRJTUVSIiwicHJvZmlsZUFyZyIsInBlcmZDb3VudGVyIiwiZW1pdFByb2ZpbGVTdGFydCIsImVtaXRQcm9maWxlRW5kIiwic2NvcGVQcm9maWxlIiwiZW1pdEF0dHJpYnV0ZXMiLCJBVFRSSUJVVEUiLCJMT0NBVElPTiIsIkJJTkRJTkciLCJDT05TVF9DT01QT05FTlRTIiwiQ09NTU9OX0tFWVMiLCJlbWl0QnVmZmVyIiwiU0laRSIsIkRJVklTT1IiLCJlbWl0Q29uc3RhbnQiLCJlbWl0QmluZEF0dHJpYnV0ZSIsInR5cGVMZW5ndGgiLCJlbWl0VW5pZm9ybXMiLCJpbmZpeCIsInVuaWZvcm0iLCJURVhfVkFMVUUiLCJNQVRfVkFMVUUiLCJkaW0iLCJlbWl0Q2hlY2siLCJjaGVja1R5cGUiLCJjaGVja1ZlY3RvciIsImNoZWNrVGV4dHVyZSIsInVucm9sbCIsIlRFWCIsIm1hdFNpemUiLCJTVE9SQUdFIiwiZW1pdERyYXciLCJvdXRlciIsImlubmVyIiwiRFJBV19TVEFURSIsImRyYXdPcHRpb25zIiwiY29udGV4dER5bmFtaWMiLCJlbWl0RWxlbWVudHMiLCJlbWl0VmFsdWUiLCJJTlNUQU5DRVMiLCJFWFRfSU5TVEFOQ0lORyIsIlBSSU1JVElWRSIsIkNPVU5UIiwiZW1pdENvdW50IiwiRUxFTUVOVF9UWVBFIiwiZWxlbWVudHNTdGF0aWMiLCJlbWl0SW5zdGFuY2luZyIsImVtaXRSZWd1bGFyIiwiY3JlYXRlQm9keSIsImVtaXRCb2R5IiwicGFyZW50RW52IiwiZW1pdERyYXdCb2R5IiwiZW1pdEJhdGNoRHluYW1pY1NoYWRlckJvZHkiLCJlbWl0QmF0Y2hCb2R5IiwiQkFUQ0hfSUQiLCJQUk9QUyIsImlzSW5uZXJEZWZuIiwiaXNPdXRlckRlZm4iLCJuZWVkc0NvbnRleHQiLCJuZWVkc0ZyYW1lYnVmZmVyIiwicHJvZ0NhY2hlIiwiUFJPR1JBTSIsIlBST0dfSUQiLCJDQUNIRURfUFJPQyIsInNwbGF0T2JqZWN0IiwiaXNEeW5hbWljT2JqZWN0IiwiZ2xvYmFscyIsIm9iamVjdFJlZiIsImRlcHMiLCJwcm9jcyIsImNvbW1vbiIsIklOU1RBTkNJTkciLCJvZXNfdmVydGV4X2FycmF5X29iamVjdCIsImRyYXdDYWNoZSIsImVtaXREcmF3UHJvYyIsInNhdmVTaGFkZXIiLCJlbWl0U2NvcGVQcm9jIiwiYmF0Y2giLCJwcm9nRGVmbiIsImJhdGNoQ2FjaGUiLCJlbWl0QmF0Y2hQcm9jIiwiR0xfUVVFUllfUkVTVUxUX0VYVCIsIkdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEVfRVhUIiwiR0xfVElNRV9FTEFQU0VEX0VYVCIsImNyZWF0ZVRpbWVyIiwiZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5IiwicXVlcnlQb29sIiwiZnJlZVF1ZXJ5IiwicXVlcnkiLCJwZW5kaW5nUXVlcmllcyIsIlBlbmRpbmdTdGF0cyIsInN0YXJ0UXVlcnlJbmRleCIsImVuZFF1ZXJ5SW5kZXgiLCJzdW0iLCJwZW5kaW5nU3RhdHNQb29sIiwiZnJlZVBlbmRpbmdTdGF0cyIsInBlbmRpbmdTdGF0cyIsInB1c2hTY29wZVN0YXRzIiwicHMiLCJ0aW1lU3VtIiwicXVlcnlQdHIiLCJiZWdpblF1ZXJ5IiwiY3JlYXRlUXVlcnlFWFQiLCJiZWdpblF1ZXJ5RVhUIiwiZW5kUXVlcnkiLCJlbmRRdWVyeUVYVCIsInF1ZXJ5VGltZSIsImdldFF1ZXJ5T2JqZWN0RVhUIiwic3RhcnRQdHIiLCJlbmRQdHIiLCJncHVUaW1lIiwiZ2V0TnVtUGVuZGluZ1F1ZXJpZXMiLCJkZWxldGVRdWVyeUVYVCIsIkdMX0NPTE9SX0JVRkZFUl9CSVQiLCJHTF9ERVBUSF9CVUZGRVJfQklUIiwiR0xfU1RFTkNJTF9CVUZGRVJfQklUIiwiR0xfQVJSQVlfQlVGRkVSIiwiQ09OVEVYVF9MT1NUX0VWRU5UIiwiQ09OVEVYVF9SRVNUT1JFRF9FVkVOVCIsIkRZTl9QUk9QIiwiRFlOX0NPTlRFWFQiLCJEWU5fU1RBVEUiLCJoYXlzdGFjayIsIm5lZWRsZSIsImdldENvbnRleHRBdHRyaWJ1dGVzIiwiY29udGV4dExvc3QiLCJpc0NvbnRleHRMb3N0IiwiZXh0ZW5zaW9uU3RhdGUiLCJ0cnlMb2FkRXh0ZW5zaW9uIiwibmFtZV8iLCJnZXRFeHRlbnNpb24iLCJjcmVhdGVFeHRlbnNpb25DYWNoZSIsInN0cmluZ0lkcyIsInN0cmluZ1ZhbHVlcyIsIiIsInN0YXRzJCQxIiwidmFvQ291bnQiLCJidWZmZXJDb3VudCIsImVsZW1lbnRzQ291bnQiLCJmcmFtZWJ1ZmZlckNvdW50Iiwic2hhZGVyQ291bnQiLCJTVEFSVF9USU1FIiwiV0lEVEgiLCJIRUlHSFQiLCJkZXN0cm95QnVmZmVyIiwiYnVmZmVyU2V0IiwiUkVHTEJ1ZmZlciIsImNyZWF0ZUJ1ZmZlciIsInVzYWdlIiwicGVyc2lzdGVudERhdGEiLCJiaW5kQnVmZmVyIiwic3RyZWFtUG9vbCIsImluaXRCdWZmZXJGcm9tVHlwZWRBcnJheSIsImluaXRCdWZmZXJGcm9tRGF0YSIsInBlcnNpc3QiLCJmbGF0RGF0YSIsInR5cGVkRGF0YSIsImRlbGV0ZUJ1ZmZlciIsImdldFRvdGFsQnVmZmVyU2l6ZSIsImRlZmVySW5pdCIsInBlcnNpc3RlbnQiLCJyZWdsQnVmZmVyIiwic2V0U3ViRGF0YSIsImJ1ZmZlclN1YkRhdGEiLCJfYnVmZmVyIiwic3ViZGF0YSIsIm9mZnNldF8iLCJjcmVhdGVTdHJlYW0iLCJkZXN0cm95U3RyZWFtIiwic3RyZWFtJCQxIiwiX2luaXRCdWZmZXIiLCJ3cmFwQnVmZmVyU3RhdGUiLCJOVU1fQVRUUklCVVRFUyIsImF0dHJpYnV0ZUJpbmRpbmdzIiwidmFvU2V0IiwiY3VycmVudFZBTyIsInRhcmdldFZBTyIsImV4dFZBTyIsIl9hdHRyIiwiUkVHTFZBTyIsInVwZGF0ZVZBTyIsImJ1ZlVwZGF0ZWQiLCJuYXR0cmlidXRlcyIsInNwZWMiLCJyZWMiLCJidWZmZXJzIiwiX3ZhbyIsImRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIsInNldFZBTyIsImJpbmRWZXJ0ZXhBcnJheU9FUyIsImJpbmRBdHRycyIsImV4dGkiLCJleHRJbnN0YW5jZWQiLCJlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIsInZlcnRleEF0dHJpYlBvaW50ZXIiLCJvZmZmc2V0IiwidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIiwidmVydGV4QXR0cmliNGYiLCJjcmVhdGVWZXJ0ZXhBcnJheU9FUyIsImRlbGV0ZVZlcnRleEFycmF5T0VTIiwid3JhcEF0dHJpYnV0ZVN0YXRlIiwiZWxlbWVudFNldCIsImVsZW1lbnRDb3VudCIsImVsZW1lbnRUeXBlcyIsIlJFR0xFbGVtZW50QnVmZmVyIiwicHJpbVR5cGUiLCJ2ZXJ0Q291bnQiLCJvZXNfZWxlbWVudF9pbmRleF91aW50IiwiaW5pdEVsZW1lbnRzIiwicHJlZGljdGVkVHlwZSIsImRlc3Ryb3lFbGVtZW50cyIsInJlZ2xFbGVtZW50cyIsIl9lbGVtZW50cyIsIndyYXBFbGVtZW50c1N0YXRlIiwiZnJhZ1NoYWRlcnMiLCJ2ZXJ0U2hhZGVycyIsIkFjdGl2ZUluZm8iLCJsb2NhdGlvbiIsImluc2VydEFjdGl2ZUluZm8iLCJnZXRTaGFkZXIiLCJjcmVhdGVTaGFkZXIiLCJzaGFkZXJTb3VyY2UiLCJjb21waWxlU2hhZGVyIiwicHJvZ3JhbUNhY2hlIiwicHJvZ3JhbUxpc3QiLCJQUk9HUkFNX0NPVU5URVIiLCJSRUdMUHJvZ3JhbSIsInZlcnRJZCIsInVuaWZvcm1zQ291bnQiLCJhdHRyaWJ1dGVzQ291bnQiLCJsaW5rUHJvZ3JhbSIsImF0dHJpYnV0ZUxvY2F0aW9ucyIsImNyZWF0ZVByb2dyYW0iLCJhdHRhY2hTaGFkZXIiLCJiaW5kQXR0cmliTG9jYXRpb24iLCJudW1Vbmlmb3JtcyIsImdldEFjdGl2ZVVuaWZvcm0iLCJnZXRVbmlmb3JtTG9jYXRpb24iLCJudW1BdHRyaWJ1dGVzIiwiZ2V0QWN0aXZlQXR0cmliIiwiZ2V0QXR0cmliTG9jYXRpb24iLCJnZXRNYXhVbmlmb3Jtc0NvdW50IiwiZ2V0TWF4QXR0cmlidXRlc0NvdW50IiwiZGVsZXRlU2hhZGVyIiwiZGVsZXRlUHJvZ3JhbSIsInByZXZQcm9ncmFtIiwid3JhcFNoYWRlclN0YXRlIiwiY29yZSIsInJlbmRlcmJ1ZmZlclN0YXRlIiwiY3VyIiwiY29sb3JUZXh0dXJlRm9ybWF0cyIsImNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cyIsImNvbG9yVHlwZXMiLCJGcmFtZWJ1ZmZlckF0dGFjaG1lbnQiLCJpbmNSZWZBbmRDaGVja1NoYXBlIiwidHciLCJ0aCIsImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwicGFyc2VBdHRhY2htZW50IiwiYWxsb2NBdHRhY2htZW50IiwiaXNUZXh0dXJlIiwidW53cmFwQXR0YWNobWVudCIsInJlc2l6ZUF0dGFjaG1lbnQiLCJmcmFtZWJ1ZmZlclNldCIsIlJFR0xGcmFtZWJ1ZmZlciIsImRlcHRoQXR0YWNobWVudCIsInN0ZW5jaWxBdHRhY2htZW50IiwiZGVwdGhTdGVuY2lsQXR0YWNobWVudCIsImRlY0ZCT1JlZnMiLCJ1cGRhdGVGcmFtZWJ1ZmZlciIsInN0YXR1cyIsImNyZWF0ZUZCTyIsInJlZ2xGcmFtZWJ1ZmZlciIsIm5lZWRzRGVwdGgiLCJuZWVkc1N0ZW5jaWwiLCJjb2xvckJ1ZmZlciIsImNvbG9yVGV4dHVyZSIsImNvbG9yRm9ybWF0IiwiY29sb3JUeXBlIiwiY29sb3JDb3VudCIsImRlcHRoQnVmZmVyIiwic3RlbmNpbEJ1ZmZlciIsImRlcHRoU3RlbmNpbEJ1ZmZlciIsImRlcHRoU3RlbmNpbFRleHR1cmUiLCJjb2xvcnMiLCJkZXB0aFRleHR1cmUiLCJkZXB0aFN0ZW5jaWwiLCJjb21tb25Db2xvckF0dGFjaG1lbnRTaXplIiwiY29sb3JBdHRhY2htZW50U2l6ZSIsIl9mcmFtZWJ1ZmZlciIsInVzZSIsInJlZ2xGcmFtZWJ1ZmZlckN1YmUiLCJjb2xvckN1YmVzIiwiY3ViZU1hcFBhcmFtcyIsImN1YmUiLCJmYiIsIndyYXBGQk9TdGF0ZSIsInJhZkNhbGxiYWNrcyIsImxvc3NDYWxsYmFja3MiLCJyZXN0b3JlQ2FsbGJhY2tzIiwiZGVzdHJveUNhbGxiYWNrcyIsImFjdGl2ZVJBRiIsImhhbmRsZVJBRiIsInN0YXJ0UkFGIiwic3RvcFJBRiIsImhhbmRsZUNvbnRleHRMb3NzIiwiZXZlbnQiLCJoYW5kbGVDb250ZXh0UmVzdG9yZWQiLCJjb21waWxlUHJvY2VkdXJlIiwic2VwYXJhdGVEeW5hbWljIiwidXNlQXJyYXlzIiwic3RhdGljSXRlbXMiLCJkeW5hbWljSXRlbXMiLCJvcHRpb24iLCJvcCIsIm9wQmFjayIsIm9wRnJvbnQiLCJmbGF0dGVuTmVzdGVkT3B0aW9ucyIsImNwdVRpbWUiLCJjb21waWxlZCIsIkVNUFRZX0FSUkFZIiwicmVzZXJ2ZSIsImNsZWFySW1wbCIsImNsZWFyRmxhZ3MiLCJjbGVhckRlcHRoIiwiY2xlYXJTdGVuY2lsIiwicGVuZGluZ0NhbmNlbCIsInBvbGxWaWV3cG9ydCIsInNjaXNzb3JCb3giLCJmcmFtZWJ1ZmZlcl9yZWdsVHlwZSIsImZyYW1lYnVmZmVyQ3ViZSIsIm9uIiwiY2FsbGJhY2siLCJjYWxsYmFja3MiLCJoYXNFeHRlbnNpb24iLCJfZ2wiLCJfcmVmcmVzaCIsImNyZWF0ZVJFR0wiLCJHTE9CQUwiLCJzdGFydGRlbm9tIiwic2lnbmlmaWNhbmNlIiwib3ZlcmZsb3ciLCJvbGRSYW5kb20iLCJBUkM0Iiwia2V5bGVuIiwibWUiLCJtaXhrZXkiLCJzbWVhciIsInN0cmluZ3NlZWQiLCJ0b3N0cmluZyIsImFyYzQiLCJ0eXAiLCJlbnRyb3B5IiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwicGx1Z2lucyIsInNjcmVlbiIsImF1dG9zZWVkIiwicmVzZXRHbG9iYWwiLCJGMiIsIkcyIiwiRzMiLCJGNCIsIkc0IiwicmFuZG9tT3JTZWVkIiwiczAiLCJzMSIsInMyIiwibWFzaCIsImFsZWEiLCJidWlsZFBlcm11dGF0aW9uVGFibGUiLCJwZXJtIiwicGVybU1vZDEyIiwiYXV4IiwiZ3JhZDMiLCJncmFkNCIsInhpbiIsInlpbiIsImkxIiwiajEiLCJuMCIsIm4xIiwibjIiLCJpaSIsImpqIiwidDAiLCJnaTAiLCJnaTEiLCJnaTIiLCJ6aW4iLCJuMyIsImsxIiwiaTIiLCJqMiIsImsyIiwiejAiLCJ6MSIsInoyIiwiejMiLCJrayIsImdpMyIsIm40IiwibDEiLCJsMiIsImkzIiwiajMiLCJrMyIsImwzIiwidzAiLCJyYW5reCIsInJhbmt5IiwicmFua3oiLCJyYW5rdyIsIncxIiwidzIiLCJ3MyIsIno0IiwidzQiLCJsbCIsInQ0IiwiZ2k0IiwiX2J1aWxkUGVybXV0YXRpb25UYWJsZSIsIl9zbGljZWRUb0FycmF5IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJfYXJyIiwiX24iLCJfZCIsIl9lIiwiX3MiLCJfaSIsImRvbmUiLCJzbGljZUl0ZXJhdG9yIiwiVEFVIiwibWFwVG9FbGxpcHNlIiwiX3JlZiIsImNvc3BoaSIsInNpbnBoaSIsImNlbnRlcngiLCJjZW50ZXJ5IiwiYXBwcm94VW5pdEFyYyIsImFuZzEiLCJhbmcyIiwidmVjdG9yQW5nbGUiLCJ1eCIsInV5IiwiZG90IiwiX3JlZjIiLCJfcmVmMiR4QXhpc1JvdGF0aW9uIiwiX3JlZjIkbGFyZ2VBcmNGbGFnIiwiX3JlZjIkc3dlZXBGbGFnIiwicHhwIiwicHlwIiwiX2dldEFyY0NlbnRlciIsInJ4c3EiLCJyeXNxIiwicHhwc3EiLCJweXBzcSIsInJhZGljYW50IiwiY2VudGVyeHAiLCJjZW50ZXJ5cCIsInZ4MSIsInZ5MSIsInZ4MiIsInZ5MiIsImdldEFyY0NlbnRlciIsIl9nZXRBcmNDZW50ZXIyIiwic2VnbWVudHMiLCJjdXJ2ZSIsIl9tYXBUb0VsbGlwc2UiLCJfbWFwVG9FbGxpcHNlMiIsIl9tYXBUb0VsbGlwc2UzIiwiYmV6aWVyIiwibm9ybSIsInRtcDEiLCJ0bXAyIiwidG1wMyIsInN2ZyIsInBlbiIsImJlemllclRvIiwiz4AiLCJfMTIwIiwicmFkaWFucyIsImxhcmdlX2FyY19mbGFnIiwic3dlZXBfZmxhZyIsImYxIiwiZjIiLCJ4eSIsInJvdGF0ZSIsInJ4MiIsInJ5MiIsImFzaW4iLCJ0b0ZpeGVkIiwiZjJvbGQiLCJ4Mm9sZCIsInkyb2xkIiwiaHgiLCJoeSIsInJvdCIsInJhZCIsImRlZ3Jlc3MiLCJCbGFkZUFwaSIsIltvYmplY3QgT2JqZWN0XSIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyXyIsInZpZXciLCJkaXNhYmxlZCIsInZpZXdQcm9wcyIsImhpZGRlbiIsIlRwRXZlbnQiLCJUcENoYW5nZUV2ZW50IiwicHJlc2V0S2V5IiwibGFzdCIsInN1cGVyIiwiVHBVcGRhdGVFdmVudCIsIlRwRm9sZEV2ZW50IiwiZXhwYW5kZWQiLCJUcFRhYlNlbGVjdEV2ZW50IiwiZm9yY2VDYXN0IiwiZGVlcEVxdWFsc0FycmF5IiwiaXNQcm9wZXJ0eVdyaXRhYmxlIiwid3JpdGFibGUiLCJDUkVBVEVfTUVTU0FHRV9NQVAiLCJhbHJlYWR5ZGlzcG9zZWQiLCJpbnZhbGlkcGFyYW1zIiwibm9tYXRjaGluZ2NvbnRyb2xsZXIiLCJub21hdGNoaW5ndmlldyIsIm5vdGJpbmRhYmxlIiwicHJvcGVydHlub3Rmb3VuZCIsInNob3VsZG5ldmVyaGFwcGVuIiwiVHBFcnJvciIsIl9hIiwiQmluZGluZ1RhcmdldCIsIm9wdF9pZCIsIm9ial8iLCJrZXlfIiwicHJlc2V0S2V5XyIsInZhbHVlT2JqIiwiaXNCaW5kYWJsZSIsIm5vdEJpbmRhYmxlIiwicHJvcGVydHlOb3RGb3VuZCIsIkJ1dHRvbkFwaSIsImxhYmVsIiwidGl0bGUiLCJ2YWx1ZUNvbnRyb2xsZXIiLCJldmVudE5hbWUiLCJiaCIsImVtaXR0ZXIiLCJFbWl0dGVyIiwib2JzZXJ2ZXJzXyIsIm9ic2VydmVycyIsIm9ic2VydmVyIiwiUFJFRklYIiwiQ2xhc3NOYW1lIiwidmlld05hbWUiLCJvcHRfZWxlbWVudE5hbWUiLCJvcHRfbW9kaWZpZXIiLCJleHRyYWN0VmFsdWUiLCJyYXdWYWx1ZSIsImJpbmRWYWx1ZSIsImFwcGx5VmFsdWUiLCJoMSIsImgyIiwiYmluZFZhbHVlTWFwIiwidmFsdWVNYXAiLCJ2YWx1ZVRvQ2xhc3NOYW1lIiwiZWxlbSIsImFjdGl2ZSIsImNsYXNzTGlzdCIsInJlbW92ZSIsImFwcGx5Q2xhc3MiLCJiaW5kVmFsdWVUb1RleHRDb250ZW50IiwidGV4dCIsInRleHRDb250ZW50IiwiY2xhc3NOYW1lJHEiLCJCdXR0b25WaWV3IiwiZG9jIiwiYmluZENsYXNzTW9kaWZpZXJzIiwiYnV0dG9uRWxlbSIsImJpbmREaXNhYmxlZCIsImJ1dHRvbkVsZW1lbnQiLCJ0aXRsZUVsZW0iLCJCdXR0b25Db250cm9sbGVyIiwib25DbGlja18iLCJlbWl0Iiwic2VuZGVyIiwiQm91bmRWYWx1ZSIsImNvbnN0cmFpbnRfIiwiY29uc3RyYWludCIsImVxdWFsc18iLCJlcXVhbHMiLCJyYXdWYWx1ZV8iLCJzZXRSYXdWYWx1ZSIsImZvcmNlRW1pdCIsImNvbnN0cmFpbmVkVmFsdWUiLCJjb25zdHJhaW4iLCJwcmV2VmFsdWUiLCJwcmV2aW91c1Jhd1ZhbHVlIiwiUHJpbWl0aXZlVmFsdWUiLCJ2YWx1ZV8iLCJjcmVhdGVWYWx1ZSIsIlZhbHVlTWFwIiwidmFsTWFwXyIsImNyZWF0ZUNvcmUiLCJjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyIiwic3VjY2VlZGVkIiwiY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcnMiLCJjdXN0b20iLCJzdHJpbmciLCJmdW5jdGlvbiIsInJhdyIsImtleVRvUGFyc2VyTWFwIiwiaXNPYmplY3QiLCJwYXJzZXIiLCJwYXJzZU9iamVjdCIsIml0ZW1QYXJzZXIiLCJwYXJzZUl0ZW0iLCJwYXJzZUFycmF5IiwiUGFyYW1zUGFyc2VycyIsInJlcXVpcmVkIiwicGFyc2VQYXJhbXMiLCJ3YXJuTWlzc2luZyIsInBsYWNlIiwiUmVhZG9ubHlWYWx1ZSIsImNsYXNzTmFtZSRwIiwidmFsdWVUb01vZGlmaWVyIiwibW9kaWZpZXIiLCJWaWV3UHJvcHMiLCJvbkRpc2FibGVkQ2hhbmdlXyIsIm9uUGFyZW50Q2hhbmdlXyIsIm9uUGFyZW50R2xvYmFsRGlzYWJsZWRDaGFuZ2VfIiwiZ2xvYmFsRGlzYWJsZWRfIiwic2V0R2xvYmFsRGlzYWJsZWRfIiwiZ2V0R2xvYmFsRGlzYWJsZWRfIiwiZ2xvYmFsRGlzYWJsZWQiLCJvcHRfaW5pdGlhbFZhbHVlIiwiX2IiLCJfYyIsImRpc3Bvc2VkIiwidGFiSW5kZXgiLCJ1cGRhdGVHbG9iYWxEaXNhYmxlZF8iLCJwcmV2UGFyZW50Iiwib2ZmIiwiY2xhc3NOYW1lJG8iLCJQT1NfVE9fQ0xBU1NfTkFNRV9NQVAiLCJ2ZXJ5Zmlyc3QiLCJmaXJzdCIsInZlcnlsYXN0IiwiQmxhZGVDb250cm9sbGVyIiwicGFyZW50XyIsImJsYWRlIiwicG9zIiwiaGFuZGxlRGlzcG9zZSIsImRpc3Bvc2VFbGVtZW50IiwiU1ZHX05TIiwic3VwcG9ydHNUb3VjaCIsIm9udG91Y2hzdGFydCIsImdldFdpbmRvd0RvY3VtZW50IiwiZ2xvYmFsVGhpcyIsIklDT05fSURfVE9fSU5ORVJfSFRNTF9NQVAiLCJkcm9wZG93biIsInAyZHBhZCIsImNyZWF0ZVN2Z0ljb25FbGVtZW50IiwiaWNvbklkIiwiY3JlYXRlRWxlbWVudE5TIiwiaW5uZXJIVE1MIiwiaW5zZXJ0RWxlbWVudEF0IiwiaW5zZXJ0QmVmb3JlIiwiY2hpbGRyZW4iLCJyZW1vdmVFbGVtZW50IiwicmVtb3ZlQ2hpbGRFbGVtZW50cyIsImZpbmROZXh0VGFyZ2V0IiwicmVsYXRlZFRhcmdldCIsImV4cGxpY2l0T3JpZ2luYWxUYXJnZXQiLCJjbGFzc05hbWUkbiIsIkxhYmVsVmlldyIsImxhYmVsRWxlbSIsImNoaWxkTm9kZXMiLCJyZW1vdmVDaGlsZE5vZGVzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImNyZWF0ZVRleHROb2RlIiwibGluZU5vZGUiLCJjcmVhdGVMYWJlbE5vZGUiLCJsYWJlbEVsZW1lbnQiLCJ2YWx1ZUVsZW0iLCJ2YWx1ZUVsZW1lbnQiLCJMYWJlbENvbnRyb2xsZXIiLCJCdXR0b25CbGFkZVBsdWdpbiIsImZyb21PYmplY3QiLCJhcGkiLCJWYWx1ZUJsYWRlQ29udHJvbGxlciIsImNyZWF0ZUJsYWRlIiwiRm9sZGFibGUiLCJjb21wbGV0ZWQiLCJleHBhbmRlZEhlaWdodCIsInNob3VsZEZpeEhlaWdodCIsInRlbXBvcmFyeUV4cGFuZGVkIiwic3R5bGVFeHBhbmRlZCIsImV4SGVpZ2h0IiwiZXhwYW5kZWRDbGFzc05hbWUiLCJvbkV4cGFuZCIsImFwcGx5SGVpZ2h0IiwiZm9sZGFibGUiLCJiaW5kRm9sZGFibGUiLCJmb2xkZXIiLCJjb250YWluZXJFbGVtZW50IiwidHJhbnNpdGlvbiIsImRpc2FibGVUcmFuc2l0aW9uVGVtcG9yYXJpbHkiLCJjbGllbnRIZWlnaHQiLCJjb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQiLCJjbGVhblVwVHJhbnNpdGlvbiIsIlJhY2tMaWtlQXBpIiwicmFja0FwaSIsInJhY2tBcGlfIiwiTmVzdGVkT3JkZXJlZFNldCIsImV4dHJhY3QiLCJpdGVtc18iLCJjYWNoZV8iLCJvblN1Ykxpc3RBZGRfIiwib25TdWJMaXN0UmVtb3ZlXyIsImV4dHJhY3RfIiwiaXRlbXMiLCJhbGxJdGVtcyIsIm9wdF9pbmRleCIsInNob3VsZE5ldmVySGFwcGVuIiwic3ViTGlzdCIsInJvb3QiLCJkZWxldGUiLCJJbnB1dEJpbmRpbmdBcGkiLCJvbkJpbmRpbmdDaGFuZ2VfIiwiZW1pdHRlcl8iLCJJbnB1dEJpbmRpbmdDb250cm9sbGVyIiwiTW9uaXRvckJpbmRpbmdBcGkiLCJvbkJpbmRpbmdVcGRhdGVfIiwiTW9uaXRvckJpbmRpbmdDb250cm9sbGVyIiwidGlja2VyIiwiZmluZFN1YkJsYWRlQXBpU2V0IiwiUmFja0FwaSIsImdldEFwaUJ5Q29udHJvbGxlciIsImFwaVNldCIsImNyZWF0ZUJpbmRpbmdUYXJnZXQiLCJvblJhY2tBZGRfIiwib25SYWNrUmVtb3ZlXyIsIm9uUmFja0lucHV0Q2hhbmdlXyIsIm9uUmFja01vbml0b3JVcGRhdGVfIiwiYXBpU2V0XyIsInBvb2xfIiwicmFjayIsInNldFVwQXBpXyIsIm9wdF9wYXJhbXMiLCJjcmVhdGVJbnB1dCIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVNb25pdG9yIiwiYWRkQmxhZGUiLCJhZGRGb2xkZXJBc0JsYWRlIiwiYWRkQnV0dG9uQXNCbGFkZSIsImFkZFNlcGFyYXRvckFzQmxhZGUiLCJhZGRUYWJBc0JsYWRlIiwiZ2FwaSIsImNyZWF0ZUJsYWRlQXBpIiwiYmxhZGVDb250cm9sbGVyIiwiaXNSb290IiwiRm9sZGVyQXBpIiwicmFja0NvbnRyb2xsZXIiLCJhZGRJbnB1dCIsImFkZE1vbml0b3IiLCJhZGRGb2xkZXIiLCJhZGRCdXR0b24iLCJhZGRTZXBhcmF0b3IiLCJhZGRUYWIiLCJSYWNrTGlrZUNvbnRyb2xsZXIiLCJQbGFpblZpZXciLCJmaW5kU3ViUmFjayIsIlJhY2tDb250cm9sbGVyIiwiZmluZFN1YkJsYWRlQ29udHJvbGxlclNldCIsIkJsYWRlUmFjayIsIm9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfIiwib25TZXRBZGRfIiwib25TZXRSZW1vdmVfIiwib25DaGlsZERpc3Bvc2VfIiwib25DaGlsZFBvc2l0aW9uc0NoYW5nZV8iLCJvbkNoaWxkSW5wdXRDaGFuZ2VfIiwib25DaGlsZE1vbml0b3JVcGRhdGVfIiwib25DaGlsZFZhbHVlQ2hhbmdlXyIsIm9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfIiwib25EZXNjZW5kYW50TGF5b3V0XyIsIm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyIsIm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfIiwiYmxhZGVfIiwiYmNTZXRfIiwiY29udHJvbGxlckNsYXNzIiwidXBkYXRlUG9zaXRpb25zXyIsInZpc2libGVJdGVtcyIsImZpcnN0VmlzaWJsZUl0ZW0iLCJsYXN0VmlzaWJsZUl0ZW0iLCJfZXYiLCJiY3MiLCJmaW5kSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsImFscmVhZHlEaXNwb3NlZCIsImZpbmRNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIiLCJmaW5kVmFsdWVCbGFkZUNvbnRyb2xsZXIiLCJibGFkZUNvbnRhaW5lckNsYXNzTmFtZSIsIkZvbGRlclZpZXciLCJjbGFzc05hbWVfIiwiZm9sZGFibGVfIiwiYmluZEV4cGFuZGVkQ2xhc3MiLCJpbmRlbnRFbGVtIiwidGl0bGVFbGVtZW50IiwibWFya0VsZW0iLCJjb250YWluZXJFbGVtIiwiRm9sZGVyQ29udHJvbGxlciIsIm9uVGl0bGVDbGlja18iLCJGb2xkZXJCbGFkZVBsdWdpbiIsIkxhYmVsZWRWYWx1ZUNvbnRyb2xsZXIiLCJTZXBhcmF0b3JBcGkiLCJjbGFzc05hbWUkbSIsIlNlcGFyYXRvclZpZXciLCJockVsZW0iLCJTZXBhcmF0b3JDb250cm9sbGVyIiwiU2VwYXJhdG9yQmxhZGVQbHVnaW4iLCJjbGFzc05hbWUkbCIsIlRhYkl0ZW1WaWV3Iiwic2VsZWN0ZWQiLCJUYWJJdGVtQ29udHJvbGxlciIsIlRhYlBhZ2VDb250cm9sbGVyIiwib25JdGVtQ2xpY2tfIiwiaWNfIiwiaXRlbVByb3BzIiwiY2NfIiwiaXRlbUNvbnRyb2xsZXIiLCJjb250ZW50Q29udHJvbGxlciIsIlRhYlBhZ2VBcGkiLCJjb250ZW50UmFja0FwaSIsIlRhYkFwaSIsIm9uUGFnZUFkZF8iLCJvblBhZ2VSZW1vdmVfIiwib25TZWxlY3RfIiwicGFnZUFwaU1hcF8iLCJ0YWIiLCJzZWxlY3RlZEluZGV4IiwicGFnZVNldCIsInNldFVwUGFnZUFwaV8iLCJwYWdlcyIsIklOREVYX05PVF9TRUxFQ1RFRCIsIlRhYiIsIm9uSXRlbVNlbGVjdGVkQ2hhbmdlXyIsImVtcHR5Iiwia2VlcFNlbGVjdGlvbl8iLCJmaXJzdFNlbEluZGV4IiwiZmluZEluZGV4IiwiY2xhc3NOYW1lJGsiLCJUYWJWaWV3IiwiaXRlbXNFbGVtZW50IiwiY29udGVudHNFbGVtIiwiY29udGVudHNFbGVtZW50IiwiVGFiQ29udHJvbGxlciIsImNyIiwicGFnZVNldF8iLCJUYWJCbGFkZVBsdWdpbiIsIk1hbnVhbFRpY2tlciIsIkludGVydmFsVGlja2VyIiwiaW50ZXJ2YWwiLCJkaXNhYmxlZF8iLCJ0aW1lcklkXyIsIm9uVGlja18iLCJkb2NfIiwiaW50ZXJ2YWxfIiwic2V0VGltZXJfIiwiaW5hY3RpdmUiLCJjbGVhclRpbWVyXyIsIndpbiIsImRlZmF1bHRWaWV3IiwiY2xlYXJJbnRlcnZhbCIsInNldEludGVydmFsIiwiQ29tcG9zaXRlQ29uc3RyYWludCIsImNvbnN0cmFpbnRzIiwiZmluZENvbnN0cmFpbnQiLCJjb25zdHJhaW50Q2xhc3MiLCJ0bXBSZXN1bHQiLCJzYyIsIkRlZmluaXRlUmFuZ2VDb25zdHJhaW50IiwiTGlzdENvbnN0cmFpbnQiLCJSYW5nZUNvbnN0cmFpbnQiLCJtYXhWYWx1ZSIsIm1pblZhbHVlIiwiU3RlcENvbnN0cmFpbnQiLCJzdGVwIiwib3JpZ2luIiwiY2xhc3NOYW1lJGoiLCJMaXN0VmlldyIsIm9uVmFsdWVDaGFuZ2VfIiwicHJvcHNfIiwic2VsZWN0RWxlbSIsIm9wdGlvbkVsZW0iLCJkYXRhc2V0Iiwic2VsZWN0RWxlbWVudCIsInVwZGF0ZV8iLCJMaXN0Q29udHJvbGxlciIsIm9uU2VsZWN0Q2hhbmdlXyIsIm9wdEVsZW0iLCJjdXJyZW50VGFyZ2V0Iiwic2VsZWN0ZWRPcHRpb25zIiwiaXRlbUluZGV4IiwiY2xhc3NOYW1lJGkiLCJQb3B1cFZpZXciLCJzaG93cyIsIlBvcHVwQ29udHJvbGxlciIsImNsYXNzTmFtZSRoIiwiVGV4dFZpZXciLCJvbkNoYW5nZV8iLCJpbnB1dEVsZW0iLCJpbnB1dEVsZW1lbnQiLCJmb3JtYXR0ZXIiLCJUZXh0Q29udHJvbGxlciIsIm9uSW5wdXRDaGFuZ2VfIiwicGFyc2VyXyIsInBhcnNlZFZhbHVlIiwiYm9vbEZyb21Vbmtub3duIiwiQm9vbGVhbkZvcm1hdHRlciIsImJvb2xUb1N0cmluZyIsIk51bWJlckxpdGVyYWxOb2RlIiwiQklOQVJZX09QRVJBVElPTl9NQVAiLCIqKiIsIioiLCIvIiwiJSIsIisiLCItIiwiPDwiLCI+PiIsIj4+PiIsIiYiLCJeIiwifCIsIkJpbmFyeU9wZXJhdGlvbk5vZGUiLCJvcGVyYXRvciIsImV2YWx1YXRlIiwiVU5BUllfT1BFUkFUSU9OX01BUCIsIn4iLCJVbmFyeU9wZXJhdGlvbk5vZGUiLCJleHByIiwiZXhwcmVzc2lvbiIsImNvbWJpbmVSZWFkZXIiLCJwYXJzZXJzIiwiY3Vyc29yIiwicmVhZFdoaXRlc3BhY2UiLCJyZWFkRGVjaW1hbERpZ2l0cyIsInJlYWRFeHBvbmVudFBhcnQiLCJzaSIsInNkcyIsInJlYWRTaWduZWRJbnRlZ2VyIiwicmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIsIm56ZCIsInJlYWROb25aZXJvRGlnaXQiLCJyZWFkRGVjaW1hbExpdGVyYWwiLCJkaWwiLCJkZHMiLCJyZWFkTm9uRGVjaW1hbEludGVnZXJMaXRlcmFsIiwiYmRzIiwicGFyc2VCaW5hcnlEaWdpdHMiLCJvZHMiLCJyZWFkT2N0YWxEaWdpdHMiLCJoZHMiLCJyZWFkSGV4RGlnaXRzIiwicmVhZE51bWVyaWNMaXRlcmFsIiwicGFyc2VQcmltYXJ5RXhwcmVzc2lvbiIsImV2YWx1YWJsZSIsInBhcnNlTGl0ZXJhbCIsInBhcnNlRXhwcmVzc2lvbiIsImNsIiwicGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIsInJlYWRCaW5hcnlPcGVyYXRvciIsIm9wcyIsInN0YXJ0c1dpdGgiLCJwYXJzZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb24iLCJleHByUGFyc2VyIiwiZmlyc3RFeHByIiwibmV4dEV4cHIiLCJjcmVhdGVCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uUGFyc2VyIiwicGFyc2VVbmFyeUV4cHJlc3Npb24iLCJwYXJzZU51bWJlciIsInBhcnNlRWNtYU51bWJlckV4cHJlc3Npb24iLCJudW1iZXJGcm9tVW5rbm93biIsInB2IiwibnVtYmVyVG9TdHJpbmciLCJjcmVhdGVOdW1iZXJGb3JtYXR0ZXIiLCJkaWdpdHMiLCJpbm5lckZvcm1hdHRlciIsImZvcm1hdFBlcmNlbnRhZ2UiLCJzdHJpbmdGcm9tVW5rbm93biIsImZvcm1hdFN0cmluZyIsImZpbGxCdWZmZXIiLCJidWZmZXJTaXplIiwiaW5pdGlhbGl6ZUJ1ZmZlciIsImNyZWF0ZVRyaW1tZWRCdWZmZXIiLCJjb25uZWN0VmFsdWVzIiwicHJpbWFyeSIsInNlY29uZGFyeSIsImZvcndhcmQiLCJiYWNrd2FyZCIsImNoYW5naW5nIiwicHJldmVudEZlZWRiYWNrIiwiZ2V0U3RlcEZvcktleSIsImJhc2VTdGVwIiwidXBLZXkiLCJkb3duS2V5IiwiZ2V0VmVydGljYWxTdGVwS2V5cyIsImdldEhvcml6b250YWxTdGVwS2V5cyIsImlzQXJyb3dLZXkiLCJpc1ZlcnRpY2FsQXJyb3dLZXkiLCJjb21wdXRlT2Zmc2V0JDEiLCJwYWdlWCIsInNjcm9sbFgiLCJwYWdlWSIsInNjcm9sbFkiLCJQb2ludGVySGFuZGxlciIsImxhc3RUb3VjaF8iLCJvbkRvY3VtZW50TW91c2VNb3ZlXyIsIm9uRG9jdW1lbnRNb3VzZVVwXyIsIm9uTW91c2VEb3duXyIsIm9uVG91Y2hFbmRfIiwib25Ub3VjaE1vdmVfIiwib25Ub3VjaFN0YXJ0XyIsImVsZW1fIiwicGFzc2l2ZSIsImZvY3VzIiwiY29tcHV0ZVBvc2l0aW9uXyIsInRvdWNoIiwidGFyZ2V0VG91Y2hlcyIsImNsaWVudFgiLCJjbGllbnRZIiwic3RhcnQxIiwiZW5kMSIsInN0YXJ0MiIsImVuZDIiLCJnZXREZWNpbWFsRGlnaXRzIiwiY29uc3RyYWluUmFuZ2UiLCJsb29wUmFuZ2UiLCJjbGFzc05hbWUkZyIsIk51bWJlclRleHRWaWV3IiwiYXJyYXlQb3NpdGlvbiIsIm9uRHJhZ2dpbmdDaGFuZ2VfIiwiZHJhZ2dpbmdfIiwiZHJhZ2dpbmciLCJrbm9iRWxlbSIsImtub2JFbGVtZW50IiwiZ3VpZGVFbGVtIiwiYm9keUVsZW0iLCJndWlkZUJvZHlFbGVtXyIsImhlYWRFbGVtIiwiZ3VpZGVIZWFkRWxlbV8iLCJ0b29sdGlwRWxlbSIsInRvb2x0aXBFbGVtXyIsImFveCIsImFkeCIsInNldEF0dHJpYnV0ZU5TIiwiTnVtYmVyVGV4dENvbnRyb2xsZXIiLCJvcmlnaW5SYXdWYWx1ZV8iLCJvbklucHV0S2V5RG93bl8iLCJvbklucHV0S2V5VXBfIiwib25Qb2ludGVyRG93bl8iLCJvblBvaW50ZXJNb3ZlXyIsIm9uUG9pbnRlclVwXyIsImJhc2VTdGVwXyIsInNsaWRlclByb3BzXyIsInNsaWRlclByb3BzIiwicGgiLCJjb25zdHJhaW5WYWx1ZV8iLCJjb21wdXRlRHJhZ2dpbmdWYWx1ZV8iLCJjbGFzc05hbWUkZiIsIlNsaWRlclZpZXciLCJ0cmFja0VsZW0iLCJiaW5kVGFiSW5kZXgiLCJ0cmFja0VsZW1lbnQiLCJTbGlkZXJDb250cm9sbGVyIiwib25LZXlEb3duXyIsIm9uS2V5VXBfIiwib25Qb2ludGVyRG93bk9yTW92ZV8iLCJwdEhhbmRsZXJfIiwiaGFuZGxlUG9pbnRlckV2ZW50XyIsImNsYXNzTmFtZSRlIiwiU2xpZGVyVGV4dFZpZXciLCJzbGlkZXJFbGVtIiwic2xpZGVyVmlld18iLCJzbGlkZXJWaWV3IiwidGV4dEVsZW0iLCJ0ZXh0Vmlld18iLCJ0ZXh0VmlldyIsIlNsaWRlclRleHRDb250cm9sbGVyIiwic2xpZGVyQ18iLCJ0ZXh0Q18iLCJ0ZXh0UHJvcHMiLCJzbGlkZXJDb250cm9sbGVyIiwidGV4dENvbnRyb2xsZXIiLCJ3cml0ZVByaW1pdGl2ZSIsIndyaXRlIiwicGFyc2VMaXN0T3B0aW9ucyIsInBhcnNlUGlja2VyTGF5b3V0IiwicGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyIsIm5vcm1hbGl6ZUxpc3RPcHRpb25zIiwiY3JlYXRlTGlzdENvbnN0cmFpbnQiLCJnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMiLCJnZXRCYXNlU3RlcCIsImZpbmRTdGVwIiwiZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlIiwibG9nMTAiLCJjbGFzc05hbWUkZCIsIkNoZWNrYm94VmlldyIsIndyYXBwZXJFbGVtIiwiY2hlY2tlZCIsIkNoZWNrYm94Q29udHJvbGxlciIsIkJvb2xlYW5JbnB1dFBsdWdpbiIsImFjY2VwdCIsInJlYWRlciIsIl9hcmdzIiwibGMiLCJjcmVhdGVDb25zdHJhaW50JDYiLCJ3cml0ZXIiLCJjbGFzc05hbWUkYyIsIkNvbG9yVmlldyIsInN3YXRjaEVsZW0iLCJzd2F0Y2hFbGVtZW50IiwidGV4dEVsZW1lbnQiLCJwaWNrZXJMYXlvdXQiLCJwaWNrZXJFbGVtIiwicGlja2VyRWxlbWVudCIsImhzdlRvUmdiSW50IiwiaHAiLCJzcCIsInZwIiwicnAiLCJncCIsImJwIiwicmVtb3ZlQWxwaGFDb21wb25lbnQiLCJjb21wcyIsImFwcGVuZEFscGhhQ29tcG9uZW50IiwiTU9ERV9DT05WRVJURVJfTUFQIiwic2QiLCJscCIsImNtYXgiLCJjbWluIiwiZ2V0Q29sb3JNYXhDb21wb25lbnRzIiwibW9kZSIsImNvbnZlcnRDb2xvclR5cGUiLCJmbXMiLCJ0bXMiLCJpc1JnYkNvbG9yQ29tcG9uZW50IiwiQ29sb3IiLCJjb21wc18iLCJjb21wb25lbnRzIiwibXMiLCJjb25zdHJhaW5Db2xvckNvbXBvbmVudHMiLCJ0b1JnYmFPYmplY3QiLCJpc1JnYkNvbG9yT2JqZWN0IiwiY29tcHMxIiwiY29tcHMyIiwib3B0X21vZGUiLCJpbnRDb21wcyIsImNvbnZlcnRDb2xvciIsInJnYkNvbXBzIiwiZ2V0Q29tcG9uZW50cyIsImNsYXNzTmFtZSRiIiwiQ29sb3JQaWNrZXJWaWV3IiwiYWxwaGFWaWV3c18iLCJoc3ZFbGVtIiwic3ZFbGVtIiwic3ZQYWxldHRlVmlld18iLCJzdlBhbGV0dGVWaWV3IiwiaEVsZW0iLCJoUGFsZXR0ZVZpZXdfIiwiaFBhbGV0dGVWaWV3IiwicmdiRWxlbSIsImFscGhhVmlld3MiLCJwYWxldHRlIiwiYUVsZW0iLCJhcEVsZW0iLCJhdEVsZW0iLCJhbGxGb2N1c2FibGVFbGVtZW50cyIsImVsZW1zIiwibW9kZVNlbGVjdEVsZW1lbnQiLCJ0ZXh0Vmlld3MiLCJwYXJzZUNvbG9yVHlwZSIsInBhcnNlQ29sb3JJbnB1dFBhcmFtcyIsInBpY2tlciIsImdldEJhc2VTdGVwRm9yQ29sb3IiLCJmb3JBbHBoYSIsImV4dHJhY3RDb2xvclR5cGUiLCJwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZSIsIkFOR0xFX1RPX0RFR19NQVAiLCJkZWciLCJncmFkIiwidHVybiIsInBhcnNlQ3NzTnVtYmVyT3JBbmdsZSIsInBhcnNlRnVuY3Rpb25hbFJnYkNvbG9yQ29tcG9uZW50cyIsImNyZWF0ZUZ1bmN0aW9uYWxSZ2JDb2xvclBhcnNlciIsInBhcnNlRnVuY3Rpb25hbFJnYmFDb2xvckNvbXBvbmVudHMiLCJjcmVhdGVGdW5jdGlvbmFsUmdiYUNvbG9yUGFyc2VyIiwicGFyc2VIc2xDb2xvckNvbXBvbmVudHMiLCJjcmVhdGVIc2xDb2xvclBhcnNlciIsInBhcnNlSHNsYUNvbG9yQ29tcG9uZW50cyIsImNyZWF0ZUhzbGFDb2xvclBhcnNlciIsInBhcnNlSGV4UmdiQ29sb3JDb21wb25lbnRzIiwibVJnYiIsIm1ScmdnYmIiLCJwYXJzZUhleFJnYmFDb2xvckNvbXBvbmVudHMiLCJwYXJzZU9iamVjdFJnYkNvbG9yQ29tcG9uZW50cyIsImNyZWF0ZU9iamVjdFJnYkNvbG9yUGFyc2VyIiwicGFyc2VPYmplY3RSZ2JhQ29sb3JDb21wb25lbnRzIiwiY3JlYXRlT2JqZWN0UmdiYUNvbG9yUGFyc2VyIiwiUEFSU0VSX0FORF9SRVNVTFQiLCJub3RhdGlvbiIsImRldGVjdFN0cmluZ0NvbG9yRm9ybWF0IiwiZGV0ZWN0aW9uIiwiZGV0ZWN0U3RyaW5nQ29sb3IiLCJUWVBFX1RPX1BBUlNFUlMiLCJpbnQiLCJjcmVhdGVDb2xvclN0cmluZ1BhcnNlciIsInplcm9maWxsIiwiY29tcCIsImNvbG9yVG9IZXhSZ2JTdHJpbmciLCJjb2xvclRvSGV4UmdiYVN0cmluZyIsInJnYmFDb21wcyIsImNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nIiwib3B0X3R5cGUiLCJjcmVhdGVGdW5jdGlvbmFsUmdiQ29sb3JGb3JtYXR0ZXIiLCJjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmciLCJhRm9ybWF0dGVyIiwicmdiRm9ybWF0dGVyIiwiY3JlYXRlRnVuY3Rpb25hbFJnYmFDb2xvckZvcm1hdHRlciIsImNvbG9yVG9PYmplY3RSZ2JTdHJpbmciLCJjcmVhdGVPYmplY3RSZ2JDb2xvckZvcm1hdHRlciIsImNvbG9yVG9PYmplY3RSZ2JhU3RyaW5nIiwiY3JlYXRlT2JqZWN0UmdiYUNvbG9yRm9ybWF0dGVyIiwiRk9STUFUX0FORF9TVFJJTkdJRklFUlMiLCJzdHJpbmdpZmllciIsImZvcm1hdHRlcnMiLCJmaW5kQ29sb3JTdHJpbmdpZmllciIsImZhcyIsImVxdWFsc1N0cmluZ0NvbG9yRm9ybWF0IiwiY2xhc3NOYW1lJGEiLCJBUGFsZXR0ZVZpZXciLCJiYXJFbGVtIiwiY29sb3JFbGVtIiwiY29sb3JFbGVtXyIsIm1hcmtlckVsZW0iLCJtYXJrZXJFbGVtXyIsInByZXZpZXdFbGVtIiwicHJldmlld0VsZW1fIiwibGVmdENvbG9yIiwicmlnaHRDb2xvciIsImdyYWRpZW50Q29tcHMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJBUGFsZXR0ZUNvbnRyb2xsZXIiLCJjbGFzc05hbWUkOSIsIkNvbG9yVGV4dFZpZXciLCJtb2RlRWxlbSIsIm1vZGVFbGVtXyIsImNyZWF0ZU1vZGVTZWxlY3RFbGVtZW50IiwibW9kZU1hcmtlckVsZW0iLCJ0ZXh0c0VsZW0iLCJ0ZXh0c0VsZW1fIiwidGV4dFZpZXdzXyIsImFwcGx5VGV4dFZpZXdzXyIsImNvbG9yTW9kZSIsImNvbXBFbGVtIiwiY3JlYXRlQ29uc3RyYWludCQ1IiwiY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlciIsImRyYWdnaW5nU2NhbGUiLCJDb2xvclRleHRDb250cm9sbGVyIiwib25Nb2RlU2VsZWN0Q2hhbmdlXyIsImNvbG9yVHlwZV8iLCJjY3NfIiwiY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfIiwiY2MiLCJjY3MiLCJjcyIsInBpY2tlZE1vZGUiLCJjbGFzc05hbWUkOCIsIkhQYWxldHRlVmlldyIsIkhQYWxldHRlQ29udHJvbGxlciIsImNsYXNzTmFtZSQ3IiwiQ0FOVkFTX1JFU09MIiwiU3ZQYWxldHRlVmlldyIsImNhbnZhc0VsZW0iLCJjYW52YXNFbGVtZW50Iiwid2lsbFJlYWRGcmVxdWVudGx5IiwiZ2V0Q2FudmFzQ29udGV4dCIsImhzdkNvbXBzIiwiZ2V0SW1hZ2VEYXRhIiwiaXkiLCJpeCIsInB1dEltYWdlRGF0YSIsIlN2UGFsZXR0ZUNvbnRyb2xsZXIiLCJzYXR1cmF0aW9uIiwiZHYiLCJDb2xvclBpY2tlckNvbnRyb2xsZXIiLCJoUGFsZXR0ZUNfIiwic3ZQYWxldHRlQ18iLCJhbHBoYUljc18iLCJzdXBwb3J0c0FscGhhIiwiY2xhc3NOYW1lJDYiLCJDb2xvclN3YXRjaFZpZXciLCJzd2F0Y2hFbGVtXyIsIkNvbG9yU3dhdGNoQ29udHJvbGxlciIsIkNvbG9yQ29udHJvbGxlciIsIm9uQnV0dG9uQmx1cl8iLCJvbkJ1dHRvbkNsaWNrXyIsIm9uUG9wdXBDaGlsZEJsdXJfIiwib25Qb3B1cENoaWxkS2V5ZG93bl8iLCJzd2F0Y2hDXyIsInBvcENfIiwicGlja2VyQyIsInBpY2tlckNfIiwibmV4dFRhcmdldCIsImNvbnRhaW5zIiwiY29sb3JUb1JnYk51bWJlciIsImNvbG9yVG9SZ2JhTnVtYmVyIiwiY29sb3JGcm9tUmdiTnVtYmVyIiwiY29sb3JGcm9tUmdiYU51bWJlciIsInNob3VsZFN1cHBvcnRBbHBoYSQxIiwiaW5wdXRQYXJhbXMiLCJjcmVhdGVGb3JtYXR0ZXIkMSIsIk51bWJlckNvbG9ySW5wdXRQbHVnaW4iLCJpc0ZvckNvbG9yIiwiY29sb3JUb051bWJlciIsImNyZWF0ZUNvbG9yTnVtYmVyV3JpdGVyIiwiY3JlYXRlQ29sb3JPYmplY3RSZWFkZXIiLCJpc0NvbG9yT2JqZWN0IiwiY29sb3JGcm9tT2JqZWN0IiwiY3JlYXRlQ29sb3JPYmplY3RGb3JtYXR0ZXIiLCJPYmplY3RDb2xvcklucHV0UGx1Z2luIiwiaW5WYWx1ZSIsIndyaXRlUHJvcGVydHkiLCJ3cml0ZVJnYmFDb2xvck9iamVjdCIsIndyaXRlUmdiQ29sb3JPYmplY3QiLCJjcmVhdGVDb2xvck9iamVjdFdyaXRlciIsImlzUmdiYUNvbG9yT2JqZWN0Iiwic2hvdWxkU3VwcG9ydEFscGhhIiwiU3RyaW5nQ29sb3JJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbG9yU3RyaW5nQmluZGluZ1JlYWRlciIsImNyZWF0ZUNvbG9yU3RyaW5nV3JpdGVyIiwiUG9pbnROZENvbnN0cmFpbnQiLCJhc21fIiwiYXNzZW1ibHkiLCJ0b0NvbXBvbmVudHMiLCJmcm9tQ29tcG9uZW50cyIsImNsYXNzTmFtZSQ1IiwiUG9pbnROZFRleHRWaWV3IiwiYXhpc0VsZW0iLCJQb2ludE5kVGV4dENvbnRyb2xsZXIiLCJhY3NfIiwiYXhlcyIsImNyZWF0ZUF4aXNDb250cm9sbGVyIiwiYWMiLCJjcmVhdGVTdGVwQ29uc3RyYWludCIsImNyZWF0ZVJhbmdlQ29uc3RyYWludCIsIk51bWJlcklucHV0UGx1Z2luIiwiY3JlYXRlQ29uc3RyYWludCQ0IiwiZHJjIiwiUG9pbnQyZCIsIlBvaW50MmRBc3NlbWJseSIsImNsYXNzTmFtZSQ0IiwiUG9pbnQyZFZpZXciLCJjbGFzc05hbWUkMyIsIlBvaW50MmRQaWNrZXJWaWV3Iiwib25Gb2xkYWJsZUNoYW5nZV8iLCJpbnZlcnRzWV8iLCJpbnZlcnRzWSIsIm1heFZhbHVlXyIsImxheW91dCIsInBhZEVsZW0iLCJwYWRFbGVtZW50Iiwic3ZnRWxlbSIsInN2Z0VsZW1fIiwieEF4aXNFbGVtIiwieUF4aXNFbGVtIiwibGluZUVsZW0iLCJsaW5lRWxlbV8iLCJpcHkiLCJjb21wdXRlT2Zmc2V0IiwiYmFzZVN0ZXBzIiwiUG9pbnQyZFBpY2tlckNvbnRyb2xsZXIiLCJvblBhZEtleURvd25fIiwib25QYWRLZXlVcF8iLCJiYXNlU3RlcHNfIiwiUG9pbnQyZENvbnRyb2xsZXIiLCJvblBhZEJ1dHRvbkJsdXJfIiwib25QYWRCdXR0b25DbGlja18iLCJwYWRDIiwiUG9pbnQzZCIsIlBvaW50M2RBc3NlbWJseSIsImNyZWF0ZUF4aXMkMiIsIlBvaW50M2RJbnB1dFBsdWdpbiIsImNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQiLCJjcmVhdGVDb25zdHJhaW50JDMiLCJQb2ludDRkIiwiUG9pbnQ0ZEFzc2VtYmx5IiwiUG9pbnQ0ZElucHV0UGx1Z2luIiwiY3JlYXRlQ29uc3RyYWludCQyIiwiY3JlYXRlQXhpcyQxIiwiU3RyaW5nSW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50JDEiLCJDb25zdGFudHMiLCJtb25pdG9yIiwiZGVmYXVsdEludGVydmFsIiwiZGVmYXVsdExpbmVDb3VudCIsImNsYXNzTmFtZSQyIiwiTXVsdGlMb2dWaWV3Iiwib25WYWx1ZVVwZGF0ZV8iLCJmb3JtYXR0ZXJfIiwidGV4dGFyZWFFbGVtIiwibGluZUNvdW50IiwicmVhZE9ubHkiLCJ0ZXh0YXJlYUVsZW1fIiwic2hvdWxkU2Nyb2xsIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiTXVsdGlMb2dDb250cm9sbGVyIiwiY2xhc3NOYW1lJDEiLCJTaW5nbGVMb2dWaWV3IiwibGFzdFZhbHVlIiwiU2luZ2xlTG9nQ29udHJvbGxlciIsIkJvb2xlYW5Nb25pdG9yUGx1Z2luIiwiR3JhcGhMb2dWaWV3Iiwib25DdXJzb3JDaGFuZ2VfIiwiY3Vyc29yXyIsImdyYXBoRWxlbWVudCIsIm1heEluZGV4IiwidHgiLCJ0eSIsIkdyYXBoTG9nQ29udHJvbGxlciIsIm9uR3JhcGhNb3VzZU1vdmVfIiwib25HcmFwaE1vdXNlTGVhdmVfIiwib25HcmFwaFBvaW50ZXJEb3duXyIsIm9uR3JhcGhQb2ludGVyTW92ZV8iLCJvbkdyYXBoUG9pbnRlclVwXyIsIm9mZnNldFgiLCJjcmVhdGVGb3JtYXR0ZXIiLCJzaG91bGRTaG93R3JhcGgiLCJOdW1iZXJNb25pdG9yUGx1Z2luIiwiZGVmYXVsdEJ1ZmZlclNpemUiLCJjcmVhdGVHcmFwaE1vbml0b3IiLCJjcmVhdGVUZXh0TW9uaXRvciIsIlN0cmluZ01vbml0b3JQbHVnaW4iLCJJbnB1dEJpbmRpbmciLCJ0YXJnZXRWYWx1ZSIsIndyaXRlXyIsIk1vbml0b3JCaW5kaW5nIiwicmVhZGVyXyIsIm5ld1ZhbHVlIiwibmV3QnVmZmVyIiwiY3JlYXRlUHVzaGVkQnVmZmVyIiwiY3JlYXRlVGlja2VyIiwiUGx1Z2luUG9vbCIsInBsdWdpbnNNYXBfIiwiYmxhZGVzIiwibW9uaXRvcnMiLCJwbHVnaW4iLCJ2YWx1ZUFyZ3MiLCJjcmVhdGVJbnB1dEJpbmRpbmdDb250cm9sbGVyIiwiUCIsImNyZWF0ZU1vbml0b3JCaW5kaW5nQ29udHJvbGxlciIsImNyZWF0ZUJsYWRlQ29udHJvbGxlciIsInJzIiwiZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZSIsImZpbmROdW1iZXJSYW5nZSIsImdldFN1aXRhYmxlTWF4VmFsdWUiLCJ5YyIsInhyIiwieXIiLCJjcmVhdGVBeGlzIiwic2hvdWxkSW52ZXJ0WSIsInlQYXJhbXMiLCJpbnZlcnRlZCIsIlBvaW50MmRJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQiLCJMaXN0QXBpIiwiU2xpZGVyQXBpIiwiVGV4dEFwaSIsIkxpc3RCbGFkZVBsdWdpbiIsImljIiwiUm9vdEFwaSIsInRhcmdldHMiLCJpbXBvcnRQcmVzZXRKc29uIiwiaWJjIiwiZXhwb3J0UHJlc2V0SnNvbiIsIm1iYyIsIlJvb3RDb250cm9sbGVyIiwiU2xpZGVyQmxhZGVQbHVnaW4iLCJ2YyIsIlRleHRCbGFkZVBsdWdpbiIsImVtYmVkU3R5bGUiLCJjc3MiLCJzdHlsZUVsZW0iLCJ0cFN0eWxlIiwiaGVhZCIsIlZFUlNJT04iLCJwcmVyZWxlYXNlIiwiY29yZUNvbXBzIiwibWFqb3IiLCJtaW5vciIsInBhdGNoIiwiUGFuZSIsIm9wdF9jb25maWciLCJyZWdpc3RlciIsImNyZWF0ZURlZmF1bHRQbHVnaW5Qb29sIiwiY29udGFpbmVyRWxlbV8iLCJjcmVhdGVEZWZhdWx0V3JhcHBlckVsZW1lbnQiLCJ1c2VzRGVmYXVsdFdyYXBwZXJfIiwic2V0VXBEZWZhdWx0UGx1Z2luc18iLCJwYXJlbnRFbGVtIiwiYnVuZGxlIiwiZW1iZWRQbHVnaW5TdHlsZV8iLCJnZXRBbGwiLCJyZWdpc3RlclBsdWdpbiIsIlR3ZWFrcGFuZSIsIl9jYW52YXNTa2V0Y2giLCJfY2FudmFzU2tldGNoVXRpbCIsIl90d2Vha3BhbmUiLCJQQVJBTVMiLCJndXR0ZXIiLCJhbW91bnQiLCJnZXREaW1lbnNpb25zIiwiZ2V0UG9zaXRpb24iLCJnZXRTaWJsaW5ncyIsInNpYmxpbmdzIiwiaXNGaXJzdExpbmUiLCJpc0xhc3RMaW5lIiwiaXNGaXJzdENvbCIsImlzTGFzdENvbCIsImdldE5laWdoYm9yTiIsImdldE5laWdoYm9yUyIsImdldE5laWdoYm9yRSIsImdldE5laWdoYm9yVyIsIm5lIiwiZ2V0TmVpZ2hib3JORSIsInNlIiwiZ2V0TmVpZ2hib3JTRSIsInN3IiwiZ2V0TmVpZ2hib3JTVyIsIm53IiwiZ2V0TmVpZ2hib3JOVyIsImlzQWN0aXZlIiwiY3JlYXRlR3JpZE9mUG9zaXRpb25zIiwiZmlsbCIsImluYyIsImlzU2VwYXJhdGUiLCJzaWJsaW5nIiwidXNlR3JpZCIsInBhbmUiLCJmMyIsInRyYW5zbGF0ZSIsInNpZGUiLCJoeXBvdCIsImI2NCIsImxlbnMiLCJnZXRMZW5zIiwicGxhY2VIb2xkZXJzTGVuIiwidG9CeXRlQXJyYXkiLCJ2YWxpZExlbiIsIkFyciIsIl9ieXRlTGVuZ3RoIiwiY3VyQnl0ZSIsInJldkxvb2t1cCIsImZyb21CeXRlQXJyYXkiLCJleHRyYUJ5dGVzIiwibGVuMiIsImVuY29kZUNodW5rIiwibG9va3VwIiwiaWVlZTc1NCIsIlNsb3dCdWZmZXIiLCJJTlNQRUNUX01BWF9CWVRFUyIsIktfTUFYX0xFTkdUSCIsIlJhbmdlRXJyb3IiLCJfX3Byb3RvX18iLCJlbmNvZGluZ09yT2Zmc2V0IiwiaXNFbmNvZGluZyIsImZyb21TdHJpbmciLCJpc1ZpZXciLCJmcm9tQXJyYXlMaWtlIiwiaXNJbnN0YW5jZSIsImJ5dGVPZmZzZXQiLCJmcm9tQXJyYXlCdWZmZXIiLCJ2YWx1ZU9mIiwibnVtYmVySXNOYU4iLCJ0b1ByaW1pdGl2ZSIsImFzc2VydFNpemUiLCJtdXN0TWF0Y2giLCJsb3dlcmVkQ2FzZSIsInV0ZjhUb0J5dGVzIiwiYmFzZTY0VG9CeXRlcyIsInN3YXAiLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsImRpciIsImFycmF5SW5kZXhPZiIsImxhc3RJbmRleE9mIiwiaW5kZXhTaXplIiwiYXJyTGVuZ3RoIiwidmFsTGVuZ3RoIiwicmVhZFVJbnQxNkJFIiwiZm91bmRJbmRleCIsImZvdW5kIiwiaGV4V3JpdGUiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJ1dGY4V3JpdGUiLCJibGl0QnVmZmVyIiwiYXNjaWlXcml0ZSIsImJ5dGVBcnJheSIsImFzY2lpVG9CeXRlcyIsImxhdGluMVdyaXRlIiwiYmFzZTY0V3JpdGUiLCJ1Y3MyV3JpdGUiLCJ1dGYxNmxlVG9CeXRlcyIsImJhc2U2NFNsaWNlIiwidXRmOFNsaWNlIiwic2Vjb25kQnl0ZSIsInRoaXJkQnl0ZSIsImZvdXJ0aEJ5dGUiLCJ0ZW1wQ29kZVBvaW50IiwiZmlyc3RCeXRlIiwiY29kZVBvaW50IiwiYnl0ZXNQZXJTZXF1ZW5jZSIsImNvZGVQb2ludHMiLCJNQVhfQVJHVU1FTlRTX0xFTkdUSCIsImRlY29kZUNvZGVQb2ludHNBcnJheSIsImtNYXhMZW5ndGgiLCJUWVBFRF9BUlJBWV9TVVBQT1JUIiwiZm9vIiwidHlwZWRBcnJheVN1cHBvcnQiLCJzcGVjaWVzIiwiY29uZmlndXJhYmxlIiwicG9vbFNpemUiLCJhbGxvY1Vuc2FmZVNsb3ciLCJfaXNCdWZmZXIiLCJjb21wYXJlIiwic3dhcDE2Iiwic3dhcDMyIiwic3dhcDY0IiwidG9Mb2NhbGVTdHJpbmciLCJoZXhTbGljZSIsImFzY2lpU2xpY2UiLCJsYXRpbjFTbGljZSIsInV0ZjE2bGVTbGljZSIsImluc3BlY3QiLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwidG9KU09OIiwidG9IZXgiLCJieXRlcyIsImNoZWNrT2Zmc2V0IiwiY2hlY2tJbnQiLCJjaGVja0lFRUU3NTQiLCJ3cml0ZUZsb2F0IiwibGl0dGxlRW5kaWFuIiwibm9Bc3NlcnQiLCJ3cml0ZURvdWJsZSIsIm5ld0J1ZiIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVUludEJFIiwicmVhZFVJbnQ4IiwicmVhZFVJbnQxNkxFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEludExFIiwicmVhZEludEJFIiwicmVhZEludDgiLCJyZWFkSW50MTZMRSIsInJlYWRJbnQxNkJFIiwicmVhZEludDMyTEUiLCJyZWFkSW50MzJCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVUludEJFIiwid3JpdGVVSW50OCIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVJbnQxNkJFIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUludExFIiwibGltaXQiLCJzdWIiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJ0YXJnZXRTdGFydCIsImNvcHlXaXRoaW4iLCJJTlZBTElEX0JBU0U2NF9SRSIsImxlYWRTdXJyb2dhdGUiLCJiYXNlNjRjbGVhbiIsImlzTEUiLCJtTGVuIiwibkJ5dGVzIiwiZUxlbiIsImVNYXgiLCJlQmlhcyIsIm5CaXRzIiwiTmFOIiwicnQiLCJMTjIiLCJDQU5WQVNfU0tFVENIX0RFRkFVTFRfU1RPUkFHRV9LRVkiXSwibWFwcGluZ3MiOiJDQUFBLFdBQUEsT0FBQSxTQUFBQSxFQUFBQyxFQUFBQyxFQUFBQyxHQUFBLFNBQUFDLEVBQUFDLEVBQUFDLEdBQUEsSUFBQUosRUFBQUcsR0FBQSxDQUFBLElBQUFKLEVBQUFJLEdBQUEsQ0FBQSxJQUFBRSxFQUFBLG1CQUFBQyxTQUFBQSxRQUFBLElBQUFGLEdBQUFDLEVBQUEsT0FBQUEsRUFBQUYsR0FB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QUNBQyxNQUFBLFVBQ0FDLGVBQUEsVUFDQUMsS0FBQSxVQUNBQyxXQUFBLFVBQ0FDLE1BQUEsVUFDQUMsVUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFdBQUEsVUFDQUMsVUFBQSxVQUNBQyxNQUFBLFVBQ0FDLGVBQUEsVUFDQUMsU0FBQSxVQUNBQyxRQUFBLFVBQ0FDLEtBQUEsVUFDQUMsU0FBQSxVQUNBQyxTQUFBLFVBQ0FDLGNBQUEsVUFDQUMsU0FBQSxVQUNBQyxVQUFBLFVBQ0FDLFNBQUEsVUFDQUMsVUFBQSxVQUNBQyxZQUFBLFVBQ0FDLGVBQUEsVUFDQUMsV0FBQSxVQUNBQyxXQUFBLFVBQ0FDLFFBQUEsVUFDQUMsV0FBQSxVQUNBQyxhQUFBLFVBQ0FDLGNBQUEsVUFDQUMsY0FBQSxVQUNBQyxjQUFBLFVBQ0FDLGNBQUEsVUFDQUMsV0FBQSxVQUNBQyxTQUFBLFVBQ0FDLFlBQUEsVUFDQUMsUUFBQSxVQUNBQyxRQUFBLFVBQ0FDLFdBQUEsVUFDQUMsVUFBQSxVQUNBQyxZQUFBLFVBQ0FDLFlBQUEsVUFDQUMsUUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFdBQUEsVUFDQUMsS0FBQSxVQUNBQyxVQUFBLFVBQ0FDLEtBQUEsVUFDQUMsTUFBQSxVQUNBQyxZQUFBLFVBQ0FDLEtBQUEsVUFDQUMsU0FBQSxVQUNBQyxRQUFBLFVBQ0FDLFVBQUEsVUFDQUMsT0FBQSxVQUNBQyxNQUFBLFVBQ0FDLE1BQUEsVUFDQUMsU0FBQSxVQUNBQyxjQUFBLFVBQ0FDLFVBQUEsVUFDQUMsYUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFdBQUEsVUFDQUMsVUFBQSxVQUNBQyxxQkFBQSxVQUNBQyxVQUFBLFVBQ0FDLFdBQUEsVUFDQUMsVUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFlBQUEsVUFDQUMsY0FBQSxVQUNBQyxhQUFBLFVBQ0FDLGVBQUEsVUFDQUMsZUFBQSxVQUNBQyxlQUFBLFVBQ0FDLFlBQUEsVUFDQUMsS0FBQSxVQUNBQyxVQUFBLFVBQ0FDLE1BQUEsVUFDQUMsUUFBQSxVQUNBQyxPQUFBLFVBQ0FDLGlCQUFBLFVBQ0FDLFdB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LEtBQ0FDLFVBQUEsQ0FBQSxHQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxHQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLE1BQUEsQ0FBQSxJQUFBLElBQUEsSUFDQUMsZUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLEdBQUEsSUFDQUMsS0FBQSxDQUFBLEVBQUEsSUFBQSxLQUNBQyxTQUFBLENBQUEsRUFBQSxFQUFBLEtBQ0FDLFNBQUEsQ0FBQSxFQUFBLElBQUEsS0FDQUMsY0FBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxFQUFBLElBQUEsR0FDQUMsU0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFlBQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsZUFBQSxDQUFBLEdBQUEsSUFBQSxJQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLFdBQUEsQ0FBQSxJQUFBLEdBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsRUFBQSxHQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsY0FBQSxDQUFBLEdBQUEsR0FBQSxLQUNBQyxjQUFBLENBQUEsR0FBQSxHQUFBLElBQ0FDLGNBQUEsQ0FBQSxHQUFBLEdBQUEsSUFDQUMsY0FBQSxDQUFBLEVBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxFQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLEdBQUEsS0FDQUMsWUFBQSxDQUFBLEVBQUEsSUFBQSxLQUNBQyxRQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLEdBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLFlBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLEdBQUEsSUFBQSxJQUNBQyxRQUFBLENBQUEsSUFBQSxFQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsSUFDQUMsS0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxNQUFBLENBQUEsRUFBQSxJQUFBLEdBQ0FDLFlBQUEsQ0FBQSxJQUFBLElBQUEsSUFDQUMsS0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsR0FBQSxJQUNBQyxPQUFBLENBQUEsR0FBQSxFQUFBLEtBQ0FDLE1BQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxHQUNBQyxhQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLHFCQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLGFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsZUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxlQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsRUFBQSxJQUFBLEdBQ0FDLFVBQUEsQ0FBQSxHQUFBLElBQUEsSUFDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxRQUFBLENBQUEsSUFBQSxFQUFBLEtBQ0FDLE9BQUEsQ0FBQSxJQUFBLEVBQUEsR0FDQUMsaUJBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLEVBQUEsRUFBQSxLQUNBQyxhQUFBLENBQUEsSUFBQSxHQUFBLEtBQ0FDLGFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsZUFBQSxDQUFBLEdBQUEsSUFBQSxLQUNBQyxnQkFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxrQkFBQSxDQUFBLEVBQUEsSUFBQSxLQUNBQyxnQkFBQSxDQUFBLEdBQUEsSUFBQSxLQUNBQyxnQkFBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxhQUFBLENBQUEsR0FBQSxHQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFlBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsS0FBQSxDQUFBLEVBQUEsRUFBQSxLQUNBQyxRQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLE1BQUEsQ0FBQSxJQUFBLElBQUEsR0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxPQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLFVBQUEsQ0FBQSxJQUFBLEdBQUEsR0FDQUMsT0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsY0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFdBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLEtBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsS0FBQSxDQUFB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LEdBQUEsTUFDQUMsR0FBQSxNQUVBQyxHQUFBLEtBQ0FDLEdBQUEsS0FDQUMsR0FBQSxLQUNBQyxHQUFBLEtBQ0FDLEdBQUEsS0FFQUMsR0FBQSxNQUNBQyxHQUFBLE1BQ0FDLEdBQUEsTUFFQUMsR0FBQSxNQUNBQyxHQUFBLE1BQ0FDLEdBQUEsTUFDQUMsR0FBQSxNQUVBQyxHQUFBLEtBQ0FDLEdBQUEsTUFFQUMsR0FBQSxNQUNBQyxHQUFBLE1BRUFDLEdBQUEsTUFFQUMsR0FBQSxNQUNBQyxHQUFBLE1BQ0FDLEdBQUEsTUFDQUMsR0FBQSxNQUVBQyxHQUFBLE1BQ0FDLEdBQUEsTUFDQUMsR0FBQSxNQUVBQyxHQUFBLE1BQ0FDLEdBQUEsTUFDQUMsR0FBQSxNQUNBQyxHQUFBLE1BRUFDLEdBQUEsTUFFQUMsR0FBQSxLQUNBQyxHQUFBLEtBQ0FDLEdBQUEsS0FDQUMsR0FBQSxLQUVBQyxHQUFBLE1BQ0FDLEdBQUEsTUFFQUMsR0FBQSxNQUNBQyxHQUFBLE1BQ0FDLEdBQUEsTUFFQUMsR0FBQSxNQUNBQyxHQUFBLE1BRUFDLEdBQUEsS0FDQUMsR0FBQSxLQUNBQyxHQUFBLEtBQ0FDLEdBQUEsS0FDQUMsR0FBQSxLQUNBQyxHQUFBLEtBRUFDLEdBQUEsTUFDQUMsR0FBQSxLQUNBQyxHQUFBLEtBQ0FDLEdBQUEsS0FFQUMsR0FBQSxNQUVBQyxHQUFBLEtBQ0FDLEdBQUEsTUFDQUMsR0FBQSxNQUNBQyxHQUFBLE1BRUFDLEdBQUEsTUFFQUMsR0FBQSxNQUVBQyxHQUFBLENBQ0FmLEdBQ0FFLEdBQ0FELEdBQ0FFLElBR0FhLEdBQUEsQ0FDQSxFQUNBdkQsR0FDQUMsR0FDQUYsR0FDQUYsSUFHQTJELEdBQUEsR0FXQSxTQUFBQyxHQUFBN21ELEdBQ0EsTUFBQSxXQUFBQSxFQUFBLElBWEE0bUQsR0FBQXhELElBQ0F3RCxHQUFBMUQsSUFDQTBELEdBQUEvQyxJQUFBLEVBQ0ErQyxHQUFBOUMsSUFDQThDLEdBQUF2RCxJQUFBLEVBQ0F1RCxHQUFBekQsSUFDQXlELEdBQUE3QyxJQUFBLEVBQ0E2QyxHQUFBM0Qs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YUFBQSxDQUFBLEVBQUEsRUFBQSxHQUNBLEVBQUEsRUFBQSxFQUNBLEdBQUEsRUFBQSxHQUVBLEdBQUEsRUFBQSxFQUNBLEVBQUEsRUFBQSxHQUNBLEVBQUEsRUFBQSxFQUVBLEVBQUEsR0FBQSxHQUNBLEVBQUEsR0FBQSxFQUNBLEVBQUEsRUFBQSxFQUVBLEdBQUEsRUFBQSxFQUNBLEVBQUEsR0FBQSxFQUNBLEdBQUEsR0FBQSxJQUNBeTNDLE1BQUEsSUFBQXozQyxhQUFBLENBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEdBQUEsRUFDQSxHQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLEdBQUEsR0FBQSxFQUNBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEdBQ0EsRUFBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEdBQUEsRUFDQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxHQUNBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLEdBQUEsRUFBQSxHQUFBLEVBQ0EsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEVBQUEsR0FDQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEdBQUEsRUFBQSxJQUNBN3VCLFFBQUEsU0FBQXVtRSxFQUFBQyxHQUNBLElBaUJBQyxFQUFBQyxFQWpC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Zil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiXG5tb2R1bGUuZXhwb3J0cyA9IGFic29sdXRpemVcblxuLyoqXG4gKiByZWRlZmluZSBgcGF0aGAgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGhcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIGFic29sdXRpemUocGF0aCl7XG5cdHZhciBzdGFydFggPSAwXG5cdHZhciBzdGFydFkgPSAwXG5cdHZhciB4ID0gMFxuXHR2YXIgeSA9IDBcblxuXHRyZXR1cm4gcGF0aC5tYXAoZnVuY3Rpb24oc2VnKXtcblx0XHRzZWcgPSBzZWcuc2xpY2UoKVxuXHRcdHZhciB0eXBlID0gc2VnWzBdXG5cdFx0dmFyIGNvbW1hbmQgPSB0eXBlLnRvVXBwZXJDYXNlKClcblxuXHRcdC8vIGlzIHJlbGF0aXZlXG5cdFx0aWYgKHR5cGUgIT0gY29tbWFuZCkge1xuXHRcdFx0c2VnWzBdID0gY29tbWFuZFxuXHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ2EnOlxuXHRcdFx0XHRcdHNlZ1s2XSArPSB4XG5cdFx0XHRcdFx0c2VnWzddICs9IHlcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRjYXNlICd2Jzpcblx0XHRcdFx0XHRzZWdbMV0gKz0geVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdGNhc2UgJ2gnOlxuXHRcdFx0XHRcdHNlZ1sxXSArPSB4XG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8IHNlZy5sZW5ndGg7KSB7XG5cdFx0XHRcdFx0XHRzZWdbaSsrXSArPSB4XG5cdFx0XHRcdFx0XHRzZWdbaSsrXSArPSB5XG5cdFx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHVwZGF0ZSBjdXJzb3Igc3RhdGVcblx0XHRzd2l0Y2ggKGNvbW1hbmQpIHtcblx0XHRcdGNhc2UgJ1onOlxuXHRcdFx0XHR4ID0gc3RhcnRYXG5cdFx0XHRcdHkgPSBzdGFydFlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ0gnOlxuXHRcdFx0XHR4ID0gc2VnWzFdXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdWJzpcblx0XHRcdFx0eSA9IHNlZ1sxXVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnTSc6XG5cdFx0XHRcdHggPSBzdGFydFggPSBzZWdbMV1cblx0XHRcdFx0eSA9IHN0YXJ0WSA9IHNlZ1syXVxuXHRcdFx0XHRicmVha1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0eCA9IHNlZ1tzZWcubGVuZ3RoIC0gMl1cblx0XHRcdFx0eSA9IHNlZ1tzZWcubGVuZ3RoIC0gMV1cblx0XHR9XG5cblx0XHRyZXR1cm4gc2VnXG5cdH0pXG59XG4iLCJmdW5jdGlvbiBjbG9uZShwb2ludCkgeyAvL1RPRE86IHVzZSBnbC12ZWMyIGZvciB0aGlzXG4gICAgcmV0dXJuIFtwb2ludFswXSwgcG9pbnRbMV1dXG59XG5cbmZ1bmN0aW9uIHZlYzIoeCwgeSkge1xuICAgIHJldHVybiBbeCwgeV1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVCZXppZXJCdWlsZGVyKG9wdCkge1xuICAgIG9wdCA9IG9wdHx8e31cblxuICAgIHZhciBSRUNVUlNJT05fTElNSVQgPSB0eXBlb2Ygb3B0LnJlY3Vyc2lvbiA9PT0gJ251bWJlcicgPyBvcHQucmVjdXJzaW9uIDogOFxuICAgIHZhciBGTFRfRVBTSUxPTiA9IHR5cGVvZiBvcHQuZXBzaWxvbiA9PT0gJ251bWJlcicgPyBvcHQuZXBzaWxvbiA6IDEuMTkyMDkyOTBlLTdcbiAgICB2YXIgUEFUSF9ESVNUQU5DRV9FUFNJTE9OID0gdHlwZW9mIG9wdC5wYXRoRXBzaWxvbiA9PT0gJ251bWJlcicgPyBvcHQucGF0aEVwc2lsb24gOiAxLjBcblxuICAgIHZhciBjdXJ2ZV9hbmdsZV90b2xlcmFuY2VfZXBzaWxvbiA9IHR5cGVvZiBvcHQuYW5nbGVFcHNpbG9uID09PSAnbnVtYmVyJyA/IG9wdC5hbmdsZUVwc2lsb24gOiAwLjAxXG4gICAgdmFyIG1fYW5nbGVfdG9sZXJhbmNlID0gb3B0LmFuZ2xlVG9sZXJhbmNlIHx8IDBcbiAgICB2YXIgbV9jdXNwX2xpbWl0ID0gb3B0LmN1c3BMaW1pdCB8fCAwXG5cbiAgICByZXR1cm4gZnVuY3Rpb24gYmV6aWVyQ3VydmUoc3RhcnQsIGMxLCBjMiwgZW5kLCBzY2FsZSwgcG9pbnRzKSB7XG4gICAgICAgIGlmICghcG9pbnRzKVxuICAgICAgICAgICAgcG9pbnRzID0gW11cblxuICAgICAgICBzY2FsZSA9IHR5cGVvZiBzY2FsZSA9PT0gJ251bWJlcicgPyBzY2FsZSA6IDEuMFxuICAgICAgICB2YXIgZGlzdGFuY2VUb2xlcmFuY2UgPSBQQVRIX0RJU1RBTkNFX0VQU0lMT04gLyBzY2FsZVxuICAgICAgICBkaXN0YW5jZVRvbGVyYW5jZSAqPSBkaXN0YW5jZVRvbGVyYW5jZVxuICAgICAgICBiZWdpbihzdGFydCwgYzEsIGMyLCBlbmQsIHBvaW50cywgZGlzdGFuY2VUb2xlcmFuY2UpXG4gICAgICAgIHJldHVybiBwb2ludHNcbiAgICB9XG5cblxuICAgIC8vLy8vLyBCYXNlZCBvbjpcbiAgICAvLy8vLy8gaHR0cHM6Ly9naXRodWIuY29tL3BlbHNvbi9hbnRpZ3JhaW4vYmxvYi9tYXN0ZXIvYWdnLTIuNC9zcmMvYWdnX2N1cnZlcy5jcHBcblxuICAgIGZ1bmN0aW9uIGJlZ2luKHN0YXJ0LCBjMSwgYzIsIGVuZCwgcG9pbnRzLCBkaXN0YW5jZVRvbGVyYW5jZSkge1xuICAgICAgICBwb2ludHMucHVzaChjbG9uZShzdGFydCkpXG4gICAgICAgIHZhciB4MSA9IHN0YXJ0WzBdLFxuICAgICAgICAgICAgeTEgPSBzdGFydFsxXSxcbiAgICAgICAgICAgIHgyID0gYzFbMF0sXG4gICAgICAgICAgICB5MiA9IGMxWzFdLFxuICAgICAgICAgICAgeDMgPSBjMlswXSxcbiAgICAgICAgICAgIHkzID0gYzJbMV0sXG4gICAgICAgICAgICB4NCA9IGVuZFswXSxcbiAgICAgICAgICAgIHk0ID0gZW5kWzFdXG4gICAgICAgIHJlY3Vyc2l2ZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQsIHBvaW50cywgZGlzdGFuY2VUb2xlcmFuY2UsIDApXG4gICAgICAgIHBvaW50cy5wdXNoKGNsb25lKGVuZCkpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCwgcG9pbnRzLCBkaXN0YW5jZVRvbGVyYW5jZSwgbGV2ZWwpIHtcbiAgICAgICAgaWYobGV2ZWwgPiBSRUNVUlNJT05fTElNSVQpIFxuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgdmFyIHBpID0gTWF0aC5QSVxuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBhbGwgdGhlIG1pZC1wb2ludHMgb2YgdGhlIGxpbmUgc2VnbWVudHNcbiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIHZhciB4MTIgICA9ICh4MSArIHgyKSAvIDJcbiAgICAgICAgdmFyIHkxMiAgID0gKHkxICsgeTIpIC8gMlxuICAgICAgICB2YXIgeDIzICAgPSAoeDIgKyB4MykgLyAyXG4gICAgICAgIHZhciB5MjMgICA9ICh5MiArIHkzKSAvIDJcbiAgICAgICAgdmFyIHgzNCAgID0gKHgzICsgeDQpIC8gMlxuICAgICAgICB2YXIgeTM0ICAgPSAoeTMgKyB5NCkgLyAyXG4gICAgICAgIHZhciB4MTIzICA9ICh4MTIgKyB4MjMpIC8gMlxuICAgICAgICB2YXIgeTEyMyAgPSAoeTEyICsgeTIzKSAvIDJcbiAgICAgICAgdmFyIHgyMzQgID0gKHgyMyArIHgzNCkgLyAyXG4gICAgICAgIHZhciB5MjM0ICA9ICh5MjMgKyB5MzQpIC8gMlxuICAgICAgICB2YXIgeDEyMzQgPSAoeDEyMyArIHgyMzQpIC8gMlxuICAgICAgICB2YXIgeTEyMzQgPSAoeTEyMyArIHkyMzQpIC8gMlxuXG4gICAgICAgIGlmKGxldmVsID4gMCkgeyAvLyBFbmZvcmNlIHN1YmRpdmlzaW9uIGZpcnN0IHRpbWVcbiAgICAgICAgICAgIC8vIFRyeSB0byBhcHByb3hpbWF0ZSB0aGUgZnVsbCBjdWJpYyBjdXJ2ZSBieSBhIHNpbmdsZSBzdHJhaWdodCBsaW5lXG4gICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgdmFyIGR4ID0geDQteDFcbiAgICAgICAgICAgIHZhciBkeSA9IHk0LXkxXG5cbiAgICAgICAgICAgIHZhciBkMiA9IE1hdGguYWJzKCh4MiAtIHg0KSAqIGR5IC0gKHkyIC0geTQpICogZHgpXG4gICAgICAgICAgICB2YXIgZDMgPSBNYXRoLmFicygoeDMgLSB4NCkgKiBkeSAtICh5MyAtIHk0KSAqIGR4KVxuXG4gICAgICAgICAgICB2YXIgZGExLCBkYTJcblxuICAgICAgICAgICAgaWYoZDIgPiBGTFRfRVBTSUxPTiAmJiBkMyA+IEZMVF9FUFNJTE9OKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVndWxhciBjYXJlXG4gICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgIGlmKChkMiArIGQzKSooZDIgKyBkMykgPD0gZGlzdGFuY2VUb2xlcmFuY2UgKiAoZHgqZHggKyBkeSpkeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnZhdHVyZSBkb2Vzbid0IGV4Y2VlZCB0aGUgZGlzdGFuY2VUb2xlcmFuY2UgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgdGVuZCB0byBmaW5pc2ggc3ViZGl2aXNpb25zLlxuICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgaWYobV9hbmdsZV90b2xlcmFuY2UgPCBjdXJ2ZV9hbmdsZV90b2xlcmFuY2VfZXBzaWxvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MTIzNCwgeTEyMzQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBBbmdsZSAmIEN1c3AgQ29uZGl0aW9uXG4gICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgICAgICB2YXIgYTIzID0gTWF0aC5hdGFuMih5MyAtIHkyLCB4MyAtIHgyKVxuICAgICAgICAgICAgICAgICAgICBkYTEgPSBNYXRoLmFicyhhMjMgLSBNYXRoLmF0YW4yKHkyIC0geTEsIHgyIC0geDEpKVxuICAgICAgICAgICAgICAgICAgICBkYTIgPSBNYXRoLmFicyhNYXRoLmF0YW4yKHk0IC0geTMsIHg0IC0geDMpIC0gYTIzKVxuICAgICAgICAgICAgICAgICAgICBpZihkYTEgPj0gcGkpIGRhMSA9IDIqcGkgLSBkYTFcbiAgICAgICAgICAgICAgICAgICAgaWYoZGEyID49IHBpKSBkYTIgPSAyKnBpIC0gZGEyXG5cbiAgICAgICAgICAgICAgICAgICAgaWYoZGExICsgZGEyIDwgbV9hbmdsZV90b2xlcmFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmFsbHkgd2UgY2FuIHN0b3AgdGhlIHJlY3Vyc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgxMjM0LCB5MTIzNCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmKG1fY3VzcF9saW1pdCAhPT0gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYTEgPiBtX2N1c3BfbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgyLCB5MikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMiA+IG1fY3VzcF9saW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDMsIHkzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKGQyID4gRkxUX0VQU0lMT04pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcDEscDMscDQgYXJlIGNvbGxpbmVhciwgcDIgaXMgY29uc2lkZXJhYmxlXG4gICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgICAgICBpZihkMiAqIGQyIDw9IGRpc3RhbmNlVG9sZXJhbmNlICogKGR4KmR4ICsgZHkqZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihtX2FuZ2xlX3RvbGVyYW5jZSA8IGN1cnZlX2FuZ2xlX3RvbGVyYW5jZV9lcHNpbG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MTIzNCwgeTEyMzQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmdsZSBDb25kaXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgICAgICAgICAgZGExID0gTWF0aC5hYnMoTWF0aC5hdGFuMih5MyAtIHkyLCB4MyAtIHgyKSAtIE1hdGguYXRhbjIoeTIgLSB5MSwgeDIgLSB4MSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYTEgPj0gcGkpIGRhMSA9IDIqcGkgLSBkYTFcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExIDwgbV9hbmdsZV90b2xlcmFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgyLCB5MikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MywgeTMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihtX2N1c3BfbGltaXQgIT09IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA+IG1fY3VzcF9saW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgyLCB5MikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmKGQzID4gRkxUX0VQU0lMT04pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcDEscDIscDQgYXJlIGNvbGxpbmVhciwgcDMgaXMgY29uc2lkZXJhYmxlXG4gICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgICAgICBpZihkMyAqIGQzIDw9IGRpc3RhbmNlVG9sZXJhbmNlICogKGR4KmR4ICsgZHkqZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihtX2FuZ2xlX3RvbGVyYW5jZSA8IGN1cnZlX2FuZ2xlX3RvbGVyYW5jZV9lcHNpbG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MTIzNCwgeTEyMzQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmdsZSBDb25kaXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgICAgICAgICAgZGExID0gTWF0aC5hYnMoTWF0aC5hdGFuMih5NCAtIHkzLCB4NCAtIHgzKSAtIE1hdGguYXRhbjIoeTMgLSB5MiwgeDMgLSB4MikpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYTEgPj0gcGkpIGRhMSA9IDIqcGkgLSBkYTFcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExIDwgbV9hbmdsZV90b2xlcmFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgyLCB5MikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MywgeTMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihtX2N1c3BfbGltaXQgIT09IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA+IG1fY3VzcF9saW1pdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDMsIHkzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb2xsaW5lYXIgY2FzZVxuICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgIGR4ID0geDEyMzQgLSAoeDEgKyB4NCkgLyAyXG4gICAgICAgICAgICAgICAgICAgIGR5ID0geTEyMzQgLSAoeTEgKyB5NCkgLyAyXG4gICAgICAgICAgICAgICAgICAgIGlmKGR4KmR4ICsgZHkqZHkgPD0gZGlzdGFuY2VUb2xlcmFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDEyMzQsIHkxMjM0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udGludWUgc3ViZGl2aXNpb25cbiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIHJlY3Vyc2l2ZSh4MSwgeTEsIHgxMiwgeTEyLCB4MTIzLCB5MTIzLCB4MTIzNCwgeTEyMzQsIHBvaW50cywgZGlzdGFuY2VUb2xlcmFuY2UsIGxldmVsICsgMSkgXG4gICAgICAgIHJlY3Vyc2l2ZSh4MTIzNCwgeTEyMzQsIHgyMzQsIHkyMzQsIHgzNCwgeTM0LCB4NCwgeTQsIHBvaW50cywgZGlzdGFuY2VUb2xlcmFuY2UsIGxldmVsICsgMSkgXG4gICAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Z1bmN0aW9uJykoKSIsIlwidXNlIHN0cmljdFwiXHJcblxyXG52YXIgYWJzID0gTWF0aC5hYnNcclxuICAsIG1pbiA9IE1hdGgubWluXHJcblxyXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCBhYnNvbHV0ZUVycm9yLCByZWxhdGl2ZUVycm9yKSB7XHJcbiAgdmFyIGQgPSBhYnMoYSAtIGIpXHJcbiAgXHJcbiAgaWYgKGFic29sdXRlRXJyb3IgPT0gbnVsbCkgYWJzb2x1dGVFcnJvciA9IGFsbW9zdEVxdWFsLkRCTF9FUFNJTE9OO1xyXG4gIGlmIChyZWxhdGl2ZUVycm9yID09IG51bGwpIHJlbGF0aXZlRXJyb3IgPSBhYnNvbHV0ZUVycm9yO1xyXG4gIFxyXG4gIGlmKGQgPD0gYWJzb2x1dGVFcnJvcikge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYoZCA8PSByZWxhdGl2ZUVycm9yICogbWluKGFicyhhKSwgYWJzKGIpKSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgcmV0dXJuIGEgPT09IGJcclxufVxyXG5cclxuYWxtb3N0RXF1YWwuRkxUX0VQU0lMT04gPSAxLjE5MjA5MjkwZS03XHJcbmFsbW9zdEVxdWFsLkRCTF9FUFNJTE9OID0gMi4yMjA0NDYwNDkyNTAzMTMxZS0xNlxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBhbG1vc3RFcXVhbFxyXG4iLCJ2YXIgc3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFuQXJyYXlcblxuZnVuY3Rpb24gYW5BcnJheShhcnIpIHtcbiAgcmV0dXJuIChcbiAgICAgICBhcnIuQllURVNfUEVSX0VMRU1FTlRcbiAgICAmJiBzdHIuY2FsbChhcnIuYnVmZmVyKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJ1xuICAgIHx8IEFycmF5LmlzQXJyYXkoYXJyKVxuICApXG59XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2FuLWFycmF5JylcbnZhciBhbG1vc3QgPSByZXF1aXJlKCdhbG1vc3QtZXF1YWwnKVxuXG4vL2RldGVybWluZXMgd2hldGhlciB0d28gYXJyYXlzIGFyZSBhbG1vc3QgZXF1YWxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYSwgYiwgYWJzb2x1dGVUb2xlcmFuY2UsIHJlbGF0aXZlVG9sZXJhbmNlKSB7XG4gICAgLy93aWxsIGFjY2VwdCB0eXBlZCBhcnJheXNcbiAgICBpZiAoIWEgfHwgIWIgfHwgIWlzQXJyYXkoYSkgfHwgIWlzQXJyYXkoYikpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIGlmICh0eXBlb2YgYWJzb2x1dGVUb2xlcmFuY2UgIT09ICdudW1iZXInKVxuICAgICAgICBhYnNvbHV0ZVRvbGVyYW5jZSA9IGFsbW9zdC5GTFRfRVBTSUxPTlxuICAgIGlmICh0eXBlb2YgcmVsYXRpdmVUb2xlcmFuY2UgIT09ICdudW1iZXInKVxuICAgICAgICByZWxhdGl2ZVRvbGVyYW5jZSA9IGFic29sdXRlVG9sZXJhbmNlXG5cbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSkuZXZlcnkoZnVuY3Rpb24oYTAsIGkpIHtcbiAgICAgICAgdmFyIGIwID0gYltpXVxuICAgICAgICByZXR1cm4gYTAgPT09IGIwIHx8IGFsbW9zdChhMCwgYjAsIGFic29sdXRlVG9sZXJhbmNlLCByZWxhdGl2ZVRvbGVyYW5jZSlcbiAgICB9KVxufSIsIlwidXNlIHN0cmljdFwiXG5cbnZhciBhYnMgPSBNYXRoLmFic1xuICAsIG1pbiA9IE1hdGgubWluXG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIGFic29sdXRlRXJyb3IsIHJlbGF0aXZlRXJyb3IpIHtcbiAgdmFyIGQgPSBhYnMoYSAtIGIpXG4gIGlmKGQgPD0gYWJzb2x1dGVFcnJvcikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYoZCA8PSByZWxhdGl2ZUVycm9yICogbWluKGFicyhhKSwgYWJzKGIpKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGEgPT09IGJcbn1cblxuYWxtb3N0RXF1YWwuRkxUX0VQU0lMT04gPSAxLjE5MjA5MjkwZS03XG5hbG1vc3RFcXVhbC5EQkxfRVBTSUxPTiA9IDIuMjIwNDQ2MDQ5MjUwMzEzMWUtMTZcblxubW9kdWxlLmV4cG9ydHMgPSBhbG1vc3RFcXVhbFxuIiwidmFyIGNzc0NvbG9yID0gcmVxdWlyZSgnLi9saWIvY3NzLWNvbG9yJyk7XG52YXIgbmFtZXMgPSByZXF1aXJlKCcuL2xpYi9jc3MtY29sb3ItbmFtZXMuanNvbicpO1xudmFyIHJnYkx1bWluYW5jZSA9IHJlcXVpcmUoJy4vbGliL3JlbGF0aXZlLWx1bWluYW5jZScpO1xudmFyIEhTTFV0aWwgPSByZXF1aXJlKCcuL2xpYi9oc2wnKTtcbnZhciBoZXhUb1JHQkEgPSByZXF1aXJlKCcuL2xpYi9oZXgtdG8tcmdiYScpO1xudmFyIFJHQkFUb0hleCA9IHJlcXVpcmUoJy4vbGliL3JnYmEtdG8taGV4Jyk7XG5cbm1vZHVsZS5leHBvcnRzLnBhcnNlID0gY3NzQ29sb3IucGFyc2U7XG5tb2R1bGUuZXhwb3J0cy5zdHlsZSA9IGNzc0NvbG9yLnN0eWxlO1xubW9kdWxlLmV4cG9ydHMubmFtZXMgPSBuYW1lcztcblxubW9kdWxlLmV4cG9ydHMucmVsYXRpdmVMdW1pbmFuY2UgPSBmdW5jdGlvbiByZWxhdGl2ZUx1bWluYW5jZSAoY29sb3IpIHtcbiAgdmFyIHJlc3VsdCA9IG1vZHVsZS5leHBvcnRzLnBhcnNlKGNvbG9yKTtcbiAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuICByZXR1cm4gcmdiTHVtaW5hbmNlKHJlc3VsdC5yZ2IpO1xufTtcblxuLy8gRXh0cmFjdGVkIGZyb20gQHRtY3cgLyB3Y2FnLWNvbnRyYXN0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdG1jdy93Y2FnLWNvbnRyYXN0XG5tb2R1bGUuZXhwb3J0cy5jb250cmFzdFJhdGlvID0gZnVuY3Rpb24gY29udHJhc3RSYXRpbyAoY29sb3JBLCBjb2xvckIpIHtcbiAgdmFyIGEgPSBtb2R1bGUuZXhwb3J0cy5yZWxhdGl2ZUx1bWluYW5jZShjb2xvckEpO1xuICB2YXIgYiA9IG1vZHVsZS5leHBvcnRzLnJlbGF0aXZlTHVtaW5hbmNlKGNvbG9yQik7XG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgdmFyIGwxID0gTWF0aC5tYXgoYSwgYik7XG4gIHZhciBsMiA9IE1hdGgubWluKGEsIGIpO1xuICByZXR1cm4gKGwxICsgMC4wNSkgLyAobDIgKyAwLjA1KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLm9mZnNldEhTTCA9IGZ1bmN0aW9uIChjb2xvciwgaCwgcywgbCkge1xuICB2YXIgcmVzdWx0ID0gbW9kdWxlLmV4cG9ydHMucGFyc2UoY29sb3IpO1xuICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XG4gIHJlc3VsdC5oc2xhWzBdICs9IGggfHwgMDtcbiAgcmVzdWx0LmhzbGFbMV0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIHJlc3VsdC5oc2xhWzFdICsgKHMgfHwgMCkpKTtcbiAgcmVzdWx0LmhzbGFbMl0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIHJlc3VsdC5oc2xhWzJdICsgKGwgfHwgMCkpKTtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzLnBhcnNlKHsgaHNsYTogcmVzdWx0LmhzbGEgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5ibGVuZCA9IGZ1bmN0aW9uIChiYWNrZ3JvdW5kLCBmb3JlZ3JvdW5kLCBvcGFjaXR5KSB7XG4gIHZhciBiZyA9IG1vZHVsZS5leHBvcnRzLnBhcnNlKGJhY2tncm91bmQpO1xuICB2YXIgZmcgPSBtb2R1bGUuZXhwb3J0cy5wYXJzZShmb3JlZ3JvdW5kKTtcbiAgaWYgKGJnID09IG51bGwgfHwgZmcgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIGMwID0gYmcucmdiYTtcbiAgdmFyIGMxID0gZmcucmdiYTtcbiAgb3BhY2l0eSA9IHR5cGVvZiBvcGFjaXR5ID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShvcGFjaXR5KSA/IG9wYWNpdHkgOiAxLjA7XG4gIHZhciBhbHBoYSA9IG9wYWNpdHkgKiBjMVszXTtcbiAgaWYgKGFscGhhID49IDEpIHtcbiAgICAvLyBmb3JlZ3JvdW5kIGlzIG9wYXF1ZSBzbyBubyBibGVuZCByZXF1aXJlZFxuICAgIHJldHVybiBmZztcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgIGMxW2ldID0gYzFbaV0gKiBhbHBoYSArIGMwW2ldICogKGMwWzNdICogKDEgLSBhbHBoYSkpO1xuICB9XG4gIGMxWzNdID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYWxwaGEgKyBjMFszXSAqICgxIC0gYWxwaGEpKSk7XG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cy5wYXJzZShjMSk7IC8vIHJlLXBhcnNlIHRvIGdldCBuZXcgbWV0YWRhdGFcbn07XG5cbi8vIEV4cG9zZWQgYnV0IG5vdCB5ZXQgZG9jdW1lbnRlZFxubW9kdWxlLmV4cG9ydHMuaGV4VG9SR0JBID0gaGV4VG9SR0JBO1xubW9kdWxlLmV4cG9ydHMuUkdCQVRvSGV4ID0gUkdCQVRvSGV4O1xubW9kdWxlLmV4cG9ydHMuUkdCQVRvSFNMQSA9IEhTTFV0aWwuUkdCQVRvSFNMQTtcbm1vZHVsZS5leHBvcnRzLkhTTEFUb1JHQkEgPSBIU0xVdGlsLkhTTEFUb1JHQkE7XG4iLCJ2YXIgbGluZWNsaXAgPSByZXF1aXJlKCdsaW5lY2xpcCcpO1xudmFyIGFsbW9zdEVxdWFsID0gcmVxdWlyZSgnYWxtb3N0LWVxdWFsJyk7XG52YXIgYXJyYXlBbG1vc3RFcXVhbCA9IHJlcXVpcmUoJ2FycmF5LWFsbW9zdC1lcXVhbCcpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnY2xvbmUnKTtcbnZhciBzcXVhcmVkRGlzdGFuY2UgPSByZXF1aXJlKCcuL2xpYi92ZWMyJykuc3F1YXJlZERpc3RhbmNlO1xuXG5tb2R1bGUuZXhwb3J0cy5hcmVQb2ludHNDb2xsaW5lYXIgPSBmdW5jdGlvbiAocG9pbnQwLCBwb2ludDEsIHBvaW50Mikge1xuICB2YXIgeDAgPSBwb2ludDBbMF07XG4gIHZhciB5MCA9IHBvaW50MFsxXTtcbiAgdmFyIHgxID0gcG9pbnQxWzBdO1xuICB2YXIgeTEgPSBwb2ludDFbMV07XG4gIHZhciB4MiA9IHBvaW50MlswXTtcbiAgdmFyIHkyID0gcG9pbnQyWzFdO1xuICByZXR1cm4gYWxtb3N0RXF1YWwoKHkwIC0geTEpICogKHgwIC0geDIpLCAoeTAgLSB5MikgKiAoeDAgLSB4MSkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMucmVtb3ZlRHVwbGljYXRlUG9pbnRzID0gZnVuY3Rpb24gKHBhdGgpIHtcbiAgdmFyIG5ld1BhdGggPSBbXTtcbiAgdmFyIGxhc3RQb2ludDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGN1clBvaW50ID0gcGF0aFtpXTtcbiAgICBpZiAoIWxhc3RQb2ludCB8fCAhYXJyYXlBbG1vc3RFcXVhbChsYXN0UG9pbnQsIGN1clBvaW50KSkge1xuICAgICAgbmV3UGF0aC5wdXNoKGN1clBvaW50KTtcbiAgICAgIGxhc3RQb2ludCA9IGN1clBvaW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2xvbmUobmV3UGF0aCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5yZW1vdmVDb2xsaW5lYXJQb2ludHMgPSBmdW5jdGlvbiAocGF0aCkge1xuICB2YXIgbmV3UGF0aCA9IFtdO1xuICB2YXIgcmVtYWluaW5nUG9pbnRzID0gY2xvbmUocGF0aCk7XG4gIHdoaWxlIChyZW1haW5pbmdQb2ludHMubGVuZ3RoID49IDMpIHtcbiAgICB2YXIgcDAgPSByZW1haW5pbmdQb2ludHNbMF07XG4gICAgdmFyIHAxID0gcmVtYWluaW5nUG9pbnRzWzFdO1xuICAgIHZhciBwMiA9IHJlbWFpbmluZ1BvaW50c1syXTtcbiAgICB2YXIgY29sbGluZWFyID0gbW9kdWxlLmV4cG9ydHMuYXJlUG9pbnRzQ29sbGluZWFyKHAwLCBwMSwgcDIpO1xuICAgIC8vIG9uZSBtb3JlIGNoZWNrIGlzIHRvIGVuc3VyZSB0aGF0IHBvaW50cyBhcmUgaW4gYSBsaW5lOlxuICAgIC8vIEEtPkItPkNcbiAgICAvLyBub3QgQS0+Qy0+QiBvciBzb21lIHZhcmlhbnRcbiAgICBpZiAoY29sbGluZWFyKSB7XG4gICAgICB2YXIgZGlzdEFCID0gc3F1YXJlZERpc3RhbmNlKHAwLCBwMSk7XG4gICAgICB2YXIgZGlzdEFDID0gc3F1YXJlZERpc3RhbmNlKHAwLCBwMik7XG4gICAgICBpZiAoZGlzdEFCID4gZGlzdEFDKSBjb2xsaW5lYXIgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNvbGxpbmVhcikge1xuICAgICAgLy8gdGhlIGZpcnN0IDMgcG9pbnRzIGFyZSBjb2xsaW5lYXJcbiAgICAgIC8vIHJlbW92ZSB0aGUgc2Vjb25kIHBvaW50IGFzIGl0IGlzbid0IG5lZWRlZFxuICAgICAgcmVtYWluaW5nUG9pbnRzLnNwbGljZSgxLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhlIDMgcG9pbnRzIGFyZSBub3QgY29sbGluZWFyXG4gICAgICAvLyBhZGQgdGhlIGZpcnN0IG9uZSBhcyB0aGUgb3RoZXJzIG1heSBzdGlsbCBiZSBjb2xsaW5lYXJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTsgaSsrKSB7XG4gICAgICAgIG5ld1BhdGgucHVzaChyZW1haW5pbmdQb2ludHMuc2hpZnQoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGFkZCBhbnkgcmVtYWluaW5nIHBvaW50c1xuICB3aGlsZSAocmVtYWluaW5nUG9pbnRzLmxlbmd0aCkge1xuICAgIG5ld1BhdGgucHVzaChyZW1haW5pbmdQb2ludHMuc2hpZnQoKSk7XG4gIH1cbiAgcmV0dXJuIG5ld1BhdGg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5jbGlwU2VnbWVudFRvQ2lyY2xlID0gcmVxdWlyZSgnLi9saWIvY2xpcC9jbGlwLXNlZ21lbnQtdG8tY2lyY2xlJyk7XG5tb2R1bGUuZXhwb3J0cy5jbGlwTGluZVRvQ2lyY2xlID0gcmVxdWlyZSgnLi9saWIvY2xpcC9jbGlwLWxpbmUtdG8tY2lyY2xlJyk7XG5cbm1vZHVsZS5leHBvcnRzLmNsaXBQb2x5bGluZXNUb0JveCA9IGZ1bmN0aW9uIChwb2x5bGluZXMsIGJib3gsIGJvcmRlciwgY2xvc2VMaW5lcykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYmJveCkgfHwgKGJib3gubGVuZ3RoICE9PSAyICYmIGJib3gubGVuZ3RoICE9PSA0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYm94IHRvIGVpdGhlciBiZSBmb3JtYXQgWyBtaW5Qb2ludCwgbWF4UG9pbnQgXSBvciBbIG1pblgsIG1pblksIG1heFgsIG1heFkgXScpO1xuICB9XG4gIC8vIEV4cGFuZCBuZXN0ZWQgZm9ybWF0IHRvIGZsYXQgYm91bmRzXG4gIGlmIChiYm94Lmxlbmd0aCA9PT0gMikge1xuICAgIHZhciBtaW4gPSBiYm94WzBdO1xuICAgIHZhciBtYXggPSBiYm94WzFdO1xuICAgIGJib3ggPSBbIG1pblswXSwgbWluWzFdLCBtYXhbMF0sIG1heFsxXSBdO1xuICB9XG4gIGNsb3NlTGluZXMgPSBjbG9zZUxpbmVzICE9PSBmYWxzZTtcbiAgYm9yZGVyID0gQm9vbGVhbihib3JkZXIpO1xuXG4gIGlmIChib3JkZXIpIHtcbiAgICByZXR1cm4gcG9seWxpbmVzLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxpbmVjbGlwLnBvbHlnb24obGluZSwgYmJveCk7XG4gICAgICBpZiAoY2xvc2VMaW5lcyAmJiByZXN1bHQubGVuZ3RoID4gMikge1xuICAgICAgICByZXN1bHQucHVzaChyZXN1bHRbMF0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGxpbmVzKSB7XG4gICAgICByZXR1cm4gbGluZXMubGVuZ3RoID4gMDtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcG9seWxpbmVzLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgcmV0dXJuIGxpbmVjbGlwLnBvbHlsaW5lKGxpbmUsIGJib3gpO1xuICAgIH0pLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgIH0sIFtdKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuY3JlYXRlSGF0Y2hMaW5lcyA9IGNyZWF0ZUhhdGNoTGluZXM7XG5mdW5jdGlvbiBjcmVhdGVIYXRjaExpbmVzIChib3VuZHMsIGFuZ2xlLCBzcGFjaW5nLCBvdXQpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJvdW5kcykgfHwgKGJvdW5kcy5sZW5ndGggIT09IDIgJiYgYm91bmRzLmxlbmd0aCAhPT0gNCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGJveCB0byBlaXRoZXIgYmUgZm9ybWF0IFsgbWluUG9pbnQsIG1heFBvaW50IF0gb3IgWyBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZIF0nKTtcbiAgfVxuICAvLyBFeHBhbmQgbmVzdGVkIGZvcm1hdCB0byBmbGF0IGJvdW5kc1xuICBpZiAoYm91bmRzLmxlbmd0aCA9PT0gMikge1xuICAgIHZhciBtaW4gPSBib3VuZHNbMF07XG4gICAgdmFyIG1heCA9IGJvdW5kc1sxXTtcbiAgICBib3VuZHMgPSBbIG1pblswXSwgbWluWzFdLCBtYXhbMF0sIG1heFsxXSBdO1xuICB9XG5cbiAgaWYgKGFuZ2xlID09IG51bGwpIGFuZ2xlID0gLU1hdGguUEkgLyA0O1xuICBpZiAoc3BhY2luZyA9PSBudWxsKSBzcGFjaW5nID0gMC41O1xuICBpZiAob3V0ID09IG51bGwpIG91dCA9IFtdO1xuXG4gIC8vIFJlZmVyZW5jZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2V2aWwtbWFkL0VnZ0JvdC9ibG9iL21hc3Rlci9pbmtzY2FwZV9kcml2ZXIvZWdnYm90X2hhdGNoLnB5XG4gIHNwYWNpbmcgPSBNYXRoLmFicyhzcGFjaW5nKTtcbiAgaWYgKHNwYWNpbmcgPT09IDApIHRocm93IG5ldyBFcnJvcignY2Fubm90IHVzZSBhIHNwYWNpbmcgb2YgemVybyBhcyBpdCB3aWxsIHJ1biBhbiBpbmZpbml0ZSBsb29wIScpO1xuXG4gIHZhciB4bWluID0gYm91bmRzWzBdO1xuICB2YXIgeW1pbiA9IGJvdW5kc1sxXTtcbiAgdmFyIHhtYXggPSBib3VuZHNbMl07XG4gIHZhciB5bWF4ID0gYm91bmRzWzNdO1xuXG4gIHZhciB3ID0geG1heCAtIHhtaW47XG4gIHZhciBoID0geW1heCAtIHltaW47XG4gIGlmICh3ID09PSAwIHx8IGggPT09IDApIHJldHVybiBvdXQ7XG4gIHZhciByID0gTWF0aC5zcXJ0KHcgKiB3ICsgaCAqIGgpIC8gMjtcbiAgdmFyIHJvdEFuZ2xlID0gTWF0aC5QSSAvIDIgLSBhbmdsZTtcbiAgdmFyIGNhID0gTWF0aC5jb3Mocm90QW5nbGUpO1xuICB2YXIgc2EgPSBNYXRoLnNpbihyb3RBbmdsZSk7XG4gIHZhciBjeCA9IHhtaW4gKyAodyAvIDIpO1xuICB2YXIgY3kgPSB5bWluICsgKGggLyAyKTtcbiAgdmFyIGkgPSAtcjtcbiAgd2hpbGUgKGkgPD0gcikge1xuICAgIC8vIExpbmUgc3RhcnRzIGF0IChpLCAtcikgYW5kIGdvZXMgdG8gKGksICtyKVxuICAgIHZhciB4MSA9IGN4ICsgKGkgKiBjYSkgKyAociAqIHNhKTsgLy8gIGkgKiBjYSAtICgtcikgKiBzYVxuICAgIHZhciB5MSA9IGN5ICsgKGkgKiBzYSkgLSAociAqIGNhKTsgLy8gIGkgKiBzYSArICgtcikgKiBjYVxuICAgIHZhciB4MiA9IGN4ICsgKGkgKiBjYSkgLSAociAqIHNhKTsgLy8gIGkgKiBjYSAtICgrcikgKiBzYVxuICAgIHZhciB5MiA9IGN5ICsgKGkgKiBzYSkgKyAociAqIGNhKTsgLy8gIGkgKiBzYSArICgrcikgKiBjYVxuICAgIGkgKz0gc3BhY2luZztcbiAgICAvLyBSZW1vdmUgYW55IHBvdGVudGlhbCBoYXRjaCBsaW5lcyB3aGljaCBhcmUgZW50aXJlbHlcbiAgICAvLyBvdXRzaWRlIG9mIHRoZSBib3VuZGluZyBib3hcbiAgICBpZiAoKHgxIDwgeG1pbiAmJiB4MiA8IHhtaW4pIHx8ICh4MSA+IHhtYXggJiYgeDIgPiB4bWF4KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICgoeTEgPCB5bWluICYmIHkyIDwgeW1pbikgfHwgKHkxID4geW1heCAmJiB5MiA+IHltYXgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgb3V0LnB1c2goWyBbIHgxLCB5MSBdLCBbIHgyLCB5MiBdIF0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzLmdldEJvdW5kcyA9IGZ1bmN0aW9uIGdldEJvdW5kcyAocG9pbnRzKSB7XG4gIHZhciBuID0gcG9pbnRzLmxlbmd0aDtcbiAgaWYgKG4gPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBvaW50cyB0byBiZSBhIG5vbi1lbXB0eSBhcnJheScpO1xuICB9XG4gIHZhciBkID0gcG9pbnRzWzBdLmxlbmd0aDtcbiAgdmFyIGxvID0gcG9pbnRzWzBdLnNsaWNlKCk7XG4gIHZhciBoaSA9IHBvaW50c1swXS5zbGljZSgpO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IG47ICsraSkge1xuICAgIHZhciBwID0gcG9pbnRzW2ldO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZDsgKytqKSB7XG4gICAgICB2YXIgeCA9IHBbal07XG4gICAgICBsb1tqXSA9IE1hdGgubWluKGxvW2pdLCB4KTtcbiAgICAgIGhpW2pdID0gTWF0aC5tYXgoaGlbal0sIHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWyBsbywgaGkgXTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmFuZG9tOiByZXF1aXJlKCcuL3JhbmRvbScpLFxuICBtYXRoOiByZXF1aXJlKCcuL21hdGgnKSxcbiAgcGVucGxvdDogcmVxdWlyZSgnLi9wZW5wbG90LmpzJyksXG4gIGdlb21ldHJ5OiByZXF1aXJlKCcuL2dlb21ldHJ5LmpzJyksXG4gIHNoYWRlcjogcmVxdWlyZSgnLi9zaGFkZXIuanMnKSxcbiAgY29sb3I6IHJlcXVpcmUoJy4vY29sb3IuanMnKVxufTtcbiIsInZhciBhbG1vc3RFcXVhbCA9IHJlcXVpcmUoJ2FsbW9zdC1lcXVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyc2VjdExpbmVDaXJjbGU7XG5mdW5jdGlvbiBpbnRlcnNlY3RMaW5lQ2lyY2xlIChwMCwgcDEsIGNpcmNsZSwgY2lyY2xlUmFkaXVzLCBoaXRzKSB7XG4gIGlmIChoaXRzID09IG51bGwpIGhpdHMgPSBbXTtcbiAgdmFyIGEgPSBzcXIocDFbMF0gLSBwMFswXSkgKyBzcXIocDFbMV0gLSBwMFsxXSk7XG4gIHZhciBiID0gMi4wICogKFxuICAgIChwMVswXSAtIHAwWzBdKSAqIChwMFswXSAtIGNpcmNsZVswXSkgK1xuICAgIChwMVsxXSAtIHAwWzFdKSAqIChwMFsxXSAtIGNpcmNsZVsxXSlcbiAgKTtcblxuICB2YXIgYyA9IHNxcihjaXJjbGVbMF0pICsgc3FyKGNpcmNsZVsxXSkgKyBzcXIocDBbMF0pICtcbiAgICBzcXIocDBbMV0pIC0gMiAqIChjaXJjbGVbMF0gKiBwMFswXSArIGNpcmNsZVsxXSAqIHAwWzFdKSAtXG4gICAgc3FyKGNpcmNsZVJhZGl1cyk7XG5cbiAgdmFyIGRldCA9IGIgKiBiIC0gNC4wICogYSAqIGM7XG4gIHZhciBkZWx0YTtcbiAgaWYgKGRldCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoYWxtb3N0RXF1YWwoZGV0LCAwLjApKSB7XG4gICAgZGVsdGEgPSAtYiAvICgyLjAgKiBhKTtcbiAgICBoaXRzLnB1c2goW1xuICAgICAgcDBbMF0gKyBkZWx0YSAqIChwMVswXSAtIHAwWzBdKSxcbiAgICAgIHAwWzFdICsgZGVsdGEgKiAocDFbMV0gLSBwMFsxXSlcbiAgICBdKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChkZXQgPiAwLjApIHtcbiAgICB2YXIgc3FydERldCA9IE1hdGguc3FydChkZXQpO1xuICAgIGRlbHRhID0gKC1iICsgc3FydERldCkgLyAoMi4wICogYSk7XG5cbiAgICBoaXRzLnB1c2goW1xuICAgICAgcDBbMF0gKyBkZWx0YSAqIChwMVswXSAtIHAwWzBdKSxcbiAgICAgIHAwWzFdICsgZGVsdGEgKiAocDFbMV0gLSBwMFsxXSlcbiAgICBdKTtcblxuICAgIGRlbHRhID0gKC1iIC0gc3FydERldCkgLyAoMi4wICogYSk7XG4gICAgaGl0cy5wdXNoKFtcbiAgICAgIHAwWzBdICsgZGVsdGEgKiAocDFbMF0gLSBwMFswXSksXG4gICAgICBwMFsxXSArIGRlbHRhICogKHAxWzFdIC0gcDBbMV0pXG4gICAgXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNxciAoYSkge1xuICByZXR1cm4gYSAqIGE7XG59XG4iLCJ2YXIgYWxtb3N0RXF1YWwgPSByZXF1aXJlKCdhbG1vc3QtZXF1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcnNlY3RTZWdtZW50Q2lyY2xlO1xuZnVuY3Rpb24gaW50ZXJzZWN0U2VnbWVudENpcmNsZSAocDAsIHAxLCBjaXJjbGUsIGNpcmNsZVJhZGl1cywgaGl0cykge1xuICByZXR1cm4gaW50ZXJzZWN0KHAwWzBdLCBwMFsxXSwgcDFbMF0sIHAxWzFdLCBjaXJjbGVbMF0sIGNpcmNsZVsxXSwgY2lyY2xlUmFkaXVzLCBoaXRzKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0ICh4MSwgeTEsIHgyLCB5MiwgY3gsIGN5LCByYWRpdXMsIGhpdHMpIHtcbiAgaWYgKGhpdHMgPT0gbnVsbCkgaGl0cyA9IFtdO1xuICB2YXIgcDFJbkNpcmNsZSA9IHBvaW50SW5DaXJjbGUoeDEsIHkxLCBjeCwgY3ksIHJhZGl1cyk7XG4gIHZhciBwMkluQ2lyY2xlID0gcG9pbnRJbkNpcmNsZSh4MiwgeTIsIGN4LCBjeSwgcmFkaXVzKTtcblxuICBpZiAocDFJbkNpcmNsZSAmJiBwMkluQ2lyY2xlKSB7XG4gICAgaGl0cy5wdXNoKFsgeDEsIHkxIF0pO1xuICAgIGhpdHMucHVzaChbIHgyLCB5MiBdKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBoLCBhLCBjbG9zZXN0UG9pbnQsIHB4LCBweTtcbiAgaWYgKHAxSW5DaXJjbGUgfHwgcDJJbkNpcmNsZSkge1xuICAgIGNsb3Nlc3RQb2ludCA9IGNsb3Nlc3RQb2ludE9uTGluZUZyb21Qb2ludCh4MSwgeTEsIHgyLCB5MiwgY3gsIGN5KTtcbiAgICBweCA9IGNsb3Nlc3RQb2ludFswXTtcbiAgICBweSA9IGNsb3Nlc3RQb2ludFsxXTtcbiAgICBoID0gZGlzdGFuY2UocHgsIHB5LCBjeCwgY3kpO1xuICAgIGEgPSBNYXRoLnNxcnQoKHJhZGl1cyAqIHJhZGl1cykgLSAoaCAqIGgpKTtcbiAgICB2YXIgaGl0QSA9IHAxSW5DaXJjbGUgPyBbIHgxLCB5MSBdIDogWyB4MiwgeTIgXTtcbiAgICB2YXIgaGl0QiA9IHAxSW5DaXJjbGUgPyBwcm9qZWN0UG9pbnQocHgsIHB5LCB4MiwgeTIsIGEpIDogcHJvamVjdFBvaW50KHB4LCBweSwgeDEsIHkxLCBhKTtcbiAgICBpZiAoYWxtb3N0RXF1YWwoaGl0QVswXSwgaGl0QlswXSkgJiYgYWxtb3N0RXF1YWwoaGl0QVsxXSwgaGl0QlsxXSkpIHtcbiAgICAgIC8vIE9uZSBwb2ludCBpbiB0aGUgc2VnbWVudCBsaWVzIG9uIHRoZSBjaXJjbGUsIHRoZSBvdGhlciBpcyBvdXRzaWRlXG4gICAgICBoaXRzLnB1c2goaGl0QSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaGl0cy5wdXNoKGhpdEEpO1xuICAgIGhpdHMucHVzaChoaXRCKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsb3Nlc3RQb2ludCA9IGNsb3Nlc3RQb2ludE9uU2VnbWVudEZyb21Qb2ludCh4MSwgeTEsIHgyLCB5MiwgY3gsIGN5KTtcbiAgcHggPSBjbG9zZXN0UG9pbnRbMF07XG4gIHB5ID0gY2xvc2VzdFBvaW50WzFdO1xuXG4gIGlmICgoYWxtb3N0RXF1YWwoeDEsIHB4KSAmJiBhbG1vc3RFcXVhbCh5MSwgcHkpKSB8fFxuICAgICAgKGFsbW9zdEVxdWFsKHgyLCBweCkgJiYgYWxtb3N0RXF1YWwoeTIsIHB5KSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgaCA9IGRpc3RhbmNlKHB4LCBweSwgY3gsIGN5KTtcbiAgICBpZiAoaCA+IHJhZGl1cykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoYWxtb3N0RXF1YWwoaCwgcmFkaXVzKSkge1xuICAgICAgaGl0cy5wdXNoKFsgcHgsIHB5IF0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChhbG1vc3RFcXVhbChoLCAwLjApKSB7XG4gICAgICBoaXRzLnB1c2gocHJvamVjdFBvaW50KGN4LCBjeSwgeDEsIHkxLCByYWRpdXMpKTtcbiAgICAgIGhpdHMucHVzaChwcm9qZWN0UG9pbnQoY3gsIGN5LCB4MiwgeTIsIHJhZGl1cykpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBNYXRoLnNxcnQoKHJhZGl1cyAqIHJhZGl1cykgLSAoaCAqIGgpKTtcbiAgICAgIGhpdHMucHVzaChwcm9qZWN0UG9pbnQocHgsIHB5LCB4MSwgeTEsIGEpKTtcbiAgICAgIGhpdHMucHVzaChwcm9qZWN0UG9pbnQocHgsIHB5LCB4MiwgeTIsIGEpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsYXlEaXN0YW5jZSAoeDEsIHkxLCB4MiwgeTIpIHtcbiAgdmFyIGR4ID0gKHgyIC0geDEpO1xuICB2YXIgZHkgPSAoeTIgLSB5MSk7XG4gIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cblxuZnVuY3Rpb24gcG9pbnRJbkNpcmNsZSAocHgsIHB5LCBjeCwgY3ksIHJhZGl1cykge1xuICByZXR1cm4gbGF5RGlzdGFuY2UocHgsIHB5LCBjeCwgY3kpIDw9IChyYWRpdXMgKiByYWRpdXMpO1xufVxuXG5mdW5jdGlvbiBkaXN0YW5jZSAoeDEsIHkxLCB4MiwgeTIpIHtcbiAgdmFyIGR4ID0gKHgxIC0geDIpO1xuICB2YXIgZHkgPSAoeTEgLSB5Mik7XG4gIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0UG9pbnQgKHNyY3gsIHNyY3ksIGRlc3R4LCBkZXN0eSwgZGlzdCkge1xuICB2YXIgdCA9IGRpc3QgLyBkaXN0YW5jZShzcmN4LCBzcmN5LCBkZXN0eCwgZGVzdHkpO1xuICByZXR1cm4gW1xuICAgIHNyY3ggKyB0ICogKGRlc3R4IC0gc3JjeCksXG4gICAgc3JjeSArIHQgKiAoZGVzdHkgLSBzcmN5KVxuICBdO1xufVxuXG5mdW5jdGlvbiBjbG9zZXN0UG9pbnRPbkxpbmVGcm9tUG9pbnQgKHgxLCB5MSwgeDIsIHkyLCBweCwgcHkpIHtcbiAgdmFyIHZ4ID0geDIgLSB4MTtcbiAgdmFyIHZ5ID0geTIgLSB5MTtcbiAgdmFyIHd4ID0gcHggLSB4MTtcbiAgdmFyIHd5ID0gcHkgLSB5MTtcbiAgdmFyIGMxID0gdnggKiB3eCArIHZ5ICogd3k7XG4gIHZhciBjMiA9IHZ4ICogdnggKyB2eSAqIHZ5O1xuICB2YXIgcmF0aW8gPSBjMSAvIGMyO1xuICByZXR1cm4gW1xuICAgIHgxICsgcmF0aW8gKiB2eCxcbiAgICB5MSArIHJhdGlvICogdnlcbiAgXTtcbn1cblxuZnVuY3Rpb24gY2xvc2VzdFBvaW50T25TZWdtZW50RnJvbVBvaW50ICh4MSwgeTEsIHgyLCB5MiwgcHgsIHB5KSB7XG4gIHZhciB2eCA9IHgyIC0geDE7XG4gIHZhciB2eSA9IHkyIC0geTE7XG4gIHZhciB3eCA9IHB4IC0geDE7XG4gIHZhciB3eSA9IHB5IC0geTE7XG5cbiAgdmFyIGMxID0gdnggKiB3eCArIHZ5ICogd3k7XG5cbiAgaWYgKGMxIDw9IDAuMCkge1xuICAgIHJldHVybiBbIHgxLCB5MSBdO1xuICB9XG5cbiAgdmFyIGMyID0gdnggKiB2eCArIHZ5ICogdnk7XG4gIGlmIChjMiA8PSBjMSkge1xuICAgIHJldHVybiBbIHgyLCB5MiBdO1xuICB9XG5cbiAgdmFyIHJhdGlvID0gYzEgLyBjMjtcbiAgcmV0dXJuIFtcbiAgICB4MSArIHJhdGlvICogdngsXG4gICAgeTEgKyByYXRpbyAqIHZ5XG4gIF07XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiYWxpY2VibHVlXCI6IFwiI2YwZjhmZlwiLFxuICBcImFudGlxdWV3aGl0ZVwiOiBcIiNmYWViZDdcIixcbiAgXCJhcXVhXCI6IFwiIzAwZmZmZlwiLFxuICBcImFxdWFtYXJpbmVcIjogXCIjN2ZmZmQ0XCIsXG4gIFwiYXp1cmVcIjogXCIjZjBmZmZmXCIsXG4gIFwiYmVpZ2VcIjogXCIjZjVmNWRjXCIsXG4gIFwiYmlzcXVlXCI6IFwiI2ZmZTRjNFwiLFxuICBcImJsYWNrXCI6IFwiIzAwMDAwMFwiLFxuICBcImJsYW5jaGVkYWxtb25kXCI6IFwiI2ZmZWJjZFwiLFxuICBcImJsdWVcIjogXCIjMDAwMGZmXCIsXG4gIFwiYmx1ZXZpb2xldFwiOiBcIiM4YTJiZTJcIixcbiAgXCJicm93blwiOiBcIiNhNTJhMmFcIixcbiAgXCJidXJseXdvb2RcIjogXCIjZGViODg3XCIsXG4gIFwiY2FkZXRibHVlXCI6IFwiIzVmOWVhMFwiLFxuICBcImNoYXJ0cmV1c2VcIjogXCIjN2ZmZjAwXCIsXG4gIFwiY2hvY29sYXRlXCI6IFwiI2QyNjkxZVwiLFxuICBcImNvcmFsXCI6IFwiI2ZmN2Y1MFwiLFxuICBcImNvcm5mbG93ZXJibHVlXCI6IFwiIzY0OTVlZFwiLFxuICBcImNvcm5zaWxrXCI6IFwiI2ZmZjhkY1wiLFxuICBcImNyaW1zb25cIjogXCIjZGMxNDNjXCIsXG4gIFwiY3lhblwiOiBcIiMwMGZmZmZcIixcbiAgXCJkYXJrYmx1ZVwiOiBcIiMwMDAwOGJcIixcbiAgXCJkYXJrY3lhblwiOiBcIiMwMDhiOGJcIixcbiAgXCJkYXJrZ29sZGVucm9kXCI6IFwiI2I4ODYwYlwiLFxuICBcImRhcmtncmF5XCI6IFwiI2E5YTlhOVwiLFxuICBcImRhcmtncmVlblwiOiBcIiMwMDY0MDBcIixcbiAgXCJkYXJrZ3JleVwiOiBcIiNhOWE5YTlcIixcbiAgXCJkYXJra2hha2lcIjogXCIjYmRiNzZiXCIsXG4gIFwiZGFya21hZ2VudGFcIjogXCIjOGIwMDhiXCIsXG4gIFwiZGFya29saXZlZ3JlZW5cIjogXCIjNTU2YjJmXCIsXG4gIFwiZGFya29yYW5nZVwiOiBcIiNmZjhjMDBcIixcbiAgXCJkYXJrb3JjaGlkXCI6IFwiIzk5MzJjY1wiLFxuICBcImRhcmtyZWRcIjogXCIjOGIwMDAwXCIsXG4gIFwiZGFya3NhbG1vblwiOiBcIiNlOTk2N2FcIixcbiAgXCJkYXJrc2VhZ3JlZW5cIjogXCIjOGZiYzhmXCIsXG4gIFwiZGFya3NsYXRlYmx1ZVwiOiBcIiM0ODNkOGJcIixcbiAgXCJkYXJrc2xhdGVncmF5XCI6IFwiIzJmNGY0ZlwiLFxuICBcImRhcmtzbGF0ZWdyZXlcIjogXCIjMmY0ZjRmXCIsXG4gIFwiZGFya3R1cnF1b2lzZVwiOiBcIiMwMGNlZDFcIixcbiAgXCJkYXJrdmlvbGV0XCI6IFwiIzk0MDBkM1wiLFxuICBcImRlZXBwaW5rXCI6IFwiI2ZmMTQ5M1wiLFxuICBcImRlZXBza3libHVlXCI6IFwiIzAwYmZmZlwiLFxuICBcImRpbWdyYXlcIjogXCIjNjk2OTY5XCIsXG4gIFwiZGltZ3JleVwiOiBcIiM2OTY5NjlcIixcbiAgXCJkb2RnZXJibHVlXCI6IFwiIzFlOTBmZlwiLFxuICBcImZpcmVicmlja1wiOiBcIiNiMjIyMjJcIixcbiAgXCJmbG9yYWx3aGl0ZVwiOiBcIiNmZmZhZjBcIixcbiAgXCJmb3Jlc3RncmVlblwiOiBcIiMyMjhiMjJcIixcbiAgXCJmdWNoc2lhXCI6IFwiI2ZmMDBmZlwiLFxuICBcImdhaW5zYm9yb1wiOiBcIiNkY2RjZGNcIixcbiAgXCJnaG9zdHdoaXRlXCI6IFwiI2Y4ZjhmZlwiLFxuICBcImdvbGRcIjogXCIjZmZkNzAwXCIsXG4gIFwiZ29sZGVucm9kXCI6IFwiI2RhYTUyMFwiLFxuICBcImdyYXlcIjogXCIjODA4MDgwXCIsXG4gIFwiZ3JlZW5cIjogXCIjMDA4MDAwXCIsXG4gIFwiZ3JlZW55ZWxsb3dcIjogXCIjYWRmZjJmXCIsXG4gIFwiZ3JleVwiOiBcIiM4MDgwODBcIixcbiAgXCJob25leWRld1wiOiBcIiNmMGZmZjBcIixcbiAgXCJob3RwaW5rXCI6IFwiI2ZmNjliNFwiLFxuICBcImluZGlhbnJlZFwiOiBcIiNjZDVjNWNcIixcbiAgXCJpbmRpZ29cIjogXCIjNGIwMDgyXCIsXG4gIFwiaXZvcnlcIjogXCIjZmZmZmYwXCIsXG4gIFwia2hha2lcIjogXCIjZjBlNjhjXCIsXG4gIFwibGF2ZW5kZXJcIjogXCIjZTZlNmZhXCIsXG4gIFwibGF2ZW5kZXJibHVzaFwiOiBcIiNmZmYwZjVcIixcbiAgXCJsYXduZ3JlZW5cIjogXCIjN2NmYzAwXCIsXG4gIFwibGVtb25jaGlmZm9uXCI6IFwiI2ZmZmFjZFwiLFxuICBcImxpZ2h0Ymx1ZVwiOiBcIiNhZGQ4ZTZcIixcbiAgXCJsaWdodGNvcmFsXCI6IFwiI2YwODA4MFwiLFxuICBcImxpZ2h0Y3lhblwiOiBcIiNlMGZmZmZcIixcbiAgXCJsaWdodGdvbGRlbnJvZHllbGxvd1wiOiBcIiNmYWZhZDJcIixcbiAgXCJsaWdodGdyYXlcIjogXCIjZDNkM2QzXCIsXG4gIFwibGlnaHRncmVlblwiOiBcIiM5MGVlOTBcIixcbiAgXCJsaWdodGdyZXlcIjogXCIjZDNkM2QzXCIsXG4gIFwibGlnaHRwaW5rXCI6IFwiI2ZmYjZjMVwiLFxuICBcImxpZ2h0c2FsbW9uXCI6IFwiI2ZmYTA3YVwiLFxuICBcImxpZ2h0c2VhZ3JlZW5cIjogXCIjMjBiMmFhXCIsXG4gIFwibGlnaHRza3libHVlXCI6IFwiIzg3Y2VmYVwiLFxuICBcImxpZ2h0c2xhdGVncmF5XCI6IFwiIzc3ODg5OVwiLFxuICBcImxpZ2h0c2xhdGVncmV5XCI6IFwiIzc3ODg5OVwiLFxuICBcImxpZ2h0c3RlZWxibHVlXCI6IFwiI2IwYzRkZVwiLFxuICBcImxpZ2h0eWVsbG93XCI6IFwiI2ZmZmZlMFwiLFxuICBcImxpbWVcIjogXCIjMDBmZjAwXCIsXG4gIFwibGltZWdyZWVuXCI6IFwiIzMyY2QzMlwiLFxuICBcImxpbmVuXCI6IFwiI2ZhZjBlNlwiLFxuICBcIm1hZ2VudGFcIjogXCIjZmYwMGZmXCIsXG4gIFwibWFyb29uXCI6IFwiIzgwMDAwMFwiLFxuICBcIm1lZGl1bWFxdWFtYXJpbmVcIjogXCIjNjZjZGFhXCIsXG4gIFwibWVkaXVtYmx1ZVwiOiBcIiMwMDAwY2RcIixcbiAgXCJtZWRpdW1vcmNoaWRcIjogXCIjYmE1NWQzXCIsXG4gIFwibWVkaXVtcHVycGxlXCI6IFwiIzkzNzBkYlwiLFxuICBcIm1lZGl1bXNlYWdyZWVuXCI6IFwiIzNjYjM3MVwiLFxuICBcIm1lZGl1bXNsYXRlYmx1ZVwiOiBcIiM3YjY4ZWVcIixcbiAgXCJtZWRpdW1zcHJpbmdncmVlblwiOiBcIiMwMGZhOWFcIixcbiAgXCJtZWRpdW10dXJxdW9pc2VcIjogXCIjNDhkMWNjXCIsXG4gIFwibWVkaXVtdmlvbGV0cmVkXCI6IFwiI2M3MTU4NVwiLFxuICBcIm1pZG5pZ2h0Ymx1ZVwiOiBcIiMxOTE5NzBcIixcbiAgXCJtaW50Y3JlYW1cIjogXCIjZjVmZmZhXCIsXG4gIFwibWlzdHlyb3NlXCI6IFwiI2ZmZTRlMVwiLFxuICBcIm1vY2Nhc2luXCI6IFwiI2ZmZTRiNVwiLFxuICBcIm5hdmFqb3doaXRlXCI6IFwiI2ZmZGVhZFwiLFxuICBcIm5hdnlcIjogXCIjMDAwMDgwXCIsXG4gIFwib2xkbGFjZVwiOiBcIiNmZGY1ZTZcIixcbiAgXCJvbGl2ZVwiOiBcIiM4MDgwMDBcIixcbiAgXCJvbGl2ZWRyYWJcIjogXCIjNmI4ZTIzXCIsXG4gIFwib3JhbmdlXCI6IFwiI2ZmYTUwMFwiLFxuICBcIm9yYW5nZXJlZFwiOiBcIiNmZjQ1MDBcIixcbiAgXCJvcmNoaWRcIjogXCIjZGE3MGQ2XCIsXG4gIFwicGFsZWdvbGRlbnJvZFwiOiBcIiNlZWU4YWFcIixcbiAgXCJwYWxlZ3JlZW5cIjogXCIjOThmYjk4XCIsXG4gIFwicGFsZXR1cnF1b2lzZVwiOiBcIiNhZmVlZWVcIixcbiAgXCJwYWxldmlvbGV0cmVkXCI6IFwiI2RiNzA5M1wiLFxuICBcInBhcGF5YXdoaXBcIjogXCIjZmZlZmQ1XCIsXG4gIFwicGVhY2hwdWZmXCI6IFwiI2ZmZGFiOVwiLFxuICBcInBlcnVcIjogXCIjY2Q4NTNmXCIsXG4gIFwicGlua1wiOiBcIiNmZmMwY2JcIixcbiAgXCJwbHVtXCI6IFwiI2RkYTBkZFwiLFxuICBcInBvd2RlcmJsdWVcIjogXCIjYjBlMGU2XCIsXG4gIFwicHVycGxlXCI6IFwiIzgwMDA4MFwiLFxuICBcInJlYmVjY2FwdXJwbGVcIjogXCIjNjYzMzk5XCIsXG4gIFwicmVkXCI6IFwiI2ZmMDAwMFwiLFxuICBcInJvc3licm93blwiOiBcIiNiYzhmOGZcIixcbiAgXCJyb3lhbGJsdWVcIjogXCIjNDE2OWUxXCIsXG4gIFwic2FkZGxlYnJvd25cIjogXCIjOGI0NTEzXCIsXG4gIFwic2FsbW9uXCI6IFwiI2ZhODA3MlwiLFxuICBcInNhbmR5YnJvd25cIjogXCIjZjRhNDYwXCIsXG4gIFwic2VhZ3JlZW5cIjogXCIjMmU4YjU3XCIsXG4gIFwic2Vhc2hlbGxcIjogXCIjZmZmNWVlXCIsXG4gIFwic2llbm5hXCI6IFwiI2EwNTIyZFwiLFxuICBcInNpbHZlclwiOiBcIiNjMGMwYzBcIixcbiAgXCJza3libHVlXCI6IFwiIzg3Y2VlYlwiLFxuICBcInNsYXRlYmx1ZVwiOiBcIiM2YTVhY2RcIixcbiAgXCJzbGF0ZWdyYXlcIjogXCIjNzA4MDkwXCIsXG4gIFwic2xhdGVncmV5XCI6IFwiIzcwODA5MFwiLFxuICBcInNub3dcIjogXCIjZmZmYWZhXCIsXG4gIFwic3ByaW5nZ3JlZW5cIjogXCIjMDBmZjdmXCIsXG4gIFwic3RlZWxibHVlXCI6IFwiIzQ2ODJiNFwiLFxuICBcInRhblwiOiBcIiNkMmI0OGNcIixcbiAgXCJ0ZWFsXCI6IFwiIzAwODA4MFwiLFxuICBcInRoaXN0bGVcIjogXCIjZDhiZmQ4XCIsXG4gIFwidG9tYXRvXCI6IFwiI2ZmNjM0N1wiLFxuICBcInR1cnF1b2lzZVwiOiBcIiM0MGUwZDBcIixcbiAgXCJ2aW9sZXRcIjogXCIjZWU4MmVlXCIsXG4gIFwid2hlYXRcIjogXCIjZjVkZWIzXCIsXG4gIFwid2hpdGVcIjogXCIjZmZmZmZmXCIsXG4gIFwid2hpdGVzbW9rZVwiOiBcIiNmNWY1ZjVcIixcbiAgXCJ5ZWxsb3dcIjogXCIjZmZmZjAwXCIsXG4gIFwieWVsbG93Z3JlZW5cIjogXCIjOWFjZDMyXCJcbn0iLCJcbnZhciBuYW1lcyA9IHJlcXVpcmUoJy4vY3NzLWNvbG9yLW5hbWVzLmpzb24nKTtcbnZhciBIU0xVdGlsID0gcmVxdWlyZSgnLi9oc2wnKTtcbnZhciBoZXhUb1JHQkEgPSByZXF1aXJlKCcuL2hleC10by1yZ2JhJyk7XG52YXIgUkdCQVRvSGV4ID0gcmVxdWlyZSgnLi9yZ2JhLXRvLWhleCcpO1xudmFyIHdyYXAgPSByZXF1aXJlKCcuL3dyYXAnKTtcblxuZnVuY3Rpb24gcGFyc2VTdHlsZSAoc3RyKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbG9yIHBhcnNpbmcgbXVzdCBiZSBwZXJmb3JtZWQgb24gYSBzdHJpbmcgcGFyYW1ldGVyJyk7XG4gIH1cblxuICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcblxuICBpZiAoc3RyIGluIG5hbWVzKSB7XG4gICAgc3RyID0gbmFtZXNbc3RyXTtcbiAgfSBlbHNlIGlmIChzdHIgPT09ICd0cmFuc3BhcmVudCcpIHtcbiAgICBzdHIgPSAnIzAwMDAwMDAwJztcbiAgfVxuXG4gIHZhciByZ2JhLCBoc2xhLCBoZXg7XG4gIGlmICgvXiNbYS1mMC05XSskLy50ZXN0KHN0cikpIHtcbiAgICByZ2JhID0gaGV4VG9SR0JBKHN0cik7XG4gICAgaGV4ID0gUkdCQVRvSGV4KHJnYmEpO1xuICAgIGhzbGEgPSBIU0xVdGlsLlJHQkFUb0hTTEEocmdiYSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG1hdGNoID0gL14oKD86cmdifGhzbClhPylcXHMqXFwoKFteKV0qKVxcKS8uZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuICAgIHZhciB0eXBlID0gbWF0Y2hbMV0ucmVwbGFjZSgvYSQvLCAnJyk7XG4gICAgdmFyIHBhcnRzID0gbWF0Y2hbMl0ucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpLnNwbGl0KC9cXHMqLFxccyovKS5tYXAoZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIC8vIG9wYXF1ZSBwYXJ0XG4gICAgICBpZiAoaSA8PSAyKSByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KG4pIHx8IDApO1xuICAgICAgLy8gYWxwaGEgcGFydFxuICAgICAgZWxzZSB7XG4gICAgICAgIG4gPSBwYXJzZUZsb2F0KG4pO1xuICAgICAgICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZShuKSkgbiA9IDE7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIGZpbGwgaW4gYWxwaGEgd2l0aCAxLjAgYnkgZGVmYXVsdFxuICAgIGlmICh0eXBlb2YgcGFydHNbM10gPT09ICd1bmRlZmluZWQnIHx8ICFpc0Zpbml0ZShwYXJ0c1szXSkpIHtcbiAgICAgIHBhcnRzWzNdID0gMTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdyZ2InKSB7XG4gICAgICBoc2xhID0gSFNMVXRpbC5SR0JBVG9IU0xBKHBhcnRzKTtcbiAgICAgIHJnYmEgPSBwYXJ0cztcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdoc2wnKSB7XG4gICAgICByZ2JhID0gSFNMVXRpbC5IU0xBVG9SR0JBKHBhcnRzKTtcbiAgICAgIHBhcnRzWzBdID0gd3JhcChwYXJ0c1swXSwgMCwgMzYwKTtcbiAgICAgIGhzbGEgPSBwYXJ0cztcbiAgICB9XG4gICAgaGV4ID0gUkdCQVRvSGV4KHJnYmEpO1xuICB9XG5cbiAgaWYgKCFyZ2JhICYmICFoZXggJiYgIWhzbGEpIHJldHVybiBudWxsO1xuXG4gIHZhciByZXQgPSB7XG4gICAgaGV4OiBoZXgsXG4gICAgYWxwaGE6IHJnYmFbM10sXG4gICAgcmdiOiByZ2JhLnNsaWNlKDAsIDMpLFxuICAgIHJnYmE6IHJnYmEsXG4gICAgaHNsOiBoc2xhLnNsaWNlKDAsIDMpLFxuICAgIGhzbGE6IGhzbGFcbiAgfTtcblxuICByZXR1cm4gcmV0O1xufVxuXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHBhcnNlQ29sb3I7XG5mdW5jdGlvbiBwYXJzZUNvbG9yIChjb2xvcikge1xuICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXJzZVN0eWxlKGNvbG9yKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSAmJiBjb2xvci5sZW5ndGggPj0gMykge1xuICAgIHZhciByZ2JTdHIgPSByZ2JTdHlsZShjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSk7XG4gICAgcmV0dXJuIHBhcnNlU3R5bGUocmdiU3RyKTtcbiAgfSBlbHNlIGlmIChjb2xvciAmJiB0eXBlb2YgY29sb3IgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHN0cjtcbiAgICBpZiAoY29sb3IuaGV4KSBzdHIgPSBjb2xvci5oZXg7XG4gICAgZWxzZSBpZiAoY29sb3IucmdiYSkgc3RyID0gcmdiU3R5bGUoY29sb3IucmdiYVswXSwgY29sb3IucmdiYVsxXSwgY29sb3IucmdiYVsyXSwgY29sb3IucmdiYVszXSk7XG4gICAgZWxzZSBpZiAoY29sb3IuaHNsYSkgc3RyID0gaHNsU3R5bGUoY29sb3IuaHNsYVswXSwgY29sb3IuaHNsYVsxXSwgY29sb3IuaHNsYVsyXSwgY29sb3IuaHNsYVszXSk7XG4gICAgZWxzZSBpZiAoY29sb3IucmdiKSBzdHIgPSByZ2JTdHlsZShjb2xvci5yZ2JbMF0sIGNvbG9yLnJnYlsxXSwgY29sb3IucmdiWzJdKTtcbiAgICBlbHNlIGlmIChjb2xvci5oc2wpIHN0ciA9IGhzbFN0eWxlKGNvbG9yLmhzbFswXSwgY29sb3IuaHNsWzFdLCBjb2xvci5oc2xbMl0pO1xuICAgIGlmIChzdHIpIHJldHVybiBwYXJzZVN0eWxlKHN0cik7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzLnN0eWxlID0gc3R5bGU7XG5mdW5jdGlvbiBzdHlsZSAoY29sb3IpIHtcbiAgdmFyIHJlc3VsdCA9IG1vZHVsZS5leHBvcnRzLnBhcnNlKGNvbG9yKTtcbiAgaWYgKHJlc3VsdCkge1xuICAgIHZhciByZ2JhID0gcmVzdWx0LnJnYmE7XG4gICAgcmV0dXJuIHJnYlN0eWxlKHJnYmFbMF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJnYmFbM10pO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiByZ2JTdHlsZSAociwgZywgYiwgYSkge1xuICByID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHIpKSk7XG4gIGcgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoZykpKTtcbiAgYiA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChiKSkpO1xuICBpZiAoYSA9PT0gMSB8fCAhaXNGaW5pdGUoYSkgfHwgdHlwZW9mIGEgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICdyZ2IoJyArIFsgciwgZywgYiBdLmpvaW4oJywgJykgKyAnKSc7XG4gIH0gZWxzZSB7XG4gICAgYSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gJ3JnYmEoJyArIFsgciwgZywgYiwgYSBdLmpvaW4oJywgJykgKyAnKSc7XG4gIH1cbn1cblxuZnVuY3Rpb24gaHNsU3R5bGUgKGgsIHMsIGwsIGEpIHtcbiAgaCA9IHdyYXAoaCwgMCwgMzYwKTtcbiAgaCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDM2MCwgTWF0aC5yb3VuZChoKSkpO1xuICBzID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKHMpKSk7XG4gIGwgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQobCkpKTtcbiAgaWYgKGEgPT09IDEgfHwgIWlzRmluaXRlKGEpIHx8IHR5cGVvZiBhID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAnaHNsKCcgKyBbIGgsIHMsIGwgXS5qb2luKCcsICcpICsgJyknO1xuICB9IGVsc2Uge1xuICAgIGEgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XG4gICAgcmV0dXJuICdoc2xhKCcgKyBbIGgsIHMsIGwsIGEgXS5qb2luKCcsICcpICsgJyknO1xuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGhleFRvUkdCQTtcbmZ1bmN0aW9uIGhleFRvUkdCQSAoc3RyKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hleCBjb2RlIHBhcnNpbmcgbXVzdCBiZSBwZXJmb3JtZWQgb24gYSBzdHJpbmcgcGFyYW1ldGVyJyk7XG4gIH1cblxuICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcblxuICBpZiAoIS9eI1thLWYwLTldKyQvLnRlc3Qoc3RyKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGhleCA9IHN0ci5yZXBsYWNlKC9eIy8sICcnKTtcbiAgdmFyIGFscGhhID0gMTtcblxuICBpZiAoaGV4Lmxlbmd0aCA9PT0gOCkge1xuICAgIGFscGhhID0gcGFyc2VJbnQoaGV4LnNsaWNlKDYsIDgpLCAxNikgLyAyNTU7XG4gICAgaGV4ID0gaGV4LnNsaWNlKDAsIDYpO1xuICB9XG5cbiAgaWYgKGhleC5sZW5ndGggPT09IDQpIHtcbiAgICBhbHBoYSA9IHBhcnNlSW50KGhleC5zbGljZSgzLCA0KS5yZXBlYXQoMiksIDE2KSAvIDI1NTtcbiAgICBoZXggPSBoZXguc2xpY2UoMCwgMyk7XG4gIH1cblxuICBpZiAoaGV4Lmxlbmd0aCA9PT0gMykge1xuICAgIGhleCA9IGhleFswXSArIGhleFswXSArIGhleFsxXSArIGhleFsxXSArIGhleFsyXSArIGhleFsyXTtcbiAgfVxuXG4gIHZhciBudW0gPSBwYXJzZUludChoZXgsIDE2KTtcbiAgdmFyIHJlZCA9IG51bSA+PiAxNjtcbiAgdmFyIGdyZWVuID0gKG51bSA+PiA4KSAmIDI1NTtcbiAgdmFyIGJsdWUgPSBudW0gJiAyNTU7XG5cbiAgcmV0dXJuIFsgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEgXTtcbn1cbiIsInZhciBmbG9hdEhTTDJSR0IgPSByZXF1aXJlKCdmbG9hdC1oc2wycmdiJyk7XG52YXIgZmxvYXRSR0IySFNMID0gcmVxdWlyZSgnZmxvYXQtcmdiMmhzbCcpO1xudmFyIHdyYXAgPSByZXF1aXJlKCcuL3dyYXAnKTtcblxubW9kdWxlLmV4cG9ydHMuUkdCQVRvSFNMQSA9IFJHQkFUb0hTTEE7XG5mdW5jdGlvbiBSR0JBVG9IU0xBIChyZ2JhKSB7XG4gIHZhciBmbG9hdEhTTCA9IGZsb2F0UkdCMkhTTChbIHJnYmFbMF0gLyAyNTUsIHJnYmFbMV0gLyAyNTUsIHJnYmFbMl0gLyAyNTUgXSk7XG4gIHJldHVybiBbXG4gICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oMzYwLCBNYXRoLnJvdW5kKGZsb2F0SFNMWzBdICogMzYwKSkpLFxuICAgIE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChmbG9hdEhTTFsxXSAqIDEwMCkpKSxcbiAgICBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQoZmxvYXRIU0xbMl0gKiAxMDApKSksXG4gICAgcmdiYVszXVxuICBdO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5IU0xBVG9SR0JBID0gSFNMQVRvUkdCQTtcbmZ1bmN0aW9uIEhTTEFUb1JHQkEgKGhzbGEpIHtcbiAgdmFyIGh1ZSA9IHdyYXAoaHNsYVswXSwgMCwgMzYwKTtcbiAgdmFyIGZsb2F0UkdCID0gZmxvYXRIU0wyUkdCKFsgaHVlIC8gMzYwLCBoc2xhWzFdIC8gMTAwLCBoc2xhWzJdIC8gMTAwIF0pO1xuICByZXR1cm4gW1xuICAgIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChmbG9hdFJHQlswXSAqIDI1NSkpKSxcbiAgICBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoZmxvYXRSR0JbMV0gKiAyNTUpKSksXG4gICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKGZsb2F0UkdCWzJdICogMjU1KSkpLFxuICAgIGhzbGFbM11cbiAgXTtcbn1cbiIsIi8vIEkgYmVsaWV2ZSB0aGlzIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgVGF5bG9yIEJhbGR3aW4gKEB0YXlsb3JiYWxkd2luIC8gQHJvbHlhdG1heClcbi8vIElmIHRoYXQgaXMgbWlzY3JlZGl0ZWQgcGxlYXNlIG9wZW4gYW4gaXNzdWUuXG5cbnZhciBjbG9uZSA9IHJlcXVpcmUoJ2Nsb25lJyk7XG52YXIgc3F1YXJlZERpc3RhbmNlID0gcmVxdWlyZSgnLi92ZWMyJykuc3F1YXJlZERpc3RhbmNlO1xuXG5tb2R1bGUuZXhwb3J0cy5zb3J0ID0gZnVuY3Rpb24gc29ydCAocGF0aHMpIHtcbiAgcGF0aHMgPSBjbG9uZShwYXRocyk7XG5cbiAgaWYgKCFwYXRocy5sZW5ndGgpIHJldHVybiBwYXRocztcblxuICB2YXIgbmV3UGF0aHMgPSBbXTtcbiAgbmV3UGF0aHMucHVzaChwYXRoc1swXSk7XG5cbiAgcGF0aHMgPSBwYXRocy5zbGljZSgxKTtcblxuICB3aGlsZSAocGF0aHMubGVuZ3RoKSB7XG4gICAgdmFyIGxhc3RQYXRoID0gbmV3UGF0aHNbbmV3UGF0aHMubGVuZ3RoIC0gMV07XG4gICAgdmFyIGN1clB0ID0gbGFzdFBhdGhbbGFzdFBhdGgubGVuZ3RoIC0gMV07XG4gICAgdmFyIHJlc3VsdCA9IHBhdGhzLnJlZHVjZShmdW5jdGlvbiAoY2xvc2VzdCwgcGF0aCwgaSkge1xuICAgICAgdmFyIGZpcnN0UHQgPSBwYXRoWzBdO1xuICAgICAgdmFyIGxhc3RQdCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICAgIHZhciBkaXN0YW5jZVRvRmlyc3QgPSBzcXVhcmVkRGlzdGFuY2UoY3VyUHQsIGZpcnN0UHQpO1xuICAgICAgdmFyIGRpc3RhbmNlVG9MYXN0ID0gc3F1YXJlZERpc3RhbmNlKGN1clB0LCBsYXN0UHQpO1xuICAgICAgaWYgKCFjbG9zZXN0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWR4OiBpLFxuICAgICAgICAgIGRpc3RhbmNlOiBNYXRoLm1pbihkaXN0YW5jZVRvRmlyc3QsIGRpc3RhbmNlVG9MYXN0KSxcbiAgICAgICAgICByZXZlcnNlOiBkaXN0YW5jZVRvTGFzdCA8IGRpc3RhbmNlVG9GaXJzdFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGRpc3RhbmNlVG9GaXJzdCA8IGNsb3Nlc3QuZGlzdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZHg6IGksXG4gICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlVG9GaXJzdCxcbiAgICAgICAgICByZXZlcnNlOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGRpc3RhbmNlVG9MYXN0IDwgY2xvc2VzdC5kaXN0YW5jZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2VUb0xhc3QsXG4gICAgICAgICAgcmV2ZXJzZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsb3Nlc3Q7XG4gICAgfSwgbnVsbCk7XG4gICAgdmFyIGlkeCA9IHJlc3VsdC5pZHg7XG4gICAgdmFyIHJldmVyc2UgPSByZXN1bHQucmV2ZXJzZTtcbiAgICB2YXIgY2xvc2VzdFBhdGggPSBwYXRocy5zcGxpY2UoaWR4LCAxKVswXS5zbGljZSgpO1xuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICBjbG9zZXN0UGF0aC5yZXZlcnNlKCk7XG4gICAgfVxuICAgIG5ld1BhdGhzLnB1c2goY2xvc2VzdFBhdGgpO1xuICB9XG4gIHJldHVybiBuZXdQYXRocztcbn07XG5cbm1vZHVsZS5leHBvcnRzLm1lcmdlID0gZnVuY3Rpb24gbWVyZ2UgKHBhdGhzLCBtZXJnZVRocmVoc29sZCkge1xuICBtZXJnZVRocmVoc29sZCA9IG1lcmdlVGhyZWhzb2xkICE9IG51bGwgPyBtZXJnZVRocmVoc29sZCA6IDAuMDU7XG5cbiAgdmFyIG1lcmdlVGhyZWhzb2xkU3EgPSBtZXJnZVRocmVoc29sZCAqIG1lcmdlVGhyZWhzb2xkO1xuICBwYXRocyA9IGNsb25lKHBhdGhzKTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBwYXRocy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsYXN0UGF0aCA9IHBhdGhzW2kgLSAxXTtcbiAgICB2YXIgY3VyUGF0aCA9IHBhdGhzW2ldO1xuICAgIGlmIChzcXVhcmVkRGlzdGFuY2UoY3VyUGF0aFswXSwgbGFzdFBhdGhbbGFzdFBhdGgubGVuZ3RoIC0gMV0pIDwgbWVyZ2VUaHJlaHNvbGRTcSkge1xuICAgICAgcGF0aHMgPSBtZXJnZVBhdGhzKHBhdGhzLCBpIC0gMSwgaSk7XG4gICAgICBpIC09IDE7IC8vIG5vdyB0aGF0IHdlJ3ZlIG1lcmdlZCwgdmFyJ3MgY29ycmVjdCBpIGZvciB0aGUgbmV4dCByb3VuZFxuICAgIH1cbiAgfVxuICByZXR1cm4gcGF0aHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZVBhdGhzIChwYXRocywgcGF0aDFJZHgsIHBhdGgySWR4KSB7XG4gIC8vIHRoaXMgd2lsbCBoZWxwIHVzIGtlZXAgdGhpbmdzIGluIG9yZGVyIHdoZW4gd2UgZG8gdGhlIHNwbGljaW5nXG4gIHZhciBtaW5JZHggPSBNYXRoLm1pbihwYXRoMUlkeCwgcGF0aDJJZHgpO1xuICB2YXIgbWF4SWR4ID0gTWF0aC5tYXgocGF0aDFJZHgsIHBhdGgySWR4KTtcbiAgcGF0aHMgPSBwYXRocy5zbGljZSgpO1xuICB2YXIgcGF0aDEgPSBwYXRoc1ttaW5JZHhdO1xuICB2YXIgcGF0aDIgPSBwYXRoc1ttYXhJZHhdO1xuICB2YXIgbWVyZ2VkUGF0aCA9IHBhdGgxLmNvbmNhdChwYXRoMi5zbGljZSgxKSk7XG4gIHBhdGhzLnNwbGljZShtYXhJZHgsIDEpO1xuICBwYXRocy5zcGxpY2UobWluSWR4LCAxLCBtZXJnZWRQYXRoKTtcbiAgcmV0dXJuIHBhdGhzO1xufVxuXG4vLyB0aGlzIGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHBhdGhzIC0gZnJvbSB0aGUgZW5kIG9mIHBhdGggMSB0byB0aGUgc3RhcnQgb2YgcGF0aCAyXG4vLyBmdW5jdGlvbiBnZXRUcmF2ZWxpbmdEaXN0YW5jZSAocGF0aHMpIHtcbi8vICAgdmFyIHRvdGFsID0gMDtcbi8vICAgdmFyIGxhc3RQdCA9IHBhdGhzWzBdW3BhdGhzWzBdLmxlbmd0aCAtIDFdO1xuLy8gICBmb3IgKHZhciBwYXRoIG9mIHBhdGhzLnNsaWNlKDEpKSB7XG4vLyAgICAgdmFyIHNxdWFyZWREaXN0ID0gc3F1YXJlZERpc3RhbmNlKGxhc3RQdCwgcGF0aFswXSk7XG4vLyAgICAgdG90YWwgKz0gTWF0aC5zcXJ0KHNxdWFyZWREaXN0KTtcbi8vICAgICBsYXN0UHQgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4vLyAgIH1cbi8vICAgcmV0dXJuIHRvdGFsO1xuLy8gfVxuIiwiLy8gRXh0cmFjdGVkIGZyb20gQHRtY3cgLyB3Y2FnLWNvbnRyYXN0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdG1jdy9yZWxhdGl2ZS1sdW1pbmFuY2UvYmxvYi9tYXN0ZXIvaW5kZXguanNcblxuLy8gIyBSZWxhdGl2ZSBsdW1pbmFuY2Vcbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0x1bWluYW5jZV8ocmVsYXRpdmUpXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MdW1pbm9zaXR5X2Z1bmN0aW9uXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZWMuXzcwOSNMdW1hX2NvZWZmaWNpZW50c1xuXG4vLyByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb2VmZmljaWVudHNcbnZhciByYyA9IDAuMjEyNjtcbnZhciBnYyA9IDAuNzE1MjtcbnZhciBiYyA9IDAuMDcyMjtcbi8vIGxvdy1nYW1tYSBhZGp1c3QgY29lZmZpY2llbnRcbnZhciBsb3djID0gMSAvIDEyLjkyO1xuXG5mdW5jdGlvbiBhZGp1c3RHYW1tYSAoYSkge1xuICByZXR1cm4gTWF0aC5wb3coKGEgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWxhdGl2ZUx1bWluYW5jZTtcbmZ1bmN0aW9uIHJlbGF0aXZlTHVtaW5hbmNlIChyZ2IpIHtcbiAgdmFyIHJzcmdiID0gcmdiWzBdIC8gMjU1O1xuICB2YXIgZ3NyZ2IgPSByZ2JbMV0gLyAyNTU7XG4gIHZhciBic3JnYiA9IHJnYlsyXSAvIDI1NTtcbiAgdmFyIHIgPSByc3JnYiA8PSAwLjAzOTI4ID8gcnNyZ2IgKiBsb3djIDogYWRqdXN0R2FtbWEocnNyZ2IpO1xuICB2YXIgZyA9IGdzcmdiIDw9IDAuMDM5MjggPyBnc3JnYiAqIGxvd2MgOiBhZGp1c3RHYW1tYShnc3JnYik7XG4gIHZhciBiID0gYnNyZ2IgPD0gMC4wMzkyOCA/IGJzcmdiICogbG93YyA6IGFkanVzdEdhbW1hKGJzcmdiKTtcbiAgcmV0dXJuIHIgKiByYyArIGcgKiBnYyArIGIgKiBiYztcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmdiYVRvSGV4O1xuZnVuY3Rpb24gcmdiYVRvSGV4IChyZ2JhKSB7XG4gIGlmICghcmdiYSB8fCAhQXJyYXkuaXNBcnJheShyZ2JhKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ011c3Qgc3BlY2lmeSBhbiBhcnJheSB0byBjb252ZXJ0IGludG8gYSBoZXggY29kZScpO1xuICB9XG5cbiAgdmFyIHIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQocmdiYVswXSB8fCAwKSkpO1xuICB2YXIgZyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChyZ2JhWzFdIHx8IDApKSk7XG4gIHZhciBiID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHJnYmFbMl0gfHwgMCkpKTtcblxuICB2YXIgYWxwaGEgPSByZ2JhWzNdO1xuICBpZiAodHlwZW9mIGFscGhhID09PSAndW5kZWZpbmVkJyB8fCAhaXNGaW5pdGUoYWxwaGEpKSB7XG4gICAgYWxwaGEgPSAxO1xuICB9XG4gIHZhciBhID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKGFscGhhICogMjU1KSkpO1xuICB2YXIgYWxwaGFQYXJhbSA9IGEgPT09IDI1NSA/ICcnIDogKGEgfCAxIDw8IDgpLnRvU3RyaW5nKDE2KS5zbGljZSgxKTtcbiAgdmFyIHJlc3VsdCA9ICgoYiB8IGcgPDwgOCB8IHIgPDwgMTYpIHwgMSA8PCAyNCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpICsgYWxwaGFQYXJhbTtcbiAgcmV0dXJuICcjJyArIHJlc3VsdDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzLnNxdWFyZWREaXN0YW5jZSA9IHNxdWFyZWREaXN0YW5jZTtcbmZ1bmN0aW9uIHNxdWFyZWREaXN0YW5jZSAocHQxLCBwdDIpIHtcbiAgdmFyIGR4ID0gcHQyWzBdIC0gcHQxWzBdO1xuICB2YXIgZHkgPSBwdDJbMV0gLSBwdDFbMV07XG4gIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gd3JhcDtcbmZ1bmN0aW9uIHdyYXAgKHZhbHVlLCBmcm9tLCB0bykge1xuICBpZiAodHlwZW9mIGZyb20gIT09ICdudW1iZXInIHx8IHR5cGVvZiB0byAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHNwZWNpZnkgXCJ0b1wiIGFuZCBcImZyb21cIiBhcmd1bWVudHMgYXMgbnVtYmVycycpO1xuICB9XG4gIC8vIGFsZ29yaXRobSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU4NTI2MjgvNTk5ODg0XG4gIGlmIChmcm9tID4gdG8pIHtcbiAgICB2YXIgdCA9IGZyb207XG4gICAgZnJvbSA9IHRvO1xuICAgIHRvID0gdDtcbiAgfVxuICB2YXIgY3ljbGUgPSB0byAtIGZyb207XG4gIGlmIChjeWNsZSA9PT0gMCkge1xuICAgIHJldHVybiB0bztcbiAgfVxuICByZXR1cm4gdmFsdWUgLSBjeWNsZSAqIE1hdGguZmxvb3IoKHZhbHVlIC0gZnJvbSkgLyBjeWNsZSk7XG59XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB3cmFwID0gcmVxdWlyZSgnLi9saWIvd3JhcCcpO1xudmFyIEVQU0lMT04gPSBOdW1iZXIuRVBTSUxPTjtcblxuZnVuY3Rpb24gY2xhbXAgKHZhbHVlLCBtaW4sIG1heCkge1xuICByZXR1cm4gbWluIDwgbWF4XG4gICAgPyAodmFsdWUgPCBtaW4gPyBtaW4gOiB2YWx1ZSA+IG1heCA/IG1heCA6IHZhbHVlKVxuICAgIDogKHZhbHVlIDwgbWF4ID8gbWF4IDogdmFsdWUgPiBtaW4gPyBtaW4gOiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wMDEgKHYpIHtcbiAgcmV0dXJuIGNsYW1wKHYsIDAsIDEpO1xufVxuXG5mdW5jdGlvbiBsZXJwIChtaW4sIG1heCwgdCkge1xuICByZXR1cm4gbWluICogKDEgLSB0KSArIG1heCAqIHQ7XG59XG5cbmZ1bmN0aW9uIGludmVyc2VMZXJwIChtaW4sIG1heCwgdCkge1xuICBpZiAoTWF0aC5hYnMobWluIC0gbWF4KSA8IEVQU0lMT04pIHJldHVybiAwO1xuICBlbHNlIHJldHVybiAodCAtIG1pbikgLyAobWF4IC0gbWluKTtcbn1cblxuZnVuY3Rpb24gc21vb3Roc3RlcCAobWluLCBtYXgsIHQpIHtcbiAgdmFyIHggPSBjbGFtcChpbnZlcnNlTGVycChtaW4sIG1heCwgdCksIDAsIDEpO1xuICByZXR1cm4geCAqIHggKiAoMyAtIDIgKiB4KTtcbn1cblxuZnVuY3Rpb24gdG9GaW5pdGUgKG4sIGRlZmF1bHRWYWx1ZSkge1xuICBkZWZhdWx0VmFsdWUgPSBkZWZpbmVkKGRlZmF1bHRWYWx1ZSwgMCk7XG4gIHJldHVybiB0eXBlb2YgbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUobikgPyBuIDogZGVmYXVsdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBleHBhbmRWZWN0b3IgKGRpbXMpIHtcbiAgaWYgKHR5cGVvZiBkaW1zICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZGltcyBhcmd1bWVudCcpO1xuICByZXR1cm4gZnVuY3Rpb24gKHAsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmluZWQoZGVmYXVsdFZhbHVlLCAwKTtcbiAgICB2YXIgc2NhbGFyO1xuICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgIC8vIE5vIHZlY3RvciwgY3JlYXRlIGEgZGVmYXVsdCBvbmVcbiAgICAgIHNjYWxhciA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShwKSkge1xuICAgICAgLy8gRXhwYW5kIHNpbmdsZSBjaGFubmVsIHRvIG11bHRpcGxlIHZlY3RvclxuICAgICAgc2NhbGFyID0gcDtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gW107XG4gICAgdmFyIGk7XG4gICAgaWYgKHNjYWxhciA9PSBudWxsKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZGltczsgaSsrKSB7XG4gICAgICAgIG91dFtpXSA9IHRvRmluaXRlKHBbaV0sIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBkaW1zOyBpKyspIHtcbiAgICAgICAgb3V0W2ldID0gc2NhbGFyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBsZXJwQXJyYXkgKG1pbiwgbWF4LCB0LCBvdXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdO1xuICBpZiAobWluLmxlbmd0aCAhPT0gbWF4Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBhbmQgbWF4IGFycmF5IGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBzYW1lIGxlbmd0aCcpO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWluLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0W2ldID0gbGVycChtaW5baV0sIG1heFtpXSwgdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbmV3QXJyYXkgKG4sIGluaXRpYWxWYWx1ZSkge1xuICBuID0gZGVmaW5lZChuLCAwKTtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbiBhcmd1bWVudCB0byBiZSBhIG51bWJlcicpO1xuICB2YXIgb3V0ID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBvdXQucHVzaChpbml0aWFsVmFsdWUpO1xuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBsaW5zcGFjZSAobiwgb3B0cykge1xuICBuID0gZGVmaW5lZChuLCAwKTtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbiBhcmd1bWVudCB0byBiZSBhIG51bWJlcicpO1xuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnYm9vbGVhbicpIHtcbiAgICBvcHRzID0geyBlbmRwb2ludDogdHJ1ZSB9O1xuICB9XG4gIHZhciBvZmZzZXQgPSBkZWZpbmVkKG9wdHMub2Zmc2V0LCAwKTtcbiAgaWYgKG9wdHMuZW5kcG9pbnQpIHtcbiAgICByZXR1cm4gbmV3QXJyYXkobikubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICByZXR1cm4gbiA8PSAxID8gMCA6ICgoaSArIG9mZnNldCkgLyAobiAtIDEpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3QXJyYXkobikubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICByZXR1cm4gKGkgKyBvZmZzZXQpIC8gbjtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsZXJwRnJhbWVzICh2YWx1ZXMsIHQsIG91dCkge1xuICB0ID0gY2xhbXAodCwgMCwgMSk7XG5cbiAgdmFyIGxlbiA9IHZhbHVlcy5sZW5ndGggLSAxO1xuICB2YXIgd2hvbGUgPSB0ICogbGVuO1xuICB2YXIgZnJhbWUgPSBNYXRoLmZsb29yKHdob2xlKTtcbiAgdmFyIGZyYWN0ID0gd2hvbGUgLSBmcmFtZTtcblxuICB2YXIgbmV4dEZyYW1lID0gTWF0aC5taW4oZnJhbWUgKyAxLCBsZW4pO1xuICB2YXIgYSA9IHZhbHVlc1tmcmFtZSAlIHZhbHVlcy5sZW5ndGhdO1xuICB2YXIgYiA9IHZhbHVlc1tuZXh0RnJhbWUgJSB2YWx1ZXMubGVuZ3RoXTtcbiAgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYiA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbGVycChhLCBiLCBmcmFjdCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgcmV0dXJuIGxlcnBBcnJheShhLCBiLCBmcmFjdCwgb3V0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXNtYXRjaCBpbiB2YWx1ZSB0eXBlIG9mIHR3byBhcnJheSBlbGVtZW50czogJyArIGZyYW1lICsgJyBhbmQgJyArIG5leHRGcmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW9kIChhLCBiKSB7XG4gIHJldHVybiAoKGEgJSBiKSArIGIpICUgYjtcbn1cblxuZnVuY3Rpb24gZGVnVG9SYWQgKG4pIHtcbiAgcmV0dXJuIG4gKiBNYXRoLlBJIC8gMTgwO1xufVxuXG5mdW5jdGlvbiByYWRUb0RlZyAobikge1xuICByZXR1cm4gbiAqIDE4MCAvIE1hdGguUEk7XG59XG5cbmZ1bmN0aW9uIGZyYWN0IChuKSB7XG4gIHJldHVybiBuIC0gTWF0aC5mbG9vcihuKTtcbn1cblxuZnVuY3Rpb24gc2lnbiAobikge1xuICBpZiAobiA+IDApIHJldHVybiAxO1xuICBlbHNlIGlmIChuIDwgMCkgcmV0dXJuIC0xO1xuICBlbHNlIHJldHVybiAwO1xufVxuXG4vLyBTcGVjaWZpYyBmdW5jdGlvbiBmcm9tIFVuaXR5IC8gb2ZNYXRoLCBub3Qgc3VyZSBpdHMgbmVlZGVkP1xuLy8gZnVuY3Rpb24gbGVycFdyYXAgKGEsIGIsIHQsIG1pbiwgbWF4KSB7XG4vLyAgIHJldHVybiB3cmFwKGEgKyB3cmFwKGIgLSBhLCBtaW4sIG1heCkgKiB0LCBtaW4sIG1heClcbi8vIH1cblxuZnVuY3Rpb24gcGluZ1BvbmcgKHQsIGxlbmd0aCkge1xuICB0ID0gbW9kKHQsIGxlbmd0aCAqIDIpO1xuICByZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnModCAtIGxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGRhbXAgKGEsIGIsIGxhbWJkYSwgZHQpIHtcbiAgcmV0dXJuIGxlcnAoYSwgYiwgMSAtIE1hdGguZXhwKC1sYW1iZGEgKiBkdCkpO1xufVxuXG5mdW5jdGlvbiBkYW1wQXJyYXkgKGEsIGIsIGxhbWJkYSwgZHQsIG91dCkge1xuICBvdXQgPSBvdXQgfHwgW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIG91dFtpXSA9IGRhbXAoYVtpXSwgYltpXSwgbGFtYmRhLCBkdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbWFwUmFuZ2UgKHZhbHVlLCBpbnB1dE1pbiwgaW5wdXRNYXgsIG91dHB1dE1pbiwgb3V0cHV0TWF4LCBjbGFtcCkge1xuICAvLyBSZWZlcmVuY2U6XG4gIC8vIGh0dHBzOi8vb3BlbmZyYW1ld29ya3MuY2MvZG9jdW1lbnRhdGlvbi9tYXRoL29mTWF0aC9cbiAgaWYgKE1hdGguYWJzKGlucHV0TWluIC0gaW5wdXRNYXgpIDwgRVBTSUxPTikge1xuICAgIHJldHVybiBvdXRwdXRNaW47XG4gIH0gZWxzZSB7XG4gICAgdmFyIG91dFZhbCA9ICgodmFsdWUgLSBpbnB1dE1pbikgLyAoaW5wdXRNYXggLSBpbnB1dE1pbikgKiAob3V0cHV0TWF4IC0gb3V0cHV0TWluKSArIG91dHB1dE1pbik7XG4gICAgaWYgKGNsYW1wKSB7XG4gICAgICBpZiAob3V0cHV0TWF4IDwgb3V0cHV0TWluKSB7XG4gICAgICAgIGlmIChvdXRWYWwgPCBvdXRwdXRNYXgpIG91dFZhbCA9IG91dHB1dE1heDtcbiAgICAgICAgZWxzZSBpZiAob3V0VmFsID4gb3V0cHV0TWluKSBvdXRWYWwgPSBvdXRwdXRNaW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3V0VmFsID4gb3V0cHV0TWF4KSBvdXRWYWwgPSBvdXRwdXRNYXg7XG4gICAgICAgIGVsc2UgaWYgKG91dFZhbCA8IG91dHB1dE1pbikgb3V0VmFsID0gb3V0cHV0TWluO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0VmFsO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtb2Q6IG1vZCxcbiAgZnJhY3Q6IGZyYWN0LFxuICBzaWduOiBzaWduLFxuICBkZWdUb1JhZDogZGVnVG9SYWQsXG4gIHJhZFRvRGVnOiByYWRUb0RlZyxcbiAgd3JhcDogd3JhcCxcbiAgcGluZ1Bvbmc6IHBpbmdQb25nLFxuICBsaW5zcGFjZTogbGluc3BhY2UsXG4gIGxlcnA6IGxlcnAsXG4gIGxlcnBBcnJheTogbGVycEFycmF5LFxuICBpbnZlcnNlTGVycDogaW52ZXJzZUxlcnAsXG4gIGxlcnBGcmFtZXM6IGxlcnBGcmFtZXMsXG4gIGNsYW1wOiBjbGFtcCxcbiAgY2xhbXAwMTogY2xhbXAwMSxcbiAgc21vb3Roc3RlcDogc21vb3Roc3RlcCxcbiAgZGFtcDogZGFtcCxcbiAgZGFtcEFycmF5OiBkYW1wQXJyYXksXG4gIG1hcFJhbmdlOiBtYXBSYW5nZSxcbiAgZXhwYW5kMkQ6IGV4cGFuZFZlY3RvcigyKSxcbiAgZXhwYW5kM0Q6IGV4cGFuZFZlY3RvcigzKSxcbiAgZXhwYW5kNEQ6IGV4cGFuZFZlY3Rvcig0KVxufTtcbiIsInZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xudmFyIGNvbnZlcnQgPSByZXF1aXJlKCdjb252ZXJ0LWxlbmd0aCcpO1xudmFyIGQzID0gcmVxdWlyZSgnZDMtcGF0aCcpO1xudmFyIHN2Z1BhdGhDb250b3VycyA9IHJlcXVpcmUoJ3N2Zy1wYXRoLWNvbnRvdXJzJyk7XG52YXIgc3ZnUGF0aFBhcnNlID0gcmVxdWlyZSgncGFyc2Utc3ZnLXBhdGgnKTtcbnZhciBzdmdQYXRoQWJzID0gcmVxdWlyZSgnYWJzLXN2Zy1wYXRoJyk7XG52YXIgc3ZnUGF0aEFyY3MgPSByZXF1aXJlKCdub3JtYWxpemUtc3ZnLXBhdGgnKTtcbnZhciBvcHRpbWl6ZXIgPSByZXF1aXJlKCcuL2xpYi9vcHRpbWl6ZS1wZW5wbG90LXBhdGhzJyk7XG52YXIgZ2VvbWV0cnkgPSByZXF1aXJlKCcuL2dlb21ldHJ5Jyk7XG5cbnZhciBERUZBVUxUX1BFTl9USElDS05FU1MgPSAwLjAzO1xudmFyIERFRkFVTFRfUEVOX1RISUNLTkVTU19VTklUID0gJ2NtJztcbnZhciBERUZBVUxUX1BJWEVMU19QRVJfSU5DSCA9IDkwO1xuXG4vLyBBIFBhdGggaGVscGVyIGZvciBhcmNzLCBjdXJ2ZXMgYW5kIGxpbmVUbyBjb21tYW5kc1xubW9kdWxlLmV4cG9ydHMuY3JlYXRlUGF0aCA9IGNyZWF0ZVBhdGg7XG5mdW5jdGlvbiBjcmVhdGVQYXRoIChmbikge1xuICB2YXIgcGF0aCA9IGQzLnBhdGgoKTtcbiAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykgZm4ocGF0aCk7XG4gIHBhdGgubGluZVRvID0gd3JhcChwYXRoLmxpbmVUbyk7XG4gIHBhdGgucXVhZHJhdGljQ3VydmVUbyA9IHdyYXAocGF0aC5xdWFkcmF0aWNDdXJ2ZVRvKTtcbiAgcGF0aC5iZXppZXJDdXJ2ZVRvID0gd3JhcChwYXRoLmJlemllckN1cnZlVG8pO1xuICByZXR1cm4gcGF0aDtcblxuICAvLyBQYXRjaCBhIGJ1ZyBpbiBkMy1wYXRoIHRoYXQgZG9lc24ndCBoYW5kbGVcbiAgLy8gbGluZVRvIGFuZCBzbyBvbiB3aXRob3V0IGFuIGluaXRpYWwgbW92ZVRvXG4gIGZ1bmN0aW9uIHdyYXAgKGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIGlmIChwYXRoLl94MSA9PSBudWxsICYmIHBhdGguX3kxID09IG51bGwpIHtcbiAgICAgICAgcGF0aC5tb3ZlVG8oYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm4uYXBwbHkocGF0aCwgYXJncyk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5wYXRoc1RvU1ZHUGF0aHMgPSBwYXRoc1RvU1ZHUGF0aHM7XG5mdW5jdGlvbiBwYXRoc1RvU1ZHUGF0aHMgKGlucHV0cywgb3B0KSB7XG4gIG9wdCA9IG9wdCB8fCB7fTtcblxuICB2YXIgc3ZnUGF0aCA9IGNvbnZlcnRUb1NWR1BhdGgoaW5wdXRzLCBvcHQpO1xuICB2YXIgc3ZnUGF0aHMgPSBBcnJheS5pc0FycmF5KHN2Z1BhdGgpID8gc3ZnUGF0aCA6IFsgc3ZnUGF0aCBdO1xuICByZXR1cm4gc3ZnUGF0aHMuZmlsdGVyKEJvb2xlYW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5wYXRoc1RvUG9seWxpbmVzID0gcGF0aHNUb1BvbHlsaW5lcztcbmZ1bmN0aW9uIHBhdGhzVG9Qb2x5bGluZXMgKGlucHV0cywgb3B0KSB7XG4gIG9wdCA9IG9wdCB8fCB7fTtcblxuICB2YXIgc2NhbGU7XG4gIGlmIChvcHQuY3VydmVSZXNvbHV0aW9uICE9IG51bGwgJiYgaXNGaW5pdGUob3B0LmN1cnZlUmVzb2x1dGlvbikgJiYgdHlwZW9mIG9wdC5jdXJ2ZVJlc29sdXRpb24gPT09ICdudW1iZXInKSB7XG4gICAgc2NhbGUgPSBvcHQuY3VydmVSZXNvbHV0aW9uO1xuICB9IGVsc2Uge1xuICAgIHZhciB1bml0cyA9IG9wdC51bml0cyB8fCAncHgnO1xuICAgIHNjYWxlID0gTWF0aC5tYXgoMSwgY29udmVydCg0LCB1bml0cywgJ3B4JykpO1xuICB9XG5cbiAgdmFyIGNvbnRvdXJzID0gW107XG4gIGVhY2hQYXRoKGlucHV0cywgZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICBpZiAodHlwZW9mIGZlYXR1cmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgY29tbWFuZHMgPSBzdmdQYXRoUGFyc2UoZmVhdHVyZSk7XG4gICAgICB2YXIgc3ViQ29udG91cnMgPSBzdmdQYXRoQ29udG91cnMoY29tbWFuZHMsIHNjYWxlKTtcbiAgICAgIHN1YkNvbnRvdXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YkNvbnRvdXIpIHtcbiAgICAgICAgY29udG91cnMucHVzaChzdWJDb250b3VyKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvdXRwdXQgb25seSAyRCBwb2x5bGluZXNcbiAgICAgIHZhciBwb2x5bGluZSA9IGZlYXR1cmUubWFwKGZ1bmN0aW9uIChwb2ludCkge1xuICAgICAgICByZXR1cm4gWyBwb2ludFswXSB8fCAwLCBwb2ludFsxXSB8fCAwIF07XG4gICAgICB9KTtcbiAgICAgIGNvbnRvdXJzLnB1c2gocG9seWxpbmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb250b3Vycztcbn1cblxubW9kdWxlLmV4cG9ydHMucGF0aHNUb1NWRyA9IHBhdGhzVG9TVkc7XG5mdW5jdGlvbiBwYXRoc1RvU1ZHIChpbnB1dHMsIG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG5cbiAgdmFyIHdpZHRoID0gb3B0LndpZHRoO1xuICB2YXIgaGVpZ2h0ID0gb3B0LmhlaWdodDtcblxuICB2YXIgY29tcHV0ZUJvdW5kcyA9IHR5cGVvZiB3aWR0aCA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGhlaWdodCA9PT0gJ3VuZGVmaW5lZCc7XG4gIGlmIChjb21wdXRlQm91bmRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgXCJ3aWR0aFwiIGFuZCBcImhlaWdodFwiIG9wdGlvbnMnKTtcbiAgfVxuXG4gIHZhciB2aWV3VW5pdHMgPSAncHgnO1xuICB2YXIgdW5pdHMgPSBvcHQudW5pdHMgfHwgdmlld1VuaXRzO1xuXG4gIHZhciBjb252ZXJ0T3B0aW9ucyA9IHtcbiAgICB1bml0czogdW5pdHMsXG4gICAgdmlld1VuaXRzOiAncHgnLFxuICAgIHJvdW5kUGl4ZWw6IGZhbHNlLFxuICAgIHByZWNpc2lvbjogZGVmaW5lZChvcHQucHJlY2lzaW9uLCA1KSxcbiAgICBwaXhlbHNQZXJJbmNoOiBERUZBVUxUX1BJWEVMU19QRVJfSU5DSFxuICB9O1xuXG4gIC8vIENvbnZlcnQgYWxsIFNWR1BhdGhzL3BhdGhzL2V0YyB0byBwb2x5bGluZXNcbiAgLy8gVGhpcyB3b24ndCBjaGFuZ2UgdGhlaXIgdW5pdHMgc28gdGhleSBhcmUgc3RpbGwgaW4gdXNlciBzcGFjZVxuICBpbnB1dHMgPSBwYXRoc1RvUG9seWxpbmVzKGlucHV0cywgT2JqZWN0LmFzc2lnbih7fSwgY29udmVydE9wdGlvbnMsIHtcbiAgICBjdXJ2ZVJlc29sdXRpb246IG9wdC5jdXJ2ZVJlc29sdXRpb24gfHwgdW5kZWZpbmVkXG4gIH0pKTtcblxuICAvLyBUT0RPOiBhbGxvdyBmb3IgJ3JlcGVhdCcgb3B0aW9uXG4gIGlmIChvcHQub3B0aW1pemUpIHtcbiAgICB2YXIgb3B0aW1pemVPcHRzID0gdHlwZW9mIG9wdC5vcHRpbWl6ZSA9PT0gJ29iamVjdCcgPyBvcHQub3B0aW1pemUgOiB7XG4gICAgICBzb3J0OiB0cnVlLFxuICAgICAgbWVyZ2U6IHRydWUsXG4gICAgICByZW1vdmVEdXBsaWNhdGVzOiB0cnVlLFxuICAgICAgcmVtb3ZlQ29sbGluZWFyOiB0cnVlXG4gICAgfTtcbiAgICB2YXIgc2hvdWxkU29ydCA9IG9wdGltaXplT3B0cy5zb3J0ICE9PSBmYWxzZTtcbiAgICB2YXIgc2hvdWxkTWVyZ2UgPSBvcHRpbWl6ZU9wdHMubWVyZ2UgIT09IGZhbHNlO1xuICAgIHZhciBzaG91bGRSZW1vdmVEdXBsaWNhdGUgPSBvcHRpbWl6ZU9wdHMucmVtb3ZlRHVwbGljYXRlcyAhPT0gZmFsc2U7XG4gICAgdmFyIHNob3VsZFJlbW92ZUNvbGxpbmVhciA9IG9wdGltaXplT3B0cy5yZW1vdmVDb2xsaW5lYXIgIT09IGZhbHNlO1xuICAgIGlmIChzaG91bGRSZW1vdmVEdXBsaWNhdGUpIHtcbiAgICAgIGlucHV0cyA9IGlucHV0cy5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgcmV0dXJuIGdlb21ldHJ5LnJlbW92ZUR1cGxpY2F0ZVBvaW50cyhsaW5lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2hvdWxkUmVtb3ZlQ29sbGluZWFyKSB7XG4gICAgICBpbnB1dHMgPSBpbnB1dHMubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHJldHVybiBnZW9tZXRyeS5yZW1vdmVDb2xsaW5lYXJQb2ludHMobGluZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gbm93IGRvIHNvcnRpbmcgJiBtZXJnaW5nXG4gICAgaWYgKHNob3VsZFNvcnQpIGlucHV0cyA9IG9wdGltaXplci5zb3J0KGlucHV0cyk7XG4gICAgaWYgKHNob3VsZE1lcmdlKSB7XG4gICAgICB2YXIgbWVyZ2VUaHJlc2hvbGQgPSBvcHRpbWl6ZU9wdHMubWVyZ2VUaHJlc2hvbGQgIT0gbnVsbFxuICAgICAgICA/IG9wdGltaXplT3B0cy5tZXJnZVRocmVzaG9sZFxuICAgICAgICA6IGNvbnZlcnQoMC4yNSwgJ21tJywgdW5pdHMsIHtcbiAgICAgICAgICBwaXhlbHNQZXJJbmNoOiBERUZBVUxUX1BJWEVMU19QRVJfSU5DSFxuICAgICAgICB9KTtcbiAgICAgIGlucHV0cyA9IG9wdGltaXplci5tZXJnZShpbnB1dHMsIG1lcmdlVGhyZXNob2xkKTtcbiAgICB9XG4gIH1cblxuICAvLyBub3cgd2UgY29udmVydCBhbGwgcG9seWxpbmVzIGluIHVzZXIgc3BhY2UgdW5pdHMgaW50byB2aWV3IHVuaXRzXG4gIHZhciBzdmdQYXRocyA9IHBhdGhzVG9TVkdQYXRocyhpbnB1dHMsIGNvbnZlcnRPcHRpb25zKTtcblxuICB2YXIgdmlld1dpZHRoID0gY29udmVydCh3aWR0aCwgdW5pdHMsIHZpZXdVbml0cywgY29udmVydE9wdGlvbnMpLnRvU3RyaW5nKCk7XG4gIHZhciB2aWV3SGVpZ2h0ID0gY29udmVydChoZWlnaHQsIHVuaXRzLCB2aWV3VW5pdHMsIGNvbnZlcnRPcHRpb25zKS50b1N0cmluZygpO1xuICB2YXIgZmlsbFN0eWxlID0gb3B0LmZpbGxTdHlsZSB8fCAnbm9uZSc7XG4gIHZhciBzdHJva2VTdHlsZSA9IG9wdC5zdHJva2VTdHlsZSB8fCAnYmxhY2snO1xuICB2YXIgbGluZVdpZHRoID0gb3B0LmxpbmVXaWR0aDtcbiAgdmFyIGxpbmVKb2luID0gb3B0LmxpbmVKb2luO1xuICB2YXIgbGluZUNhcCA9IG9wdC5saW5lQ2FwO1xuXG4gIC8vIENob29zZSBhIGRlZmF1bHQgbGluZSB3aWR0aCBiYXNlZCBvbiBhIHJlbGF0aXZlbHkgZmluZS10aXAgcGVuXG4gIGlmICh0eXBlb2YgbGluZVdpZHRoID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIENvbnZlcnQgdG8gdXNlciB1bml0c1xuICAgIGxpbmVXaWR0aCA9IGNvbnZlcnQoREVGQVVMVF9QRU5fVEhJQ0tORVNTLCBERUZBVUxUX1BFTl9USElDS05FU1NfVU5JVCwgdW5pdHMsIGNvbnZlcnRPcHRpb25zKS50b1N0cmluZygpO1xuICB9XG5cbiAgdmFyIHBhdGhFbGVtZW50cyA9IHN2Z1BhdGhzLm1hcChmdW5jdGlvbiAoZCkge1xuICAgIHZhciBhdHRycyA9IHRvQXR0ckxpc3QoW1xuICAgICAgWyAnZCcsIGQgXVxuICAgIF0pO1xuICAgIHJldHVybiAnICAgIDxwYXRoICcgKyBhdHRycyArICcgLz4nO1xuICB9KS5qb2luKCdcXG4nKTtcblxuICB2YXIgZ3JvdXBBdHRycyA9IHRvQXR0ckxpc3QoW1xuICAgIFsgJ2ZpbGwnLCBmaWxsU3R5bGUgXSxcbiAgICBbICdzdHJva2UnLCBzdHJva2VTdHlsZSBdLFxuICAgIFsgJ3N0cm9rZS13aWR0aCcsIGxpbmVXaWR0aCArICcnICsgdW5pdHMgXSxcbiAgICBsaW5lSm9pbiA/IFsgJ3N0cm9rZS1saW5lam9pbicsIGxpbmVKb2luIF0gOiBmYWxzZSxcbiAgICBsaW5lQ2FwID8gWyAnc3Ryb2tlLWxpbmVjYXAnLCBsaW5lQ2FwIF0gOiBmYWxzZVxuICBdKTtcblxuICByZXR1cm4gW1xuICAgICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgc3RhbmRhbG9uZT1cIm5vXCI/PicsXG4gICAgJzwhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAnLFxuICAgICcgICAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIj4nLFxuICAgICc8c3ZnIHdpZHRoPVwiJyArIHdpZHRoICsgdW5pdHMgKyAnXCIgaGVpZ2h0PVwiJyArIGhlaWdodCArIHVuaXRzICsgJ1wiJyxcbiAgICAnICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAnICsgdmlld1dpZHRoICsgJyAnICsgdmlld0hlaWdodCArICdcIj4nLFxuICAgICcgIDxnICcgKyBncm91cEF0dHJzICsgJz4nLFxuICAgIHBhdGhFbGVtZW50cyxcbiAgICAnICA8L2c+JyxcbiAgICAnPC9zdmc+J1xuICBdLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiB0b0F0dHJMaXN0IChhcmdzKSB7XG4gIHJldHVybiBhcmdzLmZpbHRlcihCb29sZWFuKS5tYXAoZnVuY3Rpb24gKGF0dHIpIHtcbiAgICByZXR1cm4gYXR0clswXSArICc9XCInICsgYXR0clsxXSArICdcIic7XG4gIH0pLmpvaW4oJyAnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMucmVuZGVyUGF0aHMgPSByZW5kZXJQYXRocztcbmZ1bmN0aW9uIHJlbmRlclBhdGhzIChpbnB1dHMsIG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG5cbiAgdmFyIGNvbnRleHQgPSBvcHQuY29udGV4dDtcbiAgaWYgKCFjb250ZXh0KSB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBcImNvbnRleHRcIiBvcHRpb25zJyk7XG5cbiAgdmFyIHVuaXRzID0gb3B0LnVuaXRzIHx8ICdweCc7XG5cbiAgdmFyIHdpZHRoID0gb3B0LndpZHRoO1xuICB2YXIgaGVpZ2h0ID0gb3B0LmhlaWdodDtcbiAgaWYgKHR5cGVvZiB3aWR0aCA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGhlaWdodCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgb3B0aW9ucycpO1xuICB9XG5cbiAgLy8gQ2hvb3NlIGEgZGVmYXVsdCBsaW5lIHdpZHRoIGJhc2VkIG9uIGEgcmVsYXRpdmVseSBmaW5lLXRpcCBwZW5cbiAgdmFyIGxpbmVXaWR0aCA9IG9wdC5saW5lV2lkdGg7XG4gIGlmICh0eXBlb2YgbGluZVdpZHRoID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIENvbnZlcnQgdG8gdXNlciB1bml0c1xuICAgIGxpbmVXaWR0aCA9IGNvbnZlcnQoREVGQVVMVF9QRU5fVEhJQ0tORVNTLCBERUZBVUxUX1BFTl9USElDS05FU1NfVU5JVCwgdW5pdHMsIHtcbiAgICAgIHJvdW5kUGl4ZWw6IGZhbHNlLFxuICAgICAgcGl4ZWxzUGVySW5jaDogREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0hcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENsZWFyIGNhbnZhc1xuICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAvLyBGaWxsIHdpdGggd2hpdGVcbiAgY29udGV4dC5maWxsU3R5bGUgPSBvcHQuYmFja2dyb3VuZCB8fCAnd2hpdGUnO1xuICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBvcHQuZm9yZWdyb3VuZCB8fCBvcHQuc3Ryb2tlU3R5bGUgfHwgJ2JsYWNrJztcbiAgY29udGV4dC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gIGNvbnRleHQubGluZUpvaW4gPSBvcHQubGluZUpvaW4gfHwgJ21pdGVyJztcbiAgY29udGV4dC5saW5lQ2FwID0gb3B0LmxpbmVDYXAgfHwgJ2J1dHQnO1xuXG4gIC8vIERyYXcgbGluZXNcbiAgZWFjaFBhdGgoaW5wdXRzLCBmdW5jdGlvbiAoZmVhdHVyZSkge1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBpZiAodHlwZW9mIGZlYXR1cmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBTVkcgc3RyaW5nID0gZHJhd1NWR1BhdGg7XG4gICAgICBkcmF3U1ZHUGF0aChjb250ZXh0LCBmZWF0dXJlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbGlzdCBvZiBwb2ludHNcbiAgICAgIGZlYXR1cmUuZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICAgICAgICBjb250ZXh0LmxpbmVUbyhwWzBdLCBwWzFdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gIH0pO1xuXG4gIC8vIFNhdmUgbGF5ZXJzXG4gIHJldHVybiBbXG4gICAgLy8gRXhwb3J0IFBORyBhcyBmaXJzdCBsYXllclxuICAgIGNvbnRleHQuY2FudmFzLFxuICAgIC8vIEV4cG9ydCBTVkcgZm9yIHBlbiBwbG90dGVyIGFzIHNlY29uZCBsYXllclxuICAgIHtcbiAgICAgIGRhdGE6IHBhdGhzVG9TVkcoaW5wdXRzLCBvcHQpLFxuICAgICAgZXh0ZW5zaW9uOiAnLnN2ZydcbiAgICB9XG4gIF07XG59XG5cbi8vIE5vdCBkb2N1bWVudGVkLi4uXG5tb2R1bGUuZXhwb3J0cy5jb252ZXJ0VG9TVkdQYXRoID0gY29udmVydFRvU1ZHUGF0aDtcbmZ1bmN0aW9uIGNvbnZlcnRUb1NWR1BhdGggKGlucHV0LCBvcHQpIHtcbiAgLy8gSW5wdXQgY2FuIGJlIGEgc2luZ2xlICdwYXRoJyAoc3RyaW5nLCBvYmplY3Qgb3IgcG9seWxpbmUpLFxuICAvLyBvciBuZXN0ZWQgJ3BhdGgnIGVsZW1lbnRzXG5cbiAgLy8gbm9uLXBhdGhcbiAgaWYgKGlzRW1wdHkoaW5wdXQpKSByZXR1cm4gJyc7XG5cbiAgLy8gc3RyaW5ncyBhcmUganVzdCByZXR1cm5lZCBhcy1pc1xuICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykgcmV0dXJuIGlucHV0O1xuXG4gIC8vIGFzc3VtZSBhIHBhdGggaW5zdGFuY2VcbiAgaWYgKGlzUGF0aChpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGlmIChpc1BvbHlsaW5lKGlucHV0KSkge1xuICAgIHJldHVybiBwb2x5bGluZVRvU1ZHUGF0aChpbnB1dCwgb3B0KTtcbiAgfVxuXG4gIC8vIGFzc3VtZSBhIGxpc3Qgb2YgJ3BhdGgnIGZlYXR1cmVzIG9yIGEgbGlzdCBvZiBwb2x5bGluZXNcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0Lm1hcChmdW5jdGlvbiAoZmVhdHVyZSkge1xuICAgICAgcmV0dXJuIGNvbnZlcnRUb1NWR1BhdGgoZmVhdHVyZSwgb3B0KTtcbiAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICB9LCBbXSk7XG4gIH1cblxuICAvLyBXYXNuJ3QgY2xlYXIuLi4gbGV0J3MgcmV0dXJuIGFuIGVtcHR5IHBhdGhcbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5lYWNoUGF0aCA9IGVhY2hQYXRoO1xuZnVuY3Rpb24gZWFjaFBhdGggKGlucHV0LCBjYikge1xuICBpZiAoaXNFbXB0eShpbnB1dCkpIHtcbiAgICAvLyBwYXNzLXRocm91Z2hcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IChpc1BhdGgoaW5wdXQpKSkge1xuICAgIGNiKGlucHV0LnRvU3RyaW5nKCkpO1xuICB9IGVsc2UgaWYgKGlzUG9seWxpbmUoaW5wdXQpKSB7XG4gICAgY2IoaW5wdXQpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgaW5wdXQuZm9yRWFjaChmdW5jdGlvbiAoZmVhdHVyZSkge1xuICAgICAgcmV0dXJuIGVhY2hQYXRoKGZlYXR1cmUsIGNiKTtcbiAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5kcmF3U1ZHUGF0aCA9IGRyYXdTVkdQYXRoO1xuZnVuY3Rpb24gZHJhd1NWR1BhdGggKGNvbnRleHQsIHN2Z1BhdGgpIHtcbiAgdmFyIGNvbW1hbmRzID0gc3ZnUGF0aEFyY3Moc3ZnUGF0aEFicyhzdmdQYXRoUGFyc2Uoc3ZnUGF0aCkpKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjID0gY29tbWFuZHNbaV07XG4gICAgdmFyIHR5cGUgPSBjWzBdO1xuICAgIGlmICh0eXBlID09PSAnTScpIHtcbiAgICAgIGNvbnRleHQubW92ZVRvKGNbMV0sIGNbMl0pO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0MnKSB7XG4gICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oY1sxXSwgY1syXSwgY1szXSwgY1s0XSwgY1s1XSwgY1s2XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCB0eXBlIFwiJyArIHR5cGUgKyAnXCIgaW4gU1ZHIGNvbW1hbmRzJyk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnBvbHlsaW5lVG9TVkdQYXRoID0gcG9seWxpbmVUb1NWR1BhdGg7XG5mdW5jdGlvbiBwb2x5bGluZVRvU1ZHUGF0aCAocG9seWxpbmUsIG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG4gIHZhciB1bml0cyA9IG9wdC51bml0cyB8fCAncHgnO1xuICB2YXIgdmlld1VuaXRzID0gb3B0LnZpZXdVbml0cyB8fCB1bml0cztcbiAgdmFyIGNvbW1hbmRzID0gW107XG4gIHZhciBjb252ZXJ0T3B0aW9ucyA9IHtcbiAgICByb3VuZFBpeGVsOiBmYWxzZSxcbiAgICBwcmVjaXNpb246IGRlZmluZWQob3B0LnByZWNpc2lvbiwgNSksXG4gICAgcGl4ZWxzUGVySW5jaDogREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0hcbiAgfTtcbiAgcG9seWxpbmUuZm9yRWFjaChmdW5jdGlvbiAocG9pbnQsIGopIHtcbiAgICB2YXIgdHlwZSA9IChqID09PSAwKSA/ICdNJyA6ICdMJztcbiAgICB2YXIgeCA9IGNvbnZlcnQocG9pbnRbMF0sIHVuaXRzLCB2aWV3VW5pdHMsIGNvbnZlcnRPcHRpb25zKS50b1N0cmluZygpO1xuICAgIHZhciB5ID0gY29udmVydChwb2ludFsxXSwgdW5pdHMsIHZpZXdVbml0cywgY29udmVydE9wdGlvbnMpLnRvU3RyaW5nKCk7XG4gICAgY29tbWFuZHMucHVzaCh0eXBlICsgeCArICcgJyArIHkpO1xuICB9KTtcbiAgcmV0dXJuIGNvbW1hbmRzLmpvaW4oJyAnKTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eSAoaW5wdXQpIHtcbiAgcmV0dXJuICFpbnB1dCB8fCAoQXJyYXkuaXNBcnJheShpbnB1dCkgJiYgaW5wdXQubGVuZ3RoID09PSAwKTtcbn1cblxuZnVuY3Rpb24gaXNQYXRoIChpbnB1dCkge1xuICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCAmJiAhQXJyYXkuaXNBcnJheShpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGlzUG9seWxpbmUgKGlucHV0KSB7XG4gIC8vIGVtcHR5IGFycmF5IG9yIG5vdCBhbiBhcnJheVxuICBpZiAoIWlucHV0IHx8ICFBcnJheS5pc0FycmF5KGlucHV0KSB8fCBpbnB1dC5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgLy8gaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBpbnB1dHMgaXMgYSBwb2ludCwgYXNzdW1lIHRoZXkgYWxsIGFyZVxuICByZXR1cm4gaXNQb2ludChpbnB1dFswXSk7XG59XG5cbmZ1bmN0aW9uIGlzUG9pbnQgKHBvaW50KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBvaW50KSAmJiBwb2ludC5sZW5ndGggPj0gMiAmJiBwb2ludC5ldmVyeShmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiB0eXBlb2YgcCA9PT0gJ251bWJlcic7XG4gIH0pO1xufVxuXG4vLyBAZGVwcmVjYXRlZFxubW9kdWxlLmV4cG9ydHMucG9seWxpbmVzVG9TVkcgPSBmdW5jdGlvbiBwb2x5bGluZXNUb1NWRyAocG9seWxpbmVzLCBvcHQpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBvbHlsaW5lcykpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYXJyYXkgb2YgYXJyYXlzIGZvciBwb2x5bGluZXMnKTtcbiAgY29uc29sZS53YXJuKCdwb2x5bGluZXNUb1NWRyBpcyBkZXByZWNhdGVkLCB1c2UgcGF0aHNUb1NWRyBpbnN0ZWFkIHdoaWNoIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5Jyk7XG4gIC8vIENyZWF0ZSBhIHNpbmdsZSBzdHJpbmcgZnJvbSBwb2x5bGluZXNcbiAgcmV0dXJuIHBhdGhzVG9TVkcocG9seWxpbmVzLCBvcHQpO1xufTtcblxuLy8gQGRlcHJlY2F0ZWRcbm1vZHVsZS5leHBvcnRzLnJlbmRlclBvbHlsaW5lcyA9IGZ1bmN0aW9uIHJlbmRlclBvbHlsaW5lcyAocG9seWxpbmVzLCBvcHQpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBvbHlsaW5lcykpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYXJyYXkgb2YgYXJyYXlzIGZvciBwb2x5bGluZXMnKTtcbiAgY29uc29sZS53YXJuKCdyZW5kZXJQb2x5bGluZXMgaXMgZGVwcmVjYXRlZCwgdXNlIHJlbmRlclBhdGhzIGluc3RlYWQgd2hpY2ggaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHknKTtcbiAgLy8gQ3JlYXRlIGEgc2luZ2xlIHN0cmluZyBmcm9tIHBvbHlsaW5lc1xuICByZXR1cm4gcmVuZGVyUGF0aHMocG9seWxpbmVzLCBvcHQpO1xufTtcbiIsInZhciBzZWVkUmFuZG9tID0gcmVxdWlyZSgnc2VlZC1yYW5kb20nKTtcbnZhciBTaW1wbGV4Tm9pc2UgPSByZXF1aXJlKCdzaW1wbGV4LW5vaXNlJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcblxuZnVuY3Rpb24gY3JlYXRlUmFuZG9tIChkZWZhdWx0U2VlZCkge1xuICBkZWZhdWx0U2VlZCA9IGRlZmluZWQoZGVmYXVsdFNlZWQsIG51bGwpO1xuICB2YXIgZGVmYXVsdFJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICB2YXIgY3VycmVudFNlZWQ7XG4gIHZhciBjdXJyZW50UmFuZG9tO1xuICB2YXIgbm9pc2VHZW5lcmF0b3I7XG4gIHZhciBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgdmFyIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcblxuICBzZXRTZWVkKGRlZmF1bHRTZWVkKTtcblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBjcmVhdGVSYW5kb206IGZ1bmN0aW9uIChkZWZhdWx0U2VlZCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVJhbmRvbShkZWZhdWx0U2VlZCk7XG4gICAgfSxcbiAgICBzZXRTZWVkOiBzZXRTZWVkLFxuICAgIGdldFNlZWQ6IGdldFNlZWQsXG4gICAgZ2V0UmFuZG9tU2VlZDogZ2V0UmFuZG9tU2VlZCxcbiAgICB2YWx1ZU5vblplcm86IHZhbHVlTm9uWmVybyxcbiAgICBwZXJtdXRlTm9pc2U6IHBlcm11dGVOb2lzZSxcbiAgICBub2lzZTFEOiBub2lzZTFELFxuICAgIG5vaXNlMkQ6IG5vaXNlMkQsXG4gICAgbm9pc2UzRDogbm9pc2UzRCxcbiAgICBub2lzZTREOiBub2lzZTRELFxuICAgIHNpZ246IHNpZ24sXG4gICAgYm9vbGVhbjogYm9vbGVhbixcbiAgICBjaGFuY2U6IGNoYW5jZSxcbiAgICByYW5nZTogcmFuZ2UsXG4gICAgcmFuZ2VGbG9vcjogcmFuZ2VGbG9vcixcbiAgICBwaWNrOiBwaWNrLFxuICAgIHNodWZmbGU6IHNodWZmbGUsXG4gICAgb25DaXJjbGU6IG9uQ2lyY2xlLFxuICAgIGluc2lkZUNpcmNsZTogaW5zaWRlQ2lyY2xlLFxuICAgIG9uU3BoZXJlOiBvblNwaGVyZSxcbiAgICBpbnNpZGVTcGhlcmU6IGluc2lkZVNwaGVyZSxcbiAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLFxuICAgIHdlaWdodGVkOiB3ZWlnaHRlZCxcbiAgICB3ZWlnaHRlZFNldDogd2VpZ2h0ZWRTZXQsXG4gICAgd2VpZ2h0ZWRTZXRJbmRleDogd2VpZ2h0ZWRTZXRJbmRleCxcbiAgICBnYXVzc2lhbjogZ2F1c3NpYW5cbiAgfTtcblxuICBmdW5jdGlvbiBzZXRTZWVkIChzZWVkLCBvcHQpIHtcbiAgICBpZiAodHlwZW9mIHNlZWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZWVkID09PSAnc3RyaW5nJykge1xuICAgICAgY3VycmVudFNlZWQgPSBzZWVkO1xuICAgICAgY3VycmVudFJhbmRvbSA9IHNlZWRSYW5kb20oY3VycmVudFNlZWQsIG9wdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRTZWVkID0gdW5kZWZpbmVkO1xuICAgICAgY3VycmVudFJhbmRvbSA9IGRlZmF1bHRSYW5kb207XG4gICAgfVxuICAgIG5vaXNlR2VuZXJhdG9yID0gY3JlYXRlTm9pc2UoKTtcbiAgICBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgICBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZSAoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRSYW5kb20oKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbHVlTm9uWmVybyAoKSB7XG4gICAgdmFyIHUgPSAwO1xuICAgIHdoaWxlICh1ID09PSAwKSB1ID0gdmFsdWUoKTtcbiAgICByZXR1cm4gdTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNlZWQgKCkge1xuICAgIHJldHVybiBjdXJyZW50U2VlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJhbmRvbVNlZWQgKCkge1xuICAgIHZhciBzZWVkID0gU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApKTtcbiAgICByZXR1cm4gc2VlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vaXNlICgpIHtcbiAgICByZXR1cm4gbmV3IFNpbXBsZXhOb2lzZShjdXJyZW50UmFuZG9tKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcm11dGVOb2lzZSAoKSB7XG4gICAgbm9pc2VHZW5lcmF0b3IgPSBjcmVhdGVOb2lzZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UxRCAoeCwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlMkQoeCAqIGZyZXF1ZW5jeSwgMCk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTJEICh4LCB5LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTJEKHggKiBmcmVxdWVuY3ksIHkgKiBmcmVxdWVuY3kpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UzRCAoeCwgeSwgeiwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh6KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneiBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTNEKFxuICAgICAgeCAqIGZyZXF1ZW5jeSxcbiAgICAgIHkgKiBmcmVxdWVuY3ksXG4gICAgICB6ICogZnJlcXVlbmN5XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlNEQgKHgsIHksIHosIHcsIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ogY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh3KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigndyBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTREKFxuICAgICAgeCAqIGZyZXF1ZW5jeSxcbiAgICAgIHkgKiBmcmVxdWVuY3ksXG4gICAgICB6ICogZnJlcXVlbmN5LFxuICAgICAgdyAqIGZyZXF1ZW5jeVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduICgpIHtcbiAgICByZXR1cm4gYm9vbGVhbigpID8gMSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gYm9vbGVhbiAoKSB7XG4gICAgcmV0dXJuIHZhbHVlKCkgPiAwLjU7XG4gIH1cblxuICBmdW5jdGlvbiBjaGFuY2UgKG4pIHtcbiAgICBuID0gZGVmaW5lZChuLCAwLjUpO1xuICAgIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIG4gdG8gYmUgYSBudW1iZXInKTtcbiAgICByZXR1cm4gdmFsdWUoKSA8IG47XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZSAobWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgYXJndW1lbnRzIHRvIGJlIG51bWJlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUoKSAqIChtYXggLSBtaW4pICsgbWluO1xuICB9XG5cbiAgZnVuY3Rpb24gcmFuZ2VGbG9vciAobWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgYXJndW1lbnRzIHRvIGJlIG51bWJlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihyYW5nZShtaW4sIG1heCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGljayAoYXJyYXkpIHtcbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBhcnJheVtyYW5nZUZsb29yKDAsIGFycmF5Lmxlbmd0aCldO1xuICB9XG5cbiAgZnVuY3Rpb24gc2h1ZmZsZSAoYXJyKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIEFycmF5LCBnb3QgJyArIHR5cGVvZiBhcnIpO1xuICAgIH1cblxuICAgIHZhciByYW5kO1xuICAgIHZhciB0bXA7XG4gICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gICAgdmFyIHJldCA9IGFyci5zbGljZSgpO1xuICAgIHdoaWxlIChsZW4pIHtcbiAgICAgIHJhbmQgPSBNYXRoLmZsb29yKHZhbHVlKCkgKiBsZW4tLSk7XG4gICAgICB0bXAgPSByZXRbbGVuXTtcbiAgICAgIHJldFtsZW5dID0gcmV0W3JhbmRdO1xuICAgICAgcmV0W3JhbmRdID0gdG1wO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgZnVuY3Rpb24gb25DaXJjbGUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdGhldGEgPSB2YWx1ZSgpICogMi4wICogTWF0aC5QSTtcbiAgICBvdXRbMF0gPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgb3V0WzFdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNpZGVDaXJjbGUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICBvbkNpcmNsZSgxLCBvdXQpO1xuICAgIHZhciByID0gcmFkaXVzICogTWF0aC5zcXJ0KHZhbHVlKCkpO1xuICAgIG91dFswXSAqPSByO1xuICAgIG91dFsxXSAqPSByO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBvblNwaGVyZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1ID0gdmFsdWUoKSAqIE1hdGguUEkgKiAyO1xuICAgIHZhciB2ID0gdmFsdWUoKSAqIDIgLSAxO1xuICAgIHZhciBwaGkgPSB1O1xuICAgIHZhciB0aGV0YSA9IE1hdGguYWNvcyh2KTtcbiAgICBvdXRbMF0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLmNvcyhwaGkpO1xuICAgIG91dFsxXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguc2luKHBoaSk7XG4gICAgb3V0WzJdID0gcmFkaXVzICogTWF0aC5jb3ModGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNpZGVTcGhlcmUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdSA9IHZhbHVlKCkgKiBNYXRoLlBJICogMjtcbiAgICB2YXIgdiA9IHZhbHVlKCkgKiAyIC0gMTtcbiAgICB2YXIgayA9IHZhbHVlKCk7XG5cbiAgICB2YXIgcGhpID0gdTtcbiAgICB2YXIgdGhldGEgPSBNYXRoLmFjb3Modik7XG4gICAgdmFyIHIgPSByYWRpdXMgKiBNYXRoLmNicnQoayk7XG4gICAgb3V0WzBdID0gciAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguY29zKHBoaSk7XG4gICAgb3V0WzFdID0gciAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguc2luKHBoaSk7XG4gICAgb3V0WzJdID0gciAqIE1hdGguY29zKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhdGVybmlvbiAob3V0KSB7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1MSA9IHZhbHVlKCk7XG4gICAgdmFyIHUyID0gdmFsdWUoKTtcbiAgICB2YXIgdTMgPSB2YWx1ZSgpO1xuXG4gICAgdmFyIHNxMSA9IE1hdGguc3FydCgxIC0gdTEpO1xuICAgIHZhciBzcTIgPSBNYXRoLnNxcnQodTEpO1xuXG4gICAgdmFyIHRoZXRhMSA9IE1hdGguUEkgKiAyICogdTI7XG4gICAgdmFyIHRoZXRhMiA9IE1hdGguUEkgKiAyICogdTM7XG5cbiAgICB2YXIgeCA9IE1hdGguc2luKHRoZXRhMSkgKiBzcTE7XG4gICAgdmFyIHkgPSBNYXRoLmNvcyh0aGV0YTEpICogc3ExO1xuICAgIHZhciB6ID0gTWF0aC5zaW4odGhldGEyKSAqIHNxMjtcbiAgICB2YXIgdyA9IE1hdGguY29zKHRoZXRhMikgKiBzcTI7XG4gICAgb3V0WzBdID0geDtcbiAgICBvdXRbMV0gPSB5O1xuICAgIG91dFsyXSA9IHo7XG4gICAgb3V0WzNdID0gdztcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWRTZXQgKHNldCkge1xuICAgIHNldCA9IHNldCB8fCBbXTtcbiAgICBpZiAoc2V0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHNldFt3ZWlnaHRlZFNldEluZGV4KHNldCldLnZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWRTZXRJbmRleCAoc2V0KSB7XG4gICAgc2V0ID0gc2V0IHx8IFtdO1xuICAgIGlmIChzZXQubGVuZ3RoID09PSAwKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIHdlaWdodGVkKHNldC5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLndlaWdodDtcbiAgICB9KSk7XG4gIH1cblxuICBmdW5jdGlvbiB3ZWlnaHRlZCAod2VpZ2h0cykge1xuICAgIHdlaWdodHMgPSB3ZWlnaHRzIHx8IFtdO1xuICAgIGlmICh3ZWlnaHRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIHZhciB0b3RhbFdlaWdodCA9IDA7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdG90YWxXZWlnaHQgKz0gd2VpZ2h0c1tpXTtcbiAgICB9XG5cbiAgICBpZiAodG90YWxXZWlnaHQgPD0gMCkgdGhyb3cgbmV3IEVycm9yKCdXZWlnaHRzIG11c3Qgc3VtIHRvID4gMCcpO1xuXG4gICAgdmFyIHJhbmRvbSA9IHZhbHVlKCkgKiB0b3RhbFdlaWdodDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJhbmRvbSA8IHdlaWdodHNbaV0pIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgICByYW5kb20gLT0gd2VpZ2h0c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBnYXVzc2lhbiAobWVhbiwgc3RhbmRhcmREZXJpdmF0aW9uKSB7XG4gICAgbWVhbiA9IGRlZmluZWQobWVhbiwgMCk7XG4gICAgc3RhbmRhcmREZXJpdmF0aW9uID0gZGVmaW5lZChzdGFuZGFyZERlcml2YXRpb24sIDEpO1xuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5qZGstbWlycm9yL2pkazd1LWpkay9ibG9iL2Y0ZDgwOTU3ZTg5YTE5YTI5YmI5Zjk4MDdkMmEyODM1MWVkN2Y3ZGYvc3JjL3NoYXJlL2NsYXNzZXMvamF2YS91dGlsL1JhbmRvbS5qYXZhI0w0OTZcbiAgICBpZiAoX2hhc05leHRHYXVzc2lhbikge1xuICAgICAgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuICAgICAgdmFyIHJlc3VsdCA9IF9uZXh0R2F1c3NpYW47XG4gICAgICBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgICAgIHJldHVybiBtZWFuICsgc3RhbmRhcmREZXJpdmF0aW9uICogcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdjEgPSAwO1xuICAgICAgdmFyIHYyID0gMDtcbiAgICAgIHZhciBzID0gMDtcbiAgICAgIGRvIHtcbiAgICAgICAgdjEgPSB2YWx1ZSgpICogMiAtIDE7IC8vIGJldHdlZW4gLTEgYW5kIDFcbiAgICAgICAgdjIgPSB2YWx1ZSgpICogMiAtIDE7IC8vIGJldHdlZW4gLTEgYW5kIDFcbiAgICAgICAgcyA9IHYxICogdjEgKyB2MiAqIHYyO1xuICAgICAgfSB3aGlsZSAocyA+PSAxIHx8IHMgPT09IDApO1xuICAgICAgdmFyIG11bHRpcGxpZXIgPSBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhzKSAvIHMpO1xuICAgICAgX25leHRHYXVzc2lhbiA9ICh2MiAqIG11bHRpcGxpZXIpO1xuICAgICAgX2hhc05leHRHYXVzc2lhbiA9IHRydWU7XG4gICAgICByZXR1cm4gbWVhbiArIHN0YW5kYXJkRGVyaXZhdGlvbiAqICh2MSAqIG11bHRpcGxpZXIpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJhbmRvbSgpO1xuIiwidmFyIGNyZWF0ZVJlZ2wgPSByZXF1aXJlKCdyZWdsJyk7XG52YXIgY3JlYXRlUXVhZCA9IHJlcXVpcmUoJ3ByaW1pdGl2ZS1xdWFkJyk7XG52YXIgcGFyc2VDb2xvciA9IHJlcXVpcmUoJ3BhcnNlLWNvbG9yJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTaGFkZXI7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNoYWRlciAob3B0KSB7XG4gIG9wdCA9IG9wdCB8fCB7fTtcbiAgaWYgKCFvcHQuZ2wpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSB7IGNvbnRleHQ6IFwid2ViZ2xcIiB9IGluIHNrZXRjaCBzZXR0aW5ncywgb3IgYSBXZWJHTC1lbmFibGVkIGNhbnZhcycpO1xuICB9XG5cbiAgdmFyIGdsID0gb3B0LmdsO1xuICB2YXIgcmVnbE9wdHMgPSB7IGdsOiBnbCB9O1xuXG4gIC8vIHJlZ2wgaXMgc3RyaWN0IG9uIHdoYXQgb3B0aW9ucyB5b3UgcGFzcyBpblxuICBpZiAodHlwZW9mIG9wdC5leHRlbnNpb25zICE9PSAndW5kZWZpbmVkJykgcmVnbE9wdHMuZXh0ZW5zaW9ucyA9IG9wdC5leHRlbnNpb25zO1xuICBpZiAodHlwZW9mIG9wdC5vcHRpb25hbEV4dGVuc2lvbnMgIT09ICd1bmRlZmluZWQnKSByZWdsT3B0cy5vcHRpb25hbEV4dGVuc2lvbnMgPSBvcHQub3B0aW9uYWxFeHRlbnNpb25zO1xuICBpZiAodHlwZW9mIG9wdC5wcm9maWxlICE9PSAndW5kZWZpbmVkJykgcmVnbE9wdHMucHJvZmlsZSA9IG9wdC5wcm9maWxlO1xuICBpZiAodHlwZW9mIG9wdC5vbkRvbmUgIT09ICd1bmRlZmluZWQnKSByZWdsT3B0cy5vbkRvbmUgPSBvcHQub25Eb25lO1xuXG4gIC8vIENyZWF0ZSByZWdsIGZvciBoYW5kbGluZyBHTCBzdHVmZlxuICB2YXIgcmVnbCA9IGNyZWF0ZVJlZ2wocmVnbE9wdHMpO1xuXG4gIC8vIEEgbWVzaCBmb3IgYSBmbGF0IHBsYW5lXG4gIHZhciBxdWFkID0gY3JlYXRlUXVhZCgpO1xuXG4gIHZhciB0ZXh0dXJlTWFwID0gbmV3IE1hcCgpO1xuXG4gIC8vIFdpcmUgdXAgdXNlciB1bmlmb3JtcyBuaWNlbHlcbiAgdmFyIHVuaWZvcm1zTWFwID0gb3B0LnVuaWZvcm1zIHx8IHt9O1xuICB2YXIgdW5pZm9ybXMgPSBPYmplY3QuYXNzaWduKHt9LCB1bmlmb3Jtc01hcCk7XG4gIE9iamVjdC5rZXlzKHVuaWZvcm1zTWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSB1bmlmb3Jtc01hcFtrZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHVuaWZvcm1zW2tleV0gPSBmdW5jdGlvbiAoc3RhdGUsIHByb3BzLCBiYXRjaElEKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB2YWx1ZS5jYWxsKHVuaWZvcm1zTWFwLCBwcm9wcywgYmF0Y2hJRCk7XG4gICAgICAgIC8vIElmIHVzZXIgaXMgdXNpbmcgYSBmdW5jdGlvbiB0byB3cmFwIGFuIGltYWdlLFxuICAgICAgICAvLyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIHJlLXVwbG9hZCB0byBzYW1lIEdMIHRleHR1cmVcbiAgICAgICAgaWYgKGlzVGV4dHVyZUxpa2UocmVzdWx0KSkge1xuICAgICAgICAgIGlmICh0ZXh0dXJlTWFwLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIFRleHR1cmUgaXMgYWxyZWFkeSBjcmVhdGVkLCByZS11cGxvYWRcbiAgICAgICAgICAgIHZhciBwcmV2VGV4ID0gdGV4dHVyZU1hcC5nZXQodmFsdWUpO1xuICAgICAgICAgICAgcHJldlRleChyZXN1bHQpO1xuXG4gICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHJlc3VsdCA9IHByZXZUZXg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENyZWF0aW5nIHRoZSB0ZXh0dXJlIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSByZWdsLnRleHR1cmUocmVzdWx0KTtcbiAgICAgICAgICAgIHRleHR1cmVNYXAuc2V0KHZhbHVlLCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSB0ZXh0dXJlLCBub3QgdGhlIGltYWdlXG4gICAgICAgICAgICByZXN1bHQgPSB0ZXh0dXJlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzVGV4dHVyZUxpa2UodmFsdWUpKSB7XG4gICAgICB1bmlmb3Jtc1trZXldID0gcmVnbC50ZXh0dXJlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5pZm9ybXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gR2V0IHRoZSBkcmF3aW5nIGNvbW1hbmRcbiAgdmFyIGRyYXdRdWFkQ29tbWFuZDtcbiAgdHJ5IHtcbiAgICBkcmF3UXVhZENvbW1hbmQgPSBjcmVhdGVEcmF3UXVhZCgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBoYW5kbGVFcnJvcihlcnIpO1xuICB9XG5cbiAgLy8gTmljZWx5IGdldCBhIGNsZWFyIGNvbG9yIGZvciB0aGUgY2FudmFzXG4gIHZhciBjbGVhckNvbG9yID0gZGVmaW5lZChvcHQuY2xlYXJDb2xvciwgJ2JsYWNrJyk7XG4gIGlmICh0eXBlb2YgY2xlYXJDb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VDb2xvcihjbGVhckNvbG9yKTtcbiAgICBpZiAoIXBhcnNlZC5yZ2IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgcGFyc2luZyB7IGNsZWFyQ29sb3IgfSBjb2xvciBzdHJpbmcgXCInICsgY2xlYXJDb2xvciArICdcIicpO1xuICAgIH1cbiAgICBjbGVhckNvbG9yID0gcGFyc2VkLnJnYi5zbGljZSgwLCAzKS5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICAgIHJldHVybiBuIC8gMjU1O1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGNsZWFyQ29sb3IgJiYgKCFBcnJheS5pc0FycmF5KGNsZWFyQ29sb3IpIHx8IGNsZWFyQ29sb3IubGVuZ3RoIDwgMykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIHdpdGggeyBjbGVhckNvbG9yIH0gb3B0aW9uLCBtdXN0IGJlIGEgc3RyaW5nIG9yIFsgciwgZywgYiBdIGZsb2F0IGFycmF5Jyk7XG4gIH1cblxuICB2YXIgY2xlYXJBbHBoYSA9IGRlZmluZWQob3B0LmNsZWFyQWxwaGEsIDEpO1xuICB2YXIgY2xlYXIgPSBjbGVhckNvbG9yID8gY2xlYXJDb2xvci5jb25jYXQoWyBjbGVhckFscGhhIHx8IDAgXSkgOiBmYWxzZTtcblxuICAvLyBSZXR1cm4gYSByZW5kZXJlciBvYmplY3RcbiAgcmV0dXJuIHtcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgLy8gT24gZWFjaCB0aWNrLCB1cGRhdGUgcmVnbCB0aW1lcnMgYW5kIHNpemVzXG4gICAgICByZWdsLnBvbGwoKTtcblxuICAgICAgLy8gQ2xlYXIgYmFja2J1ZmZlciB3aXRoIGNvbG9yXG4gICAgICBpZiAoY2xlYXIpIHtcbiAgICAgICAgcmVnbC5jbGVhcih7XG4gICAgICAgICAgY29sb3I6IGNsZWFyLFxuICAgICAgICAgIGRlcHRoOiAxLFxuICAgICAgICAgIHN0ZW5jaWw6IDBcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN1Ym1pdCBkcmF3IGNvbW1hbmRcbiAgICAgIGRyYXdRdWFkKHByb3BzKTtcblxuICAgICAgLy8gRmx1c2ggcGVuZGluZyBHTCBjYWxscyBmb3IgdGhpcyBmcmFtZVxuICAgICAgZ2wuZmx1c2goKTtcbiAgICB9LFxuICAgIHJlZ2w6IHJlZ2wsXG4gICAgZHJhd1F1YWQ6IGRyYXdRdWFkLFxuICAgIHVubG9hZDogZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUmVtb3ZlIEdMIHRleHR1cmUgbWFwcGluZ3NcbiAgICAgIHRleHR1cmVNYXAuY2xlYXIoKTtcbiAgICAgIC8vIFVubG9hZCB0aGUgY3VycmVudCByZWdsIGluc3RhbmNlXG4gICAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgYWxzbyBkZXN0cm95IHRleHR1cmVzIGNyZWF0ZWQgZnJvbSB0aGlzIG1vZHVsZSFcbiAgICAgIHJlZ2wuZGVzdHJveSgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBBIHVzZXItZnJpZW5kbHkgZHJhdyBjb21tYW5kIHRoYXQgc3BpdHMgb3V0IGVycm9yc1xuICBmdW5jdGlvbiBkcmF3UXVhZCAocHJvcHMpIHtcbiAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgIC8vIERyYXcgZ2VuZXJhdGl2ZSAvIHNoYWRlciBhcnRcbiAgICBpZiAoZHJhd1F1YWRDb21tYW5kKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkcmF3UXVhZENvbW1hbmQocHJvcHMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChoYW5kbGVFcnJvcihlcnIpKSB7XG4gICAgICAgICAgaWYgKHByb3BzID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogc2hhZGVyLnJlbmRlcigpIGlzIG5vdCBjYWxsZWQgd2l0aCBhbnkgXCJwcm9wc1wiIHBhcmFtZXRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERyYXcgY29tbWFuZFxuICBmdW5jdGlvbiBjcmVhdGVEcmF3UXVhZCAoKSB7XG4gICAgcmV0dXJuIHJlZ2woe1xuICAgICAgc2Npc3Nvcjogb3B0LnNjaXNzb3IgPyB7XG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcbiAgICAgICAgYm94OiB7XG4gICAgICAgICAgeDogcmVnbC5wcm9wKCdzY2lzc29yWCcpLFxuICAgICAgICAgIHk6IHJlZ2wucHJvcCgnc2Npc3NvclknKSxcbiAgICAgICAgICB3aWR0aDogcmVnbC5wcm9wKCdzY2lzc29yV2lkdGgnKSxcbiAgICAgICAgICBoZWlnaHQ6IHJlZ2wucHJvcCgnc2Npc3NvckhlaWdodCcpXG4gICAgICAgIH1cbiAgICAgIH0gOiBmYWxzZSxcbiAgICAgIC8vIFBhc3MgZG93biBwcm9wcyBmcm9tIGphdmFzY3JpcHRcbiAgICAgIHVuaWZvcm1zOiB1bmlmb3JtcyxcbiAgICAgIC8vIEZhbGwgYmFjayB0byBhIHNpbXBsZSBmcmFnbWVudCBzaGFkZXJcbiAgICAgIGZyYWc6IG9wdC5mcmFnIHx8IFtcbiAgICAgICAgJ3ByZWNpc2lvbiBoaWdocCBmbG9hdDsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ3ZvaWQgbWFpbiAoKSB7JyxcbiAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIC8vIEZhbGwgYmFjayB0byBhIHNpbXBsZSB2ZXJ0ZXggc2hhZGVyXG4gICAgICB2ZXJ0OiBvcHQudmVydCB8fCBbXG4gICAgICAgICdwcmVjaXNpb24gaGlnaHAgZmxvYXQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOycsXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlV2OycsXG4gICAgICAgICcnLFxuICAgICAgICAndm9pZCBtYWluICgpIHsnLFxuICAgICAgICAnICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24ueHl6LCAxLjApOycsXG4gICAgICAgICcgIHZVdiA9IGdsX1Bvc2l0aW9uLnh5ICogMC41ICsgMC41OycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIC8vIFNldHVwIHRyYW5zcGFyZW5jeSBibGVuZGluZ1xuICAgICAgYmxlbmQ6IG9wdC5ibGVuZCAhPT0gZmFsc2UgPyB7XG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcbiAgICAgICAgZnVuYzoge1xuICAgICAgICAgIHNyY1JHQjogJ3NyYyBhbHBoYScsXG4gICAgICAgICAgc3JjQWxwaGE6IDEsXG4gICAgICAgICAgZHN0UkdCOiAnb25lIG1pbnVzIHNyYyBhbHBoYScsXG4gICAgICAgICAgZHN0QWxwaGE6IDFcbiAgICAgICAgfVxuICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFNlbmQgbWVzaCB2ZXJ0ZXggYXR0cmlidXRlcyB0byBzaGFkZXJcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgcG9zaXRpb246IHF1YWQucG9zaXRpb25zXG4gICAgICB9LFxuICAgICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBxdWFkIG1lc2hcbiAgICAgIGVsZW1lbnRzOiBxdWFkLmNlbGxzXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVFcnJvciAoZXJyKSB7XG4gICAgaWYgKC9eXFwocmVnbFxcKS8udGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgIC8vIFJlZ2wgYWxyZWFkeSBsb2dzIGEgbWVzc2FnZSB0byB0aGUgY29uc29sZSA6XFxcbiAgICAgIC8vIHNvIGxldCdzIGp1c3QgYXZvaWQgcmUtcHJpbnRpbmcgdGhlIHNhbWUgdGhpbmdcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVGV4dHVyZUxpa2UgKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnO1xufVxuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID1cbiAgZ2xvYmFsLnBlcmZvcm1hbmNlICYmXG4gIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPyBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpXG4gIH0gOiBEYXRlLm5vdyB8fCBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuICtuZXcgRGF0ZVxuICB9XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzUHJvbWlzZTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xuICByZXR1cm4gISFvYmogJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gaXNOb2RlXG5cbmZ1bmN0aW9uIGlzTm9kZSAodmFsKSB7XG4gIHJldHVybiAoIXZhbCB8fCB0eXBlb2YgdmFsICE9PSAnb2JqZWN0JylcbiAgICA/IGZhbHNlXG4gICAgOiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHdpbmRvdy5Ob2RlID09PSAnb2JqZWN0JylcbiAgICAgID8gKHZhbCBpbnN0YW5jZW9mIHdpbmRvdy5Ob2RlKVxuICAgICAgOiAodHlwZW9mIHZhbC5ub2RlVHlwZSA9PT0gJ251bWJlcicpICYmXG4gICAgICAgICh0eXBlb2YgdmFsLm5vZGVOYW1lID09PSAnc3RyaW5nJylcbn1cbiIsIi8vIFRPRE86IFdlIGNhbiByZW1vdmUgYSBodWdlIGNodW5rIG9mIGJ1bmRsZSBzaXplIGJ5IHVzaW5nIGEgc21hbGxlclxuLy8gdXRpbGl0eSBtb2R1bGUgZm9yIGNvbnZlcnRpbmcgdW5pdHMuXG5pbXBvcnQgaXNET00gZnJvbSAnaXMtZG9tJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudEFQSSAoKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3dbJ2NhbnZhcy1za2V0Y2gtY2xpJ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkICgpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jyb3dzZXIgKCkge1xuICByZXR1cm4gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViR0xDb250ZXh0IChjdHgpIHtcbiAgcmV0dXJuIHR5cGVvZiBjdHguY2xlYXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGN0eC5jbGVhckNvbG9yID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdHguYnVmZmVyRGF0YSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzIChlbGVtZW50KSB7XG4gIHJldHVybiBpc0RPTShlbGVtZW50KSAmJiAvY2FudmFzL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSAmJiB0eXBlb2YgZWxlbWVudC5nZXRDb250ZXh0ID09PSAnZnVuY3Rpb24nO1xufVxuIiwiLyohXG4gKiByZXBlYXQtc3RyaW5nIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9yZXBlYXQtc3RyaW5nPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBKb24gU2NobGlua2VydC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUmVzdWx0cyBjYWNoZVxuICovXG5cbnZhciByZXMgPSAnJztcbnZhciBjYWNoZTtcblxuLyoqXG4gKiBFeHBvc2UgYHJlcGVhdGBcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcGVhdDtcblxuLyoqXG4gKiBSZXBlYXQgdGhlIGdpdmVuIGBzdHJpbmdgIHRoZSBzcGVjaWZpZWQgYG51bWJlcmBcbiAqIG9mIHRpbWVzLlxuICpcbiAqICoqRXhhbXBsZToqKlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuICogcmVwZWF0KCdBJywgNSk7XG4gKiAvLz0+IEFBQUFBXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmluZ2AgVGhlIHN0cmluZyB0byByZXBlYXRcbiAqIEBwYXJhbSB7TnVtYmVyfSBgbnVtYmVyYCBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nXG4gKiBAcmV0dXJuIHtTdHJpbmd9IFJlcGVhdGVkIHN0cmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiByZXBlYXQoc3RyLCBudW0pIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIC8vIGNvdmVyIGNvbW1vbiwgcXVpY2sgdXNlIGNhc2VzXG4gIGlmIChudW0gPT09IDEpIHJldHVybiBzdHI7XG4gIGlmIChudW0gPT09IDIpIHJldHVybiBzdHIgKyBzdHI7XG5cbiAgdmFyIG1heCA9IHN0ci5sZW5ndGggKiBudW07XG4gIGlmIChjYWNoZSAhPT0gc3RyIHx8IHR5cGVvZiBjYWNoZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjYWNoZSA9IHN0cjtcbiAgICByZXMgPSAnJztcbiAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID49IG1heCkge1xuICAgIHJldHVybiByZXMuc3Vic3RyKDAsIG1heCk7XG4gIH1cblxuICB3aGlsZSAobWF4ID4gcmVzLmxlbmd0aCAmJiBudW0gPiAxKSB7XG4gICAgaWYgKG51bSAmIDEpIHtcbiAgICAgIHJlcyArPSBzdHI7XG4gICAgfVxuXG4gICAgbnVtID4+PSAxO1xuICAgIHN0ciArPSBzdHI7XG4gIH1cblxuICByZXMgKz0gc3RyO1xuICByZXMgPSByZXMuc3Vic3RyKDAsIG1heCk7XG4gIHJldHVybiByZXM7XG59XG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbidcbiAgPyBPYmplY3Qua2V5cyA6IHNoaW07XG5cbmV4cG9ydHMuc2hpbSA9IHNoaW07XG5mdW5jdGlvbiBzaGltIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwidmFyIHN1cHBvcnRzQXJndW1lbnRzQ2xhc3MgPSAoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHMpXG59KSgpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID8gc3VwcG9ydGVkIDogdW5zdXBwb3J0ZWQ7XG5cbmV4cG9ydHMuc3VwcG9ydGVkID0gc3VwcG9ydGVkO1xuZnVuY3Rpb24gc3VwcG9ydGVkKG9iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG59O1xuXG5leHBvcnRzLnVuc3VwcG9ydGVkID0gdW5zdXBwb3J0ZWQ7XG5mdW5jdGlvbiB1bnN1cHBvcnRlZChvYmplY3Qpe1xuICByZXR1cm4gb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvYmplY3QubGVuZ3RoID09ICdudW1iZXInICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ2NhbGxlZScpICYmXG4gICAgIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsICdjYWxsZWUnKSB8fFxuICAgIGZhbHNlO1xufTtcbiIsInZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4vbGliL2tleXMuanMnKTtcbnZhciBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vbGliL2lzX2FyZ3VtZW50cy5qcycpO1xuXG52YXIgZGVlcEVxdWFsID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYWN0dWFsLCBleHBlY3RlZCwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBEYXRlICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zLiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkIHx8IHR5cGVvZiBhY3R1YWwgIT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cGVjdGVkICE9ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG9wdHMuc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyA3LjQuIEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgb3B0cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWRPck51bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyICh4KSB7XG4gIGlmICgheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHgubGVuZ3RoICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHguY29weSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeC5zbGljZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoeC5sZW5ndGggPiAwICYmIHR5cGVvZiB4WzBdICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgb3B0cykge1xuICB2YXIgaSwga2V5O1xuICBpZiAoaXNVbmRlZmluZWRPck51bGwoYSkgfHwgaXNVbmRlZmluZWRPck51bGwoYikpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuXG4gIGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcbiAgLy9+fn5JJ3ZlIG1hbmFnZWQgdG8gYnJlYWsgT2JqZWN0LmtleXMgdGhyb3VnaCBzY3Jld3kgYXJndW1lbnRzIHBhc3NpbmcuXG4gIC8vICAgQ29udmVydGluZyB0byBhcnJheSBzb2x2ZXMgdGhlIHByb2JsZW0uXG4gIGlmIChpc0FyZ3VtZW50cyhhKSkge1xuICAgIGlmICghaXNBcmd1bWVudHMoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYSA9IHBTbGljZS5jYWxsKGEpO1xuICAgIGIgPSBwU2xpY2UuY2FsbChiKTtcbiAgICByZXR1cm4gZGVlcEVxdWFsKGEsIGIsIG9wdHMpO1xuICB9XG4gIGlmIChpc0J1ZmZlcihhKSkge1xuICAgIGlmICghaXNCdWZmZXIoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB0cnkge1xuICAgIHZhciBrYSA9IG9iamVjdEtleXMoYSksXG4gICAgICAgIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgfSBjYXRjaCAoZSkgey8vaGFwcGVucyB3aGVuIG9uZSBpcyBhIHN0cmluZyBsaXRlcmFsIGFuZCB0aGUgb3RoZXIgaXNuJ3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBvcHRzKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGI7XG59XG4iLCIvKlxuICogRGF0ZSBGb3JtYXQgMS4yLjNcbiAqIChjKSAyMDA3LTIwMDkgU3RldmVuIExldml0aGFuIDxzdGV2ZW5sZXZpdGhhbi5jb20+XG4gKiBNSVQgbGljZW5zZVxuICpcbiAqIEluY2x1ZGVzIGVuaGFuY2VtZW50cyBieSBTY290dCBUcmVuZGEgPHNjb3R0LnRyZW5kYS5uZXQ+XG4gKiBhbmQgS3JpcyBLb3dhbCA8Y2l4YXIuY29tL35rcmlzLmtvd2FsLz5cbiAqXG4gKiBBY2NlcHRzIGEgZGF0ZSwgYSBtYXNrLCBvciBhIGRhdGUgYW5kIGEgbWFzay5cbiAqIFJldHVybnMgYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBkYXRlIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGRhdGUvdGltZS5cbiAqIFRoZSBtYXNrIGRlZmF1bHRzIHRvIGRhdGVGb3JtYXQubWFza3MuZGVmYXVsdC5cbiAqL1xuXG4oZnVuY3Rpb24oZ2xvYmFsKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgZGF0ZUZvcm1hdCA9IChmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0b2tlbiA9IC9kezEsNH18bXsxLDR9fHl5KD86eXkpP3woW0hoTXNUdF0pXFwxP3xbTGxvU1pXTl18XCJbXlwiXSpcInwnW14nXSonL2c7XG4gICAgICB2YXIgdGltZXpvbmUgPSAvXFxiKD86W1BNQ0VBXVtTRFBdVHwoPzpQYWNpZmljfE1vdW50YWlufENlbnRyYWx8RWFzdGVybnxBdGxhbnRpYykgKD86U3RhbmRhcmR8RGF5bGlnaHR8UHJldmFpbGluZykgVGltZXwoPzpHTVR8VVRDKSg/OlstK11cXGR7NH0pPylcXGIvZztcbiAgICAgIHZhciB0aW1lem9uZUNsaXAgPSAvW14tK1xcZEEtWl0vZztcbiAgXG4gICAgICAvLyBSZWdleGVzIGFuZCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBhcmUgY2FjaGVkIHRocm91Z2ggY2xvc3VyZVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlLCBtYXNrLCB1dGMsIGdtdCkge1xuICBcbiAgICAgICAgLy8gWW91IGNhbid0IHByb3ZpZGUgdXRjIGlmIHlvdSBza2lwIG90aGVyIGFyZ3MgKHVzZSB0aGUgJ1VUQzonIG1hc2sgcHJlZml4KVxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBraW5kT2YoZGF0ZSkgPT09ICdzdHJpbmcnICYmICEvXFxkLy50ZXN0KGRhdGUpKSB7XG4gICAgICAgICAgbWFzayA9IGRhdGU7XG4gICAgICAgICAgZGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICBcbiAgICAgICAgZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGU7XG4gIFxuICAgICAgICBpZighKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIGRhdGUnKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgbWFzayA9IFN0cmluZyhkYXRlRm9ybWF0Lm1hc2tzW21hc2tdIHx8IG1hc2sgfHwgZGF0ZUZvcm1hdC5tYXNrc1snZGVmYXVsdCddKTtcbiAgXG4gICAgICAgIC8vIEFsbG93IHNldHRpbmcgdGhlIHV0Yy9nbXQgYXJndW1lbnQgdmlhIHRoZSBtYXNrXG4gICAgICAgIHZhciBtYXNrU2xpY2UgPSBtYXNrLnNsaWNlKDAsIDQpO1xuICAgICAgICBpZiAobWFza1NsaWNlID09PSAnVVRDOicgfHwgbWFza1NsaWNlID09PSAnR01UOicpIHtcbiAgICAgICAgICBtYXNrID0gbWFzay5zbGljZSg0KTtcbiAgICAgICAgICB1dGMgPSB0cnVlO1xuICAgICAgICAgIGlmIChtYXNrU2xpY2UgPT09ICdHTVQ6Jykge1xuICAgICAgICAgICAgZ210ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgXG4gICAgICAgIHZhciBfID0gdXRjID8gJ2dldFVUQycgOiAnZ2V0JztcbiAgICAgICAgdmFyIGQgPSBkYXRlW18gKyAnRGF0ZSddKCk7XG4gICAgICAgIHZhciBEID0gZGF0ZVtfICsgJ0RheSddKCk7XG4gICAgICAgIHZhciBtID0gZGF0ZVtfICsgJ01vbnRoJ10oKTtcbiAgICAgICAgdmFyIHkgPSBkYXRlW18gKyAnRnVsbFllYXInXSgpO1xuICAgICAgICB2YXIgSCA9IGRhdGVbXyArICdIb3VycyddKCk7XG4gICAgICAgIHZhciBNID0gZGF0ZVtfICsgJ01pbnV0ZXMnXSgpO1xuICAgICAgICB2YXIgcyA9IGRhdGVbXyArICdTZWNvbmRzJ10oKTtcbiAgICAgICAgdmFyIEwgPSBkYXRlW18gKyAnTWlsbGlzZWNvbmRzJ10oKTtcbiAgICAgICAgdmFyIG8gPSB1dGMgPyAwIDogZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgICAgICB2YXIgVyA9IGdldFdlZWsoZGF0ZSk7XG4gICAgICAgIHZhciBOID0gZ2V0RGF5T2ZXZWVrKGRhdGUpO1xuICAgICAgICB2YXIgZmxhZ3MgPSB7XG4gICAgICAgICAgZDogICAgZCxcbiAgICAgICAgICBkZDogICBwYWQoZCksXG4gICAgICAgICAgZGRkOiAgZGF0ZUZvcm1hdC5pMThuLmRheU5hbWVzW0RdLFxuICAgICAgICAgIGRkZGQ6IGRhdGVGb3JtYXQuaTE4bi5kYXlOYW1lc1tEICsgN10sXG4gICAgICAgICAgbTogICAgbSArIDEsXG4gICAgICAgICAgbW06ICAgcGFkKG0gKyAxKSxcbiAgICAgICAgICBtbW06ICBkYXRlRm9ybWF0LmkxOG4ubW9udGhOYW1lc1ttXSxcbiAgICAgICAgICBtbW1tOiBkYXRlRm9ybWF0LmkxOG4ubW9udGhOYW1lc1ttICsgMTJdLFxuICAgICAgICAgIHl5OiAgIFN0cmluZyh5KS5zbGljZSgyKSxcbiAgICAgICAgICB5eXl5OiB5LFxuICAgICAgICAgIGg6ICAgIEggJSAxMiB8fCAxMixcbiAgICAgICAgICBoaDogICBwYWQoSCAlIDEyIHx8IDEyKSxcbiAgICAgICAgICBIOiAgICBILFxuICAgICAgICAgIEhIOiAgIHBhZChIKSxcbiAgICAgICAgICBNOiAgICBNLFxuICAgICAgICAgIE1NOiAgIHBhZChNKSxcbiAgICAgICAgICBzOiAgICBzLFxuICAgICAgICAgIHNzOiAgIHBhZChzKSxcbiAgICAgICAgICBsOiAgICBwYWQoTCwgMyksXG4gICAgICAgICAgTDogICAgcGFkKE1hdGgucm91bmQoTCAvIDEwKSksXG4gICAgICAgICAgdDogICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1swXSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMV0sXG4gICAgICAgICAgdHQ6ICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1syXSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbM10sXG4gICAgICAgICAgVDogICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s0XSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNV0sXG4gICAgICAgICAgVFQ6ICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s2XSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbN10sXG4gICAgICAgICAgWjogICAgZ210ID8gJ0dNVCcgOiB1dGMgPyAnVVRDJyA6IChTdHJpbmcoZGF0ZSkubWF0Y2godGltZXpvbmUpIHx8IFsnJ10pLnBvcCgpLnJlcGxhY2UodGltZXpvbmVDbGlwLCAnJyksXG4gICAgICAgICAgbzogICAgKG8gPiAwID8gJy0nIDogJysnKSArIHBhZChNYXRoLmZsb29yKE1hdGguYWJzKG8pIC8gNjApICogMTAwICsgTWF0aC5hYnMobykgJSA2MCwgNCksXG4gICAgICAgICAgUzogICAgWyd0aCcsICdzdCcsICduZCcsICdyZCddW2QgJSAxMCA+IDMgPyAwIDogKGQgJSAxMDAgLSBkICUgMTAgIT0gMTApICogZCAlIDEwXSxcbiAgICAgICAgICBXOiAgICBXLFxuICAgICAgICAgIE46ICAgIE5cbiAgICAgICAgfTtcbiAgXG4gICAgICAgIHJldHVybiBtYXNrLnJlcGxhY2UodG9rZW4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgIGlmIChtYXRjaCBpbiBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIGZsYWdzW21hdGNoXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKDEsIG1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSkoKTtcblxuICBkYXRlRm9ybWF0Lm1hc2tzID0ge1xuICAgICdkZWZhdWx0JzogICAgICAgICAgICAgICAnZGRkIG1tbSBkZCB5eXl5IEhIOk1NOnNzJyxcbiAgICAnc2hvcnREYXRlJzogICAgICAgICAgICAgJ20vZC95eScsXG4gICAgJ21lZGl1bURhdGUnOiAgICAgICAgICAgICdtbW0gZCwgeXl5eScsXG4gICAgJ2xvbmdEYXRlJzogICAgICAgICAgICAgICdtbW1tIGQsIHl5eXknLFxuICAgICdmdWxsRGF0ZSc6ICAgICAgICAgICAgICAnZGRkZCwgbW1tbSBkLCB5eXl5JyxcbiAgICAnc2hvcnRUaW1lJzogICAgICAgICAgICAgJ2g6TU0gVFQnLFxuICAgICdtZWRpdW1UaW1lJzogICAgICAgICAgICAnaDpNTTpzcyBUVCcsXG4gICAgJ2xvbmdUaW1lJzogICAgICAgICAgICAgICdoOk1NOnNzIFRUIFonLFxuICAgICdpc29EYXRlJzogICAgICAgICAgICAgICAneXl5eS1tbS1kZCcsXG4gICAgJ2lzb1RpbWUnOiAgICAgICAgICAgICAgICdISDpNTTpzcycsXG4gICAgJ2lzb0RhdGVUaW1lJzogICAgICAgICAgICd5eXl5LW1tLWRkXFwnVFxcJ0hIOk1NOnNzbycsXG4gICAgJ2lzb1V0Y0RhdGVUaW1lJzogICAgICAgICdVVEM6eXl5eS1tbS1kZFxcJ1RcXCdISDpNTTpzc1xcJ1pcXCcnLFxuICAgICdleHBpcmVzSGVhZGVyRm9ybWF0JzogICAnZGRkLCBkZCBtbW0geXl5eSBISDpNTTpzcyBaJ1xuICB9O1xuXG4gIC8vIEludGVybmF0aW9uYWxpemF0aW9uIHN0cmluZ3NcbiAgZGF0ZUZvcm1hdC5pMThuID0ge1xuICAgIGRheU5hbWVzOiBbXG4gICAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0JyxcbiAgICAgICdTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSdcbiAgICBdLFxuICAgIG1vbnRoTmFtZXM6IFtcbiAgICAgICdKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYycsXG4gICAgICAnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlcidcbiAgICBdLFxuICAgIHRpbWVOYW1lczogW1xuICAgICAgJ2EnLCAncCcsICdhbScsICdwbScsICdBJywgJ1AnLCAnQU0nLCAnUE0nXG4gICAgXVxuICB9O1xuXG5mdW5jdGlvbiBwYWQodmFsLCBsZW4pIHtcbiAgdmFsID0gU3RyaW5nKHZhbCk7XG4gIGxlbiA9IGxlbiB8fCAyO1xuICB3aGlsZSAodmFsLmxlbmd0aCA8IGxlbikge1xuICAgIHZhbCA9ICcwJyArIHZhbDtcbiAgfVxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEdldCB0aGUgSVNPIDg2MDEgd2VlayBudW1iZXJcbiAqIEJhc2VkIG9uIGNvbW1lbnRzIGZyb21cbiAqIGh0dHA6Ly90ZWNoYmxvZy5wcm9jdXJpb3Mubmwvay9uNjE4L25ld3Mvdmlldy8zMzc5Ni8xNDg2My9DYWxjdWxhdGUtSVNPLTg2MDEtd2Vlay1hbmQteWVhci1pbi1qYXZhc2NyaXB0Lmh0bWxcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IGBkYXRlYFxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXRXZWVrKGRhdGUpIHtcbiAgLy8gUmVtb3ZlIHRpbWUgY29tcG9uZW50cyBvZiBkYXRlXG4gIHZhciB0YXJnZXRUaHVyc2RheSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XG5cbiAgLy8gQ2hhbmdlIGRhdGUgdG8gVGh1cnNkYXkgc2FtZSB3ZWVrXG4gIHRhcmdldFRodXJzZGF5LnNldERhdGUodGFyZ2V0VGh1cnNkYXkuZ2V0RGF0ZSgpIC0gKCh0YXJnZXRUaHVyc2RheS5nZXREYXkoKSArIDYpICUgNykgKyAzKTtcblxuICAvLyBUYWtlIEphbnVhcnkgNHRoIGFzIGl0IGlzIGFsd2F5cyBpbiB3ZWVrIDEgKHNlZSBJU08gODYwMSlcbiAgdmFyIGZpcnN0VGh1cnNkYXkgPSBuZXcgRGF0ZSh0YXJnZXRUaHVyc2RheS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcblxuICAvLyBDaGFuZ2UgZGF0ZSB0byBUaHVyc2RheSBzYW1lIHdlZWtcbiAgZmlyc3RUaHVyc2RheS5zZXREYXRlKGZpcnN0VGh1cnNkYXkuZ2V0RGF0ZSgpIC0gKChmaXJzdFRodXJzZGF5LmdldERheSgpICsgNikgJSA3KSArIDMpO1xuXG4gIC8vIENoZWNrIGlmIGRheWxpZ2h0LXNhdmluZy10aW1lLXN3aXRjaCBvY2N1cnJlZCBhbmQgY29ycmVjdCBmb3IgaXRcbiAgdmFyIGRzID0gdGFyZ2V0VGh1cnNkYXkuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIGZpcnN0VGh1cnNkYXkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgdGFyZ2V0VGh1cnNkYXkuc2V0SG91cnModGFyZ2V0VGh1cnNkYXkuZ2V0SG91cnMoKSAtIGRzKTtcblxuICAvLyBOdW1iZXIgb2Ygd2Vla3MgYmV0d2VlbiB0YXJnZXQgVGh1cnNkYXkgYW5kIGZpcnN0IFRodXJzZGF5XG4gIHZhciB3ZWVrRGlmZiA9ICh0YXJnZXRUaHVyc2RheSAtIGZpcnN0VGh1cnNkYXkpIC8gKDg2NDAwMDAwKjcpO1xuICByZXR1cm4gMSArIE1hdGguZmxvb3Iod2Vla0RpZmYpO1xufVxuXG4vKipcbiAqIEdldCBJU08tODYwMSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWtcbiAqIDEgKGZvciBNb25kYXkpIHRocm91Z2ggNyAoZm9yIFN1bmRheSlcbiAqIFxuICogQHBhcmFtICB7T2JqZWN0fSBgZGF0ZWBcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGF5T2ZXZWVrKGRhdGUpIHtcbiAgdmFyIGRvdyA9IGRhdGUuZ2V0RGF5KCk7XG4gIGlmKGRvdyA9PT0gMCkge1xuICAgIGRvdyA9IDc7XG4gIH1cbiAgcmV0dXJuIGRvdztcbn1cblxuLyoqXG4gKiBraW5kLW9mIHNob3J0Y3V0XG4gKiBAcGFyYW0gIHsqfSB2YWxcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24ga2luZE9mKHZhbCkge1xuICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfVxuXG4gIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB0eXBlb2YgdmFsO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiAnYXJyYXknO1xuICB9XG5cbiAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwodmFsKVxuICAgIC5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTtcbn07XG5cblxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRhdGVGb3JtYXQ7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBkYXRlRm9ybWF0O1xuICB9IGVsc2Uge1xuICAgIGdsb2JhbC5kYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdDtcbiAgfVxufSkodGhpcyk7XG4iLCIvKiFcbiAqIHBhZC1sZWZ0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9wYWQtbGVmdD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhZExlZnQoc3RyLCBudW0sIGNoKSB7XG4gIHN0ciA9IHN0ci50b1N0cmluZygpO1xuXG4gIGlmICh0eXBlb2YgbnVtID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAoY2ggPT09IDApIHtcbiAgICBjaCA9ICcwJztcbiAgfSBlbHNlIGlmIChjaCkge1xuICAgIGNoID0gY2gudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICBjaCA9ICcgJztcbiAgfVxuXG4gIHJldHVybiByZXBlYXQoY2gsIG51bSAtIHN0ci5sZW5ndGgpICsgc3RyO1xufTtcbiIsImltcG9ydCBkYXRlZm9ybWF0IGZyb20gJ2RhdGVmb3JtYXQnO1xuaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCBwYWRMZWZ0IGZyb20gJ3BhZC1sZWZ0JztcbmltcG9ydCB7IGdldENsaWVudEFQSSB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcbmxldCBsaW5rO1xubGV0IGRlZmF1bHRFeHRzID0geyBleHRlbnNpb246ICcnLCBwcmVmaXg6ICcnLCBzdWZmaXg6ICcnIH07XG5cbi8vIEFsdGVybmF0aXZlIHNvbHV0aW9uIGZvciBzYXZpbmcgZmlsZXMsXG4vLyBhIGJpdCBzbG93ZXIgYW5kIGRvZXMgbm90IHdvcmsgaW4gU2FmYXJpXG4vLyBmdW5jdGlvbiBmZXRjaEJsb2JGcm9tRGF0YVVSTCAoZGF0YVVSTCkge1xuLy8gICByZXR1cm4gd2luZG93LmZldGNoKGRhdGFVUkwpLnRoZW4ocmVzID0+IHJlcy5ibG9iKCkpO1xuLy8gfVxuXG5jb25zdCBzdXBwb3J0ZWRFbmNvZGluZ3MgPSBbXG4gICdpbWFnZS9wbmcnLFxuICAnaW1hZ2UvanBlZycsXG4gICdpbWFnZS93ZWJwJ1xuXTtcblxuZnVuY3Rpb24gc3RyZWFtIChpc1N0YXJ0LCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBvcHRzID0gYXNzaWduKHt9LCBkZWZhdWx0RXh0cywgb3B0cyk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSByZXNvbHZlRmlsZW5hbWUoT2JqZWN0LmFzc2lnbih7fSwgb3B0cywge1xuICAgICAgZXh0ZW5zaW9uOiAnJyxcbiAgICAgIGZyYW1lOiB1bmRlZmluZWRcbiAgICB9KSk7XG4gICAgY29uc3QgZnVuYyA9IGlzU3RhcnQgPyAnc3RyZWFtU3RhcnQnIDogJ3N0cmVhbUVuZCc7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGNsaWVudCAmJiBjbGllbnQub3V0cHV0ICYmIHR5cGVvZiBjbGllbnRbZnVuY10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjbGllbnRbZnVuY10oYXNzaWduKHt9LCBvcHRzLCB7IGZpbGVuYW1lIH0pKVxuICAgICAgICAudGhlbihldiA9PiByZXNvbHZlKGV2KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNvbHZlKHsgZmlsZW5hbWUsIGNsaWVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbVN0YXJ0IChvcHRzID0ge30pIHtcbiAgcmV0dXJuIHN0cmVhbSh0cnVlLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbUVuZCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBzdHJlYW0oZmFsc2UsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q2FudmFzIChjYW52YXMsIG9wdCA9IHt9KSB7XG4gIGNvbnN0IGVuY29kaW5nID0gb3B0LmVuY29kaW5nIHx8ICdpbWFnZS9wbmcnO1xuICBpZiAoIXN1cHBvcnRlZEVuY29kaW5ncy5pbmNsdWRlcyhlbmNvZGluZykpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYW52YXMgZW5jb2RpbmcgJHtlbmNvZGluZ31gKTtcbiAgbGV0IGV4dGVuc2lvbiA9IChlbmNvZGluZy5zcGxpdCgnLycpWzFdIHx8ICcnKS5yZXBsYWNlKC9qcGVnL2ksICdqcGcnKTtcbiAgaWYgKGV4dGVuc2lvbikgZXh0ZW5zaW9uID0gYC4ke2V4dGVuc2lvbn1gLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiB7XG4gICAgZXh0ZW5zaW9uLFxuICAgIHR5cGU6IGVuY29kaW5nLFxuICAgIGRhdGFVUkw6IGNhbnZhcy50b0RhdGFVUkwoZW5jb2RpbmcsIG9wdC5lbmNvZGluZ1F1YWxpdHkpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJsb2JGcm9tRGF0YVVSTCAoZGF0YVVSTCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzcGxpdEluZGV4ID0gZGF0YVVSTC5pbmRleE9mKCcsJyk7XG4gICAgaWYgKHNwbGl0SW5kZXggPT09IC0xKSB7XG4gICAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmFzZTY0ID0gZGF0YVVSTC5zbGljZShzcGxpdEluZGV4ICsgMSk7XG4gICAgY29uc3QgYnl0ZVN0cmluZyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7XG4gICAgY29uc3QgdHlwZSA9IGRhdGFVUkwuc2xpY2UoMCwgc3BsaXRJbmRleCk7XG4gICAgY29uc3QgbWltZU1hdGNoID0gL2RhdGE6KFteO10rKS8uZXhlYyh0eXBlKTtcbiAgICBjb25zdCBtaW1lID0gKG1pbWVNYXRjaCA/IG1pbWVNYXRjaFsxXSA6ICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgIGNvbnN0IGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJlc29sdmUobmV3IHdpbmRvdy5CbG9iKFsgYWIgXSwgeyB0eXBlOiBtaW1lIH0pKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlRGF0YVVSTCAoZGF0YVVSTCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVCbG9iRnJvbURhdGFVUkwoZGF0YVVSTClcbiAgICAudGhlbihibG9iID0+IHNhdmVCbG9iKGJsb2IsIG9wdHMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVCbG9iIChibG9iLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIG9wdHMgPSBhc3NpZ24oe30sIGRlZmF1bHRFeHRzLCBvcHRzKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IG9wdHMuZmlsZW5hbWU7XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoY2xpZW50ICYmIHR5cGVvZiBjbGllbnQuc2F2ZUJsb2IgPT09ICdmdW5jdGlvbicgJiYgY2xpZW50Lm91dHB1dCkge1xuICAgICAgLy8gbmF0aXZlIHNhdmluZyB1c2luZyBhIENMSSB0b29sXG4gICAgICByZXR1cm4gY2xpZW50LnNhdmVCbG9iKGJsb2IsIGFzc2lnbih7fSwgb3B0cywgeyBmaWxlbmFtZSB9KSlcbiAgICAgICAgLnRoZW4oZXYgPT4gcmVzb2x2ZShldikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3JjZSBkb3dubG9hZFxuICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgfVxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgbGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICBsaW5rLm9uY2xpY2sgPSBub29wO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICBpZiAobGluay5wYXJlbnRFbGVtZW50KSBsaW5rLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgICByZXNvbHZlKHsgZmlsZW5hbWUsIGNsaWVudDogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZpbGUgKGRhdGEsIG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogWyBkYXRhIF07XG4gIGNvbnN0IGJsb2IgPSBuZXcgd2luZG93LkJsb2IocGFydHMsIHsgdHlwZTogb3B0cy50eXBlIHx8ICcnIH0pO1xuICByZXR1cm4gc2F2ZUJsb2IoYmxvYiwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lU3RhbXAgKCkge1xuICBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXkubW0uZGQtSEguTU0uc3NgO1xuICByZXR1cm4gZGF0ZWZvcm1hdChuZXcgRGF0ZSgpLCBkYXRlRm9ybWF0U3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRGaWxlIChwcmVmaXggPSAnJywgc3VmZml4ID0gJycsIGV4dCkge1xuICAvLyBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXkubW0uZGQtSEguTU0uc3NgO1xuICBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXktbW0tZGQgJ2F0JyBoLk1NLnNzIFRUYDtcbiAgcmV0dXJuIGAke3ByZWZpeH0ke2RhdGVmb3JtYXQobmV3IERhdGUoKSwgZGF0ZUZvcm1hdFN0cil9JHtzdWZmaXh9JHtleHR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGaWxlbmFtZSAob3B0ID0ge30pIHtcbiAgb3B0ID0gYXNzaWduKHt9LCBvcHQpO1xuXG4gIC8vIEN1c3RvbSBmaWxlbmFtZSBmdW5jdGlvblxuICBpZiAodHlwZW9mIG9wdC5maWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9wdC5maWxlKG9wdCk7XG4gIH0gZWxzZSBpZiAob3B0LmZpbGUpIHtcbiAgICByZXR1cm4gb3B0LmZpbGU7XG4gIH1cblxuICBsZXQgZnJhbWUgPSBudWxsO1xuICBsZXQgZXh0ZW5zaW9uID0gJyc7XG4gIGlmICh0eXBlb2Ygb3B0LmV4dGVuc2lvbiA9PT0gJ3N0cmluZycpIGV4dGVuc2lvbiA9IG9wdC5leHRlbnNpb247XG5cbiAgaWYgKHR5cGVvZiBvcHQuZnJhbWUgPT09ICdudW1iZXInKSB7XG4gICAgbGV0IHRvdGFsRnJhbWVzO1xuICAgIGlmICh0eXBlb2Ygb3B0LnRvdGFsRnJhbWVzID09PSAnbnVtYmVyJykge1xuICAgICAgdG90YWxGcmFtZXMgPSBvcHQudG90YWxGcmFtZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvdGFsRnJhbWVzID0gTWF0aC5tYXgoMTAwMDAsIG9wdC5mcmFtZSk7XG4gICAgfVxuICAgIGZyYW1lID0gcGFkTGVmdChTdHJpbmcob3B0LmZyYW1lKSwgU3RyaW5nKHRvdGFsRnJhbWVzKS5sZW5ndGgsICcwJyk7XG4gIH1cblxuICBjb25zdCBsYXllclN0ciA9IGlzRmluaXRlKG9wdC50b3RhbExheWVycykgJiYgaXNGaW5pdGUob3B0LmxheWVyKSAmJiBvcHQudG90YWxMYXllcnMgPiAxID8gYCR7b3B0LmxheWVyfWAgOiAnJztcbiAgaWYgKGZyYW1lICE9IG51bGwpIHtcbiAgICByZXR1cm4gWyBsYXllclN0ciwgZnJhbWUgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlZmF1bHRGaWxlTmFtZSA9IG9wdC50aW1lU3RhbXA7XG4gICAgcmV0dXJuIFsgb3B0LnByZWZpeCwgb3B0Lm5hbWUgfHwgZGVmYXVsdEZpbGVOYW1lLCBsYXllclN0ciwgb3B0Lmhhc2gsIG9wdC5zdWZmaXggXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9XG59XG4iLCIvLyBIYW5kbGUgc29tZSBjb21tb24gdHlwb3NcbmNvbnN0IGNvbW1vblR5cG9zID0ge1xuICBkaW1lbnNpb246ICdkaW1lbnNpb25zJyxcbiAgYW5pbWF0ZWQ6ICdhbmltYXRlJyxcbiAgYW5pbWF0aW5nOiAnYW5pbWF0ZScsXG4gIHVuaXQ6ICd1bml0cycsXG4gIFA1OiAncDUnLFxuICBwaXhlbGxhdGVkOiAncGl4ZWxhdGVkJyxcbiAgbG9vcGluZzogJ2xvb3AnLFxuICBwaXhlbFBlckluY2g6ICdwaXhlbHMnXG59O1xuXG4vLyBIYW5kbGUgYWxsIG90aGVyIHR5cG9zXG5jb25zdCBhbGxLZXlzID0gW1xuICAnZGltZW5zaW9ucycsICd1bml0cycsICdwaXhlbHNQZXJJbmNoJywgJ29yaWVudGF0aW9uJyxcbiAgJ3NjYWxlVG9GaXQnLCAnc2NhbGVUb1ZpZXcnLCAnYmxlZWQnLCAncGl4ZWxSYXRpbycsXG4gICdleHBvcnRQaXhlbFJhdGlvJywgJ21heFBpeGVsUmF0aW8nLCAnc2NhbGVDb250ZXh0JyxcbiAgJ3Jlc2l6ZUNhbnZhcycsICdzdHlsZUNhbnZhcycsICdjYW52YXMnLCAnY29udGV4dCcsICdhdHRyaWJ1dGVzJyxcbiAgJ3BhcmVudCcsICdmaWxlJywgJ25hbWUnLCAncHJlZml4JywgJ3N1ZmZpeCcsICdhbmltYXRlJywgJ3BsYXlpbmcnLFxuICAnbG9vcCcsICdkdXJhdGlvbicsICd0b3RhbEZyYW1lcycsICdmcHMnLCAncGxheWJhY2tSYXRlJywgJ3RpbWVTY2FsZScsXG4gICdmcmFtZScsICd0aW1lJywgJ2ZsdXNoJywgJ3BpeGVsYXRlZCcsICdob3RrZXlzJywgJ3A1JywgJ2lkJyxcbiAgJ3NjYWxlVG9GaXRQYWRkaW5nJywgJ2RhdGEnLCAncGFyYW1zJywgJ2VuY29kaW5nJywgJ2VuY29kaW5nUXVhbGl0eSdcbl07XG5cbi8vIFRoaXMgaXMgZmFpcmx5IG9waW5pb25hdGVkIGFuZCBmb3JjZXMgdXNlcnMgdG8gdXNlIHRoZSAnZGF0YScgcGFyYW1ldGVyXG4vLyBpZiB0aGV5IHdhbnQgdG8gcGFzcyBhbG9uZyBub24tc2V0dGluZyBvYmplY3RzLi4uXG5leHBvcnQgY29uc3QgY2hlY2tTZXR0aW5ncyA9IChzZXR0aW5ncykgPT4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpO1xuICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5IGluIGNvbW1vblR5cG9zKSB7XG4gICAgICBjb25zdCBhY3R1YWwgPSBjb21tb25UeXBvc1trZXldO1xuICAgICAgY29uc29sZS53YXJuKGBbY2FudmFzLXNrZXRjaF0gQ291bGQgbm90IHJlY29nbml6ZSB0aGUgc2V0dGluZyBcIiR7a2V5fVwiLCBkaWQgeW91IG1lYW4gXCIke2FjdHVhbH1cIj9gKTtcbiAgICB9IGVsc2UgaWYgKCFhbGxLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2NhbnZhcy1za2V0Y2hdIENvdWxkIG5vdCByZWNvZ25pemUgdGhlIHNldHRpbmcgXCIke2tleX1cImApO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiY29uc3QgZGVmYXVsdFVuaXRzID0gJ21tJztcblxuY29uc3QgZGF0YSA9IFtcbiAgLy8gQ29tbW9uIFBhcGVyIFNpemVzXG4gIC8vIChNb3N0bHkgTm9ydGgtQW1lcmljYW4gYmFzZWQpXG4gIFsgJ3Bvc3RjYXJkJywgMTAxLjYsIDE1Mi40IF0sXG4gIFsgJ3Bvc3Rlci1zbWFsbCcsIDI4MCwgNDMwIF0sXG4gIFsgJ3Bvc3RlcicsIDQ2MCwgNjEwIF0sXG4gIFsgJ3Bvc3Rlci1sYXJnZScsIDYxMCwgOTEwIF0sXG4gIFsgJ2J1c2luZXNzLWNhcmQnLCA1MC44LCA4OC45IF0sXG5cbiAgLy8gUGhvdG9ncmFwaGljIFByaW50IFBhcGVyIFNpemVzXG4gIFsgJzJyJywgNjQsIDg5IF0sXG4gIFsgJzNyJywgODksIDEyNyBdLFxuICBbICc0cicsIDEwMiwgMTUyIF0sXG4gIFsgJzVyJywgMTI3LCAxNzggXSwgLy8gNeKAs3g34oCzXG4gIFsgJzZyJywgMTUyLCAyMDMgXSwgLy8gNuKAs3g44oCzXG4gIFsgJzhyJywgMjAzLCAyNTQgXSwgLy8gOOKAs3gxMOKAs1xuICBbICcxMHInLCAyNTQsIDMwNSBdLCAvLyAxMOKAs3gxMuKAs1xuICBbICcxMXInLCAyNzksIDM1NiBdLCAvLyAxMeKAs3gxNOKAs1xuICBbICcxMnInLCAzMDUsIDM4MSBdLFxuXG4gIC8vIFN0YW5kYXJkIFBhcGVyIFNpemVzXG4gIFsgJ2EwJywgODQxLCAxMTg5IF0sXG4gIFsgJ2ExJywgNTk0LCA4NDEgXSxcbiAgWyAnYTInLCA0MjAsIDU5NCBdLFxuICBbICdhMycsIDI5NywgNDIwIF0sXG4gIFsgJ2E0JywgMjEwLCAyOTcgXSxcbiAgWyAnYTUnLCAxNDgsIDIxMCBdLFxuICBbICdhNicsIDEwNSwgMTQ4IF0sXG4gIFsgJ2E3JywgNzQsIDEwNSBdLFxuICBbICdhOCcsIDUyLCA3NCBdLFxuICBbICdhOScsIDM3LCA1MiBdLFxuICBbICdhMTAnLCAyNiwgMzcgXSxcbiAgWyAnMmEwJywgMTE4OSwgMTY4MiBdLFxuICBbICc0YTAnLCAxNjgyLCAyMzc4IF0sXG4gIFsgJ2IwJywgMTAwMCwgMTQxNCBdLFxuICBbICdiMScsIDcwNywgMTAwMCBdLFxuICBbICdiMSsnLCA3MjAsIDEwMjAgXSxcbiAgWyAnYjInLCA1MDAsIDcwNyBdLFxuICBbICdiMisnLCA1MjAsIDcyMCBdLFxuICBbICdiMycsIDM1MywgNTAwIF0sXG4gIFsgJ2I0JywgMjUwLCAzNTMgXSxcbiAgWyAnYjUnLCAxNzYsIDI1MCBdLFxuICBbICdiNicsIDEyNSwgMTc2IF0sXG4gIFsgJ2I3JywgODgsIDEyNSBdLFxuICBbICdiOCcsIDYyLCA4OCBdLFxuICBbICdiOScsIDQ0LCA2MiBdLFxuICBbICdiMTAnLCAzMSwgNDQgXSxcbiAgWyAnYjExJywgMjIsIDMyIF0sXG4gIFsgJ2IxMicsIDE2LCAyMiBdLFxuICBbICdjMCcsIDkxNywgMTI5NyBdLFxuICBbICdjMScsIDY0OCwgOTE3IF0sXG4gIFsgJ2MyJywgNDU4LCA2NDggXSxcbiAgWyAnYzMnLCAzMjQsIDQ1OCBdLFxuICBbICdjNCcsIDIyOSwgMzI0IF0sXG4gIFsgJ2M1JywgMTYyLCAyMjkgXSxcbiAgWyAnYzYnLCAxMTQsIDE2MiBdLFxuICBbICdjNycsIDgxLCAxMTQgXSxcbiAgWyAnYzgnLCA1NywgODEgXSxcbiAgWyAnYzknLCA0MCwgNTcgXSxcbiAgWyAnYzEwJywgMjgsIDQwIF0sXG4gIFsgJ2MxMScsIDIyLCAzMiBdLFxuICBbICdjMTInLCAxNiwgMjIgXSxcblxuICAvLyBVc2UgaW5jaGVzIGZvciBOb3J0aCBBbWVyaWNhbiBzaXplcyxcbiAgLy8gYXMgaXQgcHJvZHVjZXMgbGVzcyBmbG9hdCBwcmVjaXNpb24gZXJyb3JzXG4gIFsgJ2hhbGYtbGV0dGVyJywgNS41LCA4LjUsICdpbicgXSxcbiAgWyAnbGV0dGVyJywgOC41LCAxMSwgJ2luJyBdLFxuICBbICdsZWdhbCcsIDguNSwgMTQsICdpbicgXSxcbiAgWyAnanVuaW9yLWxlZ2FsJywgNSwgOCwgJ2luJyBdLFxuICBbICdsZWRnZXInLCAxMSwgMTcsICdpbicgXSxcbiAgWyAndGFibG9pZCcsIDExLCAxNywgJ2luJyBdLFxuICBbICdhbnNpLWEnLCA4LjUsIDExLjAsICdpbicgXSxcbiAgWyAnYW5zaS1iJywgMTEuMCwgMTcuMCwgJ2luJyBdLFxuICBbICdhbnNpLWMnLCAxNy4wLCAyMi4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktZCcsIDIyLjAsIDM0LjAsICdpbicgXSxcbiAgWyAnYW5zaS1lJywgMzQuMCwgNDQuMCwgJ2luJyBdLFxuICBbICdhcmNoLWEnLCA5LCAxMiwgJ2luJyBdLFxuICBbICdhcmNoLWInLCAxMiwgMTgsICdpbicgXSxcbiAgWyAnYXJjaC1jJywgMTgsIDI0LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZCcsIDI0LCAzNiwgJ2luJyBdLFxuICBbICdhcmNoLWUnLCAzNiwgNDgsICdpbicgXSxcbiAgWyAnYXJjaC1lMScsIDMwLCA0MiwgJ2luJyBdLFxuICBbICdhcmNoLWUyJywgMjYsIDM4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTMnLCAyNywgMzksICdpbicgXVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZGF0YS5yZWR1Y2UoKGRpY3QsIHByZXNldCkgPT4ge1xuICBjb25zdCBpdGVtID0ge1xuICAgIHVuaXRzOiBwcmVzZXRbM10gfHwgZGVmYXVsdFVuaXRzLFxuICAgIGRpbWVuc2lvbnM6IFsgcHJlc2V0WzFdLCBwcmVzZXRbMl0gXVxuICB9O1xuICBkaWN0W3ByZXNldFswXV0gPSBpdGVtO1xuICBkaWN0W3ByZXNldFswXS5yZXBsYWNlKC8tL2csICcgJyldID0gaXRlbTtcbiAgcmV0dXJuIGRpY3Q7XG59LCB7fSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9PSB1bmRlZmluZWQpIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxufTtcbiIsInZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xudmFyIHVuaXRzID0gWyAnbW0nLCAnY20nLCAnbScsICdwYycsICdwdCcsICdpbicsICdmdCcsICdweCcgXTtcblxudmFyIGNvbnZlcnNpb25zID0ge1xuICAvLyBtZXRyaWNcbiAgbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGNtOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDBcbiAgfSxcbiAgbW06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMSAvIDEwMDBcbiAgfSxcbiAgLy8gaW1wZXJpYWxcbiAgcHQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNzJcbiAgfSxcbiAgcGM6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNlxuICB9LFxuICBpbjoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDFcbiAgfSxcbiAgZnQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxMlxuICB9XG59O1xuXG5jb25zdCBhbmNob3JzID0ge1xuICBtZXRyaWM6IHtcbiAgICB1bml0OiAnbScsXG4gICAgcmF0aW86IDEgLyAwLjAyNTRcbiAgfSxcbiAgaW1wZXJpYWw6IHtcbiAgICB1bml0OiAnaW4nLFxuICAgIHJhdGlvOiAwLjAyNTRcbiAgfVxufTtcblxuZnVuY3Rpb24gcm91bmQgKHZhbHVlLCBkZWNpbWFscykge1xuICByZXR1cm4gTnVtYmVyKE1hdGgucm91bmQodmFsdWUgKyAnZScgKyBkZWNpbWFscykgKyAnZS0nICsgZGVjaW1hbHMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UgKHZhbHVlLCBmcm9tVW5pdCwgdG9Vbml0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXInKTtcbiAgaWYgKCFmcm9tVW5pdCB8fCAhdG9Vbml0KSB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBmcm9tIGFuZCB0byB1bml0cycpO1xuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB2YXIgcGl4ZWxzUGVySW5jaCA9IGRlZmluZWQob3B0cy5waXhlbHNQZXJJbmNoLCA5Nik7XG4gIHZhciBwcmVjaXNpb24gPSBvcHRzLnByZWNpc2lvbjtcbiAgdmFyIHJvdW5kUGl4ZWwgPSBvcHRzLnJvdW5kUGl4ZWwgIT09IGZhbHNlO1xuXG4gIGZyb21Vbml0ID0gZnJvbVVuaXQudG9Mb3dlckNhc2UoKTtcbiAgdG9Vbml0ID0gdG9Vbml0LnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHVuaXRzLmluZGV4T2YoZnJvbVVuaXQpID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20gdW5pdCBcIicgKyBmcm9tVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcbiAgaWYgKHVuaXRzLmluZGV4T2YodG9Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgdG9Vbml0ICsgJ1wiLCBtdXN0IGJlIG9uZSBvZjogJyArIHVuaXRzLmpvaW4oJywgJykpO1xuXG4gIGlmIChmcm9tVW5pdCA9PT0gdG9Vbml0KSB7XG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb252ZXJ0IGZyb20gQSB0byBCIHNpbmNlIHRoZXkgYXJlIHRoZSBzYW1lIGFscmVhZHlcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB2YXIgdG9GYWN0b3IgPSAxO1xuICB2YXIgZnJvbUZhY3RvciA9IDE7XG4gIHZhciBpc1RvUGl4ZWwgPSBmYWxzZTtcblxuICBpZiAoZnJvbVVuaXQgPT09ICdweCcpIHtcbiAgICBmcm9tRmFjdG9yID0gMSAvIHBpeGVsc1BlckluY2g7XG4gICAgZnJvbVVuaXQgPSAnaW4nO1xuICB9XG4gIGlmICh0b1VuaXQgPT09ICdweCcpIHtcbiAgICBpc1RvUGl4ZWwgPSB0cnVlO1xuICAgIHRvRmFjdG9yID0gcGl4ZWxzUGVySW5jaDtcbiAgICB0b1VuaXQgPSAnaW4nO1xuICB9XG5cbiAgdmFyIGZyb21Vbml0RGF0YSA9IGNvbnZlcnNpb25zW2Zyb21Vbml0XTtcbiAgdmFyIHRvVW5pdERhdGEgPSBjb252ZXJzaW9uc1t0b1VuaXRdO1xuXG4gIC8vIHNvdXJjZSB0byBhbmNob3IgaW5zaWRlIHNvdXJjZSdzIHN5c3RlbVxuICB2YXIgYW5jaG9yID0gdmFsdWUgKiBmcm9tVW5pdERhdGEuZmFjdG9yICogZnJvbUZhY3RvcjtcblxuICAvLyBpZiBzeXN0ZW1zIGRpZmZlciwgY29udmVydCBvbmUgdG8gYW5vdGhlclxuICBpZiAoZnJvbVVuaXREYXRhLnN5c3RlbSAhPT0gdG9Vbml0RGF0YS5zeXN0ZW0pIHtcbiAgICAvLyByZWd1bGFyICdtJyB0byAnaW4nIGFuZCBzbyBmb3J0aFxuICAgIGFuY2hvciAqPSBhbmNob3JzW2Zyb21Vbml0RGF0YS5zeXN0ZW1dLnJhdGlvO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IGFuY2hvciAvIHRvVW5pdERhdGEuZmFjdG9yICogdG9GYWN0b3I7XG4gIGlmIChpc1RvUGl4ZWwgJiYgcm91bmRQaXhlbCkge1xuICAgIHJlc3VsdCA9IE1hdGgucm91bmQocmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJlY2lzaW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShwcmVjaXNpb24pKSB7XG4gICAgcmVzdWx0ID0gcm91bmQocmVzdWx0LCBwcmVjaXNpb24pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydERpc3RhbmNlO1xubW9kdWxlLmV4cG9ydHMudW5pdHMgPSB1bml0cztcbiIsImltcG9ydCBwYXBlclNpemVzIGZyb20gJy4vcGFwZXItc2l6ZXMnO1xuaW1wb3J0IGNvbnZlcnRMZW5ndGggZnJvbSAnY29udmVydC1sZW5ndGgnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQgKGRpbWVuc2lvbnMsIHVuaXRzVG8gPSAncHgnLCBwaXhlbHNQZXJJbmNoID0gNzIpIHtcbiAgaWYgKHR5cGVvZiBkaW1lbnNpb25zID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGtleSA9IGRpbWVuc2lvbnMudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIShrZXkgaW4gcGFwZXJTaXplcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGRpbWVuc2lvbiBwcmVzZXQgXCIke2RpbWVuc2lvbnN9XCIgaXMgbm90IHN1cHBvcnRlZCBvciBjb3VsZCBub3QgYmUgZm91bmQ7IHRyeSB1c2luZyBhNCwgYTMsIHBvc3RjYXJkLCBsZXR0ZXIsIGV0Yy5gKVxuICAgIH1cbiAgICBjb25zdCBwcmVzZXQgPSBwYXBlclNpemVzW2tleV07XG4gICAgcmV0dXJuIHByZXNldC5kaW1lbnNpb25zLm1hcChkID0+IHtcbiAgICAgIHJldHVybiBjb252ZXJ0RGlzdGFuY2UoZCwgcHJlc2V0LnVuaXRzLCB1bml0c1RvLCBwaXhlbHNQZXJJbmNoKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGltZW5zaW9ucztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERpc3RhbmNlIChkaW1lbnNpb24sIHVuaXRzRnJvbSA9ICdweCcsIHVuaXRzVG8gPSAncHgnLCBwaXhlbHNQZXJJbmNoID0gNzIpIHtcbiAgcmV0dXJuIGNvbnZlcnRMZW5ndGgoZGltZW5zaW9uLCB1bml0c0Zyb20sIHVuaXRzVG8sIHtcbiAgICBwaXhlbHNQZXJJbmNoLFxuICAgIHByZWNpc2lvbjogNCxcbiAgICByb3VuZFBpeGVsOiB0cnVlXG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQsIGNvbnZlcnREaXN0YW5jZSB9IGZyb20gJy4uL2Rpc3RhbmNlcyc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIsIGRlZmluZWQgfSBmcm9tICcuLi91dGlsJztcblxuZnVuY3Rpb24gY2hlY2tJZkhhc0RpbWVuc2lvbnMgKHNldHRpbmdzKSB7XG4gIGlmICghc2V0dGluZ3MuZGltZW5zaW9ucykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHNldHRpbmdzLmRpbWVuc2lvbnMgPT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2V0dGluZ3MuZGltZW5zaW9ucykgJiYgc2V0dGluZ3MuZGltZW5zaW9ucy5sZW5ndGggPj0gMikgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50U2l6ZSAocHJvcHMsIHNldHRpbmdzKSB7XG4gIC8vIFdoZW4gbm8geyBkaW1lbnNpb24gfSBpcyBwYXNzZWQgaW4gbm9kZSwgd2UgZGVmYXVsdCB0byBIVE1MIGNhbnZhcyBzaXplXG4gIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICByZXR1cm4gWyAzMDAsIDE1MCBdO1xuICB9XG5cbiAgbGV0IGVsZW1lbnQgPSBzZXR0aW5ncy5wYXJlbnQgfHwgd2luZG93O1xuXG4gIGlmIChlbGVtZW50ID09PSB3aW5kb3cgfHxcbiAgICAgIGVsZW1lbnQgPT09IGRvY3VtZW50IHx8XG4gICAgICBlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIFsgd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodCBdO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gWyB3aWR0aCwgaGVpZ2h0IF07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzaXplQ2FudmFzIChwcm9wcywgc2V0dGluZ3MpIHtcbiAgbGV0IHdpZHRoLCBoZWlnaHQ7XG4gIGxldCBzdHlsZVdpZHRoLCBzdHlsZUhlaWdodDtcbiAgbGV0IGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQ7XG5cbiAgY29uc3QgYnJvd3NlciA9IGlzQnJvd3NlcigpO1xuICBjb25zdCBkaW1lbnNpb25zID0gc2V0dGluZ3MuZGltZW5zaW9ucztcbiAgY29uc3QgaGFzRGltZW5zaW9ucyA9IGNoZWNrSWZIYXNEaW1lbnNpb25zKHNldHRpbmdzKTtcbiAgY29uc3QgZXhwb3J0aW5nID0gcHJvcHMuZXhwb3J0aW5nO1xuICBsZXQgc2NhbGVUb0ZpdCA9IGhhc0RpbWVuc2lvbnMgPyBzZXR0aW5ncy5zY2FsZVRvRml0ICE9PSBmYWxzZSA6IGZhbHNlO1xuICBsZXQgc2NhbGVUb1ZpZXcgPSAoIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSA/IHNldHRpbmdzLnNjYWxlVG9WaWV3IDogdHJ1ZTtcbiAgLy8gaW4gbm9kZSwgY2FuY2VsIGJvdGggb2YgdGhlc2Ugb3B0aW9uc1xuICBpZiAoIWJyb3dzZXIpIHNjYWxlVG9GaXQgPSBzY2FsZVRvVmlldyA9IGZhbHNlO1xuICBjb25zdCB1bml0cyA9IHNldHRpbmdzLnVuaXRzO1xuICBjb25zdCBwaXhlbHNQZXJJbmNoID0gKHR5cGVvZiBzZXR0aW5ncy5waXhlbHNQZXJJbmNoID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5waXhlbHNQZXJJbmNoKSkgPyBzZXR0aW5ncy5waXhlbHNQZXJJbmNoIDogNzI7XG4gIGNvbnN0IGJsZWVkID0gZGVmaW5lZChzZXR0aW5ncy5ibGVlZCwgMCk7XG5cbiAgY29uc3QgZGV2aWNlUGl4ZWxSYXRpbyA9IGJyb3dzZXIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7XG4gIGNvbnN0IGJhc2VQaXhlbFJhdGlvID0gc2NhbGVUb1ZpZXcgPyBkZXZpY2VQaXhlbFJhdGlvIDogMTtcblxuICBsZXQgcGl4ZWxSYXRpbywgZXhwb3J0UGl4ZWxSYXRpbztcblxuICAvLyBJZiBhIHBpeGVsIHJhdGlvIGlzIHNwZWNpZmllZCwgd2Ugd2lsbCB1c2UgaXQuXG4gIC8vIE90aGVyd2lzZTpcbiAgLy8gIC0+IElmIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBiYXNlIHJhdGlvIChpLmUuIHNpemUgZm9yIGV4cG9ydClcbiAgLy8gIC0+IElmIG5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBkZXZpY2UgcmF0aW8gKGkuZS4gc2l6ZSBmb3Igc2NyZWVuKVxuICBpZiAodHlwZW9mIHNldHRpbmdzLnBpeGVsUmF0aW8gPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNldHRpbmdzLnBpeGVsUmF0aW8pKSB7XG4gICAgLy8gV2hlbiB7IHBpeGVsUmF0aW8gfSBpcyBzcGVjaWZpZWQsIGl0J3MgYWxzbyB1c2VkIGFzIGRlZmF1bHQgZXhwb3J0UGl4ZWxSYXRpby5cbiAgICBwaXhlbFJhdGlvID0gc2V0dGluZ3MucGl4ZWxSYXRpbztcbiAgICBleHBvcnRQaXhlbFJhdGlvID0gZGVmaW5lZChzZXR0aW5ncy5leHBvcnRQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgICAgLy8gV2hlbiBhIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSB0aGUgYmFzZSByYXRpbyByYXRoZXIgdGhhbiBzY3JlZW4gcmF0aW9cbiAgICAgIHBpeGVsUmF0aW8gPSBiYXNlUGl4ZWxSYXRpbztcbiAgICAgIC8vIERlZmF1bHQgdG8gYSBwaXhlbCByYXRpbyBvZiAxIHNvIHRoYXQgeW91IGVuZCB1cCB3aXRoIHRoZSBzYW1lIGRpbWVuc2lvblxuICAgICAgLy8geW91IHNwZWNpZmllZCwgaS5lLiBbIDUwMCwgNTAwIF0gaXMgZXhwb3J0ZWQgYXMgNTAweDUwMCBweFxuICAgICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIGFzc3VtZSBmdWxsLXNjcmVlbiByZXRpbmEgc2l6aW5nXG4gICAgICBwaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgIC8vIERlZmF1bHQgdG8gc2NyZWVuIHBpeGVsIHJhdGlvLCBzbyB0aGF0IGl0J3MgbGlrZSB0YWtpbmcgYSBkZXZpY2Ugc2NyZWVuc2hvdFxuICAgICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2xhbXAgcGl4ZWwgcmF0aW9cbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5tYXhQaXhlbFJhdGlvID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5tYXhQaXhlbFJhdGlvKSkge1xuICAgIHBpeGVsUmF0aW8gPSBNYXRoLm1pbihzZXR0aW5ncy5tYXhQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBleHBvcnQgcGl4ZWwgcmF0aW9cbiAgaWYgKGV4cG9ydGluZykge1xuICAgIHBpeGVsUmF0aW8gPSBleHBvcnRQaXhlbFJhdGlvO1xuICB9XG5cbiAgLy8gcGFyZW50V2lkdGggPSB0eXBlb2YgcGFyZW50V2lkdGggPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzBdIDogcGFyZW50V2lkdGg7XG4gIC8vIHBhcmVudEhlaWdodCA9IHR5cGVvZiBwYXJlbnRIZWlnaHQgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzFdIDogcGFyZW50SGVpZ2h0O1xuXG4gIGxldCBbIHBhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHQgXSA9IGdldFBhcmVudFNpemUocHJvcHMsIHNldHRpbmdzKTtcbiAgbGV0IHRyaW1XaWR0aCwgdHJpbUhlaWdodDtcblxuICAvLyBZb3UgY2FuIHNwZWNpZnkgYSBkaW1lbnNpb25zIGluIHBpeGVscyBvciBjbS9tL2luL2V0Y1xuICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGdldERpbWVuc2lvbnNGcm9tUHJlc2V0KGRpbWVuc2lvbnMsIHVuaXRzLCBwaXhlbHNQZXJJbmNoKTtcbiAgICBjb25zdCBoaWdoZXN0ID0gTWF0aC5tYXgocmVzdWx0WzBdLCByZXN1bHRbMV0pO1xuICAgIGNvbnN0IGxvd2VzdCA9IE1hdGgubWluKHJlc3VsdFswXSwgcmVzdWx0WzFdKTtcbiAgICBpZiAoc2V0dGluZ3Mub3JpZW50YXRpb24pIHtcbiAgICAgIGNvbnN0IGxhbmRzY2FwZSA9IHNldHRpbmdzLm9yaWVudGF0aW9uID09PSAnbGFuZHNjYXBlJztcbiAgICAgIHdpZHRoID0gbGFuZHNjYXBlID8gaGlnaGVzdCA6IGxvd2VzdDtcbiAgICAgIGhlaWdodCA9IGxhbmRzY2FwZSA/IGxvd2VzdCA6IGhpZ2hlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gcmVzdWx0WzBdO1xuICAgICAgaGVpZ2h0ID0gcmVzdWx0WzFdO1xuICAgIH1cblxuICAgIHRyaW1XaWR0aCA9IHdpZHRoO1xuICAgIHRyaW1IZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvLyBBcHBseSBibGVlZCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIGluIHRoZSBzYW1lIHVuaXRzXG4gICAgd2lkdGggKz0gYmxlZWQgKiAyO1xuICAgIGhlaWdodCArPSBibGVlZCAqIDI7XG4gIH0gZWxzZSB7XG4gICAgd2lkdGggPSBwYXJlbnRXaWR0aDtcbiAgICBoZWlnaHQgPSBwYXJlbnRIZWlnaHQ7XG4gICAgdHJpbVdpZHRoID0gd2lkdGg7XG4gICAgdHJpbUhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIC8vIFJlYWwgc2l6ZSBpbiBwaXhlbHMgYWZ0ZXIgUFBJIGlzIHRha2VuIGludG8gYWNjb3VudFxuICBsZXQgcmVhbFdpZHRoID0gd2lkdGg7XG4gIGxldCByZWFsSGVpZ2h0ID0gaGVpZ2h0O1xuICBpZiAoaGFzRGltZW5zaW9ucyAmJiB1bml0cykge1xuICAgIC8vIENvbnZlcnQgdG8gZGlnaXRhbC9waXhlbCB1bml0cyBpZiBuZWNlc3NhcnlcbiAgICByZWFsV2lkdGggPSBjb252ZXJ0RGlzdGFuY2Uod2lkdGgsIHVuaXRzLCAncHgnLCBwaXhlbHNQZXJJbmNoKTtcbiAgICByZWFsSGVpZ2h0ID0gY29udmVydERpc3RhbmNlKGhlaWdodCwgdW5pdHMsICdweCcsIHBpeGVsc1BlckluY2gpO1xuICB9XG5cbiAgLy8gSG93IGJpZyB0byBzZXQgdGhlICd2aWV3JyBvZiB0aGUgY2FudmFzIGluIHRoZSBicm93c2VyIChpLmUuIHN0eWxlKVxuICBzdHlsZVdpZHRoID0gTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQocmVhbEhlaWdodCk7XG5cbiAgLy8gSWYgd2Ugd2lzaCB0byBzY2FsZSB0aGUgdmlldyB0byB0aGUgYnJvd3NlciB3aW5kb3dcbiAgaWYgKHNjYWxlVG9GaXQgJiYgIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSB7XG4gICAgY29uc3QgYXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7XG4gICAgY29uc3Qgd2luZG93QXNwZWN0ID0gcGFyZW50V2lkdGggLyBwYXJlbnRIZWlnaHQ7XG4gICAgY29uc3Qgc2NhbGVUb0ZpdFBhZGRpbmcgPSBkZWZpbmVkKHNldHRpbmdzLnNjYWxlVG9GaXRQYWRkaW5nLCA0MCk7XG4gICAgY29uc3QgbWF4V2lkdGggPSBNYXRoLnJvdW5kKHBhcmVudFdpZHRoIC0gc2NhbGVUb0ZpdFBhZGRpbmcgKiAyKTtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLnJvdW5kKHBhcmVudEhlaWdodCAtIHNjYWxlVG9GaXRQYWRkaW5nICogMik7XG4gICAgaWYgKHN0eWxlV2lkdGggPiBtYXhXaWR0aCB8fCBzdHlsZUhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgaWYgKHdpbmRvd0FzcGVjdCA+IGFzcGVjdCkge1xuICAgICAgICBzdHlsZUhlaWdodCA9IG1heEhlaWdodDtcbiAgICAgICAgc3R5bGVXaWR0aCA9IE1hdGgucm91bmQoc3R5bGVIZWlnaHQgKiBhc3BlY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQoc3R5bGVXaWR0aCAvIGFzcGVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FudmFzV2lkdGggPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChwaXhlbFJhdGlvICogcmVhbFdpZHRoKTtcbiAgY2FudmFzSGVpZ2h0ID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiBzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiByZWFsSGVpZ2h0KTtcblxuICBjb25zdCB2aWV3cG9ydFdpZHRoID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHJlYWxIZWlnaHQpO1xuXG4gIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1dpZHRoIC8gd2lkdGg7XG4gIGNvbnN0IHNjYWxlWSA9IGNhbnZhc0hlaWdodCAvIGhlaWdodDtcblxuICAvLyBBc3NpZ24gdG8gY3VycmVudCBwcm9wc1xuICByZXR1cm4ge1xuICAgIGJsZWVkLFxuICAgIHBpeGVsUmF0aW8sXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGRpbWVuc2lvbnM6IFsgd2lkdGgsIGhlaWdodCBdLFxuICAgIHVuaXRzOiB1bml0cyB8fCAncHgnLFxuICAgIHNjYWxlWCxcbiAgICBzY2FsZVksXG4gICAgcGl4ZWxzUGVySW5jaCxcbiAgICB2aWV3cG9ydFdpZHRoLFxuICAgIHZpZXdwb3J0SGVpZ2h0LFxuICAgIGNhbnZhc1dpZHRoLFxuICAgIGNhbnZhc0hlaWdodCxcbiAgICB0cmltV2lkdGgsXG4gICAgdHJpbUhlaWdodCxcbiAgICBzdHlsZVdpZHRoLFxuICAgIHN0eWxlSGVpZ2h0XG4gIH07XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGdldENhbnZhc0NvbnRleHRcbmZ1bmN0aW9uIGdldENhbnZhc0NvbnRleHQgKHR5cGUsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3Qgc3BlY2lmeSB0eXBlIHN0cmluZycpXG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fVxuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnICYmICFvcHRzLmNhbnZhcykge1xuICAgIHJldHVybiBudWxsIC8vIGNoZWNrIGZvciBOb2RlXG4gIH1cblxuICB2YXIgY2FudmFzID0gb3B0cy5jYW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcbiAgaWYgKHR5cGVvZiBvcHRzLndpZHRoID09PSAnbnVtYmVyJykge1xuICAgIGNhbnZhcy53aWR0aCA9IG9wdHMud2lkdGhcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaGVpZ2h0ID09PSAnbnVtYmVyJykge1xuICAgIGNhbnZhcy5oZWlnaHQgPSBvcHRzLmhlaWdodFxuICB9XG5cbiAgdmFyIGF0dHJpYnMgPSBvcHRzXG4gIHZhciBnbFxuICB0cnkge1xuICAgIHZhciBuYW1lcyA9IFsgdHlwZSBdXG4gICAgLy8gcHJlZml4IEdMIGNvbnRleHRzXG4gICAgaWYgKHR5cGUuaW5kZXhPZignd2ViZ2wnKSA9PT0gMCkge1xuICAgICAgbmFtZXMucHVzaCgnZXhwZXJpbWVudGFsLScgKyB0eXBlKVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQobmFtZXNbaV0sIGF0dHJpYnMpXG4gICAgICBpZiAoZ2wpIHJldHVybiBnbFxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGdsID0gbnVsbFxuICB9XG4gIHJldHVybiAoZ2wgfHwgbnVsbCkgLy8gZW5zdXJlIG51bGwgb24gZmFpbFxufVxuIiwiaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCBnZXRDYW52YXNDb250ZXh0IGZyb20gJ2dldC1jYW52YXMtY29udGV4dCc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICcuLi91dGlsJztcblxuZnVuY3Rpb24gY3JlYXRlQ2FudmFzRWxlbWVudCAoKSB7XG4gIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGFwcGVhcnMgeW91IGFyZSBydW5pbmcgZnJvbSBOb2RlLmpzIG9yIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuIFRyeSBwYXNzaW5nIGluIGFuIGV4aXN0aW5nIHsgY2FudmFzIH0gaW50ZXJmYWNlIGluc3RlYWQuJyk7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDYW52YXMgKHNldHRpbmdzID0ge30pIHtcbiAgbGV0IGNvbnRleHQsIGNhbnZhcztcbiAgbGV0IG93bnNDYW52YXMgPSBmYWxzZTtcbiAgaWYgKHNldHRpbmdzLmNhbnZhcyAhPT0gZmFsc2UpIHtcbiAgICAvLyBEZXRlcm1pbmUgdGhlIGNhbnZhcyBhbmQgY29udGV4dCB0byBjcmVhdGVcbiAgICBjb250ZXh0ID0gc2V0dGluZ3MuY29udGV4dDtcbiAgICBpZiAoIWNvbnRleHQgfHwgdHlwZW9mIGNvbnRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbmV3Q2FudmFzID0gc2V0dGluZ3MuY2FudmFzO1xuICAgICAgaWYgKCFuZXdDYW52YXMpIHtcbiAgICAgICAgbmV3Q2FudmFzID0gY3JlYXRlQ2FudmFzRWxlbWVudCgpO1xuICAgICAgICBvd25zQ2FudmFzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0IHx8ICcyZCc7XG4gICAgICBpZiAodHlwZW9mIG5ld0NhbnZhcy5nZXRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHNwZWNpZmllZCB7IGNhbnZhcyB9IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIGdldENvbnRleHQoKSBmdW5jdGlvbiwgbWF5YmUgaXQgaXMgbm90IGEgPGNhbnZhcz4gdGFnP2ApO1xuICAgICAgfVxuICAgICAgY29udGV4dCA9IGdldENhbnZhc0NvbnRleHQodHlwZSwgYXNzaWduKHt9LCBzZXR0aW5ncy5hdHRyaWJ1dGVzLCB7IGNhbnZhczogbmV3Q2FudmFzIH0pKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCBhdCBjYW52YXMuZ2V0Q29udGV4dCgnJHt0eXBlfScpIC0gdGhlIGJyb3dzZXIgbWF5IG5vdCBzdXBwb3J0IHRoaXMgY29udGV4dCwgb3IgYSBkaWZmZXJlbnQgY29udGV4dCBtYXkgYWxyZWFkeSBiZSBpbiB1c2Ugd2l0aCB0aGlzIGNhbnZhcy5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYW52YXMgPSBjb250ZXh0LmNhbnZhcztcbiAgICAvLyBFbnN1cmUgY29udGV4dCBtYXRjaGVzIHVzZXIncyBjYW52YXMgZXhwZWN0YXRpb25zXG4gICAgaWYgKHNldHRpbmdzLmNhbnZhcyAmJiBjYW52YXMgIT09IHNldHRpbmdzLmNhbnZhcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgeyBjYW52YXMgfSBhbmQgeyBjb250ZXh0IH0gc2V0dGluZ3MgbXVzdCBwb2ludCB0byB0aGUgc2FtZSB1bmRlcmx5aW5nIGNhbnZhcyBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgcGl4ZWxhdGlvbiB0byBjYW52YXMgaWYgbmVjZXNzYXJ5LCB0aGlzIGlzIG1vc3RseSBhIGNvbnZlbmllbmNlIHV0aWxpdHlcbiAgICBpZiAoc2V0dGluZ3MucGl4ZWxhdGVkKSB7XG4gICAgICBjb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQub0ltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNhbnZhcy5zdHlsZVsnaW1hZ2UtcmVuZGVyaW5nJ10gPSAncGl4ZWxhdGVkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY2FudmFzLCBjb250ZXh0LCBvd25zQ2FudmFzIH07XG59XG4iLCJpbXBvcnQgYXNzaWduIGZyb20gJ29iamVjdC1hc3NpZ24nO1xuaW1wb3J0IHJpZ2h0Tm93IGZyb20gJ3JpZ2h0LW5vdyc7XG5pbXBvcnQgaXNQcm9taXNlIGZyb20gJ2lzLXByb21pc2UnO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBkZWZpbmVkLCBpc1dlYkdMQ29udGV4dCwgaXNDYW52YXMsIGdldENsaWVudEFQSSB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tICdkZWVwLWVxdWFsJztcbmltcG9ydCB7XG4gIHJlc29sdmVGaWxlbmFtZSxcbiAgc2F2ZUZpbGUsXG4gIHNhdmVEYXRhVVJMLFxuICBnZXRUaW1lU3RhbXAsXG4gIGV4cG9ydENhbnZhcyxcbiAgc3RyZWFtU3RhcnQsXG4gIHN0cmVhbUVuZFxufSBmcm9tICcuLi9zYXZlJztcbmltcG9ydCB7IGNoZWNrU2V0dGluZ3MgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcblxuaW1wb3J0IGtleWJvYXJkU2hvcnRjdXRzIGZyb20gJy4va2V5Ym9hcmRTaG9ydGN1dHMnO1xuaW1wb3J0IHJlc2l6ZUNhbnZhcyBmcm9tICcuL3Jlc2l6ZUNhbnZhcyc7XG5pbXBvcnQgY3JlYXRlQ2FudmFzIGZyb20gJy4vY3JlYXRlQ2FudmFzJztcblxuY2xhc3MgU2tldGNoTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9zZXR0aW5ncyA9IHt9O1xuICAgIHRoaXMuX3Byb3BzID0ge307XG4gICAgdGhpcy5fc2tldGNoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JhZiA9IG51bGw7XG4gICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IG51bGw7XG5cbiAgICAvLyBTb21lIGhhY2t5IHRoaW5ncyByZXF1aXJlZCB0byBnZXQgYXJvdW5kIHA1LmpzIHN0cnVjdHVyZVxuICAgIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5faXNQNVJlc2l6aW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cyA9IGtleWJvYXJkU2hvcnRjdXRzKHtcbiAgICAgIGVuYWJsZWQ6ICgpID0+IHRoaXMuc2V0dGluZ3MuaG90a2V5cyAhPT0gZmFsc2UsXG4gICAgICBzYXZlOiAoZXYpID0+IHtcbiAgICAgICAgaWYgKGV2LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMucmVjb3JkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmVuZFJlY29yZCgpO1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5yZWNvcmQoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5wcm9wcy5yZWNvcmRpbmcpIHtcbiAgICAgICAgICB0aGlzLmV4cG9ydEZyYW1lKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0b2dnbGVQbGF5OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnBsYXlpbmcpIHRoaXMucGF1c2UoKTtcbiAgICAgICAgZWxzZSB0aGlzLnBsYXkoKTtcbiAgICAgIH0sXG4gICAgICBjb21taXQ6IChldikgPT4ge1xuICAgICAgICB0aGlzLmV4cG9ydEZyYW1lKHsgY29tbWl0OiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fYW5pbWF0ZUhhbmRsZXIgPSAoKSA9PiB0aGlzLmFuaW1hdGUoKTtcblxuICAgIHRoaXMuX3Jlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5yZXNpemUoKTtcbiAgICAgIC8vIE9ubHkgcmUtcmVuZGVyIHdoZW4gc2l6ZSBhY3R1YWxseSBjaGFuZ2VzXG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXQgc2tldGNoICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2tldGNoO1xuICB9XG5cbiAgZ2V0IHNldHRpbmdzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XG4gIH1cblxuICBnZXQgcHJvcHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9wcztcbiAgfVxuXG4gIF9jb21wdXRlUGxheWhlYWQgKGN1cnJlbnRUaW1lLCBkdXJhdGlvbikge1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG4gICAgcmV0dXJuIGhhc0R1cmF0aW9uID8gY3VycmVudFRpbWUgLyBkdXJhdGlvbiA6IDA7XG4gIH1cblxuICBfY29tcHV0ZUZyYW1lIChwbGF5aGVhZCwgdGltZSwgdG90YWxGcmFtZXMsIGZwcykge1xuICAgIHJldHVybiAoaXNGaW5pdGUodG90YWxGcmFtZXMpICYmIHRvdGFsRnJhbWVzID4gMSlcbiAgICAgID8gTWF0aC5mbG9vcihwbGF5aGVhZCAqICh0b3RhbEZyYW1lcyAtIDEpKVxuICAgICAgOiBNYXRoLmZsb29yKGZwcyAqIHRpbWUpO1xuICB9XG5cbiAgX2NvbXB1dGVDdXJyZW50RnJhbWUgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb21wdXRlRnJhbWUoXG4gICAgICB0aGlzLnByb3BzLnBsYXloZWFkLCB0aGlzLnByb3BzLnRpbWUsXG4gICAgICB0aGlzLnByb3BzLnRvdGFsRnJhbWVzLCB0aGlzLnByb3BzLmZwc1xuICAgICk7XG4gIH1cblxuICBfZ2V0U2l6ZVByb3BzICgpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiBwcm9wcy53aWR0aCxcbiAgICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0LFxuICAgICAgcGl4ZWxSYXRpbzogcHJvcHMucGl4ZWxSYXRpbyxcbiAgICAgIGNhbnZhc1dpZHRoOiBwcm9wcy5jYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodDogcHJvcHMuY2FudmFzSGVpZ2h0LFxuICAgICAgdmlld3BvcnRXaWR0aDogcHJvcHMudmlld3BvcnRXaWR0aCxcbiAgICAgIHZpZXdwb3J0SGVpZ2h0OiBwcm9wcy52aWV3cG9ydEhlaWdodFxuICAgIH07XG4gIH1cblxuICBydW4gKCkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHRocm93IG5ldyBFcnJvcignc2hvdWxkIHdhaXQgdW50aWwgc2tldGNoIGlzIGxvYWRlZCBiZWZvcmUgdHJ5aW5nIHRvIHBsYXkoKScpO1xuXG4gICAgLy8gU3RhcnQgYW4gYW5pbWF0aW9uIGZyYW1lIGxvb3AgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucGxheWluZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucGxheSgpO1xuICAgIH1cblxuICAgIC8vIExldCdzIGxldCB0aGlzIHdhcm5pbmcgaGFuZyBhcm91bmQgZm9yIGEgZmV3IHZlcnNpb25zLi4uXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5kaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0luIGNhbnZhcy1za2V0Y2hAMC4wLjIzIHRoZSBkaXNwb3NlKCkgZXZlbnQgaGFzIGJlZW4gcmVuYW1lZCB0byB1bmxvYWQoKScpO1xuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugd2UgYXJlbid0IHBsYXlpbmcgb3IgYW5pbWF0ZWQsIG1ha2Ugc3VyZSB3ZSBzdGlsbCB0cmlnZ2VyIGJlZ2luIG1lc3NhZ2UuLi5cbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIGFuIGluaXRpYWwgZnJhbWVcbiAgICB0aGlzLnRpY2soKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX2NhbmNlbFRpbWVvdXRzICgpIHtcbiAgICBpZiAodGhpcy5fcmFmICE9IG51bGwgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JhZik7XG4gICAgICB0aGlzLl9yYWYgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcmVjb3JkVGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVjb3JkVGltZW91dCk7XG4gICAgICB0aGlzLl9yZWNvcmRUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwbGF5ICgpIHtcbiAgICBsZXQgYW5pbWF0ZSA9IHRoaXMuc2V0dGluZ3MuYW5pbWF0ZTtcbiAgICBpZiAoJ2FuaW1hdGlvbicgaW4gdGhpcy5zZXR0aW5ncykge1xuICAgICAgYW5pbWF0ZSA9IHRydWU7XG4gICAgICBjb25zb2xlLndhcm4oJ1tjYW52YXMtc2tldGNoXSB7IGFuaW1hdGlvbiB9IGhhcyBiZWVuIHJlbmFtZWQgdG8geyBhbmltYXRlIH0nKTtcbiAgICB9XG4gICAgaWYgKCFhbmltYXRlKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IFVzaW5nIHsgYW5pbWF0ZSB9IGluIE5vZGUuanMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgcmV0dXJuO1xuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZygncGxheScsIHRoaXMucHJvcHMudGltZSlcblxuICAgIC8vIFN0YXJ0IGEgcmVuZGVyIGxvb3BcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgdGhpcy5fbGFzdFRpbWUgPSByaWdodE5vdygpO1xuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuICB9XG5cbiAgcGF1c2UgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gIH1cblxuICB0b2dnbGVQbGF5ICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wbGF5aW5nKSB0aGlzLnBhdXNlKCk7XG4gICAgZWxzZSB0aGlzLnBsYXkoKTtcbiAgfVxuXG4gIC8vIFN0b3AgYW5kIHJlc2V0IHRvIGZyYW1lIHplcm9cbiAgc3RvcCAoKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMucHJvcHMuZnJhbWUgPSAwO1xuICAgIHRoaXMucHJvcHMucGxheWhlYWQgPSAwO1xuICAgIHRoaXMucHJvcHMudGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZWNvcmQgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBSZWNvcmRpbmcgZnJvbSBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wKCk7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnByb3BzLnJlY29yZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBleHBvcnRPcHRzID0gdGhpcy5fY3JlYXRlRXhwb3J0T3B0aW9ucyh7IHNlcXVlbmNlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEgLyB0aGlzLnByb3BzLmZwcztcbiAgICAvLyBSZW5kZXIgZWFjaCBmcmFtZSBpbiB0aGUgc2VxdWVuY2VcbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGZyYW1lSW50ZXJ2YWw7XG4gICAgICB0aGlzLnRpY2soKTtcbiAgICAgIHJldHVybiB0aGlzLmV4cG9ydEZyYW1lKGV4cG9ydE9wdHMpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm47IC8vIHdhcyBjYW5jZWxsZWQgYmVmb3JlXG4gICAgICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgICAgICAgIHRoaXMucHJvcHMuZnJhbWUrKztcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5mcmFtZSA8IHRoaXMucHJvcHMudG90YWxGcmFtZXMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGltZSArPSBmcmFtZUludGVydmFsO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZCh0aGlzLnByb3BzLnRpbWUsIHRoaXMucHJvcHMuZHVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IHNldFRpbWVvdXQodGljaywgMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaW5pc2hlZCByZWNvcmRpbmcnKTtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbEVuZCgpO1xuICAgICAgICAgICAgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBUcmlnZ2VyIGEgc3RhcnQgZXZlbnQgYmVmb3JlIHdlIGJlZ2luIHJlY29yZGluZ1xuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyICdiZWdpbiByZWNvcmQnIGV2ZW50XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5iZWdpblJlY29yZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5iZWdpblJlY29yZChwcm9wcykpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYXRlIGEgc3RyZWFtaW5nIHN0YXJ0IGlmIG5lY2Vzc2FyeVxuICAgIHN0cmVhbVN0YXJ0KGV4cG9ydE9wdHMpXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5fcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgX3NpZ25hbEJlZ2luICgpIHtcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLmJlZ2luID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmJlZ2luKHByb3BzKSk7XG4gICAgfVxuICB9XG5cbiAgX3NpZ25hbEVuZCAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5lbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guZW5kKHByb3BzKSk7XG4gICAgfVxuICB9XG5cbiAgZW5kUmVjb3JkICgpIHtcbiAgICBjb25zdCB3YXNSZWNvcmRpbmcgPSB0aGlzLnByb3BzLnJlY29yZGluZztcblxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgdGhpcy5wcm9wcy5yZWNvcmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gZmFsc2U7XG5cbiAgICAvLyB0ZWxsIENMSSB0aGF0IHN0cmVhbSBoYXMgZmluaXNoZWRcbiAgICByZXR1cm4gc3RyZWFtRW5kKClcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBUcmlnZ2VyICdlbmQgcmVjb3JkJyBldmVudFxuICAgICAgICBpZiAod2FzUmVjb3JkaW5nICYmIHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5lbmRSZWNvcmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmVuZFJlY29yZChwcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVFeHBvcnRPcHRpb25zIChvcHQgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXF1ZW5jZTogb3B0LnNlcXVlbmNlLFxuICAgICAgc2F2ZTogb3B0LnNhdmUsXG4gICAgICBmcHM6IHRoaXMucHJvcHMuZnBzLFxuICAgICAgZnJhbWU6IG9wdC5zZXF1ZW5jZSA/IHRoaXMucHJvcHMuZnJhbWUgOiB1bmRlZmluZWQsXG4gICAgICBmaWxlOiB0aGlzLnNldHRpbmdzLmZpbGUsXG4gICAgICBuYW1lOiB0aGlzLnNldHRpbmdzLm5hbWUsXG4gICAgICBwcmVmaXg6IHRoaXMuc2V0dGluZ3MucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLnNldHRpbmdzLnN1ZmZpeCxcbiAgICAgIGVuY29kaW5nOiB0aGlzLnNldHRpbmdzLmVuY29kaW5nLFxuICAgICAgZW5jb2RpbmdRdWFsaXR5OiB0aGlzLnNldHRpbmdzLmVuY29kaW5nUXVhbGl0eSxcbiAgICAgIHRpbWVTdGFtcDogb3B0LnRpbWVTdGFtcCB8fCBnZXRUaW1lU3RhbXAoKSxcbiAgICAgIHRvdGFsRnJhbWVzOiBpc0Zpbml0ZSh0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSA/IE1hdGgubWF4KDAsIHRoaXMucHJvcHMudG90YWxGcmFtZXMpIDogMTAwMFxuICAgIH07XG4gIH1cblxuICBleHBvcnRGcmFtZSAob3B0ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSByZXR1cm4gUHJvbWlzZS5hbGwoW10pO1xuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gucHJlRXhwb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnNrZXRjaC5wcmVFeHBvcnQoKTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25zIGZvciBleHBvcnQgZnVuY3Rpb25cbiAgICBsZXQgZXhwb3J0T3B0cyA9IHRoaXMuX2NyZWF0ZUV4cG9ydE9wdGlvbnMob3B0KTtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGxldCBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGNsaWVudCAmJiBvcHQuY29tbWl0ICYmIHR5cGVvZiBjbGllbnQuY29tbWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBjb21taXRPcHRzID0gYXNzaWduKHt9LCBleHBvcnRPcHRzKTtcbiAgICAgIGNvbnN0IGhhc2ggPSBjbGllbnQuY29tbWl0KGNvbW1pdE9wdHMpO1xuICAgICAgaWYgKGlzUHJvbWlzZShoYXNoKSkgcCA9IGhhc2g7XG4gICAgICBlbHNlIHAgPSBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHAudGhlbihoYXNoID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl9kb0V4cG9ydEZyYW1lKGFzc2lnbih7fSwgZXhwb3J0T3B0cywgeyBoYXNoOiBoYXNoIHx8ICcnIH0pKTtcbiAgICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAvLyBNb3N0IGNvbW1vbiB1c2VjYXNlIGlzIHRvIGV4cG9ydCBhIHNpbmdsZSBsYXllcixcbiAgICAgIC8vIHNvIGxldCdzIG9wdGltaXplIHRoZSB1c2VyIGV4cGVyaWVuY2UgZm9yIHRoYXQuXG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMSkgcmV0dXJuIHJlc3VsdFswXTtcbiAgICAgIGVsc2UgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxuXG4gIF9kb0V4cG9ydEZyYW1lIChleHBvcnRPcHRzID0ge30pIHtcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSB0cnVlO1xuXG4gICAgLy8gUmVzaXplIHRvIG91dHB1dCByZXNvbHV0aW9uXG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIC8vIERyYXcgYXQgdGhpcyBvdXRwdXQgcmVzb2x1dGlvblxuICAgIGxldCBkcmF3UmVzdWx0ID0gdGhpcy5yZW5kZXIoKTtcblxuICAgIC8vIFRoZSBzZWxmIG93bmVkIGNhbnZhcyAobWF5IGJlIHVuZGVmaW5lZC4uLiEpXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5wcm9wcy5jYW52YXM7XG5cbiAgICAvLyBHZXQgbGlzdCBvZiByZXN1bHRzIGZyb20gcmVuZGVyXG4gICAgaWYgKHR5cGVvZiBkcmF3UmVzdWx0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IFsgY2FudmFzIF07XG4gICAgfVxuICAgIGRyYXdSZXN1bHQgPSBbXS5jb25jYXQoZHJhd1Jlc3VsdCkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBjYW52YXMvZmlsZSBkZXNjcmlwdG9ycyBpbnRvIGEgY29uc2lzdGVudCBmb3JtYXQsXG4gICAgLy8gYW5kIHB1bGwgb3V0IGFueSBkYXRhIFVSTHMgZnJvbSBjYW52YXMgZWxlbWVudHNcbiAgICBkcmF3UmVzdWx0ID0gZHJhd1Jlc3VsdC5tYXAocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGhhc0RhdGFPYmplY3QgPSB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgKCdkYXRhJyBpbiByZXN1bHQgfHwgJ2RhdGFVUkwnIGluIHJlc3VsdCk7XG4gICAgICBjb25zdCBkYXRhID0gaGFzRGF0YU9iamVjdCA/IHJlc3VsdC5kYXRhIDogcmVzdWx0O1xuICAgICAgY29uc3Qgb3B0cyA9IGhhc0RhdGFPYmplY3QgPyBhc3NpZ24oe30sIHJlc3VsdCwgeyBkYXRhIH0pIDogeyBkYXRhIH07XG4gICAgICBpZiAoaXNDYW52YXMoZGF0YSkpIHtcbiAgICAgICAgY29uc3QgZW5jb2RpbmcgPSBvcHRzLmVuY29kaW5nIHx8IGV4cG9ydE9wdHMuZW5jb2Rpbmc7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nUXVhbGl0eSA9IGRlZmluZWQob3B0cy5lbmNvZGluZ1F1YWxpdHksIGV4cG9ydE9wdHMuZW5jb2RpbmdRdWFsaXR5LCAwLjk1KTtcbiAgICAgICAgY29uc3QgeyBkYXRhVVJMLCBleHRlbnNpb24sIHR5cGUgfSA9IGV4cG9ydENhbnZhcyhkYXRhLCB7IGVuY29kaW5nLCBlbmNvZGluZ1F1YWxpdHkgfSk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9wdHMsIHsgZGF0YVVSTCwgZXh0ZW5zaW9uLCB0eXBlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBOb3cgcmV0dXJuIHRvIHJlZ3VsYXIgcmVuZGVyaW5nIG1vZGVcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICAvLyBBbmQgbm93IHdlIGNhbiBzYXZlIGVhY2ggcmVzdWx0XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGRyYXdSZXN1bHQubWFwKChyZXN1bHQsIGksIGxheWVyTGlzdCkgPT4ge1xuICAgICAgLy8gQnkgZGVmYXVsdCwgaWYgcmVuZGVyaW5nIG11bHRpcGxlIGxheWVycyB3ZSB3aWxsIGdpdmUgdGhlbSBpbmRpY2VzXG4gICAgICBjb25zdCBjdXJPcHQgPSBhc3NpZ24oe1xuICAgICAgICBleHRlbnNpb246ICcnLFxuICAgICAgICBwcmVmaXg6ICcnLFxuICAgICAgICBzdWZmaXg6ICcnXG4gICAgICB9LCBleHBvcnRPcHRzLCByZXN1bHQsIHtcbiAgICAgICAgbGF5ZXI6IGksXG4gICAgICAgIHRvdGFsTGF5ZXJzOiBsYXllckxpc3QubGVuZ3RoXG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgZXhwb3J0IGlzIGV4cGxpY2l0bHkgbm90IHNhdmluZywgbWFrZSBzdXJlIG5vdGhpbmcgc2F2ZXNcbiAgICAgIC8vIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBsYXllciBzYXZlIG9wdGlvbiwgb3IgZmFsbGJhY2sgdG8gdHJ1ZVxuICAgICAgY29uc3Qgc2F2ZVBhcmFtID0gZXhwb3J0T3B0cy5zYXZlID09PSBmYWxzZSA/IGZhbHNlIDogcmVzdWx0LnNhdmU7XG4gICAgICBjdXJPcHQuc2F2ZSA9IHNhdmVQYXJhbSAhPT0gZmFsc2U7XG5cbiAgICAgIC8vIFJlc29sdmUgYSBmdWxsIGZpbGVuYW1lIGZyb20gYWxsIHRoZSBvcHRpb25zXG4gICAgICBjdXJPcHQuZmlsZW5hbWUgPSByZXNvbHZlRmlsZW5hbWUoY3VyT3B0KTtcblxuICAgICAgLy8gQ2xlYW4gdXAgc29tZSBwYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIGFtYmlndW91cyB0byB0aGUgdXNlclxuICAgICAgZGVsZXRlIGN1ck9wdC5lbmNvZGluZztcbiAgICAgIGRlbGV0ZSBjdXJPcHQuZW5jb2RpbmdRdWFsaXR5O1xuXG4gICAgICAvLyBDbGVhbiBpdCB1cCBmdXJ0aGVyIGJ5IGp1c3QgcmVtb3ZpbmcgdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgZm9yIChsZXQgayBpbiBjdXJPcHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJPcHRba10gPT09ICd1bmRlZmluZWQnKSBkZWxldGUgY3VyT3B0W2tdO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2F2ZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgaWYgKGN1ck9wdC5zYXZlKSB7XG4gICAgICAgIC8vIFdoZXRoZXIgdG8gYWN0dWFsbHkgc2F2ZSAoZG93bmxvYWQpIHRoaXMgZnJhZ21lbnRcbiAgICAgICAgY29uc3QgZGF0YSA9IGN1ck9wdC5kYXRhO1xuICAgICAgICBpZiAoY3VyT3B0LmRhdGFVUkwpIHtcbiAgICAgICAgICBjb25zdCBkYXRhVVJMID0gY3VyT3B0LmRhdGFVUkw7XG4gICAgICAgICAgc2F2ZVByb21pc2UgPSBzYXZlRGF0YVVSTChkYXRhVVJMLCBjdXJPcHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNhdmVQcm9taXNlID0gc2F2ZUZpbGUoZGF0YSwgY3VyT3B0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNhdmVQcm9taXNlLnRoZW4oc2F2ZVJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjdXJPcHQsIHNhdmVSZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSkpLnRoZW4oZXYgPT4ge1xuICAgICAgY29uc3Qgc2F2ZWRFdmVudHMgPSBldi5maWx0ZXIoZSA9PiBlLnNhdmUpO1xuICAgICAgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gTG9nIHRoZSBzYXZlZCBleHBvcnRzXG4gICAgICAgIGNvbnN0IGV2ZW50V2l0aE91dHB1dCA9IHNhdmVkRXZlbnRzLmZpbmQoZSA9PiBlLm91dHB1dE5hbWUpO1xuICAgICAgICBjb25zdCBpc0NsaWVudCA9IHNhdmVkRXZlbnRzLnNvbWUoZSA9PiBlLmNsaWVudCk7XG4gICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gc2F2ZWRFdmVudHMuc29tZShlID0+IGUuc3RyZWFtKTtcbiAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgIC8vIG1hbnkgZmlsZXMsIGp1c3QgbG9nIGhvdyBtYW55IHdlcmUgZXhwb3J0ZWRcbiAgICAgICAgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDEpIGl0ZW0gPSBzYXZlZEV2ZW50cy5sZW5ndGg7XG4gICAgICAgIC8vIGluIENMSSwgd2Uga25vdyBleGFjdCBwYXRoIGRpcm5hbWVcbiAgICAgICAgZWxzZSBpZiAoZXZlbnRXaXRoT3V0cHV0KSBpdGVtID0gYCR7ZXZlbnRXaXRoT3V0cHV0Lm91dHB1dE5hbWV9LyR7c2F2ZWRFdmVudHNbMF0uZmlsZW5hbWV9YDtcbiAgICAgICAgLy8gaW4gYnJvd3Nlciwgd2UgY2FuIG9ubHkga25vdyBpdCB3ZW50IHRvIFwiYnJvd3NlciBkb3dubG9hZCBmb2xkZXJcIlxuICAgICAgICBlbHNlIGl0ZW0gPSBgJHtzYXZlZEV2ZW50c1swXS5maWxlbmFtZX1gO1xuICAgICAgICBsZXQgb2ZTZXEgPSAnJztcbiAgICAgICAgaWYgKGV4cG9ydE9wdHMuc2VxdWVuY2UpIHtcbiAgICAgICAgICBjb25zdCBoYXNUb3RhbEZyYW1lcyA9IGlzRmluaXRlKHRoaXMucHJvcHMudG90YWxGcmFtZXMpO1xuICAgICAgICAgIG9mU2VxID0gaGFzVG90YWxGcmFtZXMgPyBgIChmcmFtZSAke2V4cG9ydE9wdHMuZnJhbWUgKyAxfSAvICR7dGhpcy5wcm9wcy50b3RhbEZyYW1lc30pYCA6IGAgKGZyYW1lICR7ZXhwb3J0T3B0cy5mcmFtZX0pYDtcbiAgICAgICAgfSBlbHNlIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgb2ZTZXEgPSBgIGZpbGVzYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnQgPSBpc0NsaWVudCA/ICdjYW52YXMtc2tldGNoLWNsaScgOiAnY2FudmFzLXNrZXRjaCc7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGlzU3RyZWFtaW5nID8gJ1N0cmVhbWluZyBpbnRvJyA6ICdFeHBvcnRlZCc7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1ske2NsaWVudH1dJWMgJHthY3Rpb259ICVjJHtpdGVtfSVjJHtvZlNlcX1gLCAnY29sb3I6ICM4ZThlOGU7JywgJ2NvbG9yOiBpbml0aWFsOycsICdmb250LXdlaWdodDogYm9sZDsnLCAnZm9udC13ZWlnaHQ6IGluaXRpYWw7Jyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnBvc3RFeHBvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5za2V0Y2gucG9zdEV4cG9ydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2O1xuICAgIH0pO1xuICB9XG5cbiAgX3dyYXBDb250ZXh0U2NhbGUgKGNiKSB7XG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuICB9XG5cbiAgX3ByZVJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gU2NhbGUgY29udGV4dCBmb3IgdW5pdCBzaXppbmdcbiAgICBpZiAoIXRoaXMucHJvcHMuZ2wgJiYgcHJvcHMuY29udGV4dCAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2NhbGVDb250ZXh0ICE9PSBmYWxzZSkge1xuICAgICAgICBwcm9wcy5jb250ZXh0LnNjYWxlKHByb3BzLnNjYWxlWCwgcHJvcHMuc2NhbGVZKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5wNS5zY2FsZShwcm9wcy5zY2FsZVggLyBwcm9wcy5waXhlbFJhdGlvLCBwcm9wcy5zY2FsZVkgLyBwcm9wcy5waXhlbFJhdGlvKTtcbiAgICB9XG4gIH1cblxuICBfcG9zdFJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCF0aGlzLnByb3BzLmdsICYmIHByb3BzLmNvbnRleHQgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5jb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICAvLyBGbHVzaCBieSBkZWZhdWx0LCB0aGlzIG1heSBiZSByZXZpc2l0ZWQgYXQgYSBsYXRlciBwb2ludC5cbiAgICAvLyBXZSBkbyB0aGlzIHRvIGVuc3VyZSB0b0RhdGFVUkwgY2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlci5cbiAgICAvLyBNb3N0IGxpa2VseSBicm93c2VycyBhbHJlYWR5IGhhbmRsZSB0aGlzLCBzbyB3ZSBtYXkgcmV2aXNpdCB0aGlzIGFuZFxuICAgIC8vIHJlbW92ZSBpdCBpZiBpdCBpbXByb3ZlcyBwZXJmb3JtYW5jZSB3aXRob3V0IGFueSB1c2FiaWxpdHkgaXNzdWVzLlxuICAgIGlmIChwcm9wcy5nbCAmJiB0aGlzLnNldHRpbmdzLmZsdXNoICE9PSBmYWxzZSAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmdsLmZsdXNoKCk7XG4gICAgfVxuICB9XG5cbiAgdGljayAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC50aWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl9wcmVSZW5kZXIoKTtcbiAgICAgIHRoaXMuc2tldGNoLnRpY2sodGhpcy5wcm9wcyk7XG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wNSkge1xuICAgICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucHJvcHMucDUucmVkcmF3KCk7XG4gICAgICByZXR1cm4gdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0RHJhd0NhbGwoKTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXREcmF3Q2FsbCAoKSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuXG4gICAgbGV0IGRyYXdSZXN1bHQ7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkcmF3UmVzdWx0ID0gdGhpcy5za2V0Y2gocHJvcHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IHRoaXMuc2tldGNoLnJlbmRlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuXG4gICAgcmV0dXJuIGRyYXdSZXN1bHQ7XG4gIH1cblxuICB1cGRhdGUgKG9wdCA9IHt9KSB7XG4gICAgLy8gQ3VycmVudGx5IHVwZGF0ZSgpIGlzIG9ubHkgZm9jdXNlZCBvbiByZXNpemluZyxcbiAgICAvLyBidXQgbGF0ZXIgd2Ugd2lsbCBzdXBwb3J0IG90aGVyIG9wdGlvbnMgbGlrZSBzd2l0Y2hpbmdcbiAgICAvLyBmcmFtZXMgYW5kIHN1Y2guXG4gICAgY29uc3Qgbm90WWV0U3VwcG9ydGVkID0gW1xuICAgICAgJ2FuaW1hdGUnXG4gICAgXTtcblxuICAgIE9iamVjdC5rZXlzKG9wdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKG5vdFlldFN1cHBvcnRlZC5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvcnJ5LCB0aGUgeyAke2tleX0gfSBvcHRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCB1cGRhdGUoKS5gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG9sZENhbnZhcyA9IHRoaXMuX3NldHRpbmdzLmNhbnZhcztcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5fc2V0dGluZ3MuY29udGV4dDtcblxuICAgIC8vIE1lcmdlIG5ldyBvcHRpb25zIGludG8gc2V0dGluZ3NcbiAgICBmb3IgKGxldCBrZXkgaW4gb3B0KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdFtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gaWdub3JlIHVuZGVmaW5lZFxuICAgICAgICB0aGlzLl9zZXR0aW5nc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgaW4gdGltZSBwcm9wc1xuICAgIGNvbnN0IHRpbWVPcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fc2V0dGluZ3MsIG9wdCk7XG4gICAgaWYgKCd0aW1lJyBpbiBvcHQgJiYgJ2ZyYW1lJyBpbiBvcHQpIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IHsgdGltZSB9IG9yIHsgZnJhbWUgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgndGltZScgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZnJhbWU7XG4gICAgZWxzZSBpZiAoJ2ZyYW1lJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy50aW1lO1xuICAgIGlmICgnZHVyYXRpb24nIGluIG9wdCAmJiAndG90YWxGcmFtZXMnIGluIG9wdCkgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgeyBkdXJhdGlvbiB9IG9yIHsgdG90YWxGcmFtZXMgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgnZHVyYXRpb24nIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLnRvdGFsRnJhbWVzO1xuICAgIGVsc2UgaWYgKCd0b3RhbEZyYW1lcycgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZHVyYXRpb247XG5cbiAgICAvLyBNZXJnZSBpbiB1c2VyIGRhdGEgd2l0aG91dCBjb3B5aW5nXG4gICAgaWYgKCdkYXRhJyBpbiBvcHQpIHRoaXMuX3Byb3BzLmRhdGEgPSBvcHQuZGF0YTtcblxuICAgIGNvbnN0IHRpbWVQcm9wcyA9IHRoaXMuZ2V0VGltZVByb3BzKHRpbWVPcHRzKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCB0aW1lUHJvcHMpO1xuXG4gICAgLy8gSWYgZWl0aGVyIGNhbnZhcyBvciBjb250ZXh0IGlzIGNoYW5nZWQsIHdlIHNob3VsZCByZS11cGRhdGVcbiAgICBpZiAob2xkQ2FudmFzICE9PSB0aGlzLl9zZXR0aW5ncy5jYW52YXMgfHwgb2xkQ29udGV4dCAhPT0gdGhpcy5fc2V0dGluZ3MuY29udGV4dCkge1xuICAgICAgY29uc3QgeyBjYW52YXMsIGNvbnRleHQgfSA9IGNyZWF0ZUNhbnZhcyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAgIHRoaXMucHJvcHMuY2FudmFzID0gY2FudmFzO1xuICAgICAgdGhpcy5wcm9wcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgICAgLy8gRGVsZXRlIG9yIGFkZCBhICdnbCcgcHJvcCBmb3IgY29udmVuaWVuY2VcbiAgICAgIHRoaXMuX3NldHVwR0xLZXkoKTtcblxuICAgICAgLy8gUmUtbW91bnQgdGhlIG5ldyBjYW52YXMgaWYgaXQgaGFzIG5vIHBhcmVudFxuICAgICAgdGhpcy5fYXBwZW5kQ2FudmFzSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gc3VwcG9ydCBQNS5qc1xuICAgIGlmIChvcHQucDUgJiYgdHlwZW9mIG9wdC5wNSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5wcm9wcy5wNSA9IG9wdC5wNTtcbiAgICAgIHRoaXMucHJvcHMucDUuZHJhdyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUDVSZXNpemluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdGhpcy5zdWJtaXREcmF3Q2FsbCgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgcGxheWluZyBzdGF0ZSBpZiBuZWNlc3NhcnlcbiAgICBpZiAoJ3BsYXlpbmcnIGluIG9wdCkge1xuICAgICAgaWYgKG9wdC5wbGF5aW5nKSB0aGlzLnBsYXkoKTtcbiAgICAgIGVsc2UgdGhpcy5wYXVzZSgpO1xuICAgIH1cblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gRHJhdyBuZXcgZnJhbWVcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgcmV0dXJuIHRoaXMucHJvcHM7XG4gIH1cblxuICByZXNpemUgKCkge1xuICAgIGNvbnN0IG9sZFNpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3M7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gUmVjb21wdXRlIG5ldyBwcm9wZXJ0aWVzIGJhc2VkIG9uIGN1cnJlbnQgc2V0dXBcbiAgICBjb25zdCBuZXdQcm9wcyA9IHJlc2l6ZUNhbnZhcyhwcm9wcywgc2V0dGluZ3MpO1xuXG4gICAgLy8gQXNzaWduIHRvIGN1cnJlbnQgcHJvcHNcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCBuZXdQcm9wcyk7XG5cbiAgICAvLyBOb3cgd2UgYWN0dWFsbHkgdXBkYXRlIHRoZSBjYW52YXMgd2lkdGgvaGVpZ2h0IGFuZCBzdHlsZSBwcm9wc1xuICAgIGNvbnN0IHtcbiAgICAgIHBpeGVsUmF0aW8sXG4gICAgICBjYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodCxcbiAgICAgIHN0eWxlV2lkdGgsXG4gICAgICBzdHlsZUhlaWdodFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gVXBkYXRlIGNhbnZhcyBzZXR0aW5nc1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMucHJvcHMuY2FudmFzO1xuICAgIGlmIChjYW52YXMgJiYgc2V0dGluZ3MucmVzaXplQ2FudmFzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKHByb3BzLnA1KSB7XG4gICAgICAgIC8vIFA1LmpzIHNwZWNpZmljIGVkZ2UgY2FzZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCB8fCBjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSB0cnVlO1xuICAgICAgICAgIC8vIFRoaXMgY2F1c2VzIGEgcmUtZHJhdyA6XFwgc28gd2UgaWdub3JlIGRyYXdzIGluIHRoZSBtZWFuIHRpbWUuLi4gc29ydGEgaGFja3lcbiAgICAgICAgICBwcm9wcy5wNS5waXhlbERlbnNpdHkocGl4ZWxSYXRpbyk7XG4gICAgICAgICAgcHJvcHMucDUucmVzaXplQ2FudmFzKGNhbnZhc1dpZHRoIC8gcGl4ZWxSYXRpbywgY2FudmFzSGVpZ2h0IC8gcGl4ZWxSYXRpbywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3JjZSBjYW52YXMgc2l6ZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCkgY2FudmFzLndpZHRoID0gY2FudmFzV2lkdGg7XG4gICAgICAgIGlmIChjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIGNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQ7XG4gICAgICB9XG4gICAgICAvLyBVcGRhdGUgY2FudmFzIHN0eWxlXG4gICAgICBpZiAoaXNCcm93c2VyKCkgJiYgc2V0dGluZ3Muc3R5bGVDYW52YXMgIT09IGZhbHNlKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke3N0eWxlV2lkdGh9cHhgO1xuICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7c3R5bGVIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1NpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG4gICAgbGV0IGNoYW5nZWQgPSAhZGVlcEVxdWFsKG9sZFNpemVzLCBuZXdTaXplcyk7XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3NpemVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgX3NpemVDaGFuZ2VkICgpIHtcbiAgICAvLyBTZW5kIHJlc2l6ZSBldmVudCB0byBza2V0Y2hcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLnJlc2l6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5za2V0Y2gucmVzaXplKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGUgKCkge1xuICAgIGlmICghdGhpcy5wcm9wcy5wbGF5aW5nKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IEFuaW1hdGlvbiBpbiBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuXG4gICAgbGV0IG5vdyA9IHJpZ2h0Tm93KCk7XG5cbiAgICBjb25zdCBmcHMgPSB0aGlzLnByb3BzLmZwcztcbiAgICBjb25zdCBmcmFtZUludGVydmFsTVMgPSAxMDAwIC8gZnBzO1xuICAgIGxldCBkZWx0YVRpbWVNUyA9IG5vdyAtIHRoaXMuX2xhc3RUaW1lO1xuXG4gICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLnByb3BzLmR1cmF0aW9uO1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG5cbiAgICBsZXQgaXNOZXdGcmFtZSA9IHRydWU7XG4gICAgY29uc3QgcGxheWJhY2tSYXRlID0gdGhpcy5zZXR0aW5ncy5wbGF5YmFja1JhdGU7XG4gICAgaWYgKHBsYXliYWNrUmF0ZSA9PT0gJ2ZpeGVkJykge1xuICAgICAgZGVsdGFUaW1lTVMgPSBmcmFtZUludGVydmFsTVM7XG4gICAgfSBlbHNlIGlmIChwbGF5YmFja1JhdGUgPT09ICd0aHJvdHRsZScpIHtcbiAgICAgIGlmIChkZWx0YVRpbWVNUyA+IGZyYW1lSW50ZXJ2YWxNUykge1xuICAgICAgICBub3cgPSBub3cgLSAoZGVsdGFUaW1lTVMgJSBmcmFtZUludGVydmFsTVMpO1xuICAgICAgICB0aGlzLl9sYXN0VGltZSA9IG5vdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGFzdFRpbWUgPSBub3c7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFUaW1lID0gZGVsdGFUaW1lTVMgLyAxMDAwO1xuICAgIGxldCBuZXdUaW1lID0gdGhpcy5wcm9wcy50aW1lICsgZGVsdGFUaW1lICogdGhpcy5wcm9wcy50aW1lU2NhbGU7XG5cbiAgICAvLyBIYW5kbGUgcmV2ZXJzZSB0aW1lIHNjYWxlXG4gICAgaWYgKG5ld1RpbWUgPCAwICYmIGhhc0R1cmF0aW9uKSB7XG4gICAgICBuZXdUaW1lID0gZHVyYXRpb24gKyBuZXdUaW1lO1xuICAgIH1cblxuICAgIC8vIFJlLXN0YXJ0IGFuaW1hdGlvblxuICAgIGxldCBpc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgbGV0IGlzTG9vcFN0YXJ0ID0gZmFsc2U7XG5cbiAgICBjb25zdCBsb29waW5nID0gdGhpcy5zZXR0aW5ncy5sb29wICE9PSBmYWxzZTtcblxuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBuZXdUaW1lID49IGR1cmF0aW9uKSB7XG4gICAgICAvLyBSZS1zdGFydCBhbmltYXRpb25cbiAgICAgIGlmIChsb29waW5nKSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSB0cnVlO1xuICAgICAgICBuZXdUaW1lID0gbmV3VGltZSAlIGR1cmF0aW9uO1xuICAgICAgICBpc0xvb3BTdGFydCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc05ld0ZyYW1lID0gZmFsc2U7XG4gICAgICAgIG5ld1RpbWUgPSBkdXJhdGlvbjtcbiAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NpZ25hbEVuZCgpO1xuICAgIH1cblxuICAgIGlmIChpc05ld0ZyYW1lKSB7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGRlbHRhVGltZTtcbiAgICAgIHRoaXMucHJvcHMudGltZSA9IG5ld1RpbWU7XG4gICAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKG5ld1RpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGNvbnN0IGxhc3RGcmFtZSA9IHRoaXMucHJvcHMuZnJhbWU7XG4gICAgICB0aGlzLnByb3BzLmZyYW1lID0gdGhpcy5fY29tcHV0ZUN1cnJlbnRGcmFtZSgpO1xuICAgICAgaWYgKGlzTG9vcFN0YXJ0KSB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgaWYgKGxhc3RGcmFtZSAhPT0gdGhpcy5wcm9wcy5mcmFtZSkgdGhpcy50aWNrKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIH1cblxuICAgIGlmIChpc0ZpbmlzaGVkKSB7XG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2ggKGNiKSB7XG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHBhc3MgZnVuY3Rpb24gaW50byBkaXNwYXRjaCgpJyk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdW50ICgpIHtcbiAgICB0aGlzLl9hcHBlbmRDYW52YXNJZk5lZWRlZCgpO1xuICB9XG5cbiAgdW5tb3VudCAoKSB7XG4gICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fcmVzaXplSGFuZGxlcik7XG4gICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5kZXRhY2goKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5wcm9wcy5jYW52YXMpO1xuICAgIH1cbiAgfVxuXG4gIF9hcHBlbmRDYW52YXNJZk5lZWRlZCAoKSB7XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnBhcmVudCAhPT0gZmFsc2UgJiYgKHRoaXMucHJvcHMuY2FudmFzICYmICF0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50KSkge1xuICAgICAgY29uc3QgZGVmYXVsdFBhcmVudCA9IHRoaXMuc2V0dGluZ3MucGFyZW50IHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICBkZWZhdWx0UGFyZW50LmFwcGVuZENoaWxkKHRoaXMucHJvcHMuY2FudmFzKTtcbiAgICB9XG4gIH1cblxuICBfc2V0dXBHTEtleSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuY29udGV4dCkge1xuICAgICAgaWYgKGlzV2ViR0xDb250ZXh0KHRoaXMucHJvcHMuY29udGV4dCkpIHtcbiAgICAgICAgdGhpcy5fcHJvcHMuZ2wgPSB0aGlzLnByb3BzLmNvbnRleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5fcHJvcHMuZ2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGltZVByb3BzIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgLy8gR2V0IHRpbWluZyBkYXRhXG4gICAgbGV0IGR1cmF0aW9uID0gc2V0dGluZ3MuZHVyYXRpb247XG4gICAgbGV0IHRvdGFsRnJhbWVzID0gc2V0dGluZ3MudG90YWxGcmFtZXM7XG4gICAgY29uc3QgdGltZVNjYWxlID0gZGVmaW5lZChzZXR0aW5ncy50aW1lU2NhbGUsIDEpO1xuICAgIGNvbnN0IGZwcyA9IGRlZmluZWQoc2V0dGluZ3MuZnBzLCAyNCk7XG4gICAgY29uc3QgaGFzRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKGR1cmF0aW9uKTtcbiAgICBjb25zdCBoYXNUb3RhbEZyYW1lcyA9IHR5cGVvZiB0b3RhbEZyYW1lcyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodG90YWxGcmFtZXMpO1xuXG4gICAgY29uc3QgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24gPSBoYXNEdXJhdGlvbiA/IE1hdGguZmxvb3IoZnBzICogZHVyYXRpb24pIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzID0gaGFzVG90YWxGcmFtZXMgPyAodG90YWxGcmFtZXMgLyBmcHMpIDogdW5kZWZpbmVkO1xuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBoYXNUb3RhbEZyYW1lcyAmJiB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiAhPT0gdG90YWxGcmFtZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBkdXJhdGlvbiBvciB0b3RhbEZyYW1lcywgYnV0IG5vdCBib3RoLiBPciwgdGhleSBtdXN0IG1hdGNoIGV4YWN0bHkuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kaW1lbnNpb25zID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2V0dGluZ3MudW5pdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFlvdSd2ZSBzcGVjaWZpZWQgYSB7IHVuaXRzIH0gc2V0dGluZyBidXQgbm8geyBkaW1lbnNpb24gfSwgc28gdGhlIHVuaXRzIHdpbGwgYmUgaWdub3JlZC5gKTtcbiAgICB9XG5cbiAgICB0b3RhbEZyYW1lcyA9IGRlZmluZWQodG90YWxGcmFtZXMsIHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uLCBJbmZpbml0eSk7XG4gICAgZHVyYXRpb24gPSBkZWZpbmVkKGR1cmF0aW9uLCBkdXJhdGlvbkZyb21Ub3RhbEZyYW1lcywgSW5maW5pdHkpO1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gc2V0dGluZ3MudGltZTtcbiAgICBjb25zdCBzdGFydEZyYW1lID0gc2V0dGluZ3MuZnJhbWU7XG4gICAgY29uc3QgaGFzU3RhcnRUaW1lID0gdHlwZW9mIHN0YXJ0VGltZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc3RhcnRUaW1lKTtcbiAgICBjb25zdCBoYXNTdGFydEZyYW1lID0gdHlwZW9mIHN0YXJ0RnJhbWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHN0YXJ0RnJhbWUpO1xuXG4gICAgLy8gc3RhcnQgYXQgemVybyB1bmxlc3MgdXNlciBzcGVjaWZpZXMgZnJhbWUgb3IgdGltZSAoYnV0IG5vdCBib3RoIG1pc21hdGNoZWQpXG4gICAgbGV0IHRpbWUgPSAwO1xuICAgIGxldCBmcmFtZSA9IDA7XG4gICAgbGV0IHBsYXloZWFkID0gMDtcbiAgICBpZiAoaGFzU3RhcnRUaW1lICYmIGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBzdGFydCBmcmFtZSBvciB0aW1lLCBidXQgbm90IGJvdGguJyk7XG4gICAgfSBlbHNlIGlmIChoYXNTdGFydFRpbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIHRpbWUsIHdlIGluZmVyIGZyYW1lcyBmcm9tIEZQU1xuICAgICAgdGltZSA9IHN0YXJ0VGltZTtcbiAgICAgIHBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGZyYW1lID0gdGhpcy5fY29tcHV0ZUZyYW1lKFxuICAgICAgICBwbGF5aGVhZCwgdGltZSxcbiAgICAgICAgdG90YWxGcmFtZXMsIGZwc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIGZyYW1lIG51bWJlciwgd2UgaW5mZXIgdGltZSBmcm9tIEZQU1xuICAgICAgZnJhbWUgPSBzdGFydEZyYW1lO1xuICAgICAgdGltZSA9IGZyYW1lIC8gZnBzO1xuICAgICAgcGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGltZSwgZHVyYXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwbGF5aGVhZCxcbiAgICAgIHRpbWUsXG4gICAgICBmcmFtZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdG90YWxGcmFtZXMsXG4gICAgICBmcHMsXG4gICAgICB0aW1lU2NhbGVcbiAgICB9O1xuICB9XG5cbiAgc2V0dXAgKHNldHRpbmdzID0ge30pIHtcbiAgICBpZiAodGhpcy5za2V0Y2gpIHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgc2V0dXAoKSBjYWxscyBub3QgeWV0IHN1cHBvcnRlZC4nKTtcblxuICAgIHRoaXMuX3NldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIHRoaXMuX3NldHRpbmdzKTtcblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gR2V0IGluaXRpYWwgY2FudmFzICYgY29udGV4dFxuICAgIGNvbnN0IHsgY29udGV4dCwgY2FudmFzIH0gPSBjcmVhdGVDYW52YXModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgY29uc3QgdGltZVByb3BzID0gdGhpcy5nZXRUaW1lUHJvcHModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gSW5pdGlhbCByZW5kZXIgc3RhdGUgZmVhdHVyZXNcbiAgICB0aGlzLl9wcm9wcyA9IHtcbiAgICAgIC4uLnRpbWVQcm9wcyxcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWx0YVRpbWU6IDAsXG4gICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgIGV4cG9ydGluZzogZmFsc2UsXG4gICAgICBwbGF5aW5nOiBmYWxzZSxcbiAgICAgIHJlY29yZGluZzogZmFsc2UsXG4gICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcbiAgICAgIGRhdGE6IHRoaXMuc2V0dGluZ3MuZGF0YSxcblxuICAgICAgLy8gRXhwb3J0IHNvbWUgc3BlY2lmaWMgYWN0aW9ucyB0byB0aGUgc2tldGNoXG4gICAgICByZW5kZXI6ICgpID0+IHRoaXMucmVuZGVyKCksXG4gICAgICB0b2dnbGVQbGF5OiAoKSA9PiB0aGlzLnRvZ2dsZVBsYXkoKSxcbiAgICAgIGRpc3BhdGNoOiAoY2IpID0+IHRoaXMuZGlzcGF0Y2goY2IpLFxuICAgICAgdGljazogKCkgPT4gdGhpcy50aWNrKCksXG4gICAgICByZXNpemU6ICgpID0+IHRoaXMucmVzaXplKCksXG4gICAgICB1cGRhdGU6IChvcHQpID0+IHRoaXMudXBkYXRlKG9wdCksXG4gICAgICBleHBvcnRGcmFtZTogb3B0ID0+IHRoaXMuZXhwb3J0RnJhbWUob3B0KSxcbiAgICAgIHJlY29yZDogKCkgPT4gdGhpcy5yZWNvcmQoKSxcbiAgICAgIHBsYXk6ICgpID0+IHRoaXMucGxheSgpLFxuICAgICAgcGF1c2U6ICgpID0+IHRoaXMucGF1c2UoKSxcbiAgICAgIHN0b3A6ICgpID0+IHRoaXMuc3RvcCgpXG4gICAgfTtcblxuICAgIC8vIEZvciBXZWJHTCBza2V0Y2hlcywgYSBnbCB2YXJpYWJsZSByZWFkcyBhIGJpdCBiZXR0ZXJcbiAgICB0aGlzLl9zZXR1cEdMS2V5KCk7XG5cbiAgICAvLyBUcmlnZ2VyIGluaXRpYWwgcmVzaXplIG5vdyBzbyB0aGF0IGNhbnZhcyBpcyBhbHJlYWR5IHNpemVkXG4gICAgLy8gYnkgdGhlIHRpbWUgd2UgbG9hZCB0aGUgc2tldGNoXG4gICAgdGhpcy5yZXNpemUoKTtcbiAgfVxuXG4gIGxvYWRBbmRSdW4gKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5ydW4oKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pO1xuICB9XG5cbiAgdW5sb2FkICgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gudW5sb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLnVubG9hZChwcm9wcykpO1xuICAgIH1cbiAgICB0aGlzLl9za2V0Y2ggPSBudWxsO1xuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhpcy51bmxvYWQoKTtcbiAgICB0aGlzLnVubW91bnQoKTtcbiAgfVxuXG4gIGxvYWQgKGNyZWF0ZVNrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICAvLyBVc2VyIGRpZG4ndCBzcGVjaWZ5IGEgZnVuY3Rpb25cbiAgICBpZiAodHlwZW9mIGNyZWF0ZVNrZXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnVuY3Rpb24gbXVzdCB0YWtlIGluIGEgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gRXhhbXBsZTpcXG4gIGNhbnZhc1NrZXRjaGVyKCgpID0+IHsgLi4uIH0sIHNldHRpbmdzKScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNrZXRjaCkge1xuICAgICAgdGhpcy51bmxvYWQoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld1NldHRpbmdzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy51cGRhdGUobmV3U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSB0cmlja3kgY2FzZTsgd2Ugc2V0IHVwIHRoZSBhdXRvLXNjYWxpbmcgaGVyZVxuICAgIC8vIGluIGNhc2UgdGhlIHVzZXIgZGVjaWRlcyB0byByZW5kZXIgYW55dGhpbmcgdG8gdGhlIGNvbnRleHQgKmJlZm9yZSogdGhlXG4gICAgLy8gcmVuZGVyKCkgZnVuY3Rpb24uLi4gSG93ZXZlciwgdXNlcnMgc2hvdWxkIGluc3RlYWQgdXNlIGJlZ2luKCkgZnVuY3Rpb24gZm9yIHRoYXQuXG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG5cbiAgICBsZXQgcHJlbG9hZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgLy8gQmVjYXVzZSBvZiBQNS5qcydzIHVudXN1YWwgc3RydWN0dXJlLCB3ZSBoYXZlIHRvIGRvIGEgYml0IG9mXG4gICAgLy8gbGlicmFyeS1zcGVjaWZpYyBjaGFuZ2VzIHRvIHN1cHBvcnQgaXQgcHJvcGVybHkuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucDUpIHtcbiAgICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbY2FudmFzLXNrZXRjaF0gRVJST1I6IFVzaW5nIHA1LmpzIGluIE5vZGUuanMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfVxuICAgICAgcHJlbG9hZCA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBsZXQgUDVDb25zdHJ1Y3RvciA9IHRoaXMuc2V0dGluZ3MucDU7XG4gICAgICAgIGxldCBwcmVsb2FkO1xuICAgICAgICBpZiAoUDVDb25zdHJ1Y3Rvci5wNSkge1xuICAgICAgICAgIHByZWxvYWQgPSBQNUNvbnN0cnVjdG9yLnByZWxvYWQ7XG4gICAgICAgICAgUDVDb25zdHJ1Y3RvciA9IFA1Q29uc3RydWN0b3IucDU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgc2tldGNoIHNldHVwOyBkaXNhYmxlIGxvb3AsIHNldCBzaXppbmcsIGV0Yy5cbiAgICAgICAgY29uc3QgcDVTa2V0Y2ggPSBwNSA9PiB7XG4gICAgICAgICAgLy8gSG9vayBpbiBwcmVsb2FkIGlmIG5lY2Vzc2FyeVxuICAgICAgICAgIGlmIChwcmVsb2FkKSBwNS5wcmVsb2FkID0gKCkgPT4gcHJlbG9hZChwNSk7XG4gICAgICAgICAgcDUuc2V0dXAgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICAgICAgICBjb25zdCBpc0dMID0gdGhpcy5zZXR0aW5ncy5jb250ZXh0ID09PSAnd2ViZ2wnO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBpc0dMID8gcDUuV0VCR0wgOiBwNS5QMkQ7XG4gICAgICAgICAgICBwNS5ub0xvb3AoKTtcbiAgICAgICAgICAgIHA1LnBpeGVsRGVuc2l0eShwcm9wcy5waXhlbFJhdGlvKTtcbiAgICAgICAgICAgIHA1LmNyZWF0ZUNhbnZhcyhwcm9wcy52aWV3cG9ydFdpZHRoLCBwcm9wcy52aWV3cG9ydEhlaWdodCwgcmVuZGVyZXIpO1xuICAgICAgICAgICAgaWYgKGlzR0wgJiYgdGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgIHA1LnNldEF0dHJpYnV0ZXModGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51cGRhdGUoeyBwNSwgY2FudmFzOiBwNS5jYW52YXMsIGNvbnRleHQ6IHA1Ll9yZW5kZXJlci5kcmF3aW5nQ29udGV4dCB9KTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFN1cHBvcnQgZ2xvYmFsIGFuZCBpbnN0YW5jZSBQNS5qcyBtb2Rlc1xuICAgICAgICBpZiAodHlwZW9mIFA1Q29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBuZXcgUDVDb25zdHJ1Y3RvcihwNVNrZXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuY3JlYXRlQ2FudmFzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ7IHA1IH0gc2V0dGluZyBpcyBwYXNzZWQgYnV0IGNhbid0IGZpbmQgcDUuanMgaW4gZ2xvYmFsICh3aW5kb3cpIHNjb3BlLiBNYXliZSB5b3UgZGlkIG5vdCBjcmVhdGUgaXQgZ2xvYmFsbHk/XFxubmV3IHA1KCk7IC8vIDwtLSBhdHRhY2hlcyB0byBnbG9iYWwgc2NvcGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHA1U2tldGNoKHdpbmRvdyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcmVsb2FkLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gTG9hZCB0aGUgdXNlcidzIHNrZXRjaFxuICAgICAgbGV0IGxvYWRlciA9IGNyZWF0ZVNrZXRjaCh0aGlzLnByb3BzKTtcbiAgICAgIGlmICghaXNQcm9taXNlKGxvYWRlcikpIHtcbiAgICAgICAgbG9hZGVyID0gUHJvbWlzZS5yZXNvbHZlKGxvYWRlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG9hZGVyO1xuICAgIH0pLnRoZW4oc2tldGNoID0+IHtcbiAgICAgIGlmICghc2tldGNoKSBza2V0Y2ggPSB7fTtcbiAgICAgIHRoaXMuX3NrZXRjaCA9IHNrZXRjaDtcblxuICAgICAgLy8gT25jZSB0aGUgc2tldGNoIGlzIGxvYWRlZCB3ZSBjYW4gYWRkIHRoZSBldmVudHNcbiAgICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5hdHRhY2goKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG5cbiAgICAgIC8vIFRoZSBpbml0aWFsIHJlc2l6ZSgpIGluIHRoZSBjb25zdHJ1Y3RvciB3aWxsIG5vdCBoYXZlXG4gICAgICAvLyB0cmlnZ2VyZWQgYSByZXNpemUoKSBldmVudCBvbiB0aGUgc2tldGNoLCBzaW5jZSBpdCB3YXMgYmVmb3JlXG4gICAgICAvLyB0aGUgc2tldGNoIHdhcyBsb2FkZWQuIFNvIHdlIHNlbmQgdGhlIHNpZ25hbCBoZXJlLCBhbGxvd2luZ1xuICAgICAgLy8gdXNlcnMgdG8gcmVhY3QgdG8gdGhlIGluaXRpYWwgc2l6ZSBiZWZvcmUgZmlyc3QgcmVuZGVyLlxuICAgICAgdGhpcy5fc2l6ZUNoYW5nZWQoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzdGFydCBza2V0Y2gsIHRoZSBhc3luYyBsb2FkaW5nIGZ1bmN0aW9uIHJlamVjdGVkIHdpdGggYW4gZXJyb3I6XFxuICAgIEVycm9yOiAnICsgZXJyLm1lc3NhZ2UpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNrZXRjaE1hbmFnZXI7XG4iLCJpbXBvcnQgeyBnZXRDbGllbnRBUEkgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG9wdCA9IHt9KSB7XG4gIGNvbnN0IGhhbmRsZXIgPSBldiA9PiB7XG4gICAgaWYgKCFvcHQuZW5hYmxlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoZXYua2V5Q29kZSA9PT0gODMgJiYgIWV2LmFsdEtleSAmJiAoZXYubWV0YUtleSB8fCBldi5jdHJsS2V5KSkge1xuICAgICAgLy8gQ21kICsgU1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5zYXZlKGV2KTtcbiAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IDMyKSB7XG4gICAgICAvLyBTcGFjZVxuICAgICAgLy8gVE9ETzogd2hhdCB0byBkbyB3aXRoIHRoaXM/IGtlZXAgaXQsIG9yIHJlbW92ZSBpdD9cbiAgICAgIG9wdC50b2dnbGVQbGF5KGV2KTtcbiAgICB9IGVsc2UgaWYgKGNsaWVudCAmJiAhZXYuYWx0S2V5ICYmIGV2LmtleUNvZGUgPT09IDc1ICYmIChldi5tZXRhS2V5IHx8IGV2LmN0cmxLZXkpKSB7XG4gICAgICAvLyBDbWQgKyBLLCBvbmx5IHdoZW4gY2FudmFzLXNrZXRjaC1jbGkgaXMgdXNlZFxuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5jb21taXQoZXYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhdHRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICBjb25zdCBkZXRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGF0dGFjaCxcbiAgICBkZXRhY2hcbiAgfTtcbn1cbiIsImltcG9ydCBTa2V0Y2hNYW5hZ2VyIGZyb20gJy4vY29yZS9Ta2V0Y2hNYW5hZ2VyJztcbmltcG9ydCBQYXBlclNpemVzIGZyb20gJy4vcGFwZXItc2l6ZXMnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50QVBJLCBkZWZpbmVkIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgQ0FDSEUgPSAnaG90LWlkLWNhY2hlJztcbmNvbnN0IHJ1bnRpbWVDb2xsaXNpb25zID0gW107XG5cbmZ1bmN0aW9uIGlzSG90UmVsb2FkICgpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gIHJldHVybiBjbGllbnQgJiYgY2xpZW50LmhvdDtcbn1cblxuZnVuY3Rpb24gY2FjaGVHZXQgKGlkKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICBpZiAoIWNsaWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY2xpZW50W0NBQ0hFXSA9IGNsaWVudFtDQUNIRV0gfHwge307XG4gIHJldHVybiBjbGllbnRbQ0FDSEVdW2lkXTtcbn1cblxuZnVuY3Rpb24gY2FjaGVQdXQgKGlkLCBkYXRhKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICBpZiAoIWNsaWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY2xpZW50W0NBQ0hFXSA9IGNsaWVudFtDQUNIRV0gfHwge307XG4gIGNsaWVudFtDQUNIRV1baWRdID0gZGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZVByb3AgKG9sZE1hbmFnZXIsIG5ld1NldHRpbmdzKSB7XG4gIC8vIFN0YXRpYyBza2V0Y2hlcyBpZ25vcmUgdGhlIHRpbWUgcGVyc2lzdGVuY3lcbiAgcmV0dXJuIG5ld1NldHRpbmdzLmFuaW1hdGUgPyB7IHRpbWU6IG9sZE1hbmFnZXIucHJvcHMudGltZSB9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjYW52YXNTa2V0Y2ggKHNrZXRjaCwgc2V0dGluZ3MgPSB7fSkge1xuICBpZiAoc2V0dGluZ3MucDUpIHtcbiAgICBpZiAoc2V0dGluZ3MuY2FudmFzIHx8IChzZXR0aW5ncy5jb250ZXh0ICYmIHR5cGVvZiBzZXR0aW5ncy5jb250ZXh0ICE9PSAnc3RyaW5nJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW4geyBwNSB9IG1vZGUsIHlvdSBjYW4ndCBwYXNzIHlvdXIgb3duIGNhbnZhcyBvciBjb250ZXh0LCB1bmxlc3MgdGhlIGNvbnRleHQgaXMgYSBcIndlYmdsXCIgb3IgXCIyZFwiIHN0cmluZ2ApO1xuICAgIH1cblxuICAgIC8vIERvIG5vdCBjcmVhdGUgYSBjYW52YXMgb24gc3RhcnR1cCwgc2luY2UgUDUuanMgZG9lcyB0aGF0IGZvciB1c1xuICAgIGNvbnN0IGNvbnRleHQgPSB0eXBlb2Ygc2V0dGluZ3MuY29udGV4dCA9PT0gJ3N0cmluZycgPyBzZXR0aW5ncy5jb250ZXh0IDogZmFsc2U7XG4gICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncywgeyBjYW52YXM6IGZhbHNlLCBjb250ZXh0IH0pO1xuICB9XG5cbiAgY29uc3QgaXNIb3QgPSBpc0hvdFJlbG9hZCgpO1xuICBsZXQgaG90SUQ7XG4gIGlmIChpc0hvdCkge1xuICAgIC8vIFVzZSBhIG1hZ2ljIG5hbWUgYnkgZGVmYXVsdCwgZm9yY2UgdXNlciB0byBkZWZpbmUgZWFjaCBza2V0Y2ggaWYgdGhleVxuICAgIC8vIHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBpbiBhbiBhcHBsaWNhdGlvbi4gT3BlbiB0byBvdGhlciBpZGVhcyBvbiBob3cgdG8gdGFja2xlXG4gICAgLy8gdGhpcyBhcyB3ZWxsLi4uXG4gICAgaG90SUQgPSBkZWZpbmVkKHNldHRpbmdzLmlkLCAnJF9fREVGQVVMVF9DQU5WQVNfU0tFVENIX0lEX18kJyk7XG4gIH1cbiAgbGV0IGlzSW5qZWN0aW5nID0gaXNIb3QgJiYgdHlwZW9mIGhvdElEID09PSAnc3RyaW5nJztcblxuICBpZiAoaXNJbmplY3RpbmcgJiYgcnVudGltZUNvbGxpc2lvbnMuaW5jbHVkZXMoaG90SUQpKSB7XG4gICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBZb3UgaGF2ZSBtdWx0aXBsZSBjYWxscyB0byBjYW52YXNTa2V0Y2goKSBpbiAtLWhvdCBtb2RlLiBZb3UgbXVzdCBwYXNzIHVuaXF1ZSB7IGlkIH0gc3RyaW5ncyBpbiBzZXR0aW5ncyB0byBlbmFibGUgaG90IHJlbG9hZCBhY3Jvc3MgbXVsdGlwbGUgc2tldGNoZXMuIGAsIGhvdElEKTtcbiAgICBpc0luamVjdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IHByZWxvYWQgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICBpZiAoaXNJbmplY3RpbmcpIHtcbiAgICAvLyBNYXJrIHRoaXMgYXMgYWxyZWFkeSBzcG90dGVkIGluIHRoaXMgcnVudGltZSBpbnN0YW5jZVxuICAgIHJ1bnRpbWVDb2xsaXNpb25zLnB1c2goaG90SUQpO1xuXG4gICAgY29uc3QgcHJldmlvdXNEYXRhID0gY2FjaGVHZXQoaG90SUQpO1xuICAgIGlmIChwcmV2aW91c0RhdGEpIHtcbiAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgIC8vIEdyYWIgbmV3IHByb3BzIGZyb20gb2xkIHNrZXRjaCBpbnN0YW5jZVxuICAgICAgICBjb25zdCBuZXdQcm9wcyA9IGdldFRpbWVQcm9wKHByZXZpb3VzRGF0YS5tYW5hZ2VyLCBzZXR0aW5ncyk7XG4gICAgICAgIC8vIERlc3Ryb3kgdGhlIG9sZCBpbnN0YW5jZVxuICAgICAgICBwcmV2aW91c0RhdGEubWFuYWdlci5kZXN0cm95KCk7XG4gICAgICAgIC8vIFBhc3MgYWxvbmcgbmV3IHByb3BzXG4gICAgICAgIHJldHVybiBuZXdQcm9wcztcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vdmUgYWxvbmcgdGhlIG5leHQgZGF0YS4uLlxuICAgICAgcHJlbG9hZCA9IHByZXZpb3VzRGF0YS5sb2FkLnRoZW4obmV4dCkuY2F0Y2gobmV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZWxvYWQudGhlbihuZXdQcm9wcyA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTa2V0Y2hNYW5hZ2VyKCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoc2tldGNoKSB7XG4gICAgICAvLyBNZXJnZSB3aXRoIGluY29taW5nIGRhdGFcbiAgICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIG5ld1Byb3BzKTtcblxuICAgICAgLy8gQXBwbHkgc2V0dGluZ3MgYW5kIGNyZWF0ZSBhIGNhbnZhc1xuICAgICAgbWFuYWdlci5zZXR1cChzZXR0aW5ncyk7XG5cbiAgICAgIC8vIE1vdW50IHRvIERPTVxuICAgICAgbWFuYWdlci5tb3VudCgpO1xuXG4gICAgICAvLyBsb2FkIHRoZSBza2V0Y2ggZmlyc3RcbiAgICAgIHJlc3VsdCA9IG1hbmFnZXIubG9hZEFuZFJ1bihza2V0Y2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBQcm9taXNlLnJlc29sdmUobWFuYWdlcik7XG4gICAgfVxuICAgIGlmIChpc0luamVjdGluZykge1xuICAgICAgY2FjaGVQdXQoaG90SUQsIHsgbG9hZDogcmVzdWx0LCBtYW5hZ2VyIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbn1cblxuLy8gVE9ETzogRmlndXJlIG91dCBhIG5pY2Ugd2F5IHRvIGV4cG9ydCB0aGluZ3MuXG5jYW52YXNTa2V0Y2guY2FudmFzU2tldGNoID0gY2FudmFzU2tldGNoO1xuY2FudmFzU2tldGNoLlBhcGVyU2l6ZXMgPSBQYXBlclNpemVzO1xuXG5leHBvcnQgZGVmYXVsdCBjYW52YXNTa2V0Y2g7XG4iLCJ2YXIgY2xvbmUgPSAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9pbnN0YW5jZW9mKG9iaiwgdHlwZSkge1xuICByZXR1cm4gdHlwZSAhPSBudWxsICYmIG9iaiBpbnN0YW5jZW9mIHR5cGU7XG59XG5cbnZhciBuYXRpdmVNYXA7XG50cnkge1xuICBuYXRpdmVNYXAgPSBNYXA7XG59IGNhdGNoKF8pIHtcbiAgLy8gbWF5YmUgYSByZWZlcmVuY2UgZXJyb3IgYmVjYXVzZSBubyBgTWFwYC4gR2l2ZSBpdCBhIGR1bW15IHZhbHVlIHRoYXQgbm9cbiAgLy8gdmFsdWUgd2lsbCBldmVyIGJlIGFuIGluc3RhbmNlb2YuXG4gIG5hdGl2ZU1hcCA9IGZ1bmN0aW9uKCkge307XG59XG5cbnZhciBuYXRpdmVTZXQ7XG50cnkge1xuICBuYXRpdmVTZXQgPSBTZXQ7XG59IGNhdGNoKF8pIHtcbiAgbmF0aXZlU2V0ID0gZnVuY3Rpb24oKSB7fTtcbn1cblxudmFyIG5hdGl2ZVByb21pc2U7XG50cnkge1xuICBuYXRpdmVQcm9taXNlID0gUHJvbWlzZTtcbn0gY2F0Y2goXykge1xuICBuYXRpdmVQcm9taXNlID0gZnVuY3Rpb24oKSB7fTtcbn1cblxuLyoqXG4gKiBDbG9uZXMgKGNvcGllcykgYW4gT2JqZWN0IHVzaW5nIGRlZXAgY29weWluZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGNpcmN1bGFyIHJlZmVyZW5jZXMgYnkgZGVmYXVsdCwgYnV0IGlmIHlvdSBhcmUgY2VydGFpblxuICogdGhlcmUgYXJlIG5vIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4geW91ciBvYmplY3QsIHlvdSBjYW4gc2F2ZSBzb21lIENQVSB0aW1lXG4gKiBieSBjYWxsaW5nIGNsb25lKG9iaiwgZmFsc2UpLlxuICpcbiAqIENhdXRpb246IGlmIGBjaXJjdWxhcmAgaXMgZmFsc2UgYW5kIGBwYXJlbnRgIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZXMsXG4gKiB5b3VyIHByb2dyYW0gbWF5IGVudGVyIGFuIGluZmluaXRlIGxvb3AgYW5kIGNyYXNoLlxuICpcbiAqIEBwYXJhbSBgcGFyZW50YCAtIHRoZSBvYmplY3QgdG8gYmUgY2xvbmVkXG4gKiBAcGFyYW0gYGNpcmN1bGFyYCAtIHNldCB0byB0cnVlIGlmIHRoZSBvYmplY3QgdG8gYmUgY2xvbmVkIG1heSBjb250YWluXG4gKiAgICBjaXJjdWxhciByZWZlcmVuY2VzLiAob3B0aW9uYWwgLSB0cnVlIGJ5IGRlZmF1bHQpXG4gKiBAcGFyYW0gYGRlcHRoYCAtIHNldCB0byBhIG51bWJlciBpZiB0aGUgb2JqZWN0IGlzIG9ubHkgdG8gYmUgY2xvbmVkIHRvXG4gKiAgICBhIHBhcnRpY3VsYXIgZGVwdGguIChvcHRpb25hbCAtIGRlZmF1bHRzIHRvIEluZmluaXR5KVxuICogQHBhcmFtIGBwcm90b3R5cGVgIC0gc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIHVzZWQgd2hlbiBjbG9uaW5nIGFuIG9iamVjdC5cbiAqICAgIChvcHRpb25hbCAtIGRlZmF1bHRzIHRvIHBhcmVudCBwcm90b3R5cGUpLlxuICogQHBhcmFtIGBpbmNsdWRlTm9uRW51bWVyYWJsZWAgLSBzZXQgdG8gdHJ1ZSBpZiB0aGUgbm9uLWVudW1lcmFibGUgcHJvcGVydGllc1xuICogICAgc2hvdWxkIGJlIGNsb25lZCBhcyB3ZWxsLiBOb24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9uIHRoZSBwcm90b3R5cGVcbiAqICAgIGNoYWluIHdpbGwgYmUgaWdub3JlZC4gKG9wdGlvbmFsIC0gZmFsc2UgYnkgZGVmYXVsdClcbiovXG5mdW5jdGlvbiBjbG9uZShwYXJlbnQsIGNpcmN1bGFyLCBkZXB0aCwgcHJvdG90eXBlLCBpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICBpZiAodHlwZW9mIGNpcmN1bGFyID09PSAnb2JqZWN0Jykge1xuICAgIGRlcHRoID0gY2lyY3VsYXIuZGVwdGg7XG4gICAgcHJvdG90eXBlID0gY2lyY3VsYXIucHJvdG90eXBlO1xuICAgIGluY2x1ZGVOb25FbnVtZXJhYmxlID0gY2lyY3VsYXIuaW5jbHVkZU5vbkVudW1lcmFibGU7XG4gICAgY2lyY3VsYXIgPSBjaXJjdWxhci5jaXJjdWxhcjtcbiAgfVxuICAvLyBtYWludGFpbiB0d28gYXJyYXlzIGZvciBjaXJjdWxhciByZWZlcmVuY2VzLCB3aGVyZSBjb3JyZXNwb25kaW5nIHBhcmVudHNcbiAgLy8gYW5kIGNoaWxkcmVuIGhhdmUgdGhlIHNhbWUgaW5kZXhcbiAgdmFyIGFsbFBhcmVudHMgPSBbXTtcbiAgdmFyIGFsbENoaWxkcmVuID0gW107XG5cbiAgdmFyIHVzZUJ1ZmZlciA9IHR5cGVvZiBCdWZmZXIgIT0gJ3VuZGVmaW5lZCc7XG5cbiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PSAndW5kZWZpbmVkJylcbiAgICBjaXJjdWxhciA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBkZXB0aCA9PSAndW5kZWZpbmVkJylcbiAgICBkZXB0aCA9IEluZmluaXR5O1xuXG4gIC8vIHJlY3Vyc2UgdGhpcyBmdW5jdGlvbiBzbyB3ZSBkb24ndCByZXNldCBhbGxQYXJlbnRzIGFuZCBhbGxDaGlsZHJlblxuICBmdW5jdGlvbiBfY2xvbmUocGFyZW50LCBkZXB0aCkge1xuICAgIC8vIGNsb25pbmcgbnVsbCBhbHdheXMgcmV0dXJucyBudWxsXG4gICAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgaWYgKGRlcHRoID09PSAwKVxuICAgICAgcmV0dXJuIHBhcmVudDtcblxuICAgIHZhciBjaGlsZDtcbiAgICB2YXIgcHJvdG87XG4gICAgaWYgKHR5cGVvZiBwYXJlbnQgIT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlTWFwKSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlTWFwKCk7XG4gICAgfSBlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZVNldCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZVNldCgpO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVQcm9taXNlKSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHBhcmVudC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgcmVzb2x2ZShfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSkpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICByZWplY3QoX2Nsb25lKGVyciwgZGVwdGggLSAxKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzQXJyYXkocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBbXTtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNSZWdFeHAocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgUmVnRXhwKHBhcmVudC5zb3VyY2UsIF9fZ2V0UmVnRXhwRmxhZ3MocGFyZW50KSk7XG4gICAgICBpZiAocGFyZW50Lmxhc3RJbmRleCkgY2hpbGQubGFzdEluZGV4ID0gcGFyZW50Lmxhc3RJbmRleDtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNEYXRlKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IERhdGUocGFyZW50LmdldFRpbWUoKSk7XG4gICAgfSBlbHNlIGlmICh1c2VCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKHBhcmVudCkpIHtcbiAgICAgIGlmIChCdWZmZXIuYWxsb2NVbnNhZmUpIHtcbiAgICAgICAgLy8gTm9kZS5qcyA+PSA0LjUuMFxuICAgICAgICBjaGlsZCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShwYXJlbnQubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9sZGVyIE5vZGUuanMgdmVyc2lvbnNcbiAgICAgICAgY2hpbGQgPSBuZXcgQnVmZmVyKHBhcmVudC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgcGFyZW50LmNvcHkoY2hpbGQpO1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBFcnJvcikpIHtcbiAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwYXJlbnQpO1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG8pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuICAgICAgICBwcm90byA9IHByb3RvdHlwZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2lyY3VsYXIpIHtcbiAgICAgIHZhciBpbmRleCA9IGFsbFBhcmVudHMuaW5kZXhPZihwYXJlbnQpO1xuXG4gICAgICBpZiAoaW5kZXggIT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGFsbENoaWxkcmVuW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIGFsbFBhcmVudHMucHVzaChwYXJlbnQpO1xuICAgICAgYWxsQ2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfVxuXG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlTWFwKSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICB2YXIga2V5Q2hpbGQgPSBfY2xvbmUoa2V5LCBkZXB0aCAtIDEpO1xuICAgICAgICB2YXIgdmFsdWVDaGlsZCA9IF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKTtcbiAgICAgICAgY2hpbGQuc2V0KGtleUNoaWxkLCB2YWx1ZUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVTZXQpKSB7XG4gICAgICBwYXJlbnQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgZW50cnlDaGlsZCA9IF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKTtcbiAgICAgICAgY2hpbGQuYWRkKGVudHJ5Q2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSBpbiBwYXJlbnQpIHtcbiAgICAgIHZhciBhdHRycztcbiAgICAgIGlmIChwcm90bykge1xuICAgICAgICBhdHRycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXR0cnMgJiYgYXR0cnMuc2V0ID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjaGlsZFtpXSA9IF9jbG9uZShwYXJlbnRbaV0sIGRlcHRoIC0gMSk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhwYXJlbnQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIERvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgY2xvbmluZyBhIHN5bWJvbCBiZWNhdXNlIGl0IGlzIGEgcHJpbWl0aXZlLFxuICAgICAgICAvLyBsaWtlIGEgbnVtYmVyIG9yIHN0cmluZy5cbiAgICAgICAgdmFyIHN5bWJvbCA9IHN5bWJvbHNbaV07XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIHN5bWJvbCk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmVudW1lcmFibGUgJiYgIWluY2x1ZGVOb25FbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbc3ltYm9sXSA9IF9jbG9uZShwYXJlbnRbc3ltYm9sXSwgZGVwdGggLSAxKTtcbiAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hpbGQsIHN5bWJvbCwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgdmFyIGFsbFByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwYXJlbnQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxQcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0eU5hbWVzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZFtwcm9wZXJ0eU5hbWVdID0gX2Nsb25lKHBhcmVudFtwcm9wZXJ0eU5hbWVdLCBkZXB0aCAtIDEpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hpbGQsIHByb3BlcnR5TmFtZSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHJldHVybiBfY2xvbmUocGFyZW50LCBkZXB0aCk7XG59XG5cbi8qKlxuICogU2ltcGxlIGZsYXQgY2xvbmUgdXNpbmcgcHJvdG90eXBlLCBhY2NlcHRzIG9ubHkgb2JqZWN0cywgdXNlZnVsbCBmb3IgcHJvcGVydHlcbiAqIG92ZXJyaWRlIG9uIEZMQVQgY29uZmlndXJhdGlvbiBvYmplY3QgKG5vIG5lc3RlZCBwcm9wcykuXG4gKlxuICogVVNFIFdJVEggQ0FVVElPTiEgVGhpcyBtYXkgbm90IGJlaGF2ZSBhcyB5b3Ugd2lzaCBpZiB5b3UgZG8gbm90IGtub3cgaG93IHRoaXNcbiAqIHdvcmtzLlxuICovXG5jbG9uZS5jbG9uZVByb3RvdHlwZSA9IGZ1bmN0aW9uIGNsb25lUHJvdG90eXBlKHBhcmVudCkge1xuICBpZiAocGFyZW50ID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHZhciBjID0gZnVuY3Rpb24gKCkge307XG4gIGMucHJvdG90eXBlID0gcGFyZW50O1xuICByZXR1cm4gbmV3IGMoKTtcbn07XG5cbi8vIHByaXZhdGUgdXRpbGl0eSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gX19vYmpUb1N0cihvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5jbG9uZS5fX29ialRvU3RyID0gX19vYmpUb1N0cjtcblxuZnVuY3Rpb24gX19pc0RhdGUobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmNsb25lLl9faXNEYXRlID0gX19pc0RhdGU7XG5cbmZ1bmN0aW9uIF9faXNBcnJheShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cbmNsb25lLl9faXNBcnJheSA9IF9faXNBcnJheTtcblxuZnVuY3Rpb24gX19pc1JlZ0V4cChvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5jbG9uZS5fX2lzUmVnRXhwID0gX19pc1JlZ0V4cDtcblxuZnVuY3Rpb24gX19nZXRSZWdFeHBGbGFncyhyZSkge1xuICB2YXIgZmxhZ3MgPSAnJztcbiAgaWYgKHJlLmdsb2JhbCkgZmxhZ3MgKz0gJ2cnO1xuICBpZiAocmUuaWdub3JlQ2FzZSkgZmxhZ3MgKz0gJ2knO1xuICBpZiAocmUubXVsdGlsaW5lKSBmbGFncyArPSAnbSc7XG4gIHJldHVybiBmbGFncztcbn1cbmNsb25lLl9fZ2V0UmVnRXhwRmxhZ3MgPSBfX2dldFJlZ0V4cEZsYWdzO1xuXG5yZXR1cm4gY2xvbmU7XG59KSgpO1xuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbn1cbiIsIi8qIE1JVCBsaWNlbnNlICovXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICByZ2IyaHNsOiByZ2IyaHNsLFxuICByZ2IyaHN2OiByZ2IyaHN2LFxuICByZ2IyaHdiOiByZ2IyaHdiLFxuICByZ2IyY215azogcmdiMmNteWssXG4gIHJnYjJrZXl3b3JkOiByZ2Iya2V5d29yZCxcbiAgcmdiMnh5ejogcmdiMnh5eixcbiAgcmdiMmxhYjogcmdiMmxhYixcbiAgcmdiMmxjaDogcmdiMmxjaCxcblxuICBoc2wycmdiOiBoc2wycmdiLFxuICBoc2wyaHN2OiBoc2wyaHN2LFxuICBoc2wyaHdiOiBoc2wyaHdiLFxuICBoc2wyY215azogaHNsMmNteWssXG4gIGhzbDJrZXl3b3JkOiBoc2wya2V5d29yZCxcblxuICBoc3YycmdiOiBoc3YycmdiLFxuICBoc3YyaHNsOiBoc3YyaHNsLFxuICBoc3YyaHdiOiBoc3YyaHdiLFxuICBoc3YyY215azogaHN2MmNteWssXG4gIGhzdjJrZXl3b3JkOiBoc3Yya2V5d29yZCxcblxuICBod2IycmdiOiBod2IycmdiLFxuICBod2IyaHNsOiBod2IyaHNsLFxuICBod2IyaHN2OiBod2IyaHN2LFxuICBod2IyY215azogaHdiMmNteWssXG4gIGh3YjJrZXl3b3JkOiBod2Iya2V5d29yZCxcblxuICBjbXlrMnJnYjogY215azJyZ2IsXG4gIGNteWsyaHNsOiBjbXlrMmhzbCxcbiAgY215azJoc3Y6IGNteWsyaHN2LFxuICBjbXlrMmh3YjogY215azJod2IsXG4gIGNteWsya2V5d29yZDogY215azJrZXl3b3JkLFxuXG4gIGtleXdvcmQycmdiOiBrZXl3b3JkMnJnYixcbiAga2V5d29yZDJoc2w6IGtleXdvcmQyaHNsLFxuICBrZXl3b3JkMmhzdjoga2V5d29yZDJoc3YsXG4gIGtleXdvcmQyaHdiOiBrZXl3b3JkMmh3YixcbiAga2V5d29yZDJjbXlrOiBrZXl3b3JkMmNteWssXG4gIGtleXdvcmQybGFiOiBrZXl3b3JkMmxhYixcbiAga2V5d29yZDJ4eXo6IGtleXdvcmQyeHl6LFxuXG4gIHh5ejJyZ2I6IHh5ejJyZ2IsXG4gIHh5ejJsYWI6IHh5ejJsYWIsXG4gIHh5ejJsY2g6IHh5ejJsY2gsXG5cbiAgbGFiMnh5ejogbGFiMnh5eixcbiAgbGFiMnJnYjogbGFiMnJnYixcbiAgbGFiMmxjaDogbGFiMmxjaCxcblxuICBsY2gybGFiOiBsY2gybGFiLFxuICBsY2gyeHl6OiBsY2gyeHl6LFxuICBsY2gycmdiOiBsY2gycmdiXG59XG5cblxuZnVuY3Rpb24gcmdiMmhzbChyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0vMjU1LFxuICAgICAgZyA9IHJnYlsxXS8yNTUsXG4gICAgICBiID0gcmdiWzJdLzI1NSxcbiAgICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgICAgbWF4ID0gTWF0aC5tYXgociwgZywgYiksXG4gICAgICBkZWx0YSA9IG1heCAtIG1pbixcbiAgICAgIGgsIHMsIGw7XG5cbiAgaWYgKG1heCA9PSBtaW4pXG4gICAgaCA9IDA7XG4gIGVsc2UgaWYgKHIgPT0gbWF4KVxuICAgIGggPSAoZyAtIGIpIC8gZGVsdGE7XG4gIGVsc2UgaWYgKGcgPT0gbWF4KVxuICAgIGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuICBlbHNlIGlmIChiID09IG1heClcbiAgICBoID0gNCArIChyIC0gZykvIGRlbHRhO1xuXG4gIGggPSBNYXRoLm1pbihoICogNjAsIDM2MCk7XG5cbiAgaWYgKGggPCAwKVxuICAgIGggKz0gMzYwO1xuXG4gIGwgPSAobWluICsgbWF4KSAvIDI7XG5cbiAgaWYgKG1heCA9PSBtaW4pXG4gICAgcyA9IDA7XG4gIGVsc2UgaWYgKGwgPD0gMC41KVxuICAgIHMgPSBkZWx0YSAvIChtYXggKyBtaW4pO1xuICBlbHNlXG4gICAgcyA9IGRlbHRhIC8gKDIgLSBtYXggLSBtaW4pO1xuXG4gIHJldHVybiBbaCwgcyAqIDEwMCwgbCAqIDEwMF07XG59XG5cbmZ1bmN0aW9uIHJnYjJoc3YocmdiKSB7XG4gIHZhciByID0gcmdiWzBdLFxuICAgICAgZyA9IHJnYlsxXSxcbiAgICAgIGIgPSByZ2JbMl0sXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgZGVsdGEgPSBtYXggLSBtaW4sXG4gICAgICBoLCBzLCB2O1xuXG4gIGlmIChtYXggPT0gMClcbiAgICBzID0gMDtcbiAgZWxzZVxuICAgIHMgPSAoZGVsdGEvbWF4ICogMTAwMCkvMTA7XG5cbiAgaWYgKG1heCA9PSBtaW4pXG4gICAgaCA9IDA7XG4gIGVsc2UgaWYgKHIgPT0gbWF4KVxuICAgIGggPSAoZyAtIGIpIC8gZGVsdGE7XG4gIGVsc2UgaWYgKGcgPT0gbWF4KVxuICAgIGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuICBlbHNlIGlmIChiID09IG1heClcbiAgICBoID0gNCArIChyIC0gZykgLyBkZWx0YTtcblxuICBoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApO1xuXG4gIGlmIChoIDwgMClcbiAgICBoICs9IDM2MDtcblxuICB2ID0gKChtYXggLyAyNTUpICogMTAwMCkgLyAxMDtcblxuICByZXR1cm4gW2gsIHMsIHZdO1xufVxuXG5mdW5jdGlvbiByZ2IyaHdiKHJnYikge1xuICB2YXIgciA9IHJnYlswXSxcbiAgICAgIGcgPSByZ2JbMV0sXG4gICAgICBiID0gcmdiWzJdLFxuICAgICAgaCA9IHJnYjJoc2wocmdiKVswXSxcbiAgICAgIHcgPSAxLzI1NSAqIE1hdGgubWluKHIsIE1hdGgubWluKGcsIGIpKSxcbiAgICAgIGIgPSAxIC0gMS8yNTUgKiBNYXRoLm1heChyLCBNYXRoLm1heChnLCBiKSk7XG5cbiAgcmV0dXJuIFtoLCB3ICogMTAwLCBiICogMTAwXTtcbn1cblxuZnVuY3Rpb24gcmdiMmNteWsocmdiKSB7XG4gIHZhciByID0gcmdiWzBdIC8gMjU1LFxuICAgICAgZyA9IHJnYlsxXSAvIDI1NSxcbiAgICAgIGIgPSByZ2JbMl0gLyAyNTUsXG4gICAgICBjLCBtLCB5LCBrO1xuXG4gIGsgPSBNYXRoLm1pbigxIC0gciwgMSAtIGcsIDEgLSBiKTtcbiAgYyA9ICgxIC0gciAtIGspIC8gKDEgLSBrKSB8fCAwO1xuICBtID0gKDEgLSBnIC0gaykgLyAoMSAtIGspIHx8IDA7XG4gIHkgPSAoMSAtIGIgLSBrKSAvICgxIC0gaykgfHwgMDtcbiAgcmV0dXJuIFtjICogMTAwLCBtICogMTAwLCB5ICogMTAwLCBrICogMTAwXTtcbn1cblxuZnVuY3Rpb24gcmdiMmtleXdvcmQocmdiKSB7XG4gIHJldHVybiByZXZlcnNlS2V5d29yZHNbSlNPTi5zdHJpbmdpZnkocmdiKV07XG59XG5cbmZ1bmN0aW9uIHJnYjJ4eXoocmdiKSB7XG4gIHZhciByID0gcmdiWzBdIC8gMjU1LFxuICAgICAgZyA9IHJnYlsxXSAvIDI1NSxcbiAgICAgIGIgPSByZ2JbMl0gLyAyNTU7XG5cbiAgLy8gYXNzdW1lIHNSR0JcbiAgciA9IHIgPiAwLjA0MDQ1ID8gTWF0aC5wb3coKChyICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpIDogKHIgLyAxMi45Mik7XG4gIGcgPSBnID4gMC4wNDA0NSA/IE1hdGgucG93KCgoZyArIDAuMDU1KSAvIDEuMDU1KSwgMi40KSA6IChnIC8gMTIuOTIpO1xuICBiID0gYiA+IDAuMDQwNDUgPyBNYXRoLnBvdygoKGIgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCkgOiAoYiAvIDEyLjkyKTtcblxuICB2YXIgeCA9IChyICogMC40MTI0KSArIChnICogMC4zNTc2KSArIChiICogMC4xODA1KTtcbiAgdmFyIHkgPSAociAqIDAuMjEyNikgKyAoZyAqIDAuNzE1MikgKyAoYiAqIDAuMDcyMik7XG4gIHZhciB6ID0gKHIgKiAwLjAxOTMpICsgKGcgKiAwLjExOTIpICsgKGIgKiAwLjk1MDUpO1xuXG4gIHJldHVybiBbeCAqIDEwMCwgeSAqMTAwLCB6ICogMTAwXTtcbn1cblxuZnVuY3Rpb24gcmdiMmxhYihyZ2IpIHtcbiAgdmFyIHh5eiA9IHJnYjJ4eXoocmdiKSxcbiAgICAgICAgeCA9IHh5elswXSxcbiAgICAgICAgeSA9IHh5elsxXSxcbiAgICAgICAgeiA9IHh5elsyXSxcbiAgICAgICAgbCwgYSwgYjtcblxuICB4IC89IDk1LjA0NztcbiAgeSAvPSAxMDA7XG4gIHogLz0gMTA4Ljg4MztcblxuICB4ID0geCA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeCwgMS8zKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcbiAgeSA9IHkgPiAwLjAwODg1NiA/IE1hdGgucG93KHksIDEvMykgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG4gIHogPSB6ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh6LCAxLzMpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG4gIGwgPSAoMTE2ICogeSkgLSAxNjtcbiAgYSA9IDUwMCAqICh4IC0geSk7XG4gIGIgPSAyMDAgKiAoeSAtIHopO1xuXG4gIHJldHVybiBbbCwgYSwgYl07XG59XG5cbmZ1bmN0aW9uIHJnYjJsY2goYXJncykge1xuICByZXR1cm4gbGFiMmxjaChyZ2IybGFiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaHNsMnJnYihoc2wpIHtcbiAgdmFyIGggPSBoc2xbMF0gLyAzNjAsXG4gICAgICBzID0gaHNsWzFdIC8gMTAwLFxuICAgICAgbCA9IGhzbFsyXSAvIDEwMCxcbiAgICAgIHQxLCB0MiwgdDMsIHJnYiwgdmFsO1xuXG4gIGlmIChzID09IDApIHtcbiAgICB2YWwgPSBsICogMjU1O1xuICAgIHJldHVybiBbdmFsLCB2YWwsIHZhbF07XG4gIH1cblxuICBpZiAobCA8IDAuNSlcbiAgICB0MiA9IGwgKiAoMSArIHMpO1xuICBlbHNlXG4gICAgdDIgPSBsICsgcyAtIGwgKiBzO1xuICB0MSA9IDIgKiBsIC0gdDI7XG5cbiAgcmdiID0gWzAsIDAsIDBdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgIHQzID0gaCArIDEgLyAzICogLSAoaSAtIDEpO1xuICAgIHQzIDwgMCAmJiB0MysrO1xuICAgIHQzID4gMSAmJiB0My0tO1xuXG4gICAgaWYgKDYgKiB0MyA8IDEpXG4gICAgICB2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0MztcbiAgICBlbHNlIGlmICgyICogdDMgPCAxKVxuICAgICAgdmFsID0gdDI7XG4gICAgZWxzZSBpZiAoMyAqIHQzIDwgMilcbiAgICAgIHZhbCA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDMpICogNjtcbiAgICBlbHNlXG4gICAgICB2YWwgPSB0MTtcblxuICAgIHJnYltpXSA9IHZhbCAqIDI1NTtcbiAgfVxuXG4gIHJldHVybiByZ2I7XG59XG5cbmZ1bmN0aW9uIGhzbDJoc3YoaHNsKSB7XG4gIHZhciBoID0gaHNsWzBdLFxuICAgICAgcyA9IGhzbFsxXSAvIDEwMCxcbiAgICAgIGwgPSBoc2xbMl0gLyAxMDAsXG4gICAgICBzdiwgdjtcblxuICBpZihsID09PSAwKSB7XG4gICAgICAvLyBubyBuZWVkIHRvIGRvIGNhbGMgb24gYmxhY2tcbiAgICAgIC8vIGFsc28gYXZvaWRzIGRpdmlkZSBieSAwIGVycm9yXG4gICAgICByZXR1cm4gWzAsIDAsIDBdO1xuICB9XG5cbiAgbCAqPSAyO1xuICBzICo9IChsIDw9IDEpID8gbCA6IDIgLSBsO1xuICB2ID0gKGwgKyBzKSAvIDI7XG4gIHN2ID0gKDIgKiBzKSAvIChsICsgcyk7XG4gIHJldHVybiBbaCwgc3YgKiAxMDAsIHYgKiAxMDBdO1xufVxuXG5mdW5jdGlvbiBoc2wyaHdiKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJod2IoaHNsMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGhzbDJjbXlrKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJjbXlrKGhzbDJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBoc2wya2V5d29yZChhcmdzKSB7XG4gIHJldHVybiByZ2Iya2V5d29yZChoc2wycmdiKGFyZ3MpKTtcbn1cblxuXG5mdW5jdGlvbiBoc3YycmdiKGhzdikge1xuICB2YXIgaCA9IGhzdlswXSAvIDYwLFxuICAgICAgcyA9IGhzdlsxXSAvIDEwMCxcbiAgICAgIHYgPSBoc3ZbMl0gLyAxMDAsXG4gICAgICBoaSA9IE1hdGguZmxvb3IoaCkgJSA2O1xuXG4gIHZhciBmID0gaCAtIE1hdGguZmxvb3IoaCksXG4gICAgICBwID0gMjU1ICogdiAqICgxIC0gcyksXG4gICAgICBxID0gMjU1ICogdiAqICgxIC0gKHMgKiBmKSksXG4gICAgICB0ID0gMjU1ICogdiAqICgxIC0gKHMgKiAoMSAtIGYpKSksXG4gICAgICB2ID0gMjU1ICogdjtcblxuICBzd2l0Y2goaGkpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gW3YsIHQsIHBdO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBbcSwgdiwgcF07XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIFtwLCB2LCB0XTtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gW3AsIHEsIHZdO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBbdCwgcCwgdl07XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIFt2LCBwLCBxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoc3YyaHNsKGhzdikge1xuICB2YXIgaCA9IGhzdlswXSxcbiAgICAgIHMgPSBoc3ZbMV0gLyAxMDAsXG4gICAgICB2ID0gaHN2WzJdIC8gMTAwLFxuICAgICAgc2wsIGw7XG5cbiAgbCA9ICgyIC0gcykgKiB2O1xuICBzbCA9IHMgKiB2O1xuICBzbCAvPSAobCA8PSAxKSA/IGwgOiAyIC0gbDtcbiAgc2wgPSBzbCB8fCAwO1xuICBsIC89IDI7XG4gIHJldHVybiBbaCwgc2wgKiAxMDAsIGwgKiAxMDBdO1xufVxuXG5mdW5jdGlvbiBoc3YyaHdiKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJod2IoaHN2MnJnYihhcmdzKSlcbn1cblxuZnVuY3Rpb24gaHN2MmNteWsoYXJncykge1xuICByZXR1cm4gcmdiMmNteWsoaHN2MnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGhzdjJrZXl3b3JkKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJrZXl3b3JkKGhzdjJyZ2IoYXJncykpO1xufVxuXG4vLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MtY29sb3IvI2h3Yi10by1yZ2JcbmZ1bmN0aW9uIGh3YjJyZ2IoaHdiKSB7XG4gIHZhciBoID0gaHdiWzBdIC8gMzYwLFxuICAgICAgd2ggPSBod2JbMV0gLyAxMDAsXG4gICAgICBibCA9IGh3YlsyXSAvIDEwMCxcbiAgICAgIHJhdGlvID0gd2ggKyBibCxcbiAgICAgIGksIHYsIGYsIG47XG5cbiAgLy8gd2ggKyBibCBjYW50IGJlID4gMVxuICBpZiAocmF0aW8gPiAxKSB7XG4gICAgd2ggLz0gcmF0aW87XG4gICAgYmwgLz0gcmF0aW87XG4gIH1cblxuICBpID0gTWF0aC5mbG9vcig2ICogaCk7XG4gIHYgPSAxIC0gYmw7XG4gIGYgPSA2ICogaCAtIGk7XG4gIGlmICgoaSAmIDB4MDEpICE9IDApIHtcbiAgICBmID0gMSAtIGY7XG4gIH1cbiAgbiA9IHdoICsgZiAqICh2IC0gd2gpOyAgLy8gbGluZWFyIGludGVycG9sYXRpb25cblxuICBzd2l0Y2ggKGkpIHtcbiAgICBkZWZhdWx0OlxuICAgIGNhc2UgNjpcbiAgICBjYXNlIDA6IHIgPSB2OyBnID0gbjsgYiA9IHdoOyBicmVhaztcbiAgICBjYXNlIDE6IHIgPSBuOyBnID0gdjsgYiA9IHdoOyBicmVhaztcbiAgICBjYXNlIDI6IHIgPSB3aDsgZyA9IHY7IGIgPSBuOyBicmVhaztcbiAgICBjYXNlIDM6IHIgPSB3aDsgZyA9IG47IGIgPSB2OyBicmVhaztcbiAgICBjYXNlIDQ6IHIgPSBuOyBnID0gd2g7IGIgPSB2OyBicmVhaztcbiAgICBjYXNlIDU6IHIgPSB2OyBnID0gd2g7IGIgPSBuOyBicmVhaztcbiAgfVxuXG4gIHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59XG5cbmZ1bmN0aW9uIGh3YjJoc2woYXJncykge1xuICByZXR1cm4gcmdiMmhzbChod2IycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaHdiMmhzdihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHN2KGh3YjJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBod2IyY215ayhhcmdzKSB7XG4gIHJldHVybiByZ2IyY215ayhod2IycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaHdiMmtleXdvcmQoYXJncykge1xuICByZXR1cm4gcmdiMmtleXdvcmQoaHdiMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGNteWsycmdiKGNteWspIHtcbiAgdmFyIGMgPSBjbXlrWzBdIC8gMTAwLFxuICAgICAgbSA9IGNteWtbMV0gLyAxMDAsXG4gICAgICB5ID0gY215a1syXSAvIDEwMCxcbiAgICAgIGsgPSBjbXlrWzNdIC8gMTAwLFxuICAgICAgciwgZywgYjtcblxuICByID0gMSAtIE1hdGgubWluKDEsIGMgKiAoMSAtIGspICsgayk7XG4gIGcgPSAxIC0gTWF0aC5taW4oMSwgbSAqICgxIC0gaykgKyBrKTtcbiAgYiA9IDEgLSBNYXRoLm1pbigxLCB5ICogKDEgLSBrKSArIGspO1xuICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufVxuXG5mdW5jdGlvbiBjbXlrMmhzbChhcmdzKSB7XG4gIHJldHVybiByZ2IyaHNsKGNteWsycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gY215azJoc3YoYXJncykge1xuICByZXR1cm4gcmdiMmhzdihjbXlrMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGNteWsyaHdiKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJod2IoY215azJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBjbXlrMmtleXdvcmQoYXJncykge1xuICByZXR1cm4gcmdiMmtleXdvcmQoY215azJyZ2IoYXJncykpO1xufVxuXG5cbmZ1bmN0aW9uIHh5ejJyZ2IoeHl6KSB7XG4gIHZhciB4ID0geHl6WzBdIC8gMTAwLFxuICAgICAgeSA9IHh5elsxXSAvIDEwMCxcbiAgICAgIHogPSB4eXpbMl0gLyAxMDAsXG4gICAgICByLCBnLCBiO1xuXG4gIHIgPSAoeCAqIDMuMjQwNikgKyAoeSAqIC0xLjUzNzIpICsgKHogKiAtMC40OTg2KTtcbiAgZyA9ICh4ICogLTAuOTY4OSkgKyAoeSAqIDEuODc1OCkgKyAoeiAqIDAuMDQxNSk7XG4gIGIgPSAoeCAqIDAuMDU1NykgKyAoeSAqIC0wLjIwNDApICsgKHogKiAxLjA1NzApO1xuXG4gIC8vIGFzc3VtZSBzUkdCXG4gIHIgPSByID4gMC4wMDMxMzA4ID8gKCgxLjA1NSAqIE1hdGgucG93KHIsIDEuMCAvIDIuNCkpIC0gMC4wNTUpXG4gICAgOiByID0gKHIgKiAxMi45Mik7XG5cbiAgZyA9IGcgPiAwLjAwMzEzMDggPyAoKDEuMDU1ICogTWF0aC5wb3coZywgMS4wIC8gMi40KSkgLSAwLjA1NSlcbiAgICA6IGcgPSAoZyAqIDEyLjkyKTtcblxuICBiID0gYiA+IDAuMDAzMTMwOCA/ICgoMS4wNTUgKiBNYXRoLnBvdyhiLCAxLjAgLyAyLjQpKSAtIDAuMDU1KVxuICAgIDogYiA9IChiICogMTIuOTIpO1xuXG4gIHIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByKSwgMSk7XG4gIGcgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBnKSwgMSk7XG4gIGIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBiKSwgMSk7XG5cbiAgcmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn1cblxuZnVuY3Rpb24geHl6MmxhYih4eXopIHtcbiAgdmFyIHggPSB4eXpbMF0sXG4gICAgICB5ID0geHl6WzFdLFxuICAgICAgeiA9IHh5elsyXSxcbiAgICAgIGwsIGEsIGI7XG5cbiAgeCAvPSA5NS4wNDc7XG4gIHkgLz0gMTAwO1xuICB6IC89IDEwOC44ODM7XG5cbiAgeCA9IHggPiAwLjAwODg1NiA/IE1hdGgucG93KHgsIDEvMykgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG4gIHkgPSB5ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh5LCAxLzMpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuICB6ID0geiA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeiwgMS8zKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcblxuICBsID0gKDExNiAqIHkpIC0gMTY7XG4gIGEgPSA1MDAgKiAoeCAtIHkpO1xuICBiID0gMjAwICogKHkgLSB6KTtcblxuICByZXR1cm4gW2wsIGEsIGJdO1xufVxuXG5mdW5jdGlvbiB4eXoybGNoKGFyZ3MpIHtcbiAgcmV0dXJuIGxhYjJsY2goeHl6MmxhYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGxhYjJ4eXoobGFiKSB7XG4gIHZhciBsID0gbGFiWzBdLFxuICAgICAgYSA9IGxhYlsxXSxcbiAgICAgIGIgPSBsYWJbMl0sXG4gICAgICB4LCB5LCB6LCB5MjtcblxuICBpZiAobCA8PSA4KSB7XG4gICAgeSA9IChsICogMTAwKSAvIDkwMy4zO1xuICAgIHkyID0gKDcuNzg3ICogKHkgLyAxMDApKSArICgxNiAvIDExNik7XG4gIH0gZWxzZSB7XG4gICAgeSA9IDEwMCAqIE1hdGgucG93KChsICsgMTYpIC8gMTE2LCAzKTtcbiAgICB5MiA9IE1hdGgucG93KHkgLyAxMDAsIDEvMyk7XG4gIH1cblxuICB4ID0geCAvIDk1LjA0NyA8PSAwLjAwODg1NiA/IHggPSAoOTUuMDQ3ICogKChhIC8gNTAwKSArIHkyIC0gKDE2IC8gMTE2KSkpIC8gNy43ODcgOiA5NS4wNDcgKiBNYXRoLnBvdygoYSAvIDUwMCkgKyB5MiwgMyk7XG5cbiAgeiA9IHogLyAxMDguODgzIDw9IDAuMDA4ODU5ID8geiA9ICgxMDguODgzICogKHkyIC0gKGIgLyAyMDApIC0gKDE2IC8gMTE2KSkpIC8gNy43ODcgOiAxMDguODgzICogTWF0aC5wb3coeTIgLSAoYiAvIDIwMCksIDMpO1xuXG4gIHJldHVybiBbeCwgeSwgel07XG59XG5cbmZ1bmN0aW9uIGxhYjJsY2gobGFiKSB7XG4gIHZhciBsID0gbGFiWzBdLFxuICAgICAgYSA9IGxhYlsxXSxcbiAgICAgIGIgPSBsYWJbMl0sXG4gICAgICBociwgaCwgYztcblxuICBociA9IE1hdGguYXRhbjIoYiwgYSk7XG4gIGggPSBociAqIDM2MCAvIDIgLyBNYXRoLlBJO1xuICBpZiAoaCA8IDApIHtcbiAgICBoICs9IDM2MDtcbiAgfVxuICBjID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xuICByZXR1cm4gW2wsIGMsIGhdO1xufVxuXG5mdW5jdGlvbiBsYWIycmdiKGFyZ3MpIHtcbiAgcmV0dXJuIHh5ejJyZ2IobGFiMnh5eihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGxjaDJsYWIobGNoKSB7XG4gIHZhciBsID0gbGNoWzBdLFxuICAgICAgYyA9IGxjaFsxXSxcbiAgICAgIGggPSBsY2hbMl0sXG4gICAgICBhLCBiLCBocjtcblxuICBociA9IGggLyAzNjAgKiAyICogTWF0aC5QSTtcbiAgYSA9IGMgKiBNYXRoLmNvcyhocik7XG4gIGIgPSBjICogTWF0aC5zaW4oaHIpO1xuICByZXR1cm4gW2wsIGEsIGJdO1xufVxuXG5mdW5jdGlvbiBsY2gyeHl6KGFyZ3MpIHtcbiAgcmV0dXJuIGxhYjJ4eXoobGNoMmxhYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGxjaDJyZ2IoYXJncykge1xuICByZXR1cm4gbGFiMnJnYihsY2gybGFiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJyZ2Ioa2V5d29yZCkge1xuICByZXR1cm4gY3NzS2V5d29yZHNba2V5d29yZF07XG59XG5cbmZ1bmN0aW9uIGtleXdvcmQyaHNsKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJoc2woa2V5d29yZDJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMmhzdihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHN2KGtleXdvcmQycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJod2IoYXJncykge1xuICByZXR1cm4gcmdiMmh3YihrZXl3b3JkMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGtleXdvcmQyY215ayhhcmdzKSB7XG4gIHJldHVybiByZ2IyY215ayhrZXl3b3JkMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGtleXdvcmQybGFiKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJsYWIoa2V5d29yZDJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMnh5eihhcmdzKSB7XG4gIHJldHVybiByZ2IyeHl6KGtleXdvcmQycmdiKGFyZ3MpKTtcbn1cblxudmFyIGNzc0tleXdvcmRzID0ge1xuICBhbGljZWJsdWU6ICBbMjQwLDI0OCwyNTVdLFxuICBhbnRpcXVld2hpdGU6IFsyNTAsMjM1LDIxNV0sXG4gIGFxdWE6IFswLDI1NSwyNTVdLFxuICBhcXVhbWFyaW5lOiBbMTI3LDI1NSwyMTJdLFxuICBhenVyZTogIFsyNDAsMjU1LDI1NV0sXG4gIGJlaWdlOiAgWzI0NSwyNDUsMjIwXSxcbiAgYmlzcXVlOiBbMjU1LDIyOCwxOTZdLFxuICBibGFjazogIFswLDAsMF0sXG4gIGJsYW5jaGVkYWxtb25kOiBbMjU1LDIzNSwyMDVdLFxuICBibHVlOiBbMCwwLDI1NV0sXG4gIGJsdWV2aW9sZXQ6IFsxMzgsNDMsMjI2XSxcbiAgYnJvd246ICBbMTY1LDQyLDQyXSxcbiAgYnVybHl3b29kOiAgWzIyMiwxODQsMTM1XSxcbiAgY2FkZXRibHVlOiAgWzk1LDE1OCwxNjBdLFxuICBjaGFydHJldXNlOiBbMTI3LDI1NSwwXSxcbiAgY2hvY29sYXRlOiAgWzIxMCwxMDUsMzBdLFxuICBjb3JhbDogIFsyNTUsMTI3LDgwXSxcbiAgY29ybmZsb3dlcmJsdWU6IFsxMDAsMTQ5LDIzN10sXG4gIGNvcm5zaWxrOiBbMjU1LDI0OCwyMjBdLFxuICBjcmltc29uOiAgWzIyMCwyMCw2MF0sXG4gIGN5YW46IFswLDI1NSwyNTVdLFxuICBkYXJrYmx1ZTogWzAsMCwxMzldLFxuICBkYXJrY3lhbjogWzAsMTM5LDEzOV0sXG4gIGRhcmtnb2xkZW5yb2Q6ICBbMTg0LDEzNCwxMV0sXG4gIGRhcmtncmF5OiBbMTY5LDE2OSwxNjldLFxuICBkYXJrZ3JlZW46ICBbMCwxMDAsMF0sXG4gIGRhcmtncmV5OiBbMTY5LDE2OSwxNjldLFxuICBkYXJra2hha2k6ICBbMTg5LDE4MywxMDddLFxuICBkYXJrbWFnZW50YTogIFsxMzksMCwxMzldLFxuICBkYXJrb2xpdmVncmVlbjogWzg1LDEwNyw0N10sXG4gIGRhcmtvcmFuZ2U6IFsyNTUsMTQwLDBdLFxuICBkYXJrb3JjaGlkOiBbMTUzLDUwLDIwNF0sXG4gIGRhcmtyZWQ6ICBbMTM5LDAsMF0sXG4gIGRhcmtzYWxtb246IFsyMzMsMTUwLDEyMl0sXG4gIGRhcmtzZWFncmVlbjogWzE0MywxODgsMTQzXSxcbiAgZGFya3NsYXRlYmx1ZTogIFs3Miw2MSwxMzldLFxuICBkYXJrc2xhdGVncmF5OiAgWzQ3LDc5LDc5XSxcbiAgZGFya3NsYXRlZ3JleTogIFs0Nyw3OSw3OV0sXG4gIGRhcmt0dXJxdW9pc2U6ICBbMCwyMDYsMjA5XSxcbiAgZGFya3Zpb2xldDogWzE0OCwwLDIxMV0sXG4gIGRlZXBwaW5rOiBbMjU1LDIwLDE0N10sXG4gIGRlZXBza3libHVlOiAgWzAsMTkxLDI1NV0sXG4gIGRpbWdyYXk6ICBbMTA1LDEwNSwxMDVdLFxuICBkaW1ncmV5OiAgWzEwNSwxMDUsMTA1XSxcbiAgZG9kZ2VyYmx1ZTogWzMwLDE0NCwyNTVdLFxuICBmaXJlYnJpY2s6ICBbMTc4LDM0LDM0XSxcbiAgZmxvcmFsd2hpdGU6ICBbMjU1LDI1MCwyNDBdLFxuICBmb3Jlc3RncmVlbjogIFszNCwxMzksMzRdLFxuICBmdWNoc2lhOiAgWzI1NSwwLDI1NV0sXG4gIGdhaW5zYm9ybzogIFsyMjAsMjIwLDIyMF0sXG4gIGdob3N0d2hpdGU6IFsyNDgsMjQ4LDI1NV0sXG4gIGdvbGQ6IFsyNTUsMjE1LDBdLFxuICBnb2xkZW5yb2Q6ICBbMjE4LDE2NSwzMl0sXG4gIGdyYXk6IFsxMjgsMTI4LDEyOF0sXG4gIGdyZWVuOiAgWzAsMTI4LDBdLFxuICBncmVlbnllbGxvdzogIFsxNzMsMjU1LDQ3XSxcbiAgZ3JleTogWzEyOCwxMjgsMTI4XSxcbiAgaG9uZXlkZXc6IFsyNDAsMjU1LDI0MF0sXG4gIGhvdHBpbms6ICBbMjU1LDEwNSwxODBdLFxuICBpbmRpYW5yZWQ6ICBbMjA1LDkyLDkyXSxcbiAgaW5kaWdvOiBbNzUsMCwxMzBdLFxuICBpdm9yeTogIFsyNTUsMjU1LDI0MF0sXG4gIGtoYWtpOiAgWzI0MCwyMzAsMTQwXSxcbiAgbGF2ZW5kZXI6IFsyMzAsMjMwLDI1MF0sXG4gIGxhdmVuZGVyYmx1c2g6ICBbMjU1LDI0MCwyNDVdLFxuICBsYXduZ3JlZW46ICBbMTI0LDI1MiwwXSxcbiAgbGVtb25jaGlmZm9uOiBbMjU1LDI1MCwyMDVdLFxuICBsaWdodGJsdWU6ICBbMTczLDIxNiwyMzBdLFxuICBsaWdodGNvcmFsOiBbMjQwLDEyOCwxMjhdLFxuICBsaWdodGN5YW46ICBbMjI0LDI1NSwyNTVdLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogWzI1MCwyNTAsMjEwXSxcbiAgbGlnaHRncmF5OiAgWzIxMSwyMTEsMjExXSxcbiAgbGlnaHRncmVlbjogWzE0NCwyMzgsMTQ0XSxcbiAgbGlnaHRncmV5OiAgWzIxMSwyMTEsMjExXSxcbiAgbGlnaHRwaW5rOiAgWzI1NSwxODIsMTkzXSxcbiAgbGlnaHRzYWxtb246ICBbMjU1LDE2MCwxMjJdLFxuICBsaWdodHNlYWdyZWVuOiAgWzMyLDE3OCwxNzBdLFxuICBsaWdodHNreWJsdWU6IFsxMzUsMjA2LDI1MF0sXG4gIGxpZ2h0c2xhdGVncmF5OiBbMTE5LDEzNiwxNTNdLFxuICBsaWdodHNsYXRlZ3JleTogWzExOSwxMzYsMTUzXSxcbiAgbGlnaHRzdGVlbGJsdWU6IFsxNzYsMTk2LDIyMl0sXG4gIGxpZ2h0eWVsbG93OiAgWzI1NSwyNTUsMjI0XSxcbiAgbGltZTogWzAsMjU1LDBdLFxuICBsaW1lZ3JlZW46ICBbNTAsMjA1LDUwXSxcbiAgbGluZW46ICBbMjUwLDI0MCwyMzBdLFxuICBtYWdlbnRhOiAgWzI1NSwwLDI1NV0sXG4gIG1hcm9vbjogWzEyOCwwLDBdLFxuICBtZWRpdW1hcXVhbWFyaW5lOiBbMTAyLDIwNSwxNzBdLFxuICBtZWRpdW1ibHVlOiBbMCwwLDIwNV0sXG4gIG1lZGl1bW9yY2hpZDogWzE4Niw4NSwyMTFdLFxuICBtZWRpdW1wdXJwbGU6IFsxNDcsMTEyLDIxOV0sXG4gIG1lZGl1bXNlYWdyZWVuOiBbNjAsMTc5LDExM10sXG4gIG1lZGl1bXNsYXRlYmx1ZTogIFsxMjMsMTA0LDIzOF0sXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiAgWzAsMjUwLDE1NF0sXG4gIG1lZGl1bXR1cnF1b2lzZTogIFs3MiwyMDksMjA0XSxcbiAgbWVkaXVtdmlvbGV0cmVkOiAgWzE5OSwyMSwxMzNdLFxuICBtaWRuaWdodGJsdWU6IFsyNSwyNSwxMTJdLFxuICBtaW50Y3JlYW06ICBbMjQ1LDI1NSwyNTBdLFxuICBtaXN0eXJvc2U6ICBbMjU1LDIyOCwyMjVdLFxuICBtb2NjYXNpbjogWzI1NSwyMjgsMTgxXSxcbiAgbmF2YWpvd2hpdGU6ICBbMjU1LDIyMiwxNzNdLFxuICBuYXZ5OiBbMCwwLDEyOF0sXG4gIG9sZGxhY2U6ICBbMjUzLDI0NSwyMzBdLFxuICBvbGl2ZTogIFsxMjgsMTI4LDBdLFxuICBvbGl2ZWRyYWI6ICBbMTA3LDE0MiwzNV0sXG4gIG9yYW5nZTogWzI1NSwxNjUsMF0sXG4gIG9yYW5nZXJlZDogIFsyNTUsNjksMF0sXG4gIG9yY2hpZDogWzIxOCwxMTIsMjE0XSxcbiAgcGFsZWdvbGRlbnJvZDogIFsyMzgsMjMyLDE3MF0sXG4gIHBhbGVncmVlbjogIFsxNTIsMjUxLDE1Ml0sXG4gIHBhbGV0dXJxdW9pc2U6ICBbMTc1LDIzOCwyMzhdLFxuICBwYWxldmlvbGV0cmVkOiAgWzIxOSwxMTIsMTQ3XSxcbiAgcGFwYXlhd2hpcDogWzI1NSwyMzksMjEzXSxcbiAgcGVhY2hwdWZmOiAgWzI1NSwyMTgsMTg1XSxcbiAgcGVydTogWzIwNSwxMzMsNjNdLFxuICBwaW5rOiBbMjU1LDE5MiwyMDNdLFxuICBwbHVtOiBbMjIxLDE2MCwyMjFdLFxuICBwb3dkZXJibHVlOiBbMTc2LDIyNCwyMzBdLFxuICBwdXJwbGU6IFsxMjgsMCwxMjhdLFxuICByZWJlY2NhcHVycGxlOiBbMTAyLCA1MSwgMTUzXSxcbiAgcmVkOiAgWzI1NSwwLDBdLFxuICByb3N5YnJvd246ICBbMTg4LDE0MywxNDNdLFxuICByb3lhbGJsdWU6ICBbNjUsMTA1LDIyNV0sXG4gIHNhZGRsZWJyb3duOiAgWzEzOSw2OSwxOV0sXG4gIHNhbG1vbjogWzI1MCwxMjgsMTE0XSxcbiAgc2FuZHlicm93bjogWzI0NCwxNjQsOTZdLFxuICBzZWFncmVlbjogWzQ2LDEzOSw4N10sXG4gIHNlYXNoZWxsOiBbMjU1LDI0NSwyMzhdLFxuICBzaWVubmE6IFsxNjAsODIsNDVdLFxuICBzaWx2ZXI6IFsxOTIsMTkyLDE5Ml0sXG4gIHNreWJsdWU6ICBbMTM1LDIwNiwyMzVdLFxuICBzbGF0ZWJsdWU6ICBbMTA2LDkwLDIwNV0sXG4gIHNsYXRlZ3JheTogIFsxMTIsMTI4LDE0NF0sXG4gIHNsYXRlZ3JleTogIFsxMTIsMTI4LDE0NF0sXG4gIHNub3c6IFsyNTUsMjUwLDI1MF0sXG4gIHNwcmluZ2dyZWVuOiAgWzAsMjU1LDEyN10sXG4gIHN0ZWVsYmx1ZTogIFs3MCwxMzAsMTgwXSxcbiAgdGFuOiAgWzIxMCwxODAsMTQwXSxcbiAgdGVhbDogWzAsMTI4LDEyOF0sXG4gIHRoaXN0bGU6ICBbMjE2LDE5MSwyMTZdLFxuICB0b21hdG86IFsyNTUsOTksNzFdLFxuICB0dXJxdW9pc2U6ICBbNjQsMjI0LDIwOF0sXG4gIHZpb2xldDogWzIzOCwxMzAsMjM4XSxcbiAgd2hlYXQ6ICBbMjQ1LDIyMiwxNzldLFxuICB3aGl0ZTogIFsyNTUsMjU1LDI1NV0sXG4gIHdoaXRlc21va2U6IFsyNDUsMjQ1LDI0NV0sXG4gIHllbGxvdzogWzI1NSwyNTUsMF0sXG4gIHllbGxvd2dyZWVuOiAgWzE1NCwyMDUsNTBdXG59O1xuXG52YXIgcmV2ZXJzZUtleXdvcmRzID0ge307XG5mb3IgKHZhciBrZXkgaW4gY3NzS2V5d29yZHMpIHtcbiAgcmV2ZXJzZUtleXdvcmRzW0pTT04uc3RyaW5naWZ5KGNzc0tleXdvcmRzW2tleV0pXSA9IGtleTtcbn1cbiIsInZhciBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCIuL2NvbnZlcnNpb25zXCIpO1xuXG52YXIgY29udmVydCA9IGZ1bmN0aW9uKCkge1xuICAgcmV0dXJuIG5ldyBDb252ZXJ0ZXIoKTtcbn1cblxuZm9yICh2YXIgZnVuYyBpbiBjb252ZXJzaW9ucykge1xuICAvLyBleHBvcnQgUmF3IHZlcnNpb25zXG4gIGNvbnZlcnRbZnVuYyArIFwiUmF3XCJdID0gIChmdW5jdGlvbihmdW5jKSB7XG4gICAgLy8gYWNjZXB0IGFycmF5IG9yIHBsYWluIGFyZ3NcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZyA9PSBcIm51bWJlclwiKVxuICAgICAgICBhcmcgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNvbnZlcnNpb25zW2Z1bmNdKGFyZyk7XG4gICAgfVxuICB9KShmdW5jKTtcblxuICB2YXIgcGFpciA9IC8oXFx3KykyKFxcdyspLy5leGVjKGZ1bmMpLFxuICAgICAgZnJvbSA9IHBhaXJbMV0sXG4gICAgICB0byA9IHBhaXJbMl07XG5cbiAgLy8gZXhwb3J0IHJnYjJoc2wgYW5kIFtcInJnYlwiXVtcImhzbFwiXVxuICBjb252ZXJ0W2Zyb21dID0gY29udmVydFtmcm9tXSB8fCB7fTtcblxuICBjb252ZXJ0W2Zyb21dW3RvXSA9IGNvbnZlcnRbZnVuY10gPSAoZnVuY3Rpb24oZnVuYykgeyBcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZyA9PSBcIm51bWJlclwiKVxuICAgICAgICBhcmcgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgXG4gICAgICB2YXIgdmFsID0gY29udmVyc2lvbnNbZnVuY10oYXJnKTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09IFwic3RyaW5nXCIgfHwgdmFsID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB2YWw7IC8vIGtleXdvcmRcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspXG4gICAgICAgIHZhbFtpXSA9IE1hdGgucm91bmQodmFsW2ldKTtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICB9KShmdW5jKTtcbn1cblxuXG4vKiBDb252ZXJ0ZXIgZG9lcyBsYXp5IGNvbnZlcnNpb24gYW5kIGNhY2hpbmcgKi9cbnZhciBDb252ZXJ0ZXIgPSBmdW5jdGlvbigpIHtcbiAgIHRoaXMuY29udnMgPSB7fTtcbn07XG5cbi8qIEVpdGhlciBnZXQgdGhlIHZhbHVlcyBmb3IgYSBzcGFjZSBvclxuICBzZXQgdGhlIHZhbHVlcyBmb3IgYSBzcGFjZSwgZGVwZW5kaW5nIG9uIGFyZ3MgKi9cbkNvbnZlcnRlci5wcm90b3R5cGUucm91dGVTcGFjZSA9IGZ1bmN0aW9uKHNwYWNlLCBhcmdzKSB7XG4gICB2YXIgdmFsdWVzID0gYXJnc1swXTtcbiAgIGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gY29sb3IucmdiKClcbiAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlcyhzcGFjZSk7XG4gICB9XG4gICAvLyBjb2xvci5yZ2IoMTAsIDEwLCAxMClcbiAgIGlmICh0eXBlb2YgdmFsdWVzID09IFwibnVtYmVyXCIpIHtcbiAgICAgIHZhbHVlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpOyAgICAgICAgXG4gICB9XG5cbiAgIHJldHVybiB0aGlzLnNldFZhbHVlcyhzcGFjZSwgdmFsdWVzKTtcbn07XG4gIFxuLyogU2V0IHRoZSB2YWx1ZXMgZm9yIGEgc3BhY2UsIGludmFsaWRhdGluZyBjYWNoZSAqL1xuQ29udmVydGVyLnByb3RvdHlwZS5zZXRWYWx1ZXMgPSBmdW5jdGlvbihzcGFjZSwgdmFsdWVzKSB7XG4gICB0aGlzLnNwYWNlID0gc3BhY2U7XG4gICB0aGlzLmNvbnZzID0ge307XG4gICB0aGlzLmNvbnZzW3NwYWNlXSA9IHZhbHVlcztcbiAgIHJldHVybiB0aGlzO1xufTtcblxuLyogR2V0IHRoZSB2YWx1ZXMgZm9yIGEgc3BhY2UuIElmIHRoZXJlJ3MgYWxyZWFkeVxuICBhIGNvbnZlcnNpb24gZm9yIHRoZSBzcGFjZSwgZmV0Y2ggaXQsIG90aGVyd2lzZVxuICBjb21wdXRlIGl0ICovXG5Db252ZXJ0ZXIucHJvdG90eXBlLmdldFZhbHVlcyA9IGZ1bmN0aW9uKHNwYWNlKSB7XG4gICB2YXIgdmFscyA9IHRoaXMuY29udnNbc3BhY2VdO1xuICAgaWYgKCF2YWxzKSB7XG4gICAgICB2YXIgZnNwYWNlID0gdGhpcy5zcGFjZSxcbiAgICAgICAgICBmcm9tID0gdGhpcy5jb252c1tmc3BhY2VdO1xuICAgICAgdmFscyA9IGNvbnZlcnRbZnNwYWNlXVtzcGFjZV0oZnJvbSk7XG5cbiAgICAgIHRoaXMuY29udnNbc3BhY2VdID0gdmFscztcbiAgIH1cbiAgcmV0dXJuIHZhbHM7XG59O1xuXG5bXCJyZ2JcIiwgXCJoc2xcIiwgXCJoc3ZcIiwgXCJjbXlrXCIsIFwia2V5d29yZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHNwYWNlKSB7XG4gICBDb252ZXJ0ZXIucHJvdG90eXBlW3NwYWNlXSA9IGZ1bmN0aW9uKHZhbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlU3BhY2Uoc3BhY2UsIGFyZ3VtZW50cyk7XG4gICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0OyIsInZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xudmFyIHVuaXRzID0gWyAnbW0nLCAnY20nLCAnbScsICdwYycsICdwdCcsICdpbicsICdmdCcsICdweCcgXTtcblxudmFyIGNvbnZlcnNpb25zID0ge1xuICAvLyBtZXRyaWNcbiAgbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGNtOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDBcbiAgfSxcbiAgbW06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMSAvIDEwMDBcbiAgfSxcbiAgLy8gaW1wZXJpYWxcbiAgcHQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNzJcbiAgfSxcbiAgcGM6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNlxuICB9LFxuICBpbjoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDFcbiAgfSxcbiAgZnQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxMlxuICB9XG59O1xuXG5jb25zdCBhbmNob3JzID0ge1xuICBtZXRyaWM6IHtcbiAgICB1bml0OiAnbScsXG4gICAgcmF0aW86IDEgLyAwLjAyNTRcbiAgfSxcbiAgaW1wZXJpYWw6IHtcbiAgICB1bml0OiAnaW4nLFxuICAgIHJhdGlvOiAwLjAyNTRcbiAgfVxufTtcblxuZnVuY3Rpb24gcm91bmQgKHZhbHVlLCBkZWNpbWFscykge1xuICByZXR1cm4gTnVtYmVyKE1hdGgucm91bmQodmFsdWUgKyAnZScgKyBkZWNpbWFscykgKyAnZS0nICsgZGVjaW1hbHMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UgKHZhbHVlLCBmcm9tVW5pdCwgdG9Vbml0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXInKTtcbiAgaWYgKCFmcm9tVW5pdCB8fCAhdG9Vbml0KSB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBmcm9tIGFuZCB0byB1bml0cycpO1xuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB2YXIgcGl4ZWxzUGVySW5jaCA9IGRlZmluZWQob3B0cy5waXhlbHNQZXJJbmNoLCA5Nik7XG4gIHZhciBwcmVjaXNpb24gPSBvcHRzLnByZWNpc2lvbjtcbiAgdmFyIHJvdW5kUGl4ZWwgPSBvcHRzLnJvdW5kUGl4ZWwgIT09IGZhbHNlO1xuXG4gIGZyb21Vbml0ID0gZnJvbVVuaXQudG9Mb3dlckNhc2UoKTtcbiAgdG9Vbml0ID0gdG9Vbml0LnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHVuaXRzLmluZGV4T2YoZnJvbVVuaXQpID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20gdW5pdCBcIicgKyBmcm9tVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcbiAgaWYgKHVuaXRzLmluZGV4T2YodG9Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgdG9Vbml0ICsgJ1wiLCBtdXN0IGJlIG9uZSBvZjogJyArIHVuaXRzLmpvaW4oJywgJykpO1xuXG4gIGlmIChmcm9tVW5pdCA9PT0gdG9Vbml0KSB7XG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb252ZXJ0IGZyb20gQSB0byBCIHNpbmNlIHRoZXkgYXJlIHRoZSBzYW1lIGFscmVhZHlcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB2YXIgdG9GYWN0b3IgPSAxO1xuICB2YXIgZnJvbUZhY3RvciA9IDE7XG4gIHZhciBpc1RvUGl4ZWwgPSBmYWxzZTtcblxuICBpZiAoZnJvbVVuaXQgPT09ICdweCcpIHtcbiAgICBmcm9tRmFjdG9yID0gMSAvIHBpeGVsc1BlckluY2g7XG4gICAgZnJvbVVuaXQgPSAnaW4nO1xuICB9XG4gIGlmICh0b1VuaXQgPT09ICdweCcpIHtcbiAgICBpc1RvUGl4ZWwgPSB0cnVlO1xuICAgIHRvRmFjdG9yID0gcGl4ZWxzUGVySW5jaDtcbiAgICB0b1VuaXQgPSAnaW4nO1xuICB9XG5cbiAgdmFyIGZyb21Vbml0RGF0YSA9IGNvbnZlcnNpb25zW2Zyb21Vbml0XTtcbiAgdmFyIHRvVW5pdERhdGEgPSBjb252ZXJzaW9uc1t0b1VuaXRdO1xuXG4gIC8vIHNvdXJjZSB0byBhbmNob3IgaW5zaWRlIHNvdXJjZSdzIHN5c3RlbVxuICB2YXIgYW5jaG9yID0gdmFsdWUgKiBmcm9tVW5pdERhdGEuZmFjdG9yICogZnJvbUZhY3RvcjtcblxuICAvLyBpZiBzeXN0ZW1zIGRpZmZlciwgY29udmVydCBvbmUgdG8gYW5vdGhlclxuICBpZiAoZnJvbVVuaXREYXRhLnN5c3RlbSAhPT0gdG9Vbml0RGF0YS5zeXN0ZW0pIHtcbiAgICAvLyByZWd1bGFyICdtJyB0byAnaW4nIGFuZCBzbyBmb3J0aFxuICAgIGFuY2hvciAqPSBhbmNob3JzW2Zyb21Vbml0RGF0YS5zeXN0ZW1dLnJhdGlvO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IGFuY2hvciAvIHRvVW5pdERhdGEuZmFjdG9yICogdG9GYWN0b3I7XG4gIGlmIChpc1RvUGl4ZWwgJiYgcm91bmRQaXhlbCkge1xuICAgIHJlc3VsdCA9IE1hdGgucm91bmQocmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJlY2lzaW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShwcmVjaXNpb24pKSB7XG4gICAgcmVzdWx0ID0gcm91bmQocmVzdWx0LCBwcmVjaXNpb24pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydERpc3RhbmNlO1xubW9kdWxlLmV4cG9ydHMudW5pdHMgPSB1bml0cztcbiIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtcGF0aC8gdjEuMC45IENvcHlyaWdodCAyMDE5IE1pa2UgQm9zdG9ja1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbnR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxudHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4oZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLmQzID0gZ2xvYmFsLmQzIHx8IHt9KSk7XG59KHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxudmFyIHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIFBhdGgoKSB7XG4gIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5feDEgPSB0aGlzLl95MSA9IG51bGw7IC8vIGVuZCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5fID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG5QYXRoLnByb3RvdHlwZSA9IHBhdGgucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogUGF0aCxcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl94MSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5feDEgPSB0aGlzLl94MCwgdGhpcy5feTEgPSB0aGlzLl95MDtcbiAgICAgIHRoaXMuXyArPSBcIlpcIjtcbiAgICB9XG4gIH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBxdWFkcmF0aWNDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJRXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkNcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKCt4MikgKyBcIixcIiArICgreTIpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYXJjVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcbiAgICB2YXIgeDAgPSB0aGlzLl94MSxcbiAgICAgICAgeTAgPSB0aGlzLl95MSxcbiAgICAgICAgeDIxID0geDIgLSB4MSxcbiAgICAgICAgeTIxID0geTIgLSB5MSxcbiAgICAgICAgeDAxID0geDAgLSB4MSxcbiAgICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgICAgbDAxXzIgPSB4MDEgKiB4MDEgKyB5MDEgKiB5MDE7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKTtcblxuICAgIC8vIE9yLCBhcmUgKHgwLHkwKSwgKHgxLHkxKSBhbmQgKHgyLHkyKSBjb2xsaW5lYXI/XG4gICAgLy8gRXF1aXZhbGVudGx5LCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDIseTIpP1xuICAgIC8vIE9yLCBpcyB0aGUgcmFkaXVzIHplcm8/IExpbmUgdG8gKHgxLHkxKS5cbiAgICBlbHNlIGlmICghKE1hdGguYWJzKHkwMSAqIHgyMSAtIHkyMSAqIHgwMSkgPiBlcHNpbG9uKSB8fCAhcikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBkcmF3IGFuIGFyYyFcbiAgICBlbHNlIHtcbiAgICAgIHZhciB4MjAgPSB4MiAtIHgwLFxuICAgICAgICAgIHkyMCA9IHkyIC0geTAsXG4gICAgICAgICAgbDIxXzIgPSB4MjEgKiB4MjEgKyB5MjEgKiB5MjEsXG4gICAgICAgICAgbDIwXzIgPSB4MjAgKiB4MjAgKyB5MjAgKiB5MjAsXG4gICAgICAgICAgbDIxID0gTWF0aC5zcXJ0KGwyMV8yKSxcbiAgICAgICAgICBsMDEgPSBNYXRoLnNxcnQobDAxXzIpLFxuICAgICAgICAgIGwgPSByICogTWF0aC50YW4oKHBpIC0gTWF0aC5hY29zKChsMjFfMiArIGwwMV8yIC0gbDIwXzIpIC8gKDIgKiBsMjEgKiBsMDEpKSkgLyAyKSxcbiAgICAgICAgICB0MDEgPSBsIC8gbDAxLFxuICAgICAgICAgIHQyMSA9IGwgLyBsMjE7XG5cbiAgICAgIC8vIElmIHRoZSBzdGFydCB0YW5nZW50IGlzIG5vdCBjb2luY2lkZW50IHdpdGggKHgwLHkwKSwgbGluZSB0by5cbiAgICAgIGlmIChNYXRoLmFicyh0MDEgLSAxKSA+IGVwc2lsb24pIHtcbiAgICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHgxICsgdDAxICogeDAxKSArIFwiLFwiICsgKHkxICsgdDAxICogeTAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMCxcIiArICgrKHkwMSAqIHgyMCA+IHgwMSAqIHkyMCkpICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MSArIHQyMSAqIHgyMSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxICsgdDIxICogeTIxKTtcbiAgICB9XG4gIH0sXG4gIGFyYzogZnVuY3Rpb24oeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyLCBjY3cgPSAhIWNjdztcbiAgICB2YXIgZHggPSByICogTWF0aC5jb3MoYTApLFxuICAgICAgICBkeSA9IHIgKiBNYXRoLnNpbihhMCksXG4gICAgICAgIHgwID0geCArIGR4LFxuICAgICAgICB5MCA9IHkgKyBkeSxcbiAgICAgICAgY3cgPSAxIF4gY2N3LFxuICAgICAgICBkYSA9IGNjdyA/IGEwIC0gYTEgOiBhMSAtIGEwO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgwLHkwKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArIHgwICsgXCIsXCIgKyB5MDtcbiAgICB9XG5cbiAgICAvLyBPciwgaXMgKHgwLHkwKSBub3QgY29pbmNpZGVudCB3aXRoIHRoZSBwcmV2aW91cyBwb2ludD8gTGluZSB0byAoeDAseTApLlxuICAgIGVsc2UgaWYgKE1hdGguYWJzKHRoaXMuX3gxIC0geDApID4gZXBzaWxvbiB8fCBNYXRoLmFicyh0aGlzLl95MSAtIHkwKSA+IGVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArIHgwICsgXCIsXCIgKyB5MDtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBlbXB0eT8gV2XigJlyZSBkb25lLlxuICAgIGlmICghcikgcmV0dXJuO1xuXG4gICAgLy8gRG9lcyB0aGUgYW5nbGUgZ28gdGhlIHdyb25nIHdheT8gRmxpcCB0aGUgZGlyZWN0aW9uLlxuICAgIGlmIChkYSA8IDApIGRhID0gZGEgJSB0YXUgKyB0YXU7XG5cbiAgICAvLyBJcyB0aGlzIGEgY29tcGxldGUgY2lyY2xlPyBEcmF3IHR3byBhcmNzIHRvIGNvbXBsZXRlIHRoZSBjaXJjbGUuXG4gICAgaWYgKGRhID4gdGF1RXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAoeCAtIGR4KSArIFwiLFwiICsgKHkgLSBkeSkgKyBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geDApICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MCk7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgbm9uLWVtcHR5PyBEcmF3IGFuIGFyYyFcbiAgICBlbHNlIGlmIChkYSA+IGVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLFwiICsgKCsoZGEgPj0gcGkpKSArIFwiLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHggKyByICogTWF0aC5jb3MoYTEpKSArIFwiLFwiICsgKHRoaXMuX3kxID0geSArIHIgKiBNYXRoLnNpbihhMSkpO1xuICAgIH1cbiAgfSxcbiAgcmVjdDogZnVuY3Rpb24oeCwgeSwgdywgaCkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KSArIFwiaFwiICsgKCt3KSArIFwidlwiICsgKCtoKSArIFwiaFwiICsgKC13KSArIFwiWlwiO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuXztcbiAgfVxufTtcblxuZXhwb3J0cy5wYXRoID0gcGF0aDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZWQoKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gYXJndW1lbnRzW2ldO1xuXHRcdH1cblx0fVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gaHNsMnJnYlxuZnVuY3Rpb24gaHNsMnJnYiAoaHNsKSB7XG4gIHZhciBoID0gaHNsWzBdLFxuICAgIHMgPSBoc2xbMV0sXG4gICAgbCA9IGhzbFsyXSxcbiAgICB0MSwgdDIsIHQzLCByZ2IsIHZhbFxuXG4gIGlmIChzID09PSAwKSB7XG4gICAgdmFsID0gbFxuICAgIHJldHVybiBbdmFsLCB2YWwsIHZhbF1cbiAgfVxuXG4gIGlmIChsIDwgMC41KSB7XG4gICAgdDIgPSBsICogKDEgKyBzKVxuICB9IGVsc2Uge1xuICAgIHQyID0gbCArIHMgLSBsICogc1xuICB9XG4gIHQxID0gMiAqIGwgLSB0MlxuXG4gIHJnYiA9IFswLCAwLCAwXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgIHQzID0gaCArIDEgLyAzICogLShpIC0gMSlcbiAgICBpZiAodDMgPCAwKSB7XG4gICAgICB0MysrXG4gICAgfVxuICAgIGlmICh0MyA+IDEpIHtcbiAgICAgIHQzLS1cbiAgICB9XG5cbiAgICBpZiAoNiAqIHQzIDwgMSkge1xuICAgICAgdmFsID0gdDEgKyAodDIgLSB0MSkgKiA2ICogdDNcbiAgICB9IGVsc2UgaWYgKDIgKiB0MyA8IDEpIHtcbiAgICAgIHZhbCA9IHQyXG4gICAgfSBlbHNlIGlmICgzICogdDMgPCAyKSB7XG4gICAgICB2YWwgPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzKSAqIDZcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsID0gdDFcbiAgICB9XG5cbiAgICByZ2JbaV0gPSB2YWxcbiAgfVxuXG4gIHJldHVybiByZ2Jcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmdiMmhzbFxuZnVuY3Rpb24gcmdiMmhzbCAocmdiKSB7XG4gIHZhciByID0gcmdiWzBdLFxuICAgIGcgPSByZ2JbMV0sXG4gICAgYiA9IHJnYlsyXSxcbiAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICBkZWx0YSA9IG1heCAtIG1pbixcbiAgICBoLCBzLCBsXG5cbiAgaWYgKG1heCA9PT0gbWluKSB7XG4gICAgaCA9IDBcbiAgfSBlbHNlIGlmIChyID09PSBtYXgpIHtcbiAgICBoID0gKGcgLSBiKSAvIGRlbHRhXG4gIH0gZWxzZSBpZiAoZyA9PT0gbWF4KSB7XG4gICAgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGFcbiAgfSBlbHNlIGlmIChiID09PSBtYXgpIHtcbiAgICBoID0gNCArIChyIC0gZykgLyBkZWx0YVxuICB9XG5cbiAgaCA9IE1hdGgubWluKGggKiA2MCwgMzYwKVxuXG4gIGlmIChoIDwgMCkge1xuICAgIGggKz0gMzYwXG4gIH1cblxuICBsID0gKG1pbiArIG1heCkgLyAyXG5cbiAgaWYgKG1heCA9PT0gbWluKSB7XG4gICAgcyA9IDBcbiAgfSBlbHNlIGlmIChsIDw9IDAuNSkge1xuICAgIHMgPSBkZWx0YSAvIChtYXggKyBtaW4pXG4gIH0gZWxzZSB7XG4gICAgcyA9IGRlbHRhIC8gKDIgLSBtYXggLSBtaW4pXG4gIH1cblxuICByZXR1cm4gW2ggLyAzNjAsIHMsIGxdXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gbGluZWNsaXA7XG5cbmxpbmVjbGlwLnBvbHlsaW5lID0gbGluZWNsaXA7XG5saW5lY2xpcC5wb2x5Z29uID0gcG9seWdvbmNsaXA7XG5cblxuLy8gQ29oZW4tU3V0aGVybGFuZCBsaW5lIGNsaXBwaWduIGFsZ29yaXRobSwgYWRhcHRlZCB0byBlZmZpY2llbnRseVxuLy8gaGFuZGxlIHBvbHlsaW5lcyByYXRoZXIgdGhhbiBqdXN0IHNlZ21lbnRzXG5cbmZ1bmN0aW9uIGxpbmVjbGlwKHBvaW50cywgYmJveCwgcmVzdWx0KSB7XG5cbiAgICB2YXIgbGVuID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgY29kZUEgPSBiaXRDb2RlKHBvaW50c1swXSwgYmJveCksXG4gICAgICAgIHBhcnQgPSBbXSxcbiAgICAgICAgaSwgYSwgYiwgY29kZUIsIGxhc3RDb2RlO1xuXG4gICAgaWYgKCFyZXN1bHQpIHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGEgPSBwb2ludHNbaSAtIDFdO1xuICAgICAgICBiID0gcG9pbnRzW2ldO1xuICAgICAgICBjb2RlQiA9IGxhc3RDb2RlID0gYml0Q29kZShiLCBiYm94KTtcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuXG4gICAgICAgICAgICBpZiAoIShjb2RlQSB8IGNvZGVCKSkgeyAvLyBhY2NlcHRcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29kZUIgIT09IGxhc3RDb2RlKSB7IC8vIHNlZ21lbnQgd2VudCBvdXRzaWRlXG4gICAgICAgICAgICAgICAgICAgIHBhcnQucHVzaChiKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGxlbiAtIDEpIHsgLy8gc3RhcnQgYSBuZXcgbGluZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IGxlbiAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydC5wdXNoKGIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlQSAmIGNvZGVCKSB7IC8vIHRyaXZpYWwgcmVqZWN0XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZUEpIHsgLy8gYSBvdXRzaWRlLCBpbnRlcnNlY3Qgd2l0aCBjbGlwIGVkZ2VcbiAgICAgICAgICAgICAgICBhID0gaW50ZXJzZWN0KGEsIGIsIGNvZGVBLCBiYm94KTtcbiAgICAgICAgICAgICAgICBjb2RlQSA9IGJpdENvZGUoYSwgYmJveCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIGIgb3V0c2lkZVxuICAgICAgICAgICAgICAgIGIgPSBpbnRlcnNlY3QoYSwgYiwgY29kZUIsIGJib3gpO1xuICAgICAgICAgICAgICAgIGNvZGVCID0gYml0Q29kZShiLCBiYm94KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvZGVBID0gbGFzdENvZGU7XG4gICAgfVxuXG4gICAgaWYgKHBhcnQubGVuZ3RoKSByZXN1bHQucHVzaChwYXJ0KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFN1dGhlcmxhbmQtSG9kZ2VtYW4gcG9seWdvbiBjbGlwcGluZyBhbGdvcml0aG1cblxuZnVuY3Rpb24gcG9seWdvbmNsaXAocG9pbnRzLCBiYm94KSB7XG5cbiAgICB2YXIgcmVzdWx0LCBlZGdlLCBwcmV2LCBwcmV2SW5zaWRlLCBpLCBwLCBpbnNpZGU7XG5cbiAgICAvLyBjbGlwIGFnYWluc3QgZWFjaCBzaWRlIG9mIHRoZSBjbGlwIHJlY3RhbmdsZVxuICAgIGZvciAoZWRnZSA9IDE7IGVkZ2UgPD0gODsgZWRnZSAqPSAyKSB7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBwcmV2ID0gcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgcHJldkluc2lkZSA9ICEoYml0Q29kZShwcmV2LCBiYm94KSAmIGVkZ2UpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHAgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBpbnNpZGUgPSAhKGJpdENvZGUocCwgYmJveCkgJiBlZGdlKTtcblxuICAgICAgICAgICAgLy8gaWYgc2VnbWVudCBnb2VzIHRocm91Z2ggdGhlIGNsaXAgd2luZG93LCBhZGQgYW4gaW50ZXJzZWN0aW9uXG4gICAgICAgICAgICBpZiAoaW5zaWRlICE9PSBwcmV2SW5zaWRlKSByZXN1bHQucHVzaChpbnRlcnNlY3QocHJldiwgcCwgZWRnZSwgYmJveCkpO1xuXG4gICAgICAgICAgICBpZiAoaW5zaWRlKSByZXN1bHQucHVzaChwKTsgLy8gYWRkIGEgcG9pbnQgaWYgaXQncyBpbnNpZGVcblxuICAgICAgICAgICAgcHJldiA9IHA7XG4gICAgICAgICAgICBwcmV2SW5zaWRlID0gaW5zaWRlO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRzID0gcmVzdWx0O1xuXG4gICAgICAgIGlmICghcG9pbnRzLmxlbmd0aCkgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gaW50ZXJzZWN0IGEgc2VnbWVudCBhZ2FpbnN0IG9uZSBvZiB0aGUgNCBsaW5lcyB0aGF0IG1ha2UgdXAgdGhlIGJib3hcblxuZnVuY3Rpb24gaW50ZXJzZWN0KGEsIGIsIGVkZ2UsIGJib3gpIHtcbiAgICByZXR1cm4gZWRnZSAmIDggPyBbYVswXSArIChiWzBdIC0gYVswXSkgKiAoYmJveFszXSAtIGFbMV0pIC8gKGJbMV0gLSBhWzFdKSwgYmJveFszXV0gOiAvLyB0b3BcbiAgICAgICAgICAgZWRnZSAmIDQgPyBbYVswXSArIChiWzBdIC0gYVswXSkgKiAoYmJveFsxXSAtIGFbMV0pIC8gKGJbMV0gLSBhWzFdKSwgYmJveFsxXV0gOiAvLyBib3R0b21cbiAgICAgICAgICAgZWRnZSAmIDIgPyBbYmJveFsyXSwgYVsxXSArIChiWzFdIC0gYVsxXSkgKiAoYmJveFsyXSAtIGFbMF0pIC8gKGJbMF0gLSBhWzBdKV0gOiAvLyByaWdodFxuICAgICAgICAgICBlZGdlICYgMSA/IFtiYm94WzBdLCBhWzFdICsgKGJbMV0gLSBhWzFdKSAqIChiYm94WzBdIC0gYVswXSkgLyAoYlswXSAtIGFbMF0pXSA6IC8vIGxlZnRcbiAgICAgICAgICAgbnVsbDtcbn1cblxuLy8gYml0IGNvZGUgcmVmbGVjdHMgdGhlIHBvaW50IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBiYm94OlxuXG4vLyAgICAgICAgIGxlZnQgIG1pZCAgcmlnaHRcbi8vICAgIHRvcCAgMTAwMSAgMTAwMCAgMTAxMFxuLy8gICAgbWlkICAwMDAxICAwMDAwICAwMDEwXG4vLyBib3R0b20gIDAxMDEgIDAxMDAgIDAxMTBcblxuZnVuY3Rpb24gYml0Q29kZShwLCBiYm94KSB7XG4gICAgdmFyIGNvZGUgPSAwO1xuXG4gICAgaWYgKHBbMF0gPCBiYm94WzBdKSBjb2RlIHw9IDE7IC8vIGxlZnRcbiAgICBlbHNlIGlmIChwWzBdID4gYmJveFsyXSkgY29kZSB8PSAyOyAvLyByaWdodFxuXG4gICAgaWYgKHBbMV0gPCBiYm94WzFdKSBjb2RlIHw9IDQ7IC8vIGJvdHRvbVxuICAgIGVsc2UgaWYgKHBbMV0gPiBiYm94WzNdKSBjb2RlIHw9IDg7IC8vIHRvcFxuXG4gICAgcmV0dXJuIGNvZGU7XG59XG4iLCIndXNlIHN0cmljdCdcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gbm9ybWFsaXplXHJcblxyXG52YXIgYXJjVG9DdXJ2ZSA9IHJlcXVpcmUoJ3N2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyJylcclxuXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoKXtcclxuICAvLyBpbml0IHN0YXRlXHJcbiAgdmFyIHByZXZcclxuICB2YXIgcmVzdWx0ID0gW11cclxuICB2YXIgYmV6aWVyWCA9IDBcclxuICB2YXIgYmV6aWVyWSA9IDBcclxuICB2YXIgc3RhcnRYID0gMFxyXG4gIHZhciBzdGFydFkgPSAwXHJcbiAgdmFyIHF1YWRYID0gbnVsbFxyXG4gIHZhciBxdWFkWSA9IG51bGxcclxuICB2YXIgeCA9IDBcclxuICB2YXIgeSA9IDBcclxuXHJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhdGgubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgIHZhciBzZWcgPSBwYXRoW2ldXHJcbiAgICB2YXIgY29tbWFuZCA9IHNlZ1swXVxyXG5cclxuICAgIHN3aXRjaCAoY29tbWFuZCkge1xyXG4gICAgICBjYXNlICdNJzpcclxuICAgICAgICBzdGFydFggPSBzZWdbMV1cclxuICAgICAgICBzdGFydFkgPSBzZWdbMl1cclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdBJzpcclxuICAgICAgICB2YXIgY3VydmVzID0gYXJjVG9DdXJ2ZSh7XHJcbiAgICAgICAgICBweDogeCxcclxuICAgICAgICAgIHB5OiB5LFxyXG4gICAgICAgICAgY3g6IHNlZ1s2XSxcclxuICAgICAgICAgIGN5OiAgc2VnWzddLFxyXG4gICAgICAgICAgcng6IHNlZ1sxXSxcclxuICAgICAgICAgIHJ5OiBzZWdbMl0sXHJcbiAgICAgICAgICB4QXhpc1JvdGF0aW9uOiBzZWdbM10sXHJcbiAgICAgICAgICBsYXJnZUFyY0ZsYWc6IHNlZ1s0XSxcclxuICAgICAgICAgIHN3ZWVwRmxhZzogc2VnWzVdXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgLy8gbnVsbC1jdXJ2ZXNcclxuICAgICAgICBpZiAoIWN1cnZlcy5sZW5ndGgpIGNvbnRpbnVlXHJcblxyXG4gICAgICAgIGZvciAodmFyIGogPSAwLCBjOyBqIDwgY3VydmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjID0gY3VydmVzW2pdXHJcbiAgICAgICAgICBzZWcgPSBbJ0MnLCBjLngxLCBjLnkxLCBjLngyLCBjLnkyLCBjLngsIGMueV1cclxuICAgICAgICAgIGlmIChqIDwgY3VydmVzLmxlbmd0aCAtIDEpIHJlc3VsdC5wdXNoKHNlZylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgIC8vIGRlZmF1bHQgY29udHJvbCBwb2ludFxyXG4gICAgICAgIHZhciBjeCA9IHhcclxuICAgICAgICB2YXIgY3kgPSB5XHJcbiAgICAgICAgaWYgKHByZXYgPT0gJ0MnIHx8IHByZXYgPT0gJ1MnKSB7XHJcbiAgICAgICAgICBjeCArPSBjeCAtIGJlemllclggLy8gcmVmbGVjdCB0aGUgcHJldmlvdXMgY29tbWFuZCdzIGNvbnRyb2xcclxuICAgICAgICAgIGN5ICs9IGN5IC0gYmV6aWVyWSAvLyBwb2ludCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb2ludFxyXG4gICAgICAgIH1cclxuICAgICAgICBzZWcgPSBbJ0MnLCBjeCwgY3ksIHNlZ1sxXSwgc2VnWzJdLCBzZWdbM10sIHNlZ1s0XV1cclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdUJzpcclxuICAgICAgICBpZiAocHJldiA9PSAnUScgfHwgcHJldiA9PSAnVCcpIHtcclxuICAgICAgICAgIHF1YWRYID0geCAqIDIgLSBxdWFkWCAvLyBhcyB3aXRoICdTJyByZWZsZWN0IHByZXZpb3VzIGNvbnRyb2wgcG9pbnRcclxuICAgICAgICAgIHF1YWRZID0geSAqIDIgLSBxdWFkWVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBxdWFkWCA9IHhcclxuICAgICAgICAgIHF1YWRZID0geVxyXG4gICAgICAgIH1cclxuICAgICAgICBzZWcgPSBxdWFkcmF0aWMoeCwgeSwgcXVhZFgsIHF1YWRZLCBzZWdbMV0sIHNlZ1syXSlcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdRJzpcclxuICAgICAgICBxdWFkWCA9IHNlZ1sxXVxyXG4gICAgICAgIHF1YWRZID0gc2VnWzJdXHJcbiAgICAgICAgc2VnID0gcXVhZHJhdGljKHgsIHksIHNlZ1sxXSwgc2VnWzJdLCBzZWdbM10sIHNlZ1s0XSlcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdMJzpcclxuICAgICAgICBzZWcgPSBsaW5lKHgsIHksIHNlZ1sxXSwgc2VnWzJdKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0gnOlxyXG4gICAgICAgIHNlZyA9IGxpbmUoeCwgeSwgc2VnWzFdLCB5KVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ1YnOlxyXG4gICAgICAgIHNlZyA9IGxpbmUoeCwgeSwgeCwgc2VnWzFdKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ1onOlxyXG4gICAgICAgIHNlZyA9IGxpbmUoeCwgeSwgc3RhcnRYLCBzdGFydFkpXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuXHJcbiAgICAvLyB1cGRhdGUgc3RhdGVcclxuICAgIHByZXYgPSBjb21tYW5kXHJcbiAgICB4ID0gc2VnW3NlZy5sZW5ndGggLSAyXVxyXG4gICAgeSA9IHNlZ1tzZWcubGVuZ3RoIC0gMV1cclxuICAgIGlmIChzZWcubGVuZ3RoID4gNCkge1xyXG4gICAgICBiZXppZXJYID0gc2VnW3NlZy5sZW5ndGggLSA0XVxyXG4gICAgICBiZXppZXJZID0gc2VnW3NlZy5sZW5ndGggLSAzXVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYmV6aWVyWCA9IHhcclxuICAgICAgYmV6aWVyWSA9IHlcclxuICAgIH1cclxuICAgIHJlc3VsdC5wdXNoKHNlZylcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHRcclxufVxyXG5cclxuZnVuY3Rpb24gbGluZSh4MSwgeTEsIHgyLCB5Mil7XHJcbiAgcmV0dXJuIFsnQycsIHgxLCB5MSwgeDIsIHkyLCB4MiwgeTJdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHF1YWRyYXRpYyh4MSwgeTEsIGN4LCBjeSwgeDIsIHkyKXtcclxuICByZXR1cm4gW1xyXG4gICAgJ0MnLFxyXG4gICAgeDEvMyArICgyLzMpICogY3gsXHJcbiAgICB5MS8zICsgKDIvMykgKiBjeSxcclxuICAgIHgyLzMgKyAoMi8zKSAqIGN4LFxyXG4gICAgeTIvMyArICgyLzMpICogY3ksXHJcbiAgICB4MixcclxuICAgIHkyXHJcbiAgXVxyXG59XHJcbiIsInZhciBjb252ZXJ0ID0gcmVxdWlyZSgnY29sb3ItY29udmVydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3RyKSB7XG4gICAgdmFyIG0sIGNvbnYsIHBhcnRzLCBhbHBoYTtcbiAgICBpZiAobSA9IC9eKCg/OnJnYnxoc1tsdl18Y215a3x4eXp8bGFiKWE/KVxccypcXCgoW15cXCldKilcXCkvLmV4ZWMoY3N0cikpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBtWzFdO1xuICAgICAgICB2YXIgYmFzZSA9IG5hbWUucmVwbGFjZSgvYSQvLCAnJyk7XG4gICAgICAgIHZhciBzaXplID0gYmFzZSA9PT0gJ2NteWsnID8gNCA6IDM7XG4gICAgICAgIGNvbnYgPSBjb252ZXJ0W2Jhc2VdO1xuICAgICAgICBcbiAgICAgICAgcGFydHMgPSBtWzJdLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxuICAgICAgICAgICAgLnNwbGl0KC9cXHMqLFxccyovKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgICAgIGlmICgvJSQvLnRlc3QoeCkgJiYgaSA9PT0gc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh4KSAvIDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoLyUkLy50ZXN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh4KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIDtcbiAgICAgICAgaWYgKG5hbWUgPT09IGJhc2UpIHBhcnRzLnB1c2goMSk7XG4gICAgICAgIGFscGhhID0gcGFydHNbc2l6ZV0gPT09IHVuZGVmaW5lZCA/IDEgOiBwYXJ0c1tzaXplXTtcbiAgICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgwLCBzaXplKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnZbYmFzZV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXJ0cyB9O1xuICAgIH1cbiAgICBlbHNlIGlmICgvXiNbQS1GYS1mMC05XSskLy50ZXN0KGNzdHIpKSB7XG4gICAgICAgIHZhciBiYXNlID0gY3N0ci5yZXBsYWNlKC9eIy8sJycpO1xuICAgICAgICB2YXIgc2l6ZSA9IGJhc2UubGVuZ3RoO1xuICAgICAgICBjb252ID0gY29udmVydC5yZ2I7XG4gICAgICAgIHBhcnRzID0gYmFzZS5zcGxpdChzaXplID09PSAzID8gLyguKS8gOiAvKC4uKS8pO1xuICAgICAgICBwYXJ0cyA9IHBhcnRzLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIGlmIChzaXplID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh4ICsgeCwgMTYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHgsIDE2KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIDtcbiAgICAgICAgYWxwaGEgPSAxO1xuICAgICAgICBjb252LnJnYiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhcnRzIH07XG4gICAgICAgIGlmICghcGFydHNbMF0pIHBhcnRzWzBdID0gMDtcbiAgICAgICAgaWYgKCFwYXJ0c1sxXSkgcGFydHNbMV0gPSAwO1xuICAgICAgICBpZiAoIXBhcnRzWzJdKSBwYXJ0c1syXSA9IDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb252ID0gY29udmVydC5rZXl3b3JkO1xuICAgICAgICBjb252LmtleXdvcmQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjc3RyIH07XG4gICAgICAgIHBhcnRzID0gY3N0cjtcbiAgICAgICAgYWxwaGEgPSAxO1xuICAgIH1cbiAgICBcbiAgICB2YXIgcmVzID0ge1xuICAgICAgICByZ2I6IHVuZGVmaW5lZCxcbiAgICAgICAgaHNsOiB1bmRlZmluZWQsXG4gICAgICAgIGhzdjogdW5kZWZpbmVkLFxuICAgICAgICBjbXlrOiB1bmRlZmluZWQsXG4gICAgICAgIGtleXdvcmQ6IHVuZGVmaW5lZCxcbiAgICAgICAgaGV4OiB1bmRlZmluZWRcbiAgICB9O1xuICAgIHRyeSB7IHJlcy5yZ2IgPSBjb252LnJnYihwYXJ0cykgfSBjYXRjaCAoZSkge31cbiAgICB0cnkgeyByZXMuaHNsID0gY29udi5oc2wocGFydHMpIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHsgcmVzLmhzdiA9IGNvbnYuaHN2KHBhcnRzKSB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7IHJlcy5jbXlrID0gY29udi5jbXlrKHBhcnRzKSB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7IHJlcy5rZXl3b3JkID0gY29udi5rZXl3b3JkKHBhcnRzKSB9IGNhdGNoIChlKSB7fVxuICAgIFxuICAgIGlmIChyZXMucmdiKSByZXMuaGV4ID0gJyMnICsgcmVzLnJnYi5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgdmFyIHMgPSB4LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaWYgKHMubGVuZ3RoID09PSAxKSByZXR1cm4gJzAnICsgcztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfSkuam9pbignJyk7XG4gICAgXG4gICAgaWYgKHJlcy5yZ2IpIHJlcy5yZ2JhID0gcmVzLnJnYi5jb25jYXQoYWxwaGEpO1xuICAgIGlmIChyZXMuaHNsKSByZXMuaHNsYSA9IHJlcy5oc2wuY29uY2F0KGFscGhhKTtcbiAgICBpZiAocmVzLmhzdikgcmVzLmhzdmEgPSByZXMuaHN2LmNvbmNhdChhbHBoYSk7XG4gICAgaWYgKHJlcy5jbXlrKSByZXMuY215a2EgPSByZXMuY215ay5jb25jYXQoYWxwaGEpO1xuICAgIFxuICAgIHJldHVybiByZXM7XG59O1xuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlXG5cbi8qKlxuICogZXhwZWN0ZWQgYXJndW1lbnQgbGVuZ3Roc1xuICogQHR5cGUge09iamVjdH1cbiAqL1xuXG52YXIgbGVuZ3RoID0ge2E6IDcsIGM6IDYsIGg6IDEsIGw6IDIsIG06IDIsIHE6IDQsIHM6IDQsIHQ6IDIsIHY6IDEsIHo6IDB9XG5cbi8qKlxuICogc2VnbWVudCBwYXR0ZXJuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG5cbnZhciBzZWdtZW50ID0gLyhbYXN0dnpxbWhsY10pKFteYXN0dnpxbWhsY10qKS9pZ1xuXG4vKipcbiAqIHBhcnNlIGFuIHN2ZyBwYXRoIGRhdGEgc3RyaW5nLiBHZW5lcmF0ZXMgYW4gQXJyYXlcbiAqIG9mIGNvbW1hbmRzIHdoZXJlIGVhY2ggY29tbWFuZCBpcyBhbiBBcnJheSBvZiB0aGVcbiAqIGZvcm0gYFtjb21tYW5kLCBhcmcxLCBhcmcyLCAuLi5dYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShwYXRoKSB7XG5cdHZhciBkYXRhID0gW11cblx0cGF0aC5yZXBsYWNlKHNlZ21lbnQsIGZ1bmN0aW9uKF8sIGNvbW1hbmQsIGFyZ3Mpe1xuXHRcdHZhciB0eXBlID0gY29tbWFuZC50b0xvd2VyQ2FzZSgpXG5cdFx0YXJncyA9IHBhcnNlVmFsdWVzKGFyZ3MpXG5cblx0XHQvLyBvdmVybG9hZGVkIG1vdmVUb1xuXHRcdGlmICh0eXBlID09ICdtJyAmJiBhcmdzLmxlbmd0aCA+IDIpIHtcblx0XHRcdGRhdGEucHVzaChbY29tbWFuZF0uY29uY2F0KGFyZ3Muc3BsaWNlKDAsIDIpKSlcblx0XHRcdHR5cGUgPSAnbCdcblx0XHRcdGNvbW1hbmQgPSBjb21tYW5kID09ICdtJyA/ICdsJyA6ICdMJ1xuXHRcdH1cblxuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPT0gbGVuZ3RoW3R5cGVdKSB7XG5cdFx0XHRcdGFyZ3MudW5zaGlmdChjb21tYW5kKVxuXHRcdFx0XHRyZXR1cm4gZGF0YS5wdXNoKGFyZ3MpXG5cdFx0XHR9XG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPCBsZW5ndGhbdHlwZV0pIHRocm93IG5ldyBFcnJvcignbWFsZm9ybWVkIHBhdGggZGF0YScpXG5cdFx0XHRkYXRhLnB1c2goW2NvbW1hbmRdLmNvbmNhdChhcmdzLnNwbGljZSgwLCBsZW5ndGhbdHlwZV0pKSlcblx0XHR9XG5cdH0pXG5cdHJldHVybiBkYXRhXG59XG5cbnZhciBudW1iZXIgPSAvLT9bMC05XSpcXC4/WzAtOV0rKD86ZVstK10/XFxkKyk/L2lnXG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWVzKGFyZ3MpIHtcblx0dmFyIG51bWJlcnMgPSBhcmdzLm1hdGNoKG51bWJlcilcblx0cmV0dXJuIG51bWJlcnMgPyBudW1iZXJzLm1hcChOdW1iZXIpIDogW11cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcHJpbWl0aXZlUXVhZFxuXG5mdW5jdGlvbiBwcmltaXRpdmVRdWFkIChzY2FsZSkge1xuICBzY2FsZSA9IHR5cGVvZiBzY2FsZSAhPT0gJ3VuZGVmaW5lZCcgPyBzY2FsZSA6IDFcbiAgaWYgKCFBcnJheS5pc0FycmF5KHNjYWxlKSkge1xuICAgIHNjYWxlID0gW3NjYWxlLCBzY2FsZV1cbiAgfVxuXG4gIHZhciBwb3NpdGlvbnMgPSBbXG4gICAgWy1zY2FsZVswXSwgLXNjYWxlWzFdLCAwXSxcbiAgICBbc2NhbGVbMF0sIC1zY2FsZVsxXSwgMF0sXG4gICAgW3NjYWxlWzBdLCBzY2FsZVsxXSwgMF0sXG4gICAgWy1zY2FsZVswXSwgc2NhbGVbMV0sIDBdXG4gIF1cbiAgdmFyIGNlbGxzID0gW1xuICAgIFswLCAxLCAyXSxcbiAgICBbMiwgMywgMF1cbiAgXVxuICB2YXIgdXZzID0gW1swLCAwXSwgWzEsIDBdLCBbMSwgMV0sIFswLCAxXV1cbiAgdmFyIG4gPSBbMCwgMCwgLTFdXG4gIHZhciBub3JtYWxzID0gWyBuLnNsaWNlKCksIG4uc2xpY2UoKSwgbi5zbGljZSgpLCBuLnNsaWNlKCkgXVxuICByZXR1cm4ge1xuICAgIHBvc2l0aW9uczogcG9zaXRpb25zLFxuICAgIGNlbGxzOiBjZWxscyxcbiAgICB1dnM6IHV2cyxcbiAgICBub3JtYWxzOiBub3JtYWxzXG4gIH1cbn1cbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGdsb2JhbC5jcmVhdGVSRUdMID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNUeXBlZEFycmF5ID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIChcbiAgICB4IGluc3RhbmNlb2YgVWludDhBcnJheSB8fFxuICAgIHggaW5zdGFuY2VvZiBVaW50MTZBcnJheSB8fFxuICAgIHggaW5zdGFuY2VvZiBVaW50MzJBcnJheSB8fFxuICAgIHggaW5zdGFuY2VvZiBJbnQ4QXJyYXkgfHxcbiAgICB4IGluc3RhbmNlb2YgSW50MTZBcnJheSB8fFxuICAgIHggaW5zdGFuY2VvZiBJbnQzMkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fFxuICAgIHggaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkgfHxcbiAgICB4IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXlcbiAgKVxufVxuXG52YXIgZXh0ZW5kID0gZnVuY3Rpb24gKGJhc2UsIG9wdHMpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRzKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICBiYXNlW2tleXNbaV1dID0gb3B0c1trZXlzW2ldXVxuICB9XG4gIHJldHVybiBiYXNlXG59XG5cbi8vIEVycm9yIGNoZWNraW5nIGFuZCBwYXJhbWV0ZXIgdmFsaWRhdGlvbi5cbi8vXG4vLyBTdGF0ZW1lbnRzIGZvciB0aGUgZm9ybSBgY2hlY2suc29tZVByb2NlZHVyZSguLi4pYCBnZXQgcmVtb3ZlZCBieVxuLy8gYSBicm93c2VyaWZ5IHRyYW5zZm9ybSBmb3Igb3B0aW1pemVkL21pbmlmaWVkIGJ1bmRsZXMuXG4vL1xuLyogZ2xvYmFscyBhdG9iICovXG52YXIgZW5kbCA9ICdcXG4nXG5cbi8vIG9ubHkgdXNlZCBmb3IgZXh0cmFjdGluZyBzaGFkZXIgbmFtZXMuICBpZiBhdG9iIG5vdCBwcmVzZW50LCB0aGVuIGVycm9yc1xuLy8gd2lsbCBiZSBzbGlnaHRseSBjcmFwcGllclxuZnVuY3Rpb24gZGVjb2RlQjY0IChzdHIpIHtcbiAgaWYgKHR5cGVvZiBhdG9iICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBhdG9iKHN0cilcbiAgfVxuICByZXR1cm4gJ2Jhc2U2NDonICsgc3RyXG59XG5cbmZ1bmN0aW9uIHJhaXNlIChtZXNzYWdlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignKHJlZ2wpICcgKyBtZXNzYWdlKVxuICBjb25zb2xlLmVycm9yKGVycm9yKVxuICB0aHJvdyBlcnJvclxufVxuXG5mdW5jdGlvbiBjaGVjayAocHJlZCwgbWVzc2FnZSkge1xuICBpZiAoIXByZWQpIHtcbiAgICByYWlzZShtZXNzYWdlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGVuY29sb24gKG1lc3NhZ2UpIHtcbiAgaWYgKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gJzogJyArIG1lc3NhZ2VcbiAgfVxuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gY2hlY2tQYXJhbWV0ZXIgKHBhcmFtLCBwb3NzaWJpbGl0aWVzLCBtZXNzYWdlKSB7XG4gIGlmICghKHBhcmFtIGluIHBvc3NpYmlsaXRpZXMpKSB7XG4gICAgcmFpc2UoJ3Vua25vd24gcGFyYW1ldGVyICgnICsgcGFyYW0gKyAnKScgKyBlbmNvbG9uKG1lc3NhZ2UpICtcbiAgICAgICAgICAnLiBwb3NzaWJsZSB2YWx1ZXM6ICcgKyBPYmplY3Qua2V5cyhwb3NzaWJpbGl0aWVzKS5qb2luKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tJc1R5cGVkQXJyYXkgKGRhdGEsIG1lc3NhZ2UpIHtcbiAgaWYgKCFpc1R5cGVkQXJyYXkoZGF0YSkpIHtcbiAgICByYWlzZShcbiAgICAgICdpbnZhbGlkIHBhcmFtZXRlciB0eXBlJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgJy4gbXVzdCBiZSBhIHR5cGVkIGFycmF5JylcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFuZGFyZFR5cGVFaCAodmFsdWUsIHR5cGUpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcidcbiAgICBjYXNlICdvYmplY3QnOiByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgIGNhc2UgJ3N0cmluZyc6IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXG4gICAgY2FzZSAnYm9vbGVhbic6IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJ1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnXG4gICAgY2FzZSAnc3ltYm9sJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCdcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1R5cGVPZiAodmFsdWUsIHR5cGUsIG1lc3NhZ2UpIHtcbiAgaWYgKCFzdGFuZGFyZFR5cGVFaCh2YWx1ZSwgdHlwZSkpIHtcbiAgICByYWlzZShcbiAgICAgICdpbnZhbGlkIHBhcmFtZXRlciB0eXBlJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgJy4gZXhwZWN0ZWQgJyArIHR5cGUgKyAnLCBnb3QgJyArICh0eXBlb2YgdmFsdWUpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrTm9uTmVnYXRpdmVJbnQgKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghKCh2YWx1ZSA+PSAwKSAmJlxuICAgICAgICAoKHZhbHVlIHwgMCkgPT09IHZhbHVlKSkpIHtcbiAgICByYWlzZSgnaW52YWxpZCBwYXJhbWV0ZXIgdHlwZSwgKCcgKyB2YWx1ZSArICcpJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgICAgICcuIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyJylcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja09uZU9mICh2YWx1ZSwgbGlzdCwgbWVzc2FnZSkge1xuICBpZiAobGlzdC5pbmRleE9mKHZhbHVlKSA8IDApIHtcbiAgICByYWlzZSgnaW52YWxpZCB2YWx1ZScgKyBlbmNvbG9uKG1lc3NhZ2UpICsgJy4gbXVzdCBiZSBvbmUgb2Y6ICcgKyBsaXN0KVxuICB9XG59XG5cbnZhciBjb25zdHJ1Y3RvcktleXMgPSBbXG4gICdnbCcsXG4gICdjYW52YXMnLFxuICAnY29udGFpbmVyJyxcbiAgJ2F0dHJpYnV0ZXMnLFxuICAncGl4ZWxSYXRpbycsXG4gICdleHRlbnNpb25zJyxcbiAgJ29wdGlvbmFsRXh0ZW5zaW9ucycsXG4gICdwcm9maWxlJyxcbiAgJ29uRG9uZSdcbl1cblxuZnVuY3Rpb24gY2hlY2tDb25zdHJ1Y3RvciAob2JqKSB7XG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGNvbnN0cnVjdG9yS2V5cy5pbmRleE9mKGtleSkgPCAwKSB7XG4gICAgICByYWlzZSgnaW52YWxpZCByZWdsIGNvbnN0cnVjdG9yIGFyZ3VtZW50IFwiJyArIGtleSArICdcIi4gbXVzdCBiZSBvbmUgb2YgJyArIGNvbnN0cnVjdG9yS2V5cylcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGxlZnRQYWQgKHN0ciwgbikge1xuICBzdHIgPSBzdHIgKyAnJ1xuICB3aGlsZSAoc3RyLmxlbmd0aCA8IG4pIHtcbiAgICBzdHIgPSAnICcgKyBzdHJcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIFNoYWRlckZpbGUgKCkge1xuICB0aGlzLm5hbWUgPSAndW5rbm93bidcbiAgdGhpcy5saW5lcyA9IFtdXG4gIHRoaXMuaW5kZXggPSB7fVxuICB0aGlzLmhhc0Vycm9ycyA9IGZhbHNlXG59XG5cbmZ1bmN0aW9uIFNoYWRlckxpbmUgKG51bWJlciwgbGluZSkge1xuICB0aGlzLm51bWJlciA9IG51bWJlclxuICB0aGlzLmxpbmUgPSBsaW5lXG4gIHRoaXMuZXJyb3JzID0gW11cbn1cblxuZnVuY3Rpb24gU2hhZGVyRXJyb3IgKGZpbGVOdW1iZXIsIGxpbmVOdW1iZXIsIG1lc3NhZ2UpIHtcbiAgdGhpcy5maWxlID0gZmlsZU51bWJlclxuICB0aGlzLmxpbmUgPSBsaW5lTnVtYmVyXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2Vcbn1cblxuZnVuY3Rpb24gZ3Vlc3NDb21tYW5kICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKClcbiAgdmFyIHN0YWNrID0gKGVycm9yLnN0YWNrIHx8IGVycm9yKS50b1N0cmluZygpXG4gIHZhciBwYXQgPSAvY29tcGlsZVByb2NlZHVyZS4qXFxuXFxzKmF0LipcXCgoLiopXFwpLy5leGVjKHN0YWNrKVxuICBpZiAocGF0KSB7XG4gICAgcmV0dXJuIHBhdFsxXVxuICB9XG4gIHZhciBwYXQyID0gL2NvbXBpbGVQcm9jZWR1cmUuKlxcblxccyphdFxccysoLiopKFxcbnwkKS8uZXhlYyhzdGFjaylcbiAgaWYgKHBhdDIpIHtcbiAgICByZXR1cm4gcGF0MlsxXVxuICB9XG4gIHJldHVybiAndW5rbm93bidcbn1cblxuZnVuY3Rpb24gZ3Vlc3NDYWxsU2l0ZSAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcigpXG4gIHZhciBzdGFjayA9IChlcnJvci5zdGFjayB8fCBlcnJvcikudG9TdHJpbmcoKVxuICB2YXIgcGF0ID0gL2F0IFJFR0xDb21tYW5kLipcXG5cXHMrYXQuKlxcKCguKilcXCkvLmV4ZWMoc3RhY2spXG4gIGlmIChwYXQpIHtcbiAgICByZXR1cm4gcGF0WzFdXG4gIH1cbiAgdmFyIHBhdDIgPSAvYXQgUkVHTENvbW1hbmQuKlxcblxccythdFxccysoLiopXFxuLy5leGVjKHN0YWNrKVxuICBpZiAocGF0Mikge1xuICAgIHJldHVybiBwYXQyWzFdXG4gIH1cbiAgcmV0dXJuICd1bmtub3duJ1xufVxuXG5mdW5jdGlvbiBwYXJzZVNvdXJjZSAoc291cmNlLCBjb21tYW5kKSB7XG4gIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJylcbiAgdmFyIGxpbmVOdW1iZXIgPSAxXG4gIHZhciBmaWxlTnVtYmVyID0gMFxuICB2YXIgZmlsZXMgPSB7XG4gICAgdW5rbm93bjogbmV3IFNoYWRlckZpbGUoKSxcbiAgICAwOiBuZXcgU2hhZGVyRmlsZSgpXG4gIH1cbiAgZmlsZXMudW5rbm93bi5uYW1lID0gZmlsZXNbMF0ubmFtZSA9IGNvbW1hbmQgfHwgZ3Vlc3NDb21tYW5kKClcbiAgZmlsZXMudW5rbm93bi5saW5lcy5wdXNoKG5ldyBTaGFkZXJMaW5lKDAsICcnKSlcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBsaW5lID0gbGluZXNbaV1cbiAgICB2YXIgcGFydHMgPSAvXlxccyojXFxzKihcXHcrKVxccysoLispXFxzKiQvLmV4ZWMobGluZSlcbiAgICBpZiAocGFydHMpIHtcbiAgICAgIHN3aXRjaCAocGFydHNbMV0pIHtcbiAgICAgICAgY2FzZSAnbGluZSc6XG4gICAgICAgICAgdmFyIGxpbmVOdW1iZXJJbmZvID0gLyhcXGQrKShcXHMrXFxkKyk/Ly5leGVjKHBhcnRzWzJdKVxuICAgICAgICAgIGlmIChsaW5lTnVtYmVySW5mbykge1xuICAgICAgICAgICAgbGluZU51bWJlciA9IGxpbmVOdW1iZXJJbmZvWzFdIHwgMFxuICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXJJbmZvWzJdKSB7XG4gICAgICAgICAgICAgIGZpbGVOdW1iZXIgPSBsaW5lTnVtYmVySW5mb1syXSB8IDBcbiAgICAgICAgICAgICAgaWYgKCEoZmlsZU51bWJlciBpbiBmaWxlcykpIHtcbiAgICAgICAgICAgICAgICBmaWxlc1tmaWxlTnVtYmVyXSA9IG5ldyBTaGFkZXJGaWxlKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdkZWZpbmUnOlxuICAgICAgICAgIHZhciBuYW1lSW5mbyA9IC9TSEFERVJfTkFNRShfQjY0KT9cXHMrKC4qKSQvLmV4ZWMocGFydHNbMl0pXG4gICAgICAgICAgaWYgKG5hbWVJbmZvKSB7XG4gICAgICAgICAgICBmaWxlc1tmaWxlTnVtYmVyXS5uYW1lID0gKG5hbWVJbmZvWzFdXG4gICAgICAgICAgICAgID8gZGVjb2RlQjY0KG5hbWVJbmZvWzJdKVxuICAgICAgICAgICAgICA6IG5hbWVJbmZvWzJdKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBmaWxlc1tmaWxlTnVtYmVyXS5saW5lcy5wdXNoKG5ldyBTaGFkZXJMaW5lKGxpbmVOdW1iZXIrKywgbGluZSkpXG4gIH1cbiAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goZnVuY3Rpb24gKGZpbGVOdW1iZXIpIHtcbiAgICB2YXIgZmlsZSA9IGZpbGVzW2ZpbGVOdW1iZXJdXG4gICAgZmlsZS5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBmaWxlLmluZGV4W2xpbmUubnVtYmVyXSA9IGxpbmVcbiAgICB9KVxuICB9KVxuICByZXR1cm4gZmlsZXNcbn1cblxuZnVuY3Rpb24gcGFyc2VFcnJvckxvZyAoZXJyTG9nKSB7XG4gIHZhciByZXN1bHQgPSBbXVxuICBlcnJMb2cuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gKGVyck1zZykge1xuICAgIGlmIChlcnJNc2cubGVuZ3RoIDwgNSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBwYXJ0cyA9IC9eRVJST1I6XFxzKyhcXGQrKTooXFxkKyk6XFxzKiguKikkLy5leGVjKGVyck1zZylcbiAgICBpZiAocGFydHMpIHtcbiAgICAgIHJlc3VsdC5wdXNoKG5ldyBTaGFkZXJFcnJvcihcbiAgICAgICAgcGFydHNbMV0gfCAwLFxuICAgICAgICBwYXJ0c1syXSB8IDAsXG4gICAgICAgIHBhcnRzWzNdLnRyaW0oKSkpXG4gICAgfSBlbHNlIGlmIChlcnJNc2cubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0LnB1c2gobmV3IFNoYWRlckVycm9yKCd1bmtub3duJywgMCwgZXJyTXNnKSlcbiAgICB9XG4gIH0pXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gYW5ub3RhdGVGaWxlcyAoZmlsZXMsIGVycm9ycykge1xuICBlcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICB2YXIgZmlsZSA9IGZpbGVzW2Vycm9yLmZpbGVdXG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHZhciBsaW5lID0gZmlsZS5pbmRleFtlcnJvci5saW5lXVxuICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgbGluZS5lcnJvcnMucHVzaChlcnJvcilcbiAgICAgICAgZmlsZS5oYXNFcnJvcnMgPSB0cnVlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBmaWxlcy51bmtub3duLmhhc0Vycm9ycyA9IHRydWVcbiAgICBmaWxlcy51bmtub3duLmxpbmVzWzBdLmVycm9ycy5wdXNoKGVycm9yKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjaGVja1NoYWRlckVycm9yIChnbCwgc2hhZGVyLCBzb3VyY2UsIHR5cGUsIGNvbW1hbmQpIHtcbiAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpIHtcbiAgICB2YXIgZXJyTG9nID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpXG4gICAgdmFyIHR5cGVOYW1lID0gdHlwZSA9PT0gZ2wuRlJBR01FTlRfU0hBREVSID8gJ2ZyYWdtZW50JyA6ICd2ZXJ0ZXgnXG4gICAgY2hlY2tDb21tYW5kVHlwZShzb3VyY2UsICdzdHJpbmcnLCB0eXBlTmFtZSArICcgc2hhZGVyIHNvdXJjZSBtdXN0IGJlIGEgc3RyaW5nJywgY29tbWFuZClcbiAgICB2YXIgZmlsZXMgPSBwYXJzZVNvdXJjZShzb3VyY2UsIGNvbW1hbmQpXG4gICAgdmFyIGVycm9ycyA9IHBhcnNlRXJyb3JMb2coZXJyTG9nKVxuICAgIGFubm90YXRlRmlsZXMoZmlsZXMsIGVycm9ycylcblxuICAgIE9iamVjdC5rZXlzKGZpbGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlTnVtYmVyKSB7XG4gICAgICB2YXIgZmlsZSA9IGZpbGVzW2ZpbGVOdW1iZXJdXG4gICAgICBpZiAoIWZpbGUuaGFzRXJyb3JzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB2YXIgc3RyaW5ncyA9IFsnJ11cbiAgICAgIHZhciBzdHlsZXMgPSBbJyddXG5cbiAgICAgIGZ1bmN0aW9uIHB1c2ggKHN0ciwgc3R5bGUpIHtcbiAgICAgICAgc3RyaW5ncy5wdXNoKHN0cilcbiAgICAgICAgc3R5bGVzLnB1c2goc3R5bGUgfHwgJycpXG4gICAgICB9XG5cbiAgICAgIHB1c2goJ2ZpbGUgbnVtYmVyICcgKyBmaWxlTnVtYmVyICsgJzogJyArIGZpbGUubmFtZSArICdcXG4nLCAnY29sb3I6cmVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZCcpXG5cbiAgICAgIGZpbGUubGluZXMuZm9yRWFjaChmdW5jdGlvbiAobGluZSkge1xuICAgICAgICBpZiAobGluZS5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHB1c2gobGVmdFBhZChsaW5lLm51bWJlciwgNCkgKyAnfCAgJywgJ2JhY2tncm91bmQtY29sb3I6eWVsbG93OyBmb250LXdlaWdodDpib2xkJylcbiAgICAgICAgICBwdXNoKGxpbmUubGluZSArIGVuZGwsICdjb2xvcjpyZWQ7IGJhY2tncm91bmQtY29sb3I6eWVsbG93OyBmb250LXdlaWdodDpib2xkJylcblxuICAgICAgICAgIC8vIHRyeSB0byBndWVzcyB0b2tlblxuICAgICAgICAgIHZhciBvZmZzZXQgPSAwXG4gICAgICAgICAgbGluZS5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgdmFyIHRva2VuID0gL15cXHMqJyguKiknXFxzKjpcXHMqKC4qKSQvLmV4ZWMobWVzc2FnZSlcbiAgICAgICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgICB2YXIgdG9rZW5QYXQgPSB0b2tlblsxXVxuICAgICAgICAgICAgICBtZXNzYWdlID0gdG9rZW5bMl1cbiAgICAgICAgICAgICAgc3dpdGNoICh0b2tlblBhdCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Fzc2lnbic6XG4gICAgICAgICAgICAgICAgICB0b2tlblBhdCA9ICc9J1xuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvZmZzZXQgPSBNYXRoLm1heChsaW5lLmxpbmUuaW5kZXhPZih0b2tlblBhdCwgb2Zmc2V0KSwgMClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9mZnNldCA9IDBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHVzaChsZWZ0UGFkKCd8ICcsIDYpKVxuICAgICAgICAgICAgcHVzaChsZWZ0UGFkKCdeXl4nLCBvZmZzZXQgKyAzKSArIGVuZGwsICdmb250LXdlaWdodDpib2xkJylcbiAgICAgICAgICAgIHB1c2gobGVmdFBhZCgnfCAnLCA2KSlcbiAgICAgICAgICAgIHB1c2gobWVzc2FnZSArIGVuZGwsICdmb250LXdlaWdodDpib2xkJylcbiAgICAgICAgICB9KVxuICAgICAgICAgIHB1c2gobGVmdFBhZCgnfCAnLCA2KSArIGVuZGwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHVzaChsZWZ0UGFkKGxpbmUubnVtYmVyLCA0KSArICd8ICAnKVxuICAgICAgICAgIHB1c2gobGluZS5saW5lICsgZW5kbCwgJ2NvbG9yOnJlZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhd2luZG93LmNocm9tZSkge1xuICAgICAgICBzdHlsZXNbMF0gPSBzdHJpbmdzLmpvaW4oJyVjJylcbiAgICAgICAgY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgc3R5bGVzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coc3RyaW5ncy5qb2luKCcnKSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hlY2sucmFpc2UoJ0Vycm9yIGNvbXBpbGluZyAnICsgdHlwZU5hbWUgKyAnIHNoYWRlciwgJyArIGZpbGVzWzBdLm5hbWUpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tMaW5rRXJyb3IgKGdsLCBwcm9ncmFtLCBmcmFnU2hhZGVyLCB2ZXJ0U2hhZGVyLCBjb21tYW5kKSB7XG4gIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpIHtcbiAgICB2YXIgZXJyTG9nID0gZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSlcbiAgICB2YXIgZnJhZ1BhcnNlID0gcGFyc2VTb3VyY2UoZnJhZ1NoYWRlciwgY29tbWFuZClcbiAgICB2YXIgdmVydFBhcnNlID0gcGFyc2VTb3VyY2UodmVydFNoYWRlciwgY29tbWFuZClcblxuICAgIHZhciBoZWFkZXIgPSAnRXJyb3IgbGlua2luZyBwcm9ncmFtIHdpdGggdmVydGV4IHNoYWRlciwgXCInICtcbiAgICAgIHZlcnRQYXJzZVswXS5uYW1lICsgJ1wiLCBhbmQgZnJhZ21lbnQgc2hhZGVyIFwiJyArIGZyYWdQYXJzZVswXS5uYW1lICsgJ1wiJ1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCclYycgKyBoZWFkZXIgKyBlbmRsICsgJyVjJyArIGVyckxvZyxcbiAgICAgICAgJ2NvbG9yOnJlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2ZvbnQtd2VpZ2h0OmJvbGQnLFxuICAgICAgICAnY29sb3I6cmVkJylcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coaGVhZGVyICsgZW5kbCArIGVyckxvZylcbiAgICB9XG4gICAgY2hlY2sucmFpc2UoaGVhZGVyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhdmVDb21tYW5kUmVmIChvYmplY3QpIHtcbiAgb2JqZWN0Ll9jb21tYW5kUmVmID0gZ3Vlc3NDb21tYW5kKClcbn1cblxuZnVuY3Rpb24gc2F2ZURyYXdDb21tYW5kSW5mbyAob3B0cywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMsIHN0cmluZ1N0b3JlKSB7XG4gIHNhdmVDb21tYW5kUmVmKG9wdHMpXG5cbiAgZnVuY3Rpb24gaWQgKHN0cikge1xuICAgIGlmIChzdHIpIHtcbiAgICAgIHJldHVybiBzdHJpbmdTdG9yZS5pZChzdHIpXG4gICAgfVxuICAgIHJldHVybiAwXG4gIH1cbiAgb3B0cy5fZnJhZ0lkID0gaWQob3B0cy5zdGF0aWMuZnJhZylcbiAgb3B0cy5fdmVydElkID0gaWQob3B0cy5zdGF0aWMudmVydClcblxuICBmdW5jdGlvbiBhZGRQcm9wcyAoZGljdCwgc2V0KSB7XG4gICAgT2JqZWN0LmtleXMoc2V0KS5mb3JFYWNoKGZ1bmN0aW9uICh1KSB7XG4gICAgICBkaWN0W3N0cmluZ1N0b3JlLmlkKHUpXSA9IHRydWVcbiAgICB9KVxuICB9XG5cbiAgdmFyIHVuaWZvcm1TZXQgPSBvcHRzLl91bmlmb3JtU2V0ID0ge31cbiAgYWRkUHJvcHModW5pZm9ybVNldCwgdW5pZm9ybXMuc3RhdGljKVxuICBhZGRQcm9wcyh1bmlmb3JtU2V0LCB1bmlmb3Jtcy5keW5hbWljKVxuXG4gIHZhciBhdHRyaWJ1dGVTZXQgPSBvcHRzLl9hdHRyaWJ1dGVTZXQgPSB7fVxuICBhZGRQcm9wcyhhdHRyaWJ1dGVTZXQsIGF0dHJpYnV0ZXMuc3RhdGljKVxuICBhZGRQcm9wcyhhdHRyaWJ1dGVTZXQsIGF0dHJpYnV0ZXMuZHluYW1pYylcblxuICBvcHRzLl9oYXNDb3VudCA9IChcbiAgICAnY291bnQnIGluIG9wdHMuc3RhdGljIHx8XG4gICAgJ2NvdW50JyBpbiBvcHRzLmR5bmFtaWMgfHxcbiAgICAnZWxlbWVudHMnIGluIG9wdHMuc3RhdGljIHx8XG4gICAgJ2VsZW1lbnRzJyBpbiBvcHRzLmR5bmFtaWMpXG59XG5cbmZ1bmN0aW9uIGNvbW1hbmRSYWlzZSAobWVzc2FnZSwgY29tbWFuZCkge1xuICB2YXIgY2FsbFNpdGUgPSBndWVzc0NhbGxTaXRlKClcbiAgcmFpc2UobWVzc2FnZSArXG4gICAgJyBpbiBjb21tYW5kICcgKyAoY29tbWFuZCB8fCBndWVzc0NvbW1hbmQoKSkgK1xuICAgIChjYWxsU2l0ZSA9PT0gJ3Vua25vd24nID8gJycgOiAnIGNhbGxlZCBmcm9tICcgKyBjYWxsU2l0ZSkpXG59XG5cbmZ1bmN0aW9uIGNoZWNrQ29tbWFuZCAocHJlZCwgbWVzc2FnZSwgY29tbWFuZCkge1xuICBpZiAoIXByZWQpIHtcbiAgICBjb21tYW5kUmFpc2UobWVzc2FnZSwgY29tbWFuZCB8fCBndWVzc0NvbW1hbmQoKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmFtZXRlckNvbW1hbmQgKHBhcmFtLCBwb3NzaWJpbGl0aWVzLCBtZXNzYWdlLCBjb21tYW5kKSB7XG4gIGlmICghKHBhcmFtIGluIHBvc3NpYmlsaXRpZXMpKSB7XG4gICAgY29tbWFuZFJhaXNlKFxuICAgICAgJ3Vua25vd24gcGFyYW1ldGVyICgnICsgcGFyYW0gKyAnKScgKyBlbmNvbG9uKG1lc3NhZ2UpICtcbiAgICAgICcuIHBvc3NpYmxlIHZhbHVlczogJyArIE9iamVjdC5rZXlzKHBvc3NpYmlsaXRpZXMpLmpvaW4oKSxcbiAgICAgIGNvbW1hbmQgfHwgZ3Vlc3NDb21tYW5kKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tDb21tYW5kVHlwZSAodmFsdWUsIHR5cGUsIG1lc3NhZ2UsIGNvbW1hbmQpIHtcbiAgaWYgKCFzdGFuZGFyZFR5cGVFaCh2YWx1ZSwgdHlwZSkpIHtcbiAgICBjb21tYW5kUmFpc2UoXG4gICAgICAnaW52YWxpZCBwYXJhbWV0ZXIgdHlwZScgKyBlbmNvbG9uKG1lc3NhZ2UpICtcbiAgICAgICcuIGV4cGVjdGVkICcgKyB0eXBlICsgJywgZ290ICcgKyAodHlwZW9mIHZhbHVlKSxcbiAgICAgIGNvbW1hbmQgfHwgZ3Vlc3NDb21tYW5kKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tPcHRpb25hbCAoYmxvY2spIHtcbiAgYmxvY2soKVxufVxuXG5mdW5jdGlvbiBjaGVja0ZyYW1lYnVmZmVyRm9ybWF0IChhdHRhY2htZW50LCB0ZXhGb3JtYXRzLCByYkZvcm1hdHMpIHtcbiAgaWYgKGF0dGFjaG1lbnQudGV4dHVyZSkge1xuICAgIGNoZWNrT25lT2YoXG4gICAgICBhdHRhY2htZW50LnRleHR1cmUuX3RleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICB0ZXhGb3JtYXRzLFxuICAgICAgJ3Vuc3VwcG9ydGVkIHRleHR1cmUgZm9ybWF0IGZvciBhdHRhY2htZW50JylcbiAgfSBlbHNlIHtcbiAgICBjaGVja09uZU9mKFxuICAgICAgYXR0YWNobWVudC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5mb3JtYXQsXG4gICAgICByYkZvcm1hdHMsXG4gICAgICAndW5zdXBwb3J0ZWQgcmVuZGVyYnVmZmVyIGZvcm1hdCBmb3IgYXR0YWNobWVudCcpXG4gIH1cbn1cblxudmFyIEdMX0NMQU1QX1RPX0VER0UgPSAweDgxMkZcblxudmFyIEdMX05FQVJFU1QgPSAweDI2MDBcbnZhciBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUID0gMHgyNzAwXG52YXIgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUID0gMHgyNzAxXG52YXIgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSID0gMHgyNzAyXG52YXIgR0xfTElORUFSX01JUE1BUF9MSU5FQVIgPSAweDI3MDNcblxudmFyIEdMX0JZVEUgPSA1MTIwXG52YXIgR0xfVU5TSUdORURfQllURSA9IDUxMjFcbnZhciBHTF9TSE9SVCA9IDUxMjJcbnZhciBHTF9VTlNJR05FRF9TSE9SVCA9IDUxMjNcbnZhciBHTF9JTlQgPSA1MTI0XG52YXIgR0xfVU5TSUdORURfSU5UID0gNTEyNVxudmFyIEdMX0ZMT0FUID0gNTEyNlxuXG52YXIgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCA9IDB4ODAzM1xudmFyIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgPSAweDgwMzRcbnZhciBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSA9IDB4ODM2M1xudmFyIEdMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMID0gMHg4NEZBXG5cbnZhciBHTF9IQUxGX0ZMT0FUX09FUyA9IDB4OEQ2MVxuXG52YXIgVFlQRV9TSVpFID0ge31cblxuVFlQRV9TSVpFW0dMX0JZVEVdID1cblRZUEVfU0laRVtHTF9VTlNJR05FRF9CWVRFXSA9IDFcblxuVFlQRV9TSVpFW0dMX1NIT1JUXSA9XG5UWVBFX1NJWkVbR0xfVU5TSUdORURfU0hPUlRdID1cblRZUEVfU0laRVtHTF9IQUxGX0ZMT0FUX09FU10gPVxuVFlQRV9TSVpFW0dMX1VOU0lHTkVEX1NIT1JUXzVfNl81XSA9XG5UWVBFX1NJWkVbR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF0gPVxuVFlQRV9TSVpFW0dMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzFdID0gMlxuXG5UWVBFX1NJWkVbR0xfSU5UXSA9XG5UWVBFX1NJWkVbR0xfVU5TSUdORURfSU5UXSA9XG5UWVBFX1NJWkVbR0xfRkxPQVRdID1cblRZUEVfU0laRVtHTF9VTlNJR05FRF9JTlRfMjRfOF9XRUJHTF0gPSA0XG5cbmZ1bmN0aW9uIHBpeGVsU2l6ZSAodHlwZSwgY2hhbm5lbHMpIHtcbiAgaWYgKHR5cGUgPT09IEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgfHxcbiAgICAgIHR5cGUgPT09IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgfHxcbiAgICAgIHR5cGUgPT09IEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81KSB7XG4gICAgcmV0dXJuIDJcbiAgfSBlbHNlIGlmICh0eXBlID09PSBHTF9VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCkge1xuICAgIHJldHVybiA0XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFRZUEVfU0laRVt0eXBlXSAqIGNoYW5uZWxzXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQb3cyICh2KSB7XG4gIHJldHVybiAhKHYgJiAodiAtIDEpKSAmJiAoISF2KVxufVxuXG5mdW5jdGlvbiBjaGVja1RleHR1cmUyRCAoaW5mbywgbWlwRGF0YSwgbGltaXRzKSB7XG4gIHZhciBpXG4gIHZhciB3ID0gbWlwRGF0YS53aWR0aFxuICB2YXIgaCA9IG1pcERhdGEuaGVpZ2h0XG4gIHZhciBjID0gbWlwRGF0YS5jaGFubmVsc1xuXG4gIC8vIENoZWNrIHRleHR1cmUgc2hhcGVcbiAgY2hlY2sodyA+IDAgJiYgdyA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUgJiZcbiAgICAgICAgaCA+IDAgJiYgaCA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsXG4gICdpbnZhbGlkIHRleHR1cmUgc2hhcGUnKVxuXG4gIC8vIGNoZWNrIHdyYXAgbW9kZVxuICBpZiAoaW5mby53cmFwUyAhPT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBpbmZvLndyYXBUICE9PSBHTF9DTEFNUF9UT19FREdFKSB7XG4gICAgY2hlY2soaXNQb3cyKHcpICYmIGlzUG93MihoKSxcbiAgICAgICdpbmNvbXBhdGlibGUgd3JhcCBtb2RlIGZvciB0ZXh0dXJlLCBib3RoIHdpZHRoIGFuZCBoZWlnaHQgbXVzdCBiZSBwb3dlciBvZiAyJylcbiAgfVxuXG4gIGlmIChtaXBEYXRhLm1pcG1hc2sgPT09IDEpIHtcbiAgICBpZiAodyAhPT0gMSAmJiBoICE9PSAxKSB7XG4gICAgICBjaGVjayhcbiAgICAgICAgaW5mby5taW5GaWx0ZXIgIT09IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QgJiZcbiAgICAgICAgaW5mby5taW5GaWx0ZXIgIT09IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiAmJlxuICAgICAgICBpbmZvLm1pbkZpbHRlciAhPT0gR0xfTElORUFSX01JUE1BUF9ORUFSRVNUICYmXG4gICAgICAgIGluZm8ubWluRmlsdGVyICE9PSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUixcbiAgICAgICAgJ21pbiBmaWx0ZXIgcmVxdWlyZXMgbWlwbWFwJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gdGV4dHVyZSBtdXN0IGJlIHBvd2VyIG9mIDJcbiAgICBjaGVjayhpc1BvdzIodykgJiYgaXNQb3cyKGgpLFxuICAgICAgJ3RleHR1cmUgbXVzdCBiZSBhIHNxdWFyZSBwb3dlciBvZiAyIHRvIHN1cHBvcnQgbWlwbWFwcGluZycpXG4gICAgY2hlY2sobWlwRGF0YS5taXBtYXNrID09PSAodyA8PCAxKSAtIDEsXG4gICAgICAnbWlzc2luZyBvciBpbmNvbXBsZXRlIG1pcG1hcCBkYXRhJylcbiAgfVxuXG4gIGlmIChtaXBEYXRhLnR5cGUgPT09IEdMX0ZMT0FUKSB7XG4gICAgaWYgKGxpbWl0cy5leHRlbnNpb25zLmluZGV4T2YoJ29lc190ZXh0dXJlX2Zsb2F0X2xpbmVhcicpIDwgMCkge1xuICAgICAgY2hlY2soaW5mby5taW5GaWx0ZXIgPT09IEdMX05FQVJFU1QgJiYgaW5mby5tYWdGaWx0ZXIgPT09IEdMX05FQVJFU1QsXG4gICAgICAgICdmaWx0ZXIgbm90IHN1cHBvcnRlZCwgbXVzdCBlbmFibGUgb2VzX3RleHR1cmVfZmxvYXRfbGluZWFyJylcbiAgICB9XG4gICAgY2hlY2soIWluZm8uZ2VuTWlwbWFwcyxcbiAgICAgICdtaXBtYXAgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkIHdpdGggZmxvYXQgdGV4dHVyZXMnKVxuICB9XG5cbiAgLy8gY2hlY2sgaW1hZ2UgY29tcGxldGVcbiAgdmFyIG1pcGltYWdlcyA9IG1pcERhdGEuaW1hZ2VzXG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgaWYgKG1pcGltYWdlc1tpXSkge1xuICAgICAgdmFyIG13ID0gdyA+PiBpXG4gICAgICB2YXIgbWggPSBoID4+IGlcbiAgICAgIGNoZWNrKG1pcERhdGEubWlwbWFzayAmICgxIDw8IGkpLCAnbWlzc2luZyBtaXBtYXAgZGF0YScpXG5cbiAgICAgIHZhciBpbWcgPSBtaXBpbWFnZXNbaV1cblxuICAgICAgY2hlY2soXG4gICAgICAgIGltZy53aWR0aCA9PT0gbXcgJiZcbiAgICAgICAgaW1nLmhlaWdodCA9PT0gbWgsXG4gICAgICAgICdpbnZhbGlkIHNoYXBlIGZvciBtaXAgaW1hZ2VzJylcblxuICAgICAgY2hlY2soXG4gICAgICAgIGltZy5mb3JtYXQgPT09IG1pcERhdGEuZm9ybWF0ICYmXG4gICAgICAgIGltZy5pbnRlcm5hbGZvcm1hdCA9PT0gbWlwRGF0YS5pbnRlcm5hbGZvcm1hdCAmJlxuICAgICAgICBpbWcudHlwZSA9PT0gbWlwRGF0YS50eXBlLFxuICAgICAgICAnaW5jb21wYXRpYmxlIHR5cGUgZm9yIG1pcCBpbWFnZScpXG5cbiAgICAgIGlmIChpbWcuY29tcHJlc3NlZCkge1xuICAgICAgICAvLyBUT0RPOiBjaGVjayBzaXplIGZvciBjb21wcmVzc2VkIGltYWdlc1xuICAgICAgfSBlbHNlIGlmIChpbWcuZGF0YSkge1xuICAgICAgICAvLyBjaGVjayhpbWcuZGF0YS5ieXRlTGVuZ3RoID09PSBtdyAqIG1oICpcbiAgICAgICAgLy8gTWF0aC5tYXgocGl4ZWxTaXplKGltZy50eXBlLCBjKSwgaW1nLnVucGFja0FsaWdubWVudCksXG4gICAgICAgIHZhciByb3dTaXplID0gTWF0aC5jZWlsKHBpeGVsU2l6ZShpbWcudHlwZSwgYykgKiBtdyAvIGltZy51bnBhY2tBbGlnbm1lbnQpICogaW1nLnVucGFja0FsaWdubWVudFxuICAgICAgICBjaGVjayhpbWcuZGF0YS5ieXRlTGVuZ3RoID09PSByb3dTaXplICogbWgsXG4gICAgICAgICAgJ2ludmFsaWQgZGF0YSBmb3IgaW1hZ2UsIGJ1ZmZlciBzaXplIGlzIGluY29uc2lzdGVudCB3aXRoIGltYWdlIGZvcm1hdCcpXG4gICAgICB9IGVsc2UgaWYgKGltZy5lbGVtZW50KSB7XG4gICAgICAgIC8vIFRPRE86IGNoZWNrIGVsZW1lbnQgY2FuIGJlIGxvYWRlZFxuICAgICAgfSBlbHNlIGlmIChpbWcuY29weSkge1xuICAgICAgICAvLyBUT0RPOiBjaGVjayBjb21wYXRpYmxlIGZvcm1hdCBhbmQgdHlwZVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWluZm8uZ2VuTWlwbWFwcykge1xuICAgICAgY2hlY2soKG1pcERhdGEubWlwbWFzayAmICgxIDw8IGkpKSA9PT0gMCwgJ2V4dHJhIG1pcG1hcCBkYXRhJylcbiAgICB9XG4gIH1cblxuICBpZiAobWlwRGF0YS5jb21wcmVzc2VkKSB7XG4gICAgY2hlY2soIWluZm8uZ2VuTWlwbWFwcyxcbiAgICAgICdtaXBtYXAgZ2VuZXJhdGlvbiBmb3IgY29tcHJlc3NlZCBpbWFnZXMgbm90IHN1cHBvcnRlZCcpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tUZXh0dXJlQ3ViZSAodGV4dHVyZSwgaW5mbywgZmFjZXMsIGxpbWl0cykge1xuICB2YXIgdyA9IHRleHR1cmUud2lkdGhcbiAgdmFyIGggPSB0ZXh0dXJlLmhlaWdodFxuICB2YXIgYyA9IHRleHR1cmUuY2hhbm5lbHNcblxuICAvLyBDaGVjayB0ZXh0dXJlIHNoYXBlXG4gIGNoZWNrKFxuICAgIHcgPiAwICYmIHcgPD0gbGltaXRzLm1heFRleHR1cmVTaXplICYmIGggPiAwICYmIGggPD0gbGltaXRzLm1heFRleHR1cmVTaXplLFxuICAgICdpbnZhbGlkIHRleHR1cmUgc2hhcGUnKVxuICBjaGVjayhcbiAgICB3ID09PSBoLFxuICAgICdjdWJlIG1hcCBtdXN0IGJlIHNxdWFyZScpXG4gIGNoZWNrKFxuICAgIGluZm8ud3JhcFMgPT09IEdMX0NMQU1QX1RPX0VER0UgJiYgaW5mby53cmFwVCA9PT0gR0xfQ0xBTVBfVE9fRURHRSxcbiAgICAnd3JhcCBtb2RlIG5vdCBzdXBwb3J0ZWQgYnkgY3ViZSBtYXAnKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZmFjZXMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgZmFjZSA9IGZhY2VzW2ldXG4gICAgY2hlY2soXG4gICAgICBmYWNlLndpZHRoID09PSB3ICYmIGZhY2UuaGVpZ2h0ID09PSBoLFxuICAgICAgJ2luY29uc2lzdGVudCBjdWJlIG1hcCBmYWNlIHNoYXBlJylcblxuICAgIGlmIChpbmZvLmdlbk1pcG1hcHMpIHtcbiAgICAgIGNoZWNrKCFmYWNlLmNvbXByZXNzZWQsXG4gICAgICAgICdjYW4gbm90IGdlbmVyYXRlIG1pcG1hcCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcycpXG4gICAgICBjaGVjayhmYWNlLm1pcG1hc2sgPT09IDEsXG4gICAgICAgICdjYW4gbm90IHNwZWNpZnkgbWlwbWFwcyBhbmQgZ2VuZXJhdGUgbWlwbWFwcycpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IGNoZWNrIG1pcCBhbmQgZmlsdGVyIG1vZGVcbiAgICB9XG5cbiAgICB2YXIgbWlwbWFwcyA9IGZhY2UuaW1hZ2VzXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICB2YXIgaW1nID0gbWlwbWFwc1tqXVxuICAgICAgaWYgKGltZykge1xuICAgICAgICB2YXIgbXcgPSB3ID4+IGpcbiAgICAgICAgdmFyIG1oID0gaCA+PiBqXG4gICAgICAgIGNoZWNrKGZhY2UubWlwbWFzayAmICgxIDw8IGopLCAnbWlzc2luZyBtaXBtYXAgZGF0YScpXG4gICAgICAgIGNoZWNrKFxuICAgICAgICAgIGltZy53aWR0aCA9PT0gbXcgJiZcbiAgICAgICAgICBpbWcuaGVpZ2h0ID09PSBtaCxcbiAgICAgICAgICAnaW52YWxpZCBzaGFwZSBmb3IgbWlwIGltYWdlcycpXG4gICAgICAgIGNoZWNrKFxuICAgICAgICAgIGltZy5mb3JtYXQgPT09IHRleHR1cmUuZm9ybWF0ICYmXG4gICAgICAgICAgaW1nLmludGVybmFsZm9ybWF0ID09PSB0ZXh0dXJlLmludGVybmFsZm9ybWF0ICYmXG4gICAgICAgICAgaW1nLnR5cGUgPT09IHRleHR1cmUudHlwZSxcbiAgICAgICAgICAnaW5jb21wYXRpYmxlIHR5cGUgZm9yIG1pcCBpbWFnZScpXG5cbiAgICAgICAgaWYgKGltZy5jb21wcmVzc2VkKSB7XG4gICAgICAgICAgLy8gVE9ETzogY2hlY2sgc2l6ZSBmb3IgY29tcHJlc3NlZCBpbWFnZXNcbiAgICAgICAgfSBlbHNlIGlmIChpbWcuZGF0YSkge1xuICAgICAgICAgIGNoZWNrKGltZy5kYXRhLmJ5dGVMZW5ndGggPT09IG13ICogbWggKlxuICAgICAgICAgICAgTWF0aC5tYXgocGl4ZWxTaXplKGltZy50eXBlLCBjKSwgaW1nLnVucGFja0FsaWdubWVudCksXG4gICAgICAgICAgJ2ludmFsaWQgZGF0YSBmb3IgaW1hZ2UsIGJ1ZmZlciBzaXplIGlzIGluY29uc2lzdGVudCB3aXRoIGltYWdlIGZvcm1hdCcpXG4gICAgICAgIH0gZWxzZSBpZiAoaW1nLmVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjaGVjayBlbGVtZW50IGNhbiBiZSBsb2FkZWRcbiAgICAgICAgfSBlbHNlIGlmIChpbWcuY29weSkge1xuICAgICAgICAgIC8vIFRPRE86IGNoZWNrIGNvbXBhdGlibGUgZm9ybWF0IGFuZCB0eXBlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGNoZWNrJDEgPSBleHRlbmQoY2hlY2ssIHtcbiAgb3B0aW9uYWw6IGNoZWNrT3B0aW9uYWwsXG4gIHJhaXNlOiByYWlzZSxcbiAgY29tbWFuZFJhaXNlOiBjb21tYW5kUmFpc2UsXG4gIGNvbW1hbmQ6IGNoZWNrQ29tbWFuZCxcbiAgcGFyYW1ldGVyOiBjaGVja1BhcmFtZXRlcixcbiAgY29tbWFuZFBhcmFtZXRlcjogY2hlY2tQYXJhbWV0ZXJDb21tYW5kLFxuICBjb25zdHJ1Y3RvcjogY2hlY2tDb25zdHJ1Y3RvcixcbiAgdHlwZTogY2hlY2tUeXBlT2YsXG4gIGNvbW1hbmRUeXBlOiBjaGVja0NvbW1hbmRUeXBlLFxuICBpc1R5cGVkQXJyYXk6IGNoZWNrSXNUeXBlZEFycmF5LFxuICBubmk6IGNoZWNrTm9uTmVnYXRpdmVJbnQsXG4gIG9uZU9mOiBjaGVja09uZU9mLFxuICBzaGFkZXJFcnJvcjogY2hlY2tTaGFkZXJFcnJvcixcbiAgbGlua0Vycm9yOiBjaGVja0xpbmtFcnJvcixcbiAgY2FsbFNpdGU6IGd1ZXNzQ2FsbFNpdGUsXG4gIHNhdmVDb21tYW5kUmVmOiBzYXZlQ29tbWFuZFJlZixcbiAgc2F2ZURyYXdJbmZvOiBzYXZlRHJhd0NvbW1hbmRJbmZvLFxuICBmcmFtZWJ1ZmZlckZvcm1hdDogY2hlY2tGcmFtZWJ1ZmZlckZvcm1hdCxcbiAgZ3Vlc3NDb21tYW5kOiBndWVzc0NvbW1hbmQsXG4gIHRleHR1cmUyRDogY2hlY2tUZXh0dXJlMkQsXG4gIHRleHR1cmVDdWJlOiBjaGVja1RleHR1cmVDdWJlXG59KTtcblxudmFyIFZBUklBQkxFX0NPVU5URVIgPSAwXG5cbnZhciBEWU5fRlVOQyA9IDBcbnZhciBEWU5fQ09OU1RBTlQgPSA1XG52YXIgRFlOX0FSUkFZID0gNlxuXG5mdW5jdGlvbiBEeW5hbWljVmFyaWFibGUgKHR5cGUsIGRhdGEpIHtcbiAgdGhpcy5pZCA9IChWQVJJQUJMRV9DT1VOVEVSKyspXG4gIHRoaXMudHlwZSA9IHR5cGVcbiAgdGhpcy5kYXRhID0gZGF0YVxufVxuXG5mdW5jdGlvbiBlc2NhcGVTdHIgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJykucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpXG59XG5cbmZ1bmN0aW9uIHNwbGl0UGFydHMgKHN0cikge1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgdmFyIGZpcnN0Q2hhciA9IHN0ci5jaGFyQXQoMClcbiAgdmFyIGxhc3RDaGFyID0gc3RyLmNoYXJBdChzdHIubGVuZ3RoIC0gMSlcblxuICBpZiAoc3RyLmxlbmd0aCA+IDEgJiZcbiAgICAgIGZpcnN0Q2hhciA9PT0gbGFzdENoYXIgJiZcbiAgICAgIChmaXJzdENoYXIgPT09ICdcIicgfHwgZmlyc3RDaGFyID09PSBcIidcIikpIHtcbiAgICByZXR1cm4gWydcIicgKyBlc2NhcGVTdHIoc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMikpICsgJ1wiJ11cbiAgfVxuXG4gIHZhciBwYXJ0cyA9IC9cXFsoZmFsc2V8dHJ1ZXxudWxsfFxcZCt8J1teJ10qJ3xcIlteXCJdKlwiKVxcXS8uZXhlYyhzdHIpXG4gIGlmIChwYXJ0cykge1xuICAgIHJldHVybiAoXG4gICAgICBzcGxpdFBhcnRzKHN0ci5zdWJzdHIoMCwgcGFydHMuaW5kZXgpKVxuICAgICAgICAuY29uY2F0KHNwbGl0UGFydHMocGFydHNbMV0pKVxuICAgICAgICAuY29uY2F0KHNwbGl0UGFydHMoc3RyLnN1YnN0cihwYXJ0cy5pbmRleCArIHBhcnRzWzBdLmxlbmd0aCkpKVxuICAgIClcbiAgfVxuXG4gIHZhciBzdWJwYXJ0cyA9IHN0ci5zcGxpdCgnLicpXG4gIGlmIChzdWJwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gWydcIicgKyBlc2NhcGVTdHIoc3RyKSArICdcIiddXG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoc3BsaXRQYXJ0cyhzdWJwYXJ0c1tpXSkpXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiB0b0FjY2Vzc29yU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuICdbJyArIHNwbGl0UGFydHMoc3RyKS5qb2luKCddWycpICsgJ10nXG59XG5cbmZ1bmN0aW9uIGRlZmluZUR5bmFtaWMgKHR5cGUsIGRhdGEpIHtcbiAgcmV0dXJuIG5ldyBEeW5hbWljVmFyaWFibGUodHlwZSwgdG9BY2Nlc3NvclN0cmluZyhkYXRhICsgJycpKVxufVxuXG5mdW5jdGlvbiBpc0R5bmFtaWMgKHgpIHtcbiAgcmV0dXJuICh0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyAmJiAheC5fcmVnbFR5cGUpIHx8ICh4IGluc3RhbmNlb2YgRHluYW1pY1ZhcmlhYmxlKVxufVxuXG5mdW5jdGlvbiB1bmJveCAoeCwgcGF0aCkge1xuICBpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbmV3IER5bmFtaWNWYXJpYWJsZShEWU5fRlVOQywgeClcbiAgfSBlbHNlIGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHggPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBuZXcgRHluYW1pY1ZhcmlhYmxlKERZTl9DT05TVEFOVCwgeClcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgcmV0dXJuIG5ldyBEeW5hbWljVmFyaWFibGUoRFlOX0FSUkFZLCB4Lm1hcCgoeSwgaSkgPT4gdW5ib3goeSwgcGF0aCArICdbJyArIGkgKyAnXScpKSlcbiAgfSBlbHNlIGlmICh4IGluc3RhbmNlb2YgRHluYW1pY1ZhcmlhYmxlKSB7XG4gICAgcmV0dXJuIHhcbiAgfVxuICBjaGVjayQxKGZhbHNlLCAnaW52YWxpZCBvcHRpb24gdHlwZSBpbiB1bmlmb3JtICcgKyBwYXRoKVxufVxuXG52YXIgZHluYW1pYyA9IHtcbiAgRHluYW1pY1ZhcmlhYmxlOiBEeW5hbWljVmFyaWFibGUsXG4gIGRlZmluZTogZGVmaW5lRHluYW1pYyxcbiAgaXNEeW5hbWljOiBpc0R5bmFtaWMsXG4gIHVuYm94OiB1bmJveCxcbiAgYWNjZXNzb3I6IHRvQWNjZXNzb3JTdHJpbmdcbn07XG5cbi8qIGdsb2JhbHMgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBjYW5jZWxBbmltYXRpb25GcmFtZSAqL1xudmFyIHJhZiA9IHtcbiAgbmV4dDogdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZnVuY3Rpb24gKGNiKSB7IHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2IpIH1cbiAgICA6IGZ1bmN0aW9uIChjYikgeyByZXR1cm4gc2V0VGltZW91dChjYiwgMTYpIH0sXG4gIGNhbmNlbDogdHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nXG4gICAgPyBmdW5jdGlvbiAocmFmKSB7IHJldHVybiBjYW5jZWxBbmltYXRpb25GcmFtZShyYWYpIH1cbiAgICA6IGNsZWFyVGltZW91dFxufTtcblxuLyogZ2xvYmFscyBwZXJmb3JtYW5jZSAqL1xudmFyIGNsb2NrID0gKHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCcgJiYgcGVyZm9ybWFuY2Uubm93KVxuICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCkgfVxuICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKyhuZXcgRGF0ZSgpKSB9O1xuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdTdG9yZSAoKSB7XG4gIHZhciBzdHJpbmdJZHMgPSB7ICcnOiAwIH1cbiAgdmFyIHN0cmluZ1ZhbHVlcyA9IFsnJ11cbiAgcmV0dXJuIHtcbiAgICBpZDogZnVuY3Rpb24gKHN0cikge1xuICAgICAgdmFyIHJlc3VsdCA9IHN0cmluZ0lkc1tzdHJdXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IHN0cmluZ0lkc1tzdHJdID0gc3RyaW5nVmFsdWVzLmxlbmd0aFxuICAgICAgc3RyaW5nVmFsdWVzLnB1c2goc3RyKVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH0sXG5cbiAgICBzdHI6IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlc1tpZF1cbiAgICB9XG4gIH1cbn1cblxuLy8gQ29udGV4dCBhbmQgY2FudmFzIGNyZWF0aW9uIGhlbHBlciBmdW5jdGlvbnNcbmZ1bmN0aW9uIGNyZWF0ZUNhbnZhcyAoZWxlbWVudCwgb25Eb25lLCBwaXhlbFJhdGlvKSB7XG4gIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxuICBleHRlbmQoY2FudmFzLnN0eWxlLCB7XG4gICAgYm9yZGVyOiAwLFxuICAgIG1hcmdpbjogMCxcbiAgICBwYWRkaW5nOiAwLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwXG4gIH0pXG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FudmFzKVxuXG4gIGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgY2FudmFzLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xuICAgIGV4dGVuZChlbGVtZW50LnN0eWxlLCB7XG4gICAgICBtYXJnaW46IDAsXG4gICAgICBwYWRkaW5nOiAwXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2l6ZSAoKSB7XG4gICAgdmFyIHcgPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIHZhciBoID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgaWYgKGVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIHZhciBib3VuZHMgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICB3ID0gYm91bmRzLnJpZ2h0IC0gYm91bmRzLmxlZnRcbiAgICAgIGggPSBib3VuZHMuYm90dG9tIC0gYm91bmRzLnRvcFxuICAgIH1cbiAgICBjYW52YXMud2lkdGggPSBwaXhlbFJhdGlvICogd1xuICAgIGNhbnZhcy5oZWlnaHQgPSBwaXhlbFJhdGlvICogaFxuICAgIGV4dGVuZChjYW52YXMuc3R5bGUsIHtcbiAgICAgIHdpZHRoOiB3ICsgJ3B4JyxcbiAgICAgIGhlaWdodDogaCArICdweCdcbiAgICB9KVxuICB9XG5cbiAgdmFyIHJlc2l6ZU9ic2VydmVyXG4gIGlmIChlbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5ICYmIHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGlnbm9yZSAnUmVzaXplT2JzZXJ2ZXInIGlzIG5vdCBkZWZpbmVkXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc2V0VGltZW91dCB0byBhdm9pZCBmbGlja2VyXG4gICAgICBzZXRUaW1lb3V0KHJlc2l6ZSlcbiAgICB9KVxuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWxlbWVudClcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplLCBmYWxzZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRGVzdHJveSAoKSB7XG4gICAgaWYgKHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KClcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZSlcbiAgICB9XG4gICAgZWxlbWVudC5yZW1vdmVDaGlsZChjYW52YXMpXG4gIH1cblxuICByZXNpemUoKVxuXG4gIHJldHVybiB7XG4gICAgY2FudmFzOiBjYW52YXMsXG4gICAgb25EZXN0cm95OiBvbkRlc3Ryb3lcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0IChjYW52YXMsIGNvbnRleHRBdHRyaWJ1dGVzKSB7XG4gIGZ1bmN0aW9uIGdldCAobmFtZSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FudmFzLmdldENvbnRleHQobmFtZSwgY29udGV4dEF0dHJpYnV0ZXMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChcbiAgICBnZXQoJ3dlYmdsJykgfHxcbiAgICBnZXQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcpIHx8XG4gICAgZ2V0KCd3ZWJnbC1leHBlcmltZW50YWwnKVxuICApXG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQgKG9iaikge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBvYmoubm9kZU5hbWUgPT09ICdzdHJpbmcnICYmXG4gICAgdHlwZW9mIG9iai5hcHBlbmRDaGlsZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmouZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nXG4gIClcbn1cblxuZnVuY3Rpb24gaXNXZWJHTENvbnRleHQgKG9iaikge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBvYmouZHJhd0FycmF5cyA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgIHR5cGVvZiBvYmouZHJhd0VsZW1lbnRzID09PSAnZnVuY3Rpb24nXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHRlbnNpb25zIChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBpbnB1dC5zcGxpdCgpXG4gIH1cbiAgY2hlY2skMShBcnJheS5pc0FycmF5KGlucHV0KSwgJ2ludmFsaWQgZXh0ZW5zaW9uIGFycmF5JylcbiAgcmV0dXJuIGlucHV0XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnQgKGRlc2MpIHtcbiAgaWYgKHR5cGVvZiBkZXNjID09PSAnc3RyaW5nJykge1xuICAgIGNoZWNrJDEodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJywgJ25vdCBzdXBwb3J0ZWQgb3V0c2lkZSBvZiBET00nKVxuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGRlc2MpXG4gIH1cbiAgcmV0dXJuIGRlc2Ncbn1cblxuZnVuY3Rpb24gcGFyc2VBcmdzIChhcmdzXykge1xuICB2YXIgYXJncyA9IGFyZ3NfIHx8IHt9XG4gIHZhciBlbGVtZW50LCBjb250YWluZXIsIGNhbnZhcywgZ2xcbiAgdmFyIGNvbnRleHRBdHRyaWJ1dGVzID0ge31cbiAgdmFyIGV4dGVuc2lvbnMgPSBbXVxuICB2YXIgb3B0aW9uYWxFeHRlbnNpb25zID0gW11cbiAgdmFyIHBpeGVsUmF0aW8gPSAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyAxIDogd2luZG93LmRldmljZVBpeGVsUmF0aW8pXG4gIHZhciBwcm9maWxlID0gZmFsc2VcbiAgdmFyIG9uRG9uZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjaGVjayQxLnJhaXNlKGVycilcbiAgICB9XG4gIH1cbiAgdmFyIG9uRGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9XG4gIGlmICh0eXBlb2YgYXJncyA9PT0gJ3N0cmluZycpIHtcbiAgICBjaGVjayQxKFxuICAgICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyxcbiAgICAgICdzZWxlY3RvciBxdWVyaWVzIG9ubHkgc3VwcG9ydGVkIGluIERPTSBlbnZpcm9tZW50cycpXG4gICAgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYXJncylcbiAgICBjaGVjayQxKGVsZW1lbnQsICdpbnZhbGlkIHF1ZXJ5IHN0cmluZyBmb3IgZWxlbWVudCcpXG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKGlzSFRNTEVsZW1lbnQoYXJncykpIHtcbiAgICAgIGVsZW1lbnQgPSBhcmdzXG4gICAgfSBlbHNlIGlmIChpc1dlYkdMQ29udGV4dChhcmdzKSkge1xuICAgICAgZ2wgPSBhcmdzXG4gICAgICBjYW52YXMgPSBnbC5jYW52YXNcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2skMS5jb25zdHJ1Y3RvcihhcmdzKVxuICAgICAgaWYgKCdnbCcgaW4gYXJncykge1xuICAgICAgICBnbCA9IGFyZ3MuZ2xcbiAgICAgIH0gZWxzZSBpZiAoJ2NhbnZhcycgaW4gYXJncykge1xuICAgICAgICBjYW52YXMgPSBnZXRFbGVtZW50KGFyZ3MuY2FudmFzKVxuICAgICAgfSBlbHNlIGlmICgnY29udGFpbmVyJyBpbiBhcmdzKSB7XG4gICAgICAgIGNvbnRhaW5lciA9IGdldEVsZW1lbnQoYXJncy5jb250YWluZXIpXG4gICAgICB9XG4gICAgICBpZiAoJ2F0dHJpYnV0ZXMnIGluIGFyZ3MpIHtcbiAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMgPSBhcmdzLmF0dHJpYnV0ZXNcbiAgICAgICAgY2hlY2skMS50eXBlKGNvbnRleHRBdHRyaWJ1dGVzLCAnb2JqZWN0JywgJ2ludmFsaWQgY29udGV4dCBhdHRyaWJ1dGVzJylcbiAgICAgIH1cbiAgICAgIGlmICgnZXh0ZW5zaW9ucycgaW4gYXJncykge1xuICAgICAgICBleHRlbnNpb25zID0gcGFyc2VFeHRlbnNpb25zKGFyZ3MuZXh0ZW5zaW9ucylcbiAgICAgIH1cbiAgICAgIGlmICgnb3B0aW9uYWxFeHRlbnNpb25zJyBpbiBhcmdzKSB7XG4gICAgICAgIG9wdGlvbmFsRXh0ZW5zaW9ucyA9IHBhcnNlRXh0ZW5zaW9ucyhhcmdzLm9wdGlvbmFsRXh0ZW5zaW9ucylcbiAgICAgIH1cbiAgICAgIGlmICgnb25Eb25lJyBpbiBhcmdzKSB7XG4gICAgICAgIGNoZWNrJDEudHlwZShcbiAgICAgICAgICBhcmdzLm9uRG9uZSwgJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAnaW52YWxpZCBvciBtaXNzaW5nIG9uRG9uZSBjYWxsYmFjaycpXG4gICAgICAgIG9uRG9uZSA9IGFyZ3Mub25Eb25lXG4gICAgICB9XG4gICAgICBpZiAoJ3Byb2ZpbGUnIGluIGFyZ3MpIHtcbiAgICAgICAgcHJvZmlsZSA9ICEhYXJncy5wcm9maWxlXG4gICAgICB9XG4gICAgICBpZiAoJ3BpeGVsUmF0aW8nIGluIGFyZ3MpIHtcbiAgICAgICAgcGl4ZWxSYXRpbyA9ICthcmdzLnBpeGVsUmF0aW9cbiAgICAgICAgY2hlY2skMShwaXhlbFJhdGlvID4gMCwgJ2ludmFsaWQgcGl4ZWwgcmF0aW8nKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGFyZ3VtZW50cyB0byByZWdsJylcbiAgfVxuXG4gIGlmIChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2NhbnZhcycpIHtcbiAgICAgIGNhbnZhcyA9IGVsZW1lbnRcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyID0gZWxlbWVudFxuICAgIH1cbiAgfVxuXG4gIGlmICghZ2wpIHtcbiAgICBpZiAoIWNhbnZhcykge1xuICAgICAgY2hlY2skMShcbiAgICAgICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyxcbiAgICAgICAgJ211c3QgbWFudWFsbHkgc3BlY2lmeSB3ZWJnbCBjb250ZXh0IG91dHNpZGUgb2YgRE9NIGVudmlyb25tZW50cycpXG4gICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlQ2FudmFzKGNvbnRhaW5lciB8fCBkb2N1bWVudC5ib2R5LCBvbkRvbmUsIHBpeGVsUmF0aW8pXG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgY2FudmFzID0gcmVzdWx0LmNhbnZhc1xuICAgICAgb25EZXN0cm95ID0gcmVzdWx0Lm9uRGVzdHJveVxuICAgIH1cbiAgICAvLyB3b3JrYXJvdW5kIGZvciBjaHJvbWl1bSBidWcsIHByZW11bHRpcGxpZWQgYWxwaGEgdmFsdWUgaXMgcGxhdGZvcm0gZGVwZW5kZW50XG4gICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYSA9PT0gdW5kZWZpbmVkKSBjb250ZXh0QXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlXG4gICAgZ2wgPSBjcmVhdGVDb250ZXh0KGNhbnZhcywgY29udGV4dEF0dHJpYnV0ZXMpXG4gIH1cblxuICBpZiAoIWdsKSB7XG4gICAgb25EZXN0cm95KClcbiAgICBvbkRvbmUoJ3dlYmdsIG5vdCBzdXBwb3J0ZWQsIHRyeSB1cGdyYWRpbmcgeW91ciBicm93c2VyIG9yIGdyYXBoaWNzIGRyaXZlcnMgaHR0cDovL2dldC53ZWJnbC5vcmcnKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGdsOiBnbCxcbiAgICBjYW52YXM6IGNhbnZhcyxcbiAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICBleHRlbnNpb25zOiBleHRlbnNpb25zLFxuICAgIG9wdGlvbmFsRXh0ZW5zaW9uczogb3B0aW9uYWxFeHRlbnNpb25zLFxuICAgIHBpeGVsUmF0aW86IHBpeGVsUmF0aW8sXG4gICAgcHJvZmlsZTogcHJvZmlsZSxcbiAgICBvbkRvbmU6IG9uRG9uZSxcbiAgICBvbkRlc3Ryb3k6IG9uRGVzdHJveVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvbkNhY2hlIChnbCwgY29uZmlnKSB7XG4gIHZhciBleHRlbnNpb25zID0ge31cblxuICBmdW5jdGlvbiB0cnlMb2FkRXh0ZW5zaW9uIChuYW1lXykge1xuICAgIGNoZWNrJDEudHlwZShuYW1lXywgJ3N0cmluZycsICdleHRlbnNpb24gbmFtZSBtdXN0IGJlIHN0cmluZycpXG4gICAgdmFyIG5hbWUgPSBuYW1lXy50b0xvd2VyQ2FzZSgpXG4gICAgdmFyIGV4dFxuICAgIHRyeSB7XG4gICAgICBleHQgPSBleHRlbnNpb25zW25hbWVdID0gZ2wuZ2V0RXh0ZW5zaW9uKG5hbWUpXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gISFleHRcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlnLmV4dGVuc2lvbnMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgbmFtZSA9IGNvbmZpZy5leHRlbnNpb25zW2ldXG4gICAgaWYgKCF0cnlMb2FkRXh0ZW5zaW9uKG5hbWUpKSB7XG4gICAgICBjb25maWcub25EZXN0cm95KClcbiAgICAgIGNvbmZpZy5vbkRvbmUoJ1wiJyArIG5hbWUgKyAnXCIgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgV2ViR0wgY29udGV4dCwgdHJ5IHVwZ3JhZGluZyB5b3VyIHN5c3RlbSBvciBhIGRpZmZlcmVudCBicm93c2VyJylcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgY29uZmlnLm9wdGlvbmFsRXh0ZW5zaW9ucy5mb3JFYWNoKHRyeUxvYWRFeHRlbnNpb24pXG5cbiAgcmV0dXJuIHtcbiAgICBleHRlbnNpb25zOiBleHRlbnNpb25zLFxuICAgIHJlc3RvcmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIE9iamVjdC5rZXlzKGV4dGVuc2lvbnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKGV4dGVuc2lvbnNbbmFtZV0gJiYgIXRyeUxvYWRFeHRlbnNpb24obmFtZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyhyZWdsKTogZXJyb3IgcmVzdG9yaW5nIGV4dGVuc2lvbiAnICsgbmFtZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9vcCAobiwgZikge1xuICB2YXIgcmVzdWx0ID0gQXJyYXkobilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICByZXN1bHRbaV0gPSBmKGkpXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG52YXIgR0xfQllURSQxID0gNTEyMFxudmFyIEdMX1VOU0lHTkVEX0JZVEUkMiA9IDUxMjFcbnZhciBHTF9TSE9SVCQxID0gNTEyMlxudmFyIEdMX1VOU0lHTkVEX1NIT1JUJDEgPSA1MTIzXG52YXIgR0xfSU5UJDEgPSA1MTI0XG52YXIgR0xfVU5TSUdORURfSU5UJDEgPSA1MTI1XG52YXIgR0xfRkxPQVQkMiA9IDUxMjZcblxuZnVuY3Rpb24gbmV4dFBvdzE2ICh2KSB7XG4gIGZvciAodmFyIGkgPSAxNjsgaSA8PSAoMSA8PCAyOCk7IGkgKj0gMTYpIHtcbiAgICBpZiAodiA8PSBpKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gMFxufVxuXG5mdW5jdGlvbiBsb2cyICh2KSB7XG4gIHZhciByLCBzaGlmdFxuICByID0gKHYgPiAweEZGRkYpIDw8IDRcbiAgdiA+Pj49IHJcbiAgc2hpZnQgPSAodiA+IDB4RkYpIDw8IDNcbiAgdiA+Pj49IHNoaWZ0OyByIHw9IHNoaWZ0XG4gIHNoaWZ0ID0gKHYgPiAweEYpIDw8IDJcbiAgdiA+Pj49IHNoaWZ0OyByIHw9IHNoaWZ0XG4gIHNoaWZ0ID0gKHYgPiAweDMpIDw8IDFcbiAgdiA+Pj49IHNoaWZ0OyByIHw9IHNoaWZ0XG4gIHJldHVybiByIHwgKHYgPj4gMSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlUG9vbCAoKSB7XG4gIHZhciBidWZmZXJQb29sID0gbG9vcCg4LCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFtdXG4gIH0pXG5cbiAgZnVuY3Rpb24gYWxsb2MgKG4pIHtcbiAgICB2YXIgc3ogPSBuZXh0UG93MTYobilcbiAgICB2YXIgYmluID0gYnVmZmVyUG9vbFtsb2cyKHN6KSA+PiAyXVxuICAgIGlmIChiaW4ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGJpbi5wb3AoKVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKHN6KVxuICB9XG5cbiAgZnVuY3Rpb24gZnJlZSAoYnVmKSB7XG4gICAgYnVmZmVyUG9vbFtsb2cyKGJ1Zi5ieXRlTGVuZ3RoKSA+PiAyXS5wdXNoKGJ1ZilcbiAgfVxuXG4gIGZ1bmN0aW9uIGFsbG9jVHlwZSAodHlwZSwgbikge1xuICAgIHZhciByZXN1bHQgPSBudWxsXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEdMX0JZVEUkMTpcbiAgICAgICAgcmVzdWx0ID0gbmV3IEludDhBcnJheShhbGxvYyhuKSwgMCwgbilcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURSQyOlxuICAgICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShhbGxvYyhuKSwgMCwgbilcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgR0xfU0hPUlQkMTpcbiAgICAgICAgcmVzdWx0ID0gbmV3IEludDE2QXJyYXkoYWxsb2MoMiAqIG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVCQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgVWludDE2QXJyYXkoYWxsb2MoMiAqIG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9JTlQkMTpcbiAgICAgICAgcmVzdWx0ID0gbmV3IEludDMyQXJyYXkoYWxsb2MoNCAqIG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQkMTpcbiAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQzMkFycmF5KGFsbG9jKDQgKiBuKSwgMCwgbilcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgR0xfRkxPQVQkMjpcbiAgICAgICAgcmVzdWx0ID0gbmV3IEZsb2F0MzJBcnJheShhbGxvYyg0ICogbiksIDAsIG4pXG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCAhPT0gbikge1xuICAgICAgcmV0dXJuIHJlc3VsdC5zdWJhcnJheSgwLCBuKVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmdW5jdGlvbiBmcmVlVHlwZSAoYXJyYXkpIHtcbiAgICBmcmVlKGFycmF5LmJ1ZmZlcilcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWxsb2M6IGFsbG9jLFxuICAgIGZyZWU6IGZyZWUsXG4gICAgYWxsb2NUeXBlOiBhbGxvY1R5cGUsXG4gICAgZnJlZVR5cGU6IGZyZWVUeXBlXG4gIH1cbn1cblxudmFyIHBvb2wgPSBjcmVhdGVQb29sKClcblxuLy8gemVybyBwb29sIGZvciBpbml0aWFsIHplcm8gZGF0YVxucG9vbC56ZXJvID0gY3JlYXRlUG9vbCgpXG5cbnZhciBHTF9TVUJQSVhFTF9CSVRTID0gMHgwRDUwXG52YXIgR0xfUkVEX0JJVFMgPSAweDBENTJcbnZhciBHTF9HUkVFTl9CSVRTID0gMHgwRDUzXG52YXIgR0xfQkxVRV9CSVRTID0gMHgwRDU0XG52YXIgR0xfQUxQSEFfQklUUyA9IDB4MEQ1NVxudmFyIEdMX0RFUFRIX0JJVFMgPSAweDBENTZcbnZhciBHTF9TVEVOQ0lMX0JJVFMgPSAweDBENTdcblxudmFyIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRSA9IDB4ODQ2RFxudmFyIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRSA9IDB4ODQ2RVxuXG52YXIgR0xfTUFYX1RFWFRVUkVfU0laRSA9IDB4MEQzM1xudmFyIEdMX01BWF9WSUVXUE9SVF9ESU1TID0gMHgwRDNBXG52YXIgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTID0gMHg4ODY5XG52YXIgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgPSAweDhERkJcbnZhciBHTF9NQVhfVkFSWUlOR19WRUNUT1JTID0gMHg4REZDXG52YXIgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDhCNERcbnZhciBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDhCNENcbnZhciBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4ODg3MlxudmFyIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgPSAweDhERkRcbnZhciBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID0gMHg4NTFDXG52YXIgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFID0gMHg4NEU4XG5cbnZhciBHTF9WRU5ET1IgPSAweDFGMDBcbnZhciBHTF9SRU5ERVJFUiA9IDB4MUYwMVxudmFyIEdMX1ZFUlNJT04gPSAweDFGMDJcbnZhciBHTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gPSAweDhCOENcblxudmFyIEdMX01BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCA9IDB4ODRGRlxuXG52YXIgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMID0gMHg4Q0RGXG52YXIgR0xfTUFYX0RSQVdfQlVGRkVSU19XRUJHTCA9IDB4ODgyNFxuXG52YXIgR0xfVEVYVFVSRV8yRCA9IDB4MERFMVxudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVAgPSAweDg1MTNcbnZhciBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPSAweDg1MTVcbnZhciBHTF9URVhUVVJFMCA9IDB4ODRDMFxudmFyIEdMX1JHQkEgPSAweDE5MDhcbnZhciBHTF9GTE9BVCQxID0gMHgxNDA2XG52YXIgR0xfVU5TSUdORURfQllURSQxID0gMHgxNDAxXG52YXIgR0xfRlJBTUVCVUZGRVIgPSAweDhENDBcbnZhciBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSA9IDB4OENENVxudmFyIEdMX0NPTE9SX0FUVEFDSE1FTlQwID0gMHg4Q0UwXG52YXIgR0xfQ09MT1JfQlVGRkVSX0JJVCQxID0gMHg0MDAwXG5cbnZhciB3cmFwTGltaXRzID0gZnVuY3Rpb24gKGdsLCBleHRlbnNpb25zKSB7XG4gIHZhciBtYXhBbmlzb3Ryb3BpYyA9IDFcbiAgaWYgKGV4dGVuc2lvbnMuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljKSB7XG4gICAgbWF4QW5pc290cm9waWMgPSBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKVxuICB9XG5cbiAgdmFyIG1heERyYXdidWZmZXJzID0gMVxuICB2YXIgbWF4Q29sb3JBdHRhY2htZW50cyA9IDFcbiAgaWYgKGV4dGVuc2lvbnMud2ViZ2xfZHJhd19idWZmZXJzKSB7XG4gICAgbWF4RHJhd2J1ZmZlcnMgPSBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX0RSQVdfQlVGRkVSU19XRUJHTClcbiAgICBtYXhDb2xvckF0dGFjaG1lbnRzID0gZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9DT0xPUl9BVFRBQ0hNRU5UU19XRUJHTClcbiAgfVxuXG4gIC8vIGRldGVjdCBpZiByZWFkaW5nIGZsb2F0IHRleHR1cmVzIGlzIGF2YWlsYWJsZSAoU2FmYXJpIGRvZXNuJ3Qgc3VwcG9ydClcbiAgdmFyIHJlYWRGbG9hdCA9ICEhZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9mbG9hdFxuICBpZiAocmVhZEZsb2F0KSB7XG4gICAgdmFyIHJlYWRGbG9hdFRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKClcbiAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCByZWFkRmxvYXRUZXh0dXJlKVxuICAgIGdsLnRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgMSwgMSwgMCwgR0xfUkdCQSwgR0xfRkxPQVQkMSwgbnVsbClcblxuICAgIHZhciBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpXG4gICAgZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pXG4gICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCByZWFkRmxvYXRUZXh0dXJlLCAwKVxuICAgIGdsLmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG51bGwpXG5cbiAgICBpZiAoZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUikgIT09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSByZWFkRmxvYXQgPSBmYWxzZVxuXG4gICAgZWxzZSB7XG4gICAgICBnbC52aWV3cG9ydCgwLCAwLCAxLCAxKVxuICAgICAgZ2wuY2xlYXJDb2xvcigxLjAsIDAuMCwgMC4wLCAxLjApXG4gICAgICBnbC5jbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUJDEpXG4gICAgICB2YXIgcGl4ZWxzID0gcG9vbC5hbGxvY1R5cGUoR0xfRkxPQVQkMSwgNClcbiAgICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgMSwgMSwgR0xfUkdCQSwgR0xfRkxPQVQkMSwgcGl4ZWxzKVxuXG4gICAgICBpZiAoZ2wuZ2V0RXJyb3IoKSkgcmVhZEZsb2F0ID0gZmFsc2VcbiAgICAgIGVsc2Uge1xuICAgICAgICBnbC5kZWxldGVGcmFtZWJ1ZmZlcihmYm8pXG4gICAgICAgIGdsLmRlbGV0ZVRleHR1cmUocmVhZEZsb2F0VGV4dHVyZSlcblxuICAgICAgICByZWFkRmxvYXQgPSBwaXhlbHNbMF0gPT09IDEuMFxuICAgICAgfVxuXG4gICAgICBwb29sLmZyZWVUeXBlKHBpeGVscylcbiAgICB9XG4gIH1cblxuICAvLyBkZXRlY3Qgbm9uIHBvd2VyIG9mIHR3byBjdWJlIHRleHR1cmVzIHN1cHBvcnQgKElFIGRvZXNuJ3Qgc3VwcG9ydClcbiAgdmFyIGlzSUUgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgL1RyaWRlbnRcXC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pIHx8IC9FZGdlLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKVxuXG4gIHZhciBucG90VGV4dHVyZUN1YmUgPSB0cnVlXG5cbiAgaWYgKCFpc0lFKSB7XG4gICAgdmFyIGN1YmVUZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpXG4gICAgdmFyIGRhdGEgPSBwb29sLmFsbG9jVHlwZShHTF9VTlNJR05FRF9CWVRFJDEsIDM2KVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApXG4gICAgZ2wuYmluZFRleHR1cmUoR0xfVEVYVFVSRV9DVUJFX01BUCwgY3ViZVRleHR1cmUpXG4gICAgZ2wudGV4SW1hZ2UyRChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAsIEdMX1JHQkEsIDMsIDMsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUkMSwgZGF0YSlcbiAgICBwb29sLmZyZWVUeXBlKGRhdGEpXG4gICAgZ2wuYmluZFRleHR1cmUoR0xfVEVYVFVSRV9DVUJFX01BUCwgbnVsbClcbiAgICBnbC5kZWxldGVUZXh0dXJlKGN1YmVUZXh0dXJlKVxuICAgIG5wb3RUZXh0dXJlQ3ViZSA9ICFnbC5nZXRFcnJvcigpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8vIGRyYXdpbmcgYnVmZmVyIGJpdCBkZXB0aFxuICAgIGNvbG9yQml0czogW1xuICAgICAgZ2wuZ2V0UGFyYW1ldGVyKEdMX1JFRF9CSVRTKSxcbiAgICAgIGdsLmdldFBhcmFtZXRlcihHTF9HUkVFTl9CSVRTKSxcbiAgICAgIGdsLmdldFBhcmFtZXRlcihHTF9CTFVFX0JJVFMpLFxuICAgICAgZ2wuZ2V0UGFyYW1ldGVyKEdMX0FMUEhBX0JJVFMpXG4gICAgXSxcbiAgICBkZXB0aEJpdHM6IGdsLmdldFBhcmFtZXRlcihHTF9ERVBUSF9CSVRTKSxcbiAgICBzdGVuY2lsQml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX1NURU5DSUxfQklUUyksXG4gICAgc3VicGl4ZWxCaXRzOiBnbC5nZXRQYXJhbWV0ZXIoR0xfU1VCUElYRUxfQklUUyksXG5cbiAgICAvLyBzdXBwb3J0ZWQgZXh0ZW5zaW9uc1xuICAgIGV4dGVuc2lvbnM6IE9iamVjdC5rZXlzKGV4dGVuc2lvbnMpLmZpbHRlcihmdW5jdGlvbiAoZXh0KSB7XG4gICAgICByZXR1cm4gISFleHRlbnNpb25zW2V4dF1cbiAgICB9KSxcblxuICAgIC8vIG1heCBhbmlzbyBzYW1wbGVzXG4gICAgbWF4QW5pc290cm9waWM6IG1heEFuaXNvdHJvcGljLFxuXG4gICAgLy8gbWF4IGRyYXcgYnVmZmVyc1xuICAgIG1heERyYXdidWZmZXJzOiBtYXhEcmF3YnVmZmVycyxcbiAgICBtYXhDb2xvckF0dGFjaG1lbnRzOiBtYXhDb2xvckF0dGFjaG1lbnRzLFxuXG4gICAgLy8gcG9pbnQgYW5kIGxpbmUgc2l6ZSByYW5nZXNcbiAgICBwb2ludFNpemVEaW1zOiBnbC5nZXRQYXJhbWV0ZXIoR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFKSxcbiAgICBsaW5lV2lkdGhEaW1zOiBnbC5nZXRQYXJhbWV0ZXIoR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFKSxcbiAgICBtYXhWaWV3cG9ydERpbXM6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVklFV1BPUlRfRElNUyksXG4gICAgbWF4Q29tYmluZWRUZXh0dXJlVW5pdHM6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyksXG4gICAgbWF4Q3ViZU1hcFNpemU6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKSxcbiAgICBtYXhSZW5kZXJidWZmZXJTaXplOiBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFKSxcbiAgICBtYXhUZXh0dXJlVW5pdHM6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyksXG4gICAgbWF4VGV4dHVyZVNpemU6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVEVYVFVSRV9TSVpFKSxcbiAgICBtYXhBdHRyaWJ1dGVzOiBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX1ZFUlRFWF9BVFRSSUJTKSxcbiAgICBtYXhWZXJ0ZXhVbmlmb3JtczogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTKSxcbiAgICBtYXhWZXJ0ZXhUZXh0dXJlVW5pdHM6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMpLFxuICAgIG1heFZhcnlpbmdWZWN0b3JzOiBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX1ZBUllJTkdfVkVDVE9SUyksXG4gICAgbWF4RnJhZ21lbnRVbmlmb3JtczogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMpLFxuXG4gICAgLy8gdmVuZG9yIGluZm9cbiAgICBnbHNsOiBnbC5nZXRQYXJhbWV0ZXIoR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OKSxcbiAgICByZW5kZXJlcjogZ2wuZ2V0UGFyYW1ldGVyKEdMX1JFTkRFUkVSKSxcbiAgICB2ZW5kb3I6IGdsLmdldFBhcmFtZXRlcihHTF9WRU5ET1IpLFxuICAgIHZlcnNpb246IGdsLmdldFBhcmFtZXRlcihHTF9WRVJTSU9OKSxcblxuICAgIC8vIHF1aXJrc1xuICAgIHJlYWRGbG9hdDogcmVhZEZsb2F0LFxuICAgIG5wb3RUZXh0dXJlQ3ViZTogbnBvdFRleHR1cmVDdWJlXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNOREFycmF5TGlrZSAob2JqKSB7XG4gIHJldHVybiAoXG4gICAgISFvYmogJiZcbiAgICB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJlxuICAgIEFycmF5LmlzQXJyYXkob2JqLnNoYXBlKSAmJlxuICAgIEFycmF5LmlzQXJyYXkob2JqLnN0cmlkZSkgJiZcbiAgICB0eXBlb2Ygb2JqLm9mZnNldCA9PT0gJ251bWJlcicgJiZcbiAgICBvYmouc2hhcGUubGVuZ3RoID09PSBvYmouc3RyaWRlLmxlbmd0aCAmJlxuICAgIChBcnJheS5pc0FycmF5KG9iai5kYXRhKSB8fFxuICAgICAgaXNUeXBlZEFycmF5KG9iai5kYXRhKSkpXG59XG5cbnZhciB2YWx1ZXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBvYmpba2V5XSB9KVxufVxuXG52YXIgZmxhdHRlblV0aWxzID0ge1xuICBzaGFwZTogYXJyYXlTaGFwZSQxLFxuICBmbGF0dGVuOiBmbGF0dGVuQXJyYXlcbn07XG5cbmZ1bmN0aW9uIGZsYXR0ZW4xRCAoYXJyYXksIG54LCBvdXQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBueDsgKytpKSB7XG4gICAgb3V0W2ldID0gYXJyYXlbaV1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuMkQgKGFycmF5LCBueCwgbnksIG91dCkge1xuICB2YXIgcHRyID0gMFxuICBmb3IgKHZhciBpID0gMDsgaSA8IG54OyArK2kpIHtcbiAgICB2YXIgcm93ID0gYXJyYXlbaV1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG55OyArK2opIHtcbiAgICAgIG91dFtwdHIrK10gPSByb3dbal1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxhdHRlbjNEIChhcnJheSwgbngsIG55LCBueiwgb3V0LCBwdHJfKSB7XG4gIHZhciBwdHIgPSBwdHJfXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbng7ICsraSkge1xuICAgIHZhciByb3cgPSBhcnJheVtpXVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnk7ICsraikge1xuICAgICAgdmFyIGNvbCA9IHJvd1tqXVxuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuejsgKytrKSB7XG4gICAgICAgIG91dFtwdHIrK10gPSBjb2xba11cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxhdHRlblJlYyAoYXJyYXksIHNoYXBlLCBsZXZlbCwgb3V0LCBwdHIpIHtcbiAgdmFyIHN0cmlkZSA9IDFcbiAgZm9yICh2YXIgaSA9IGxldmVsICsgMTsgaSA8IHNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgc3RyaWRlICo9IHNoYXBlW2ldXG4gIH1cbiAgdmFyIG4gPSBzaGFwZVtsZXZlbF1cbiAgaWYgKHNoYXBlLmxlbmd0aCAtIGxldmVsID09PSA0KSB7XG4gICAgdmFyIG54ID0gc2hhcGVbbGV2ZWwgKyAxXVxuICAgIHZhciBueSA9IHNoYXBlW2xldmVsICsgMl1cbiAgICB2YXIgbnogPSBzaGFwZVtsZXZlbCArIDNdXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgZmxhdHRlbjNEKGFycmF5W2ldLCBueCwgbnksIG56LCBvdXQsIHB0cilcbiAgICAgIHB0ciArPSBzdHJpZGVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgZmxhdHRlblJlYyhhcnJheVtpXSwgc2hhcGUsIGxldmVsICsgMSwgb3V0LCBwdHIpXG4gICAgICBwdHIgKz0gc3RyaWRlXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW5BcnJheSAoYXJyYXksIHNoYXBlLCB0eXBlLCBvdXRfKSB7XG4gIHZhciBzeiA9IDFcbiAgaWYgKHNoYXBlLmxlbmd0aCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hhcGUubGVuZ3RoOyArK2kpIHtcbiAgICAgIHN6ICo9IHNoYXBlW2ldXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN6ID0gMFxuICB9XG4gIHZhciBvdXQgPSBvdXRfIHx8IHBvb2wuYWxsb2NUeXBlKHR5cGUsIHN6KVxuICBzd2l0Y2ggKHNoYXBlLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAxOlxuICAgICAgZmxhdHRlbjFEKGFycmF5LCBzaGFwZVswXSwgb3V0KVxuICAgICAgYnJlYWtcbiAgICBjYXNlIDI6XG4gICAgICBmbGF0dGVuMkQoYXJyYXksIHNoYXBlWzBdLCBzaGFwZVsxXSwgb3V0KVxuICAgICAgYnJlYWtcbiAgICBjYXNlIDM6XG4gICAgICBmbGF0dGVuM0QoYXJyYXksIHNoYXBlWzBdLCBzaGFwZVsxXSwgc2hhcGVbMl0sIG91dCwgMClcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIGZsYXR0ZW5SZWMoYXJyYXksIHNoYXBlLCAwLCBvdXQsIDApXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiBhcnJheVNoYXBlJDEgKGFycmF5Xykge1xuICB2YXIgc2hhcGUgPSBbXVxuICBmb3IgKHZhciBhcnJheSA9IGFycmF5XzsgYXJyYXkubGVuZ3RoOyBhcnJheSA9IGFycmF5WzBdKSB7XG4gICAgc2hhcGUucHVzaChhcnJheS5sZW5ndGgpXG4gIH1cbiAgcmV0dXJuIHNoYXBlXG59XG5cbnZhciBhcnJheVR5cGVzID0gIHtcblx0XCJbb2JqZWN0IEludDhBcnJheV1cIjogNTEyMCxcblx0XCJbb2JqZWN0IEludDE2QXJyYXldXCI6IDUxMjIsXG5cdFwiW29iamVjdCBJbnQzMkFycmF5XVwiOiA1MTI0LFxuXHRcIltvYmplY3QgVWludDhBcnJheV1cIjogNTEyMSxcblx0XCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiOiA1MTIxLFxuXHRcIltvYmplY3QgVWludDE2QXJyYXldXCI6IDUxMjMsXG5cdFwiW29iamVjdCBVaW50MzJBcnJheV1cIjogNTEyNSxcblx0XCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIjogNTEyNixcblx0XCJbb2JqZWN0IEZsb2F0NjRBcnJheV1cIjogNTEyMSxcblx0XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiOiA1MTIxXG59O1xuXG52YXIgaW50OCA9IDUxMjA7XG52YXIgaW50MTYgPSA1MTIyO1xudmFyIGludDMyID0gNTEyNDtcbnZhciB1aW50OCA9IDUxMjE7XG52YXIgdWludDE2ID0gNTEyMztcbnZhciB1aW50MzIgPSA1MTI1O1xudmFyIGZsb2F0ID0gNTEyNjtcbnZhciBmbG9hdDMyID0gNTEyNjtcbnZhciBnbFR5cGVzID0ge1xuXHRpbnQ4OiBpbnQ4LFxuXHRpbnQxNjogaW50MTYsXG5cdGludDMyOiBpbnQzMixcblx0dWludDg6IHVpbnQ4LFxuXHR1aW50MTY6IHVpbnQxNixcblx0dWludDMyOiB1aW50MzIsXG5cdGZsb2F0OiBmbG9hdCxcblx0ZmxvYXQzMjogZmxvYXQzMlxufTtcblxudmFyIGR5bmFtaWMkMSA9IDM1MDQ4O1xudmFyIHN0cmVhbSA9IDM1MDQwO1xudmFyIHVzYWdlVHlwZXMgPSB7XG5cdGR5bmFtaWM6IGR5bmFtaWMkMSxcblx0c3RyZWFtOiBzdHJlYW0sXG5cdFwic3RhdGljXCI6IDM1MDQ0XG59O1xuXG52YXIgYXJyYXlGbGF0dGVuID0gZmxhdHRlblV0aWxzLmZsYXR0ZW5cbnZhciBhcnJheVNoYXBlID0gZmxhdHRlblV0aWxzLnNoYXBlXG5cbnZhciBHTF9TVEFUSUNfRFJBVyA9IDB4ODhFNFxudmFyIEdMX1NUUkVBTV9EUkFXID0gMHg4OEUwXG5cbnZhciBHTF9VTlNJR05FRF9CWVRFJDMgPSA1MTIxXG52YXIgR0xfRkxPQVQkMyA9IDUxMjZcblxudmFyIERUWVBFU19TSVpFUyA9IFtdXG5EVFlQRVNfU0laRVNbNTEyMF0gPSAxIC8vIGludDhcbkRUWVBFU19TSVpFU1s1MTIyXSA9IDIgLy8gaW50MTZcbkRUWVBFU19TSVpFU1s1MTI0XSA9IDQgLy8gaW50MzJcbkRUWVBFU19TSVpFU1s1MTIxXSA9IDEgLy8gdWludDhcbkRUWVBFU19TSVpFU1s1MTIzXSA9IDIgLy8gdWludDE2XG5EVFlQRVNfU0laRVNbNTEyNV0gPSA0IC8vIHVpbnQzMlxuRFRZUEVTX1NJWkVTWzUxMjZdID0gNCAvLyBmbG9hdDMyXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlDb2RlIChkYXRhKSB7XG4gIHJldHVybiBhcnJheVR5cGVzW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhKV0gfCAwXG59XG5cbmZ1bmN0aW9uIGNvcHlBcnJheSAob3V0LCBpbnApIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnAubGVuZ3RoOyArK2kpIHtcbiAgICBvdXRbaV0gPSBpbnBbaV1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc3Bvc2UgKFxuICByZXN1bHQsIGRhdGEsIHNoYXBlWCwgc2hhcGVZLCBzdHJpZGVYLCBzdHJpZGVZLCBvZmZzZXQpIHtcbiAgdmFyIHB0ciA9IDBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFwZVg7ICsraSkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2hhcGVZOyArK2opIHtcbiAgICAgIHJlc3VsdFtwdHIrK10gPSBkYXRhW3N0cmlkZVggKiBpICsgc3RyaWRlWSAqIGogKyBvZmZzZXRdXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyYXBCdWZmZXJTdGF0ZSAoZ2wsIHN0YXRzLCBjb25maWcsIGRlc3Ryb3lCdWZmZXIpIHtcbiAgdmFyIGJ1ZmZlckNvdW50ID0gMFxuICB2YXIgYnVmZmVyU2V0ID0ge31cblxuICBmdW5jdGlvbiBSRUdMQnVmZmVyICh0eXBlKSB7XG4gICAgdGhpcy5pZCA9IGJ1ZmZlckNvdW50KytcbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpXG4gICAgdGhpcy50eXBlID0gdHlwZVxuICAgIHRoaXMudXNhZ2UgPSBHTF9TVEFUSUNfRFJBV1xuICAgIHRoaXMuYnl0ZUxlbmd0aCA9IDBcbiAgICB0aGlzLmRpbWVuc2lvbiA9IDFcbiAgICB0aGlzLmR0eXBlID0gR0xfVU5TSUdORURfQllURSQzXG5cbiAgICB0aGlzLnBlcnNpc3RlbnREYXRhID0gbnVsbFxuXG4gICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICB0aGlzLnN0YXRzID0geyBzaXplOiAwIH1cbiAgICB9XG4gIH1cblxuICBSRUdMQnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKCkge1xuICAgIGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcilcbiAgfVxuXG4gIFJFR0xCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgZGVzdHJveSh0aGlzKVxuICB9XG5cbiAgdmFyIHN0cmVhbVBvb2wgPSBbXVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmVhbSAodHlwZSwgZGF0YSkge1xuICAgIHZhciBidWZmZXIgPSBzdHJlYW1Qb29sLnBvcCgpXG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgIGJ1ZmZlciA9IG5ldyBSRUdMQnVmZmVyKHR5cGUpXG4gICAgfVxuICAgIGJ1ZmZlci5iaW5kKClcbiAgICBpbml0QnVmZmVyRnJvbURhdGEoYnVmZmVyLCBkYXRhLCBHTF9TVFJFQU1fRFJBVywgMCwgMSwgZmFsc2UpXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveVN0cmVhbSAoc3RyZWFtJCQxKSB7XG4gICAgc3RyZWFtUG9vbC5wdXNoKHN0cmVhbSQkMSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRCdWZmZXJGcm9tVHlwZWRBcnJheSAoYnVmZmVyLCBkYXRhLCB1c2FnZSkge1xuICAgIGJ1ZmZlci5ieXRlTGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoXG4gICAgZ2wuYnVmZmVyRGF0YShidWZmZXIudHlwZSwgZGF0YSwgdXNhZ2UpXG4gIH1cblxuICBmdW5jdGlvbiBpbml0QnVmZmVyRnJvbURhdGEgKGJ1ZmZlciwgZGF0YSwgdXNhZ2UsIGR0eXBlLCBkaW1lbnNpb24sIHBlcnNpc3QpIHtcbiAgICB2YXIgc2hhcGVcbiAgICBidWZmZXIudXNhZ2UgPSB1c2FnZVxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBidWZmZXIuZHR5cGUgPSBkdHlwZSB8fCBHTF9GTE9BVCQzXG4gICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBmbGF0RGF0YVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhWzBdKSkge1xuICAgICAgICAgIHNoYXBlID0gYXJyYXlTaGFwZShkYXRhKVxuICAgICAgICAgIHZhciBkaW0gPSAxXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBzaGFwZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgZGltICo9IHNoYXBlW2ldXG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1ZmZlci5kaW1lbnNpb24gPSBkaW1cbiAgICAgICAgICBmbGF0RGF0YSA9IGFycmF5RmxhdHRlbihkYXRhLCBzaGFwZSwgYnVmZmVyLmR0eXBlKVxuICAgICAgICAgIGluaXRCdWZmZXJGcm9tVHlwZWRBcnJheShidWZmZXIsIGZsYXREYXRhLCB1c2FnZSlcbiAgICAgICAgICBpZiAocGVyc2lzdCkge1xuICAgICAgICAgICAgYnVmZmVyLnBlcnNpc3RlbnREYXRhID0gZmxhdERhdGFcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9vbC5mcmVlVHlwZShmbGF0RGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGFbMF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgYnVmZmVyLmRpbWVuc2lvbiA9IGRpbWVuc2lvblxuICAgICAgICAgIHZhciB0eXBlZERhdGEgPSBwb29sLmFsbG9jVHlwZShidWZmZXIuZHR5cGUsIGRhdGEubGVuZ3RoKVxuICAgICAgICAgIGNvcHlBcnJheSh0eXBlZERhdGEsIGRhdGEpXG4gICAgICAgICAgaW5pdEJ1ZmZlckZyb21UeXBlZEFycmF5KGJ1ZmZlciwgdHlwZWREYXRhLCB1c2FnZSlcbiAgICAgICAgICBpZiAocGVyc2lzdCkge1xuICAgICAgICAgICAgYnVmZmVyLnBlcnNpc3RlbnREYXRhID0gdHlwZWREYXRhXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvb2wuZnJlZVR5cGUodHlwZWREYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpc1R5cGVkQXJyYXkoZGF0YVswXSkpIHtcbiAgICAgICAgICBidWZmZXIuZGltZW5zaW9uID0gZGF0YVswXS5sZW5ndGhcbiAgICAgICAgICBidWZmZXIuZHR5cGUgPSBkdHlwZSB8fCB0eXBlZEFycmF5Q29kZShkYXRhWzBdKSB8fCBHTF9GTE9BVCQzXG4gICAgICAgICAgZmxhdERhdGEgPSBhcnJheUZsYXR0ZW4oXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgW2RhdGEubGVuZ3RoLCBkYXRhWzBdLmxlbmd0aF0sXG4gICAgICAgICAgICBidWZmZXIuZHR5cGUpXG4gICAgICAgICAgaW5pdEJ1ZmZlckZyb21UeXBlZEFycmF5KGJ1ZmZlciwgZmxhdERhdGEsIHVzYWdlKVxuICAgICAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgICAgICBidWZmZXIucGVyc2lzdGVudERhdGEgPSBmbGF0RGF0YVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb29sLmZyZWVUeXBlKGZsYXREYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGJ1ZmZlciBkYXRhJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNUeXBlZEFycmF5KGRhdGEpKSB7XG4gICAgICBidWZmZXIuZHR5cGUgPSBkdHlwZSB8fCB0eXBlZEFycmF5Q29kZShkYXRhKVxuICAgICAgYnVmZmVyLmRpbWVuc2lvbiA9IGRpbWVuc2lvblxuICAgICAgaW5pdEJ1ZmZlckZyb21UeXBlZEFycmF5KGJ1ZmZlciwgZGF0YSwgdXNhZ2UpXG4gICAgICBpZiAocGVyc2lzdCkge1xuICAgICAgICBidWZmZXIucGVyc2lzdGVudERhdGEgPSBuZXcgVWludDhBcnJheShuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlcikpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc05EQXJyYXlMaWtlKGRhdGEpKSB7XG4gICAgICBzaGFwZSA9IGRhdGEuc2hhcGVcbiAgICAgIHZhciBzdHJpZGUgPSBkYXRhLnN0cmlkZVxuICAgICAgdmFyIG9mZnNldCA9IGRhdGEub2Zmc2V0XG5cbiAgICAgIHZhciBzaGFwZVggPSAwXG4gICAgICB2YXIgc2hhcGVZID0gMFxuICAgICAgdmFyIHN0cmlkZVggPSAwXG4gICAgICB2YXIgc3RyaWRlWSA9IDBcbiAgICAgIGlmIChzaGFwZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgc2hhcGVYID0gc2hhcGVbMF1cbiAgICAgICAgc2hhcGVZID0gMVxuICAgICAgICBzdHJpZGVYID0gc3RyaWRlWzBdXG4gICAgICAgIHN0cmlkZVkgPSAwXG4gICAgICB9IGVsc2UgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBzaGFwZVggPSBzaGFwZVswXVxuICAgICAgICBzaGFwZVkgPSBzaGFwZVsxXVxuICAgICAgICBzdHJpZGVYID0gc3RyaWRlWzBdXG4gICAgICAgIHN0cmlkZVkgPSBzdHJpZGVbMV1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgc2hhcGUnKVxuICAgICAgfVxuXG4gICAgICBidWZmZXIuZHR5cGUgPSBkdHlwZSB8fCB0eXBlZEFycmF5Q29kZShkYXRhLmRhdGEpIHx8IEdMX0ZMT0FUJDNcbiAgICAgIGJ1ZmZlci5kaW1lbnNpb24gPSBzaGFwZVlcblxuICAgICAgdmFyIHRyYW5zcG9zZURhdGEgPSBwb29sLmFsbG9jVHlwZShidWZmZXIuZHR5cGUsIHNoYXBlWCAqIHNoYXBlWSlcbiAgICAgIHRyYW5zcG9zZSh0cmFuc3Bvc2VEYXRhLFxuICAgICAgICBkYXRhLmRhdGEsXG4gICAgICAgIHNoYXBlWCwgc2hhcGVZLFxuICAgICAgICBzdHJpZGVYLCBzdHJpZGVZLFxuICAgICAgICBvZmZzZXQpXG4gICAgICBpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkoYnVmZmVyLCB0cmFuc3Bvc2VEYXRhLCB1c2FnZSlcbiAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgIGJ1ZmZlci5wZXJzaXN0ZW50RGF0YSA9IHRyYW5zcG9zZURhdGFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvb2wuZnJlZVR5cGUodHJhbnNwb3NlRGF0YSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgYnVmZmVyLmR0eXBlID0gR0xfVU5TSUdORURfQllURSQzXG4gICAgICBidWZmZXIuZGltZW5zaW9uID0gZGltZW5zaW9uXG4gICAgICBpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkoYnVmZmVyLCBkYXRhLCB1c2FnZSlcbiAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgIGJ1ZmZlci5wZXJzaXN0ZW50RGF0YSA9IG5ldyBVaW50OEFycmF5KG5ldyBVaW50OEFycmF5KGRhdGEpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGJ1ZmZlciBkYXRhJylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95IChidWZmZXIpIHtcbiAgICBzdGF0cy5idWZmZXJDb3VudC0tXG5cbiAgICAvLyByZW1vdmUgYXR0cmlidXRlIGxpbmtcbiAgICBkZXN0cm95QnVmZmVyKGJ1ZmZlcilcblxuICAgIHZhciBoYW5kbGUgPSBidWZmZXIuYnVmZmVyXG4gICAgY2hlY2skMShoYW5kbGUsICdidWZmZXIgbXVzdCBub3QgYmUgZGVsZXRlZCBhbHJlYWR5JylcbiAgICBnbC5kZWxldGVCdWZmZXIoaGFuZGxlKVxuICAgIGJ1ZmZlci5idWZmZXIgPSBudWxsXG4gICAgZGVsZXRlIGJ1ZmZlclNldFtidWZmZXIuaWRdXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVCdWZmZXIgKG9wdGlvbnMsIHR5cGUsIGRlZmVySW5pdCwgcGVyc2lzdGVudCkge1xuICAgIHN0YXRzLmJ1ZmZlckNvdW50KytcblxuICAgIHZhciBidWZmZXIgPSBuZXcgUkVHTEJ1ZmZlcih0eXBlKVxuICAgIGJ1ZmZlclNldFtidWZmZXIuaWRdID0gYnVmZmVyXG5cbiAgICBmdW5jdGlvbiByZWdsQnVmZmVyIChvcHRpb25zKSB7XG4gICAgICB2YXIgdXNhZ2UgPSBHTF9TVEFUSUNfRFJBV1xuICAgICAgdmFyIGRhdGEgPSBudWxsXG4gICAgICB2YXIgYnl0ZUxlbmd0aCA9IDBcbiAgICAgIHZhciBkdHlwZSA9IDBcbiAgICAgIHZhciBkaW1lbnNpb24gPSAxXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSB8fFxuICAgICAgICAgIGlzVHlwZWRBcnJheShvcHRpb25zKSB8fFxuICAgICAgICAgIGlzTkRBcnJheUxpa2Uob3B0aW9ucykgfHxcbiAgICAgICAgICBvcHRpb25zIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgZGF0YSA9IG9wdGlvbnNcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGJ5dGVMZW5ndGggPSBvcHRpb25zIHwgMFxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGNoZWNrJDEudHlwZShcbiAgICAgICAgICBvcHRpb25zLCAnb2JqZWN0JyxcbiAgICAgICAgICAnYnVmZmVyIGFyZ3VtZW50cyBtdXN0IGJlIGFuIG9iamVjdCwgYSBudW1iZXIgb3IgYW4gYXJyYXknKVxuXG4gICAgICAgIGlmICgnZGF0YScgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGNoZWNrJDEoXG4gICAgICAgICAgICBkYXRhID09PSBudWxsIHx8XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGRhdGEpIHx8XG4gICAgICAgICAgICBpc1R5cGVkQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgICAgIGlzTkRBcnJheUxpa2UoZGF0YSksXG4gICAgICAgICAgICAnaW52YWxpZCBkYXRhIGZvciBidWZmZXInKVxuICAgICAgICAgIGRhdGEgPSBvcHRpb25zLmRhdGFcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgndXNhZ2UnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihvcHRpb25zLnVzYWdlLCB1c2FnZVR5cGVzLCAnaW52YWxpZCBidWZmZXIgdXNhZ2UnKVxuICAgICAgICAgIHVzYWdlID0gdXNhZ2VUeXBlc1tvcHRpb25zLnVzYWdlXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCd0eXBlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIob3B0aW9ucy50eXBlLCBnbFR5cGVzLCAnaW52YWxpZCBidWZmZXIgdHlwZScpXG4gICAgICAgICAgZHR5cGUgPSBnbFR5cGVzW29wdGlvbnMudHlwZV1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnZGltZW5zaW9uJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgY2hlY2skMS50eXBlKG9wdGlvbnMuZGltZW5zaW9uLCAnbnVtYmVyJywgJ2ludmFsaWQgZGltZW5zaW9uJylcbiAgICAgICAgICBkaW1lbnNpb24gPSBvcHRpb25zLmRpbWVuc2lvbiB8IDBcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnbGVuZ3RoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgY2hlY2skMS5ubmkoYnl0ZUxlbmd0aCwgJ2J1ZmZlciBsZW5ndGggbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXInKVxuICAgICAgICAgIGJ5dGVMZW5ndGggPSBvcHRpb25zLmxlbmd0aCB8IDBcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBidWZmZXIuYmluZCgpXG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgLy8gIzQ3NVxuICAgICAgICBpZiAoYnl0ZUxlbmd0aCkgZ2wuYnVmZmVyRGF0YShidWZmZXIudHlwZSwgYnl0ZUxlbmd0aCwgdXNhZ2UpXG4gICAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IEdMX1VOU0lHTkVEX0JZVEUkM1xuICAgICAgICBidWZmZXIudXNhZ2UgPSB1c2FnZVxuICAgICAgICBidWZmZXIuZGltZW5zaW9uID0gZGltZW5zaW9uXG4gICAgICAgIGJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdEJ1ZmZlckZyb21EYXRhKGJ1ZmZlciwgZGF0YSwgdXNhZ2UsIGR0eXBlLCBkaW1lbnNpb24sIHBlcnNpc3RlbnQpXG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgICBidWZmZXIuc3RhdHMuc2l6ZSA9IGJ1ZmZlci5ieXRlTGVuZ3RoICogRFRZUEVTX1NJWkVTW2J1ZmZlci5kdHlwZV1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlZ2xCdWZmZXJcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRTdWJEYXRhIChkYXRhLCBvZmZzZXQpIHtcbiAgICAgIGNoZWNrJDEob2Zmc2V0ICsgZGF0YS5ieXRlTGVuZ3RoIDw9IGJ1ZmZlci5ieXRlTGVuZ3RoLFxuICAgICAgICAnaW52YWxpZCBidWZmZXIgc3ViZGF0YSBjYWxsLCBidWZmZXIgaXMgdG9vIHNtYWxsLiAnICsgJyBDYW5cXCd0IHdyaXRlIGRhdGEgb2Ygc2l6ZSAnICsgZGF0YS5ieXRlTGVuZ3RoICsgJyBzdGFydGluZyBmcm9tIG9mZnNldCAnICsgb2Zmc2V0ICsgJyB0byBhIGJ1ZmZlciBvZiBzaXplICcgKyBidWZmZXIuYnl0ZUxlbmd0aClcblxuICAgICAgZ2wuYnVmZmVyU3ViRGF0YShidWZmZXIudHlwZSwgb2Zmc2V0LCBkYXRhKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN1YmRhdGEgKGRhdGEsIG9mZnNldF8pIHtcbiAgICAgIHZhciBvZmZzZXQgPSAob2Zmc2V0XyB8fCAwKSB8IDBcbiAgICAgIHZhciBzaGFwZVxuICAgICAgYnVmZmVyLmJpbmQoKVxuICAgICAgaWYgKGlzVHlwZWRBcnJheShkYXRhKSB8fCBkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgc2V0U3ViRGF0YShkYXRhLCBvZmZzZXQpXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVswXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHZhciBjb252ZXJ0ZWQgPSBwb29sLmFsbG9jVHlwZShidWZmZXIuZHR5cGUsIGRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgY29weUFycmF5KGNvbnZlcnRlZCwgZGF0YSlcbiAgICAgICAgICAgIHNldFN1YkRhdGEoY29udmVydGVkLCBvZmZzZXQpXG4gICAgICAgICAgICBwb29sLmZyZWVUeXBlKGNvbnZlcnRlZClcbiAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVswXSkgfHwgaXNUeXBlZEFycmF5KGRhdGFbMF0pKSB7XG4gICAgICAgICAgICBzaGFwZSA9IGFycmF5U2hhcGUoZGF0YSlcbiAgICAgICAgICAgIHZhciBmbGF0RGF0YSA9IGFycmF5RmxhdHRlbihkYXRhLCBzaGFwZSwgYnVmZmVyLmR0eXBlKVxuICAgICAgICAgICAgc2V0U3ViRGF0YShmbGF0RGF0YSwgb2Zmc2V0KVxuICAgICAgICAgICAgcG9vbC5mcmVlVHlwZShmbGF0RGF0YSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBidWZmZXIgZGF0YScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzTkRBcnJheUxpa2UoZGF0YSkpIHtcbiAgICAgICAgc2hhcGUgPSBkYXRhLnNoYXBlXG4gICAgICAgIHZhciBzdHJpZGUgPSBkYXRhLnN0cmlkZVxuXG4gICAgICAgIHZhciBzaGFwZVggPSAwXG4gICAgICAgIHZhciBzaGFwZVkgPSAwXG4gICAgICAgIHZhciBzdHJpZGVYID0gMFxuICAgICAgICB2YXIgc3RyaWRlWSA9IDBcbiAgICAgICAgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHNoYXBlWCA9IHNoYXBlWzBdXG4gICAgICAgICAgc2hhcGVZID0gMVxuICAgICAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgICAgICBzdHJpZGVZID0gMFxuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHNoYXBlWCA9IHNoYXBlWzBdXG4gICAgICAgICAgc2hhcGVZID0gc2hhcGVbMV1cbiAgICAgICAgICBzdHJpZGVYID0gc3RyaWRlWzBdXG4gICAgICAgICAgc3RyaWRlWSA9IHN0cmlkZVsxXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgc2hhcGUnKVxuICAgICAgICB9XG4gICAgICAgIHZhciBkdHlwZSA9IEFycmF5LmlzQXJyYXkoZGF0YS5kYXRhKVxuICAgICAgICAgID8gYnVmZmVyLmR0eXBlXG4gICAgICAgICAgOiB0eXBlZEFycmF5Q29kZShkYXRhLmRhdGEpXG5cbiAgICAgICAgdmFyIHRyYW5zcG9zZURhdGEgPSBwb29sLmFsbG9jVHlwZShkdHlwZSwgc2hhcGVYICogc2hhcGVZKVxuICAgICAgICB0cmFuc3Bvc2UodHJhbnNwb3NlRGF0YSxcbiAgICAgICAgICBkYXRhLmRhdGEsXG4gICAgICAgICAgc2hhcGVYLCBzaGFwZVksXG4gICAgICAgICAgc3RyaWRlWCwgc3RyaWRlWSxcbiAgICAgICAgICBkYXRhLm9mZnNldClcbiAgICAgICAgc2V0U3ViRGF0YSh0cmFuc3Bvc2VEYXRhLCBvZmZzZXQpXG4gICAgICAgIHBvb2wuZnJlZVR5cGUodHJhbnNwb3NlRGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgZGF0YSBmb3IgYnVmZmVyIHN1YmRhdGEnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlZ2xCdWZmZXJcbiAgICB9XG5cbiAgICBpZiAoIWRlZmVySW5pdCkge1xuICAgICAgcmVnbEJ1ZmZlcihvcHRpb25zKVxuICAgIH1cblxuICAgIHJlZ2xCdWZmZXIuX3JlZ2xUeXBlID0gJ2J1ZmZlcidcbiAgICByZWdsQnVmZmVyLl9idWZmZXIgPSBidWZmZXJcbiAgICByZWdsQnVmZmVyLnN1YmRhdGEgPSBzdWJkYXRhXG4gICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICByZWdsQnVmZmVyLnN0YXRzID0gYnVmZmVyLnN0YXRzXG4gICAgfVxuICAgIHJlZ2xCdWZmZXIuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsgZGVzdHJveShidWZmZXIpIH1cblxuICAgIHJldHVybiByZWdsQnVmZmVyXG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlQnVmZmVycyAoKSB7XG4gICAgdmFsdWVzKGJ1ZmZlclNldCkuZm9yRWFjaChmdW5jdGlvbiAoYnVmZmVyKSB7XG4gICAgICBidWZmZXIuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKClcbiAgICAgIGdsLmJpbmRCdWZmZXIoYnVmZmVyLnR5cGUsIGJ1ZmZlci5idWZmZXIpXG4gICAgICBnbC5idWZmZXJEYXRhKFxuICAgICAgICBidWZmZXIudHlwZSwgYnVmZmVyLnBlcnNpc3RlbnREYXRhIHx8IGJ1ZmZlci5ieXRlTGVuZ3RoLCBidWZmZXIudXNhZ2UpXG4gICAgfSlcbiAgfVxuXG4gIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgIHN0YXRzLmdldFRvdGFsQnVmZmVyU2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0b3RhbCA9IDBcbiAgICAgIC8vIFRPRE86IFJpZ2h0IG5vdywgdGhlIHN0cmVhbXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSB0b3RhbCBjb3VudC5cbiAgICAgIE9iamVjdC5rZXlzKGJ1ZmZlclNldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHRvdGFsICs9IGJ1ZmZlclNldFtrZXldLnN0YXRzLnNpemVcbiAgICAgIH0pXG4gICAgICByZXR1cm4gdG90YWxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZTogY3JlYXRlQnVmZmVyLFxuXG4gICAgY3JlYXRlU3RyZWFtOiBjcmVhdGVTdHJlYW0sXG4gICAgZGVzdHJveVN0cmVhbTogZGVzdHJveVN0cmVhbSxcblxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YWx1ZXMoYnVmZmVyU2V0KS5mb3JFYWNoKGRlc3Ryb3kpXG4gICAgICBzdHJlYW1Qb29sLmZvckVhY2goZGVzdHJveSlcbiAgICB9LFxuXG4gICAgZ2V0QnVmZmVyOiBmdW5jdGlvbiAod3JhcHBlcikge1xuICAgICAgaWYgKHdyYXBwZXIgJiYgd3JhcHBlci5fYnVmZmVyIGluc3RhbmNlb2YgUkVHTEJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gd3JhcHBlci5fYnVmZmVyXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICByZXN0b3JlOiByZXN0b3JlQnVmZmVycyxcblxuICAgIF9pbml0QnVmZmVyOiBpbml0QnVmZmVyRnJvbURhdGFcbiAgfVxufVxuXG52YXIgcG9pbnRzID0gMDtcbnZhciBwb2ludCA9IDA7XG52YXIgbGluZXMgPSAxO1xudmFyIGxpbmUgPSAxO1xudmFyIHRyaWFuZ2xlcyA9IDQ7XG52YXIgdHJpYW5nbGUgPSA0O1xudmFyIHByaW1UeXBlcyA9IHtcblx0cG9pbnRzOiBwb2ludHMsXG5cdHBvaW50OiBwb2ludCxcblx0bGluZXM6IGxpbmVzLFxuXHRsaW5lOiBsaW5lLFxuXHR0cmlhbmdsZXM6IHRyaWFuZ2xlcyxcblx0dHJpYW5nbGU6IHRyaWFuZ2xlLFxuXHRcImxpbmUgbG9vcFwiOiAyLFxuXHRcImxpbmUgc3RyaXBcIjogMyxcblx0XCJ0cmlhbmdsZSBzdHJpcFwiOiA1LFxuXHRcInRyaWFuZ2xlIGZhblwiOiA2XG59O1xuXG52YXIgR0xfUE9JTlRTID0gMFxudmFyIEdMX0xJTkVTID0gMVxudmFyIEdMX1RSSUFOR0xFUyA9IDRcblxudmFyIEdMX0JZVEUkMiA9IDUxMjBcbnZhciBHTF9VTlNJR05FRF9CWVRFJDQgPSA1MTIxXG52YXIgR0xfU0hPUlQkMiA9IDUxMjJcbnZhciBHTF9VTlNJR05FRF9TSE9SVCQyID0gNTEyM1xudmFyIEdMX0lOVCQyID0gNTEyNFxudmFyIEdMX1VOU0lHTkVEX0lOVCQyID0gNTEyNVxuXG52YXIgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIgPSAzNDk2M1xuXG52YXIgR0xfU1RSRUFNX0RSQVckMSA9IDB4ODhFMFxudmFyIEdMX1NUQVRJQ19EUkFXJDEgPSAweDg4RTRcblxuZnVuY3Rpb24gd3JhcEVsZW1lbnRzU3RhdGUgKGdsLCBleHRlbnNpb25zLCBidWZmZXJTdGF0ZSwgc3RhdHMpIHtcbiAgdmFyIGVsZW1lbnRTZXQgPSB7fVxuICB2YXIgZWxlbWVudENvdW50ID0gMFxuXG4gIHZhciBlbGVtZW50VHlwZXMgPSB7XG4gICAgJ3VpbnQ4JzogR0xfVU5TSUdORURfQllURSQ0LFxuICAgICd1aW50MTYnOiBHTF9VTlNJR05FRF9TSE9SVCQyXG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy5vZXNfZWxlbWVudF9pbmRleF91aW50KSB7XG4gICAgZWxlbWVudFR5cGVzLnVpbnQzMiA9IEdMX1VOU0lHTkVEX0lOVCQyXG4gIH1cblxuICBmdW5jdGlvbiBSRUdMRWxlbWVudEJ1ZmZlciAoYnVmZmVyKSB7XG4gICAgdGhpcy5pZCA9IGVsZW1lbnRDb3VudCsrXG4gICAgZWxlbWVudFNldFt0aGlzLmlkXSA9IHRoaXNcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlclxuICAgIHRoaXMucHJpbVR5cGUgPSBHTF9UUklBTkdMRVNcbiAgICB0aGlzLnZlcnRDb3VudCA9IDBcbiAgICB0aGlzLnR5cGUgPSAwXG4gIH1cblxuICBSRUdMRWxlbWVudEJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmJ1ZmZlci5iaW5kKClcbiAgfVxuXG4gIHZhciBidWZmZXJQb29sID0gW11cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50U3RyZWFtIChkYXRhKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJ1ZmZlclBvb2wucG9wKClcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmVzdWx0ID0gbmV3IFJFR0xFbGVtZW50QnVmZmVyKGJ1ZmZlclN0YXRlLmNyZWF0ZShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsXG4gICAgICAgIHRydWUsXG4gICAgICAgIGZhbHNlKS5fYnVmZmVyKVxuICAgIH1cbiAgICBpbml0RWxlbWVudHMocmVzdWx0LCBkYXRhLCBHTF9TVFJFQU1fRFJBVyQxLCAtMSwgLTEsIDAsIDApXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveUVsZW1lbnRTdHJlYW0gKGVsZW1lbnRzKSB7XG4gICAgYnVmZmVyUG9vbC5wdXNoKGVsZW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEVsZW1lbnRzIChcbiAgICBlbGVtZW50cyxcbiAgICBkYXRhLFxuICAgIHVzYWdlLFxuICAgIHByaW0sXG4gICAgY291bnQsXG4gICAgYnl0ZUxlbmd0aCxcbiAgICB0eXBlKSB7XG4gICAgZWxlbWVudHMuYnVmZmVyLmJpbmQoKVxuICAgIHZhciBkdHlwZVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB2YXIgcHJlZGljdGVkVHlwZSA9IHR5cGVcbiAgICAgIGlmICghdHlwZSAmJiAoXG4gICAgICAgICFpc1R5cGVkQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgIChpc05EQXJyYXlMaWtlKGRhdGEpICYmICFpc1R5cGVkQXJyYXkoZGF0YS5kYXRhKSkpKSB7XG4gICAgICAgIHByZWRpY3RlZFR5cGUgPSBleHRlbnNpb25zLm9lc19lbGVtZW50X2luZGV4X3VpbnRcbiAgICAgICAgICA/IEdMX1VOU0lHTkVEX0lOVCQyXG4gICAgICAgICAgOiBHTF9VTlNJR05FRF9TSE9SVCQyXG4gICAgICB9XG4gICAgICBidWZmZXJTdGF0ZS5faW5pdEJ1ZmZlcihcbiAgICAgICAgZWxlbWVudHMuYnVmZmVyLFxuICAgICAgICBkYXRhLFxuICAgICAgICB1c2FnZSxcbiAgICAgICAgcHJlZGljdGVkVHlwZSxcbiAgICAgICAgMylcbiAgICB9IGVsc2Uge1xuICAgICAgZ2wuYnVmZmVyRGF0YShHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgYnl0ZUxlbmd0aCwgdXNhZ2UpXG4gICAgICBlbGVtZW50cy5idWZmZXIuZHR5cGUgPSBkdHlwZSB8fCBHTF9VTlNJR05FRF9CWVRFJDRcbiAgICAgIGVsZW1lbnRzLmJ1ZmZlci51c2FnZSA9IHVzYWdlXG4gICAgICBlbGVtZW50cy5idWZmZXIuZGltZW5zaW9uID0gM1xuICAgICAgZWxlbWVudHMuYnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG4gICAgfVxuXG4gICAgZHR5cGUgPSB0eXBlXG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICBzd2l0Y2ggKGVsZW1lbnRzLmJ1ZmZlci5kdHlwZSkge1xuICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEUkNDpcbiAgICAgICAgY2FzZSBHTF9CWVRFJDI6XG4gICAgICAgICAgZHR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDRcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQkMjpcbiAgICAgICAgY2FzZSBHTF9TSE9SVCQyOlxuICAgICAgICAgIGR0eXBlID0gR0xfVU5TSUdORURfU0hPUlQkMlxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQkMjpcbiAgICAgICAgY2FzZSBHTF9JTlQkMjpcbiAgICAgICAgICBkdHlwZSA9IEdMX1VOU0lHTkVEX0lOVCQyXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNoZWNrJDEucmFpc2UoJ3Vuc3VwcG9ydGVkIHR5cGUgZm9yIGVsZW1lbnQgYXJyYXknKVxuICAgICAgfVxuICAgICAgZWxlbWVudHMuYnVmZmVyLmR0eXBlID0gZHR5cGVcbiAgICB9XG4gICAgZWxlbWVudHMudHlwZSA9IGR0eXBlXG5cbiAgICAvLyBDaGVjayBvZXNfZWxlbWVudF9pbmRleF91aW50IGV4dGVuc2lvblxuICAgIGNoZWNrJDEoXG4gICAgICBkdHlwZSAhPT0gR0xfVU5TSUdORURfSU5UJDIgfHxcbiAgICAgICEhZXh0ZW5zaW9ucy5vZXNfZWxlbWVudF9pbmRleF91aW50LFxuICAgICAgJzMyIGJpdCBlbGVtZW50IGJ1ZmZlcnMgbm90IHN1cHBvcnRlZCwgZW5hYmxlIG9lc19lbGVtZW50X2luZGV4X3VpbnQgZmlyc3QnKVxuXG4gICAgLy8gdHJ5IHRvIGd1ZXNzIGRlZmF1bHQgcHJpbWl0aXZlIHR5cGUgYW5kIGFyZ3VtZW50c1xuICAgIHZhciB2ZXJ0Q291bnQgPSBjb3VudFxuICAgIGlmICh2ZXJ0Q291bnQgPCAwKSB7XG4gICAgICB2ZXJ0Q291bnQgPSBlbGVtZW50cy5idWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgaWYgKGR0eXBlID09PSBHTF9VTlNJR05FRF9TSE9SVCQyKSB7XG4gICAgICAgIHZlcnRDb3VudCA+Pj0gMVxuICAgICAgfSBlbHNlIGlmIChkdHlwZSA9PT0gR0xfVU5TSUdORURfSU5UJDIpIHtcbiAgICAgICAgdmVydENvdW50ID4+PSAyXG4gICAgICB9XG4gICAgfVxuICAgIGVsZW1lbnRzLnZlcnRDb3VudCA9IHZlcnRDb3VudFxuXG4gICAgLy8gdHJ5IHRvIGd1ZXNzIHByaW1pdGl2ZSB0eXBlIGZyb20gY2VsbCBkaW1lbnNpb25cbiAgICB2YXIgcHJpbVR5cGUgPSBwcmltXG4gICAgaWYgKHByaW0gPCAwKSB7XG4gICAgICBwcmltVHlwZSA9IEdMX1RSSUFOR0xFU1xuICAgICAgdmFyIGRpbWVuc2lvbiA9IGVsZW1lbnRzLmJ1ZmZlci5kaW1lbnNpb25cbiAgICAgIGlmIChkaW1lbnNpb24gPT09IDEpIHByaW1UeXBlID0gR0xfUE9JTlRTXG4gICAgICBpZiAoZGltZW5zaW9uID09PSAyKSBwcmltVHlwZSA9IEdMX0xJTkVTXG4gICAgICBpZiAoZGltZW5zaW9uID09PSAzKSBwcmltVHlwZSA9IEdMX1RSSUFOR0xFU1xuICAgIH1cbiAgICBlbGVtZW50cy5wcmltVHlwZSA9IHByaW1UeXBlXG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95RWxlbWVudHMgKGVsZW1lbnRzKSB7XG4gICAgc3RhdHMuZWxlbWVudHNDb3VudC0tXG5cbiAgICBjaGVjayQxKGVsZW1lbnRzLmJ1ZmZlciAhPT0gbnVsbCwgJ211c3Qgbm90IGRvdWJsZSBkZXN0cm95IGVsZW1lbnRzJylcbiAgICBkZWxldGUgZWxlbWVudFNldFtlbGVtZW50cy5pZF1cbiAgICBlbGVtZW50cy5idWZmZXIuZGVzdHJveSgpXG4gICAgZWxlbWVudHMuYnVmZmVyID0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudHMgKG9wdGlvbnMsIHBlcnNpc3RlbnQpIHtcbiAgICB2YXIgYnVmZmVyID0gYnVmZmVyU3RhdGUuY3JlYXRlKG51bGwsIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCB0cnVlKVxuICAgIHZhciBlbGVtZW50cyA9IG5ldyBSRUdMRWxlbWVudEJ1ZmZlcihidWZmZXIuX2J1ZmZlcilcbiAgICBzdGF0cy5lbGVtZW50c0NvdW50KytcblxuICAgIGZ1bmN0aW9uIHJlZ2xFbGVtZW50cyAob3B0aW9ucykge1xuICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIGJ1ZmZlcigpXG4gICAgICAgIGVsZW1lbnRzLnByaW1UeXBlID0gR0xfVFJJQU5HTEVTXG4gICAgICAgIGVsZW1lbnRzLnZlcnRDb3VudCA9IDBcbiAgICAgICAgZWxlbWVudHMudHlwZSA9IEdMX1VOU0lHTkVEX0JZVEUkNFxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYnVmZmVyKG9wdGlvbnMpXG4gICAgICAgIGVsZW1lbnRzLnByaW1UeXBlID0gR0xfVFJJQU5HTEVTXG4gICAgICAgIGVsZW1lbnRzLnZlcnRDb3VudCA9IG9wdGlvbnMgfCAwXG4gICAgICAgIGVsZW1lbnRzLnR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBkYXRhID0gbnVsbFxuICAgICAgICB2YXIgdXNhZ2UgPSBHTF9TVEFUSUNfRFJBVyQxXG4gICAgICAgIHZhciBwcmltVHlwZSA9IC0xXG4gICAgICAgIHZhciB2ZXJ0Q291bnQgPSAtMVxuICAgICAgICB2YXIgYnl0ZUxlbmd0aCA9IDBcbiAgICAgICAgdmFyIGR0eXBlID0gMFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSB8fFxuICAgICAgICAgICAgaXNUeXBlZEFycmF5KG9wdGlvbnMpIHx8XG4gICAgICAgICAgICBpc05EQXJyYXlMaWtlKG9wdGlvbnMpKSB7XG4gICAgICAgICAgZGF0YSA9IG9wdGlvbnNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGVjayQxLnR5cGUob3B0aW9ucywgJ29iamVjdCcsICdpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZWxlbWVudHMnKVxuICAgICAgICAgIGlmICgnZGF0YScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgZGF0YSA9IG9wdGlvbnMuZGF0YVxuICAgICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShkYXRhKSB8fFxuICAgICAgICAgICAgICAgIGlzVHlwZWRBcnJheShkYXRhKSB8fFxuICAgICAgICAgICAgICAgIGlzTkRBcnJheUxpa2UoZGF0YSksXG4gICAgICAgICAgICAgICdpbnZhbGlkIGRhdGEgZm9yIGVsZW1lbnQgYnVmZmVyJylcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCd1c2FnZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIoXG4gICAgICAgICAgICAgIG9wdGlvbnMudXNhZ2UsXG4gICAgICAgICAgICAgIHVzYWdlVHlwZXMsXG4gICAgICAgICAgICAgICdpbnZhbGlkIGVsZW1lbnQgYnVmZmVyIHVzYWdlJylcbiAgICAgICAgICAgIHVzYWdlID0gdXNhZ2VUeXBlc1tvcHRpb25zLnVzYWdlXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ3ByaW1pdGl2ZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIoXG4gICAgICAgICAgICAgIG9wdGlvbnMucHJpbWl0aXZlLFxuICAgICAgICAgICAgICBwcmltVHlwZXMsXG4gICAgICAgICAgICAgICdpbnZhbGlkIGVsZW1lbnQgYnVmZmVyIHByaW1pdGl2ZScpXG4gICAgICAgICAgICBwcmltVHlwZSA9IHByaW1UeXBlc1tvcHRpb25zLnByaW1pdGl2ZV1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCdjb3VudCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgICAgdHlwZW9mIG9wdGlvbnMuY291bnQgPT09ICdudW1iZXInICYmIG9wdGlvbnMuY291bnQgPj0gMCxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgdmVydGV4IGNvdW50IGZvciBlbGVtZW50cycpXG4gICAgICAgICAgICB2ZXJ0Q291bnQgPSBvcHRpb25zLmNvdW50IHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ3R5cGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKFxuICAgICAgICAgICAgICBvcHRpb25zLnR5cGUsXG4gICAgICAgICAgICAgIGVsZW1lbnRUeXBlcyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgYnVmZmVyIHR5cGUnKVxuICAgICAgICAgICAgZHR5cGUgPSBlbGVtZW50VHlwZXNbb3B0aW9ucy50eXBlXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ2xlbmd0aCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IG9wdGlvbnMubGVuZ3RoIHwgMFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdmVydENvdW50XG4gICAgICAgICAgICBpZiAoZHR5cGUgPT09IEdMX1VOU0lHTkVEX1NIT1JUJDIgfHwgZHR5cGUgPT09IEdMX1NIT1JUJDIpIHtcbiAgICAgICAgICAgICAgYnl0ZUxlbmd0aCAqPSAyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGR0eXBlID09PSBHTF9VTlNJR05FRF9JTlQkMiB8fCBkdHlwZSA9PT0gR0xfSU5UJDIpIHtcbiAgICAgICAgICAgICAgYnl0ZUxlbmd0aCAqPSA0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluaXRFbGVtZW50cyhcbiAgICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHVzYWdlLFxuICAgICAgICAgIHByaW1UeXBlLFxuICAgICAgICAgIHZlcnRDb3VudCxcbiAgICAgICAgICBieXRlTGVuZ3RoLFxuICAgICAgICAgIGR0eXBlKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVnbEVsZW1lbnRzXG4gICAgfVxuXG4gICAgcmVnbEVsZW1lbnRzKG9wdGlvbnMpXG5cbiAgICByZWdsRWxlbWVudHMuX3JlZ2xUeXBlID0gJ2VsZW1lbnRzJ1xuICAgIHJlZ2xFbGVtZW50cy5fZWxlbWVudHMgPSBlbGVtZW50c1xuICAgIHJlZ2xFbGVtZW50cy5zdWJkYXRhID0gZnVuY3Rpb24gKGRhdGEsIG9mZnNldCkge1xuICAgICAgYnVmZmVyLnN1YmRhdGEoZGF0YSwgb2Zmc2V0KVxuICAgICAgcmV0dXJuIHJlZ2xFbGVtZW50c1xuICAgIH1cbiAgICByZWdsRWxlbWVudHMuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlc3Ryb3lFbGVtZW50cyhlbGVtZW50cylcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnbEVsZW1lbnRzXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZTogY3JlYXRlRWxlbWVudHMsXG4gICAgY3JlYXRlU3RyZWFtOiBjcmVhdGVFbGVtZW50U3RyZWFtLFxuICAgIGRlc3Ryb3lTdHJlYW06IGRlc3Ryb3lFbGVtZW50U3RyZWFtLFxuICAgIGdldEVsZW1lbnRzOiBmdW5jdGlvbiAoZWxlbWVudHMpIHtcbiAgICAgIGlmICh0eXBlb2YgZWxlbWVudHMgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICBlbGVtZW50cy5fZWxlbWVudHMgaW5zdGFuY2VvZiBSRUdMRWxlbWVudEJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gZWxlbWVudHMuX2VsZW1lbnRzXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhbHVlcyhlbGVtZW50U2V0KS5mb3JFYWNoKGRlc3Ryb3lFbGVtZW50cylcbiAgICB9XG4gIH1cbn1cblxudmFyIEZMT0FUID0gbmV3IEZsb2F0MzJBcnJheSgxKVxudmFyIElOVCA9IG5ldyBVaW50MzJBcnJheShGTE9BVC5idWZmZXIpXG5cbnZhciBHTF9VTlNJR05FRF9TSE9SVCQ0ID0gNTEyM1xuXG5mdW5jdGlvbiBjb252ZXJ0VG9IYWxmRmxvYXQgKGFycmF5KSB7XG4gIHZhciB1c2hvcnRzID0gcG9vbC5hbGxvY1R5cGUoR0xfVU5TSUdORURfU0hPUlQkNCwgYXJyYXkubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaXNOYU4oYXJyYXlbaV0pKSB7XG4gICAgICB1c2hvcnRzW2ldID0gMHhmZmZmXG4gICAgfSBlbHNlIGlmIChhcnJheVtpXSA9PT0gSW5maW5pdHkpIHtcbiAgICAgIHVzaG9ydHNbaV0gPSAweDdjMDBcbiAgICB9IGVsc2UgaWYgKGFycmF5W2ldID09PSAtSW5maW5pdHkpIHtcbiAgICAgIHVzaG9ydHNbaV0gPSAweGZjMDBcbiAgICB9IGVsc2Uge1xuICAgICAgRkxPQVRbMF0gPSBhcnJheVtpXVxuICAgICAgdmFyIHggPSBJTlRbMF1cblxuICAgICAgdmFyIHNnbiA9ICh4ID4+PiAzMSkgPDwgMTVcbiAgICAgIHZhciBleHAgPSAoKHggPDwgMSkgPj4+IDI0KSAtIDEyN1xuICAgICAgdmFyIGZyYWMgPSAoeCA+PiAxMykgJiAoKDEgPDwgMTApIC0gMSlcblxuICAgICAgaWYgKGV4cCA8IC0yNCkge1xuICAgICAgICAvLyByb3VuZCBub24tcmVwcmVzZW50YWJsZSBkZW5vcm1hbHMgdG8gMFxuICAgICAgICB1c2hvcnRzW2ldID0gc2duXG4gICAgICB9IGVsc2UgaWYgKGV4cCA8IC0xNCkge1xuICAgICAgICAvLyBoYW5kbGUgZGVub3JtYWxzXG4gICAgICAgIHZhciBzID0gLTE0IC0gZXhwXG4gICAgICAgIHVzaG9ydHNbaV0gPSBzZ24gKyAoKGZyYWMgKyAoMSA8PCAxMCkpID4+IHMpXG4gICAgICB9IGVsc2UgaWYgKGV4cCA+IDE1KSB7XG4gICAgICAgIC8vIHJvdW5kIG92ZXJmbG93IHRvICsvLSBJbmZpbml0eVxuICAgICAgICB1c2hvcnRzW2ldID0gc2duICsgMHg3YzAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UgY29udmVydCBkaXJlY3RseVxuICAgICAgICB1c2hvcnRzW2ldID0gc2duICsgKChleHAgKyAxNSkgPDwgMTApICsgZnJhY1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1c2hvcnRzXG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlIChzKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHMpIHx8IGlzVHlwZWRBcnJheShzKVxufVxuXG52YXIgaXNQb3cyJDEgPSBmdW5jdGlvbiAodikge1xuICByZXR1cm4gISh2ICYgKHYgLSAxKSkgJiYgKCEhdilcbn1cblxudmFyIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTID0gMHg4NkEzXG5cbnZhciBHTF9URVhUVVJFXzJEJDEgPSAweDBERTFcbnZhciBHTF9URVhUVVJFX0NVQkVfTUFQJDEgPSAweDg1MTNcbnZhciBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMSA9IDB4ODUxNVxuXG52YXIgR0xfUkdCQSQxID0gMHgxOTA4XG52YXIgR0xfQUxQSEEgPSAweDE5MDZcbnZhciBHTF9SR0IgPSAweDE5MDdcbnZhciBHTF9MVU1JTkFOQ0UgPSAweDE5MDlcbnZhciBHTF9MVU1JTkFOQ0VfQUxQSEEgPSAweDE5MEFcblxudmFyIEdMX1JHQkE0ID0gMHg4MDU2XG52YXIgR0xfUkdCNV9BMSA9IDB4ODA1N1xudmFyIEdMX1JHQjU2NSA9IDB4OEQ2MlxuXG52YXIgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCQxID0gMHg4MDMzXG52YXIgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSQxID0gMHg4MDM0XG52YXIgR0xfVU5TSUdORURfU0hPUlRfNV82XzUkMSA9IDB4ODM2M1xudmFyIEdMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMJDEgPSAweDg0RkFcblxudmFyIEdMX0RFUFRIX0NPTVBPTkVOVCA9IDB4MTkwMlxudmFyIEdMX0RFUFRIX1NURU5DSUwgPSAweDg0RjlcblxudmFyIEdMX1NSR0JfRVhUID0gMHg4QzQwXG52YXIgR0xfU1JHQl9BTFBIQV9FWFQgPSAweDhDNDJcblxudmFyIEdMX0hBTEZfRkxPQVRfT0VTJDEgPSAweDhENjFcblxudmFyIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgPSAweDgzRjBcbnZhciBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCA9IDB4ODNGMVxudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUID0gMHg4M0YyXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQgPSAweDgzRjNcblxudmFyIEdMX0NPTVBSRVNTRURfUkdCX0FUQ19XRUJHTCA9IDB4OEM5MlxudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9BVENfRVhQTElDSVRfQUxQSEFfV0VCR0wgPSAweDhDOTNcbnZhciBHTF9DT01QUkVTU0VEX1JHQkFfQVRDX0lOVEVSUE9MQVRFRF9BTFBIQV9XRUJHTCA9IDB4ODdFRVxuXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyA9IDB4OEMwMFxudmFyIEdMX0NPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUcgPSAweDhDMDFcbnZhciBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRyA9IDB4OEMwMlxudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HID0gMHg4QzAzXG5cbnZhciBHTF9DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMID0gMHg4RDY0XG5cbnZhciBHTF9VTlNJR05FRF9CWVRFJDUgPSAweDE0MDFcbnZhciBHTF9VTlNJR05FRF9TSE9SVCQzID0gMHgxNDAzXG52YXIgR0xfVU5TSUdORURfSU5UJDMgPSAweDE0MDVcbnZhciBHTF9GTE9BVCQ0ID0gMHgxNDA2XG5cbnZhciBHTF9URVhUVVJFX1dSQVBfUyA9IDB4MjgwMlxudmFyIEdMX1RFWFRVUkVfV1JBUF9UID0gMHgyODAzXG5cbnZhciBHTF9SRVBFQVQgPSAweDI5MDFcbnZhciBHTF9DTEFNUF9UT19FREdFJDEgPSAweDgxMkZcbnZhciBHTF9NSVJST1JFRF9SRVBFQVQgPSAweDgzNzBcblxudmFyIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiA9IDB4MjgwMFxudmFyIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiA9IDB4MjgwMVxuXG52YXIgR0xfTkVBUkVTVCQxID0gMHgyNjAwXG52YXIgR0xfTElORUFSID0gMHgyNjAxXG52YXIgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCQxID0gMHgyNzAwXG52YXIgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUJDEgPSAweDI3MDFcbnZhciBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIkMSA9IDB4MjcwMlxudmFyIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSJDEgPSAweDI3MDNcblxudmFyIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UID0gMHg4MTkyXG52YXIgR0xfRE9OVF9DQVJFID0gMHgxMTAwXG52YXIgR0xfRkFTVEVTVCA9IDB4MTEwMVxudmFyIEdMX05JQ0VTVCA9IDB4MTEwMlxuXG52YXIgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQgPSAweDg0RkVcblxudmFyIEdMX1VOUEFDS19BTElHTk1FTlQgPSAweDBDRjVcbnZhciBHTF9VTlBBQ0tfRkxJUF9ZX1dFQkdMID0gMHg5MjQwXG52YXIgR0xfVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMID0gMHg5MjQxXG52YXIgR0xfVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCA9IDB4OTI0M1xuXG52YXIgR0xfQlJPV1NFUl9ERUZBVUxUX1dFQkdMID0gMHg5MjQ0XG5cbnZhciBHTF9URVhUVVJFMCQxID0gMHg4NEMwXG5cbnZhciBNSVBNQVBfRklMVEVSUyA9IFtcbiAgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCQxLFxuICBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIkMSxcbiAgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUJDEsXG4gIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSJDFcbl1cblxudmFyIENIQU5ORUxTX0ZPUk1BVCA9IFtcbiAgMCxcbiAgR0xfTFVNSU5BTkNFLFxuICBHTF9MVU1JTkFOQ0VfQUxQSEEsXG4gIEdMX1JHQixcbiAgR0xfUkdCQSQxXG5dXG5cbnZhciBGT1JNQVRfQ0hBTk5FTFMgPSB7fVxuRk9STUFUX0NIQU5ORUxTW0dMX0xVTUlOQU5DRV0gPVxuRk9STUFUX0NIQU5ORUxTW0dMX0FMUEhBXSA9XG5GT1JNQVRfQ0hBTk5FTFNbR0xfREVQVEhfQ09NUE9ORU5UXSA9IDFcbkZPUk1BVF9DSEFOTkVMU1tHTF9ERVBUSF9TVEVOQ0lMXSA9XG5GT1JNQVRfQ0hBTk5FTFNbR0xfTFVNSU5BTkNFX0FMUEhBXSA9IDJcbkZPUk1BVF9DSEFOTkVMU1tHTF9SR0JdID1cbkZPUk1BVF9DSEFOTkVMU1tHTF9TUkdCX0VYVF0gPSAzXG5GT1JNQVRfQ0hBTk5FTFNbR0xfUkdCQSQxXSA9XG5GT1JNQVRfQ0hBTk5FTFNbR0xfU1JHQl9BTFBIQV9FWFRdID0gNFxuXG5mdW5jdGlvbiBvYmplY3ROYW1lIChzdHIpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBzdHIgKyAnXSdcbn1cblxudmFyIENBTlZBU19DTEFTUyA9IG9iamVjdE5hbWUoJ0hUTUxDYW52YXNFbGVtZW50JylcbnZhciBPRkZTQ1JFRU5DQU5WQVNfQ0xBU1MgPSBvYmplY3ROYW1lKCdPZmZzY3JlZW5DYW52YXMnKVxudmFyIENPTlRFWFQyRF9DTEFTUyA9IG9iamVjdE5hbWUoJ0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCcpXG52YXIgQklUTUFQX0NMQVNTID0gb2JqZWN0TmFtZSgnSW1hZ2VCaXRtYXAnKVxudmFyIElNQUdFX0NMQVNTID0gb2JqZWN0TmFtZSgnSFRNTEltYWdlRWxlbWVudCcpXG52YXIgVklERU9fQ0xBU1MgPSBvYmplY3ROYW1lKCdIVE1MVmlkZW9FbGVtZW50JylcblxudmFyIFBJWEVMX0NMQVNTRVMgPSBPYmplY3Qua2V5cyhhcnJheVR5cGVzKS5jb25jYXQoW1xuICBDQU5WQVNfQ0xBU1MsXG4gIE9GRlNDUkVFTkNBTlZBU19DTEFTUyxcbiAgQ09OVEVYVDJEX0NMQVNTLFxuICBCSVRNQVBfQ0xBU1MsXG4gIElNQUdFX0NMQVNTLFxuICBWSURFT19DTEFTU1xuXSlcblxuLy8gZm9yIGV2ZXJ5IHRleHR1cmUgdHlwZSwgc3RvcmVcbi8vIHRoZSBzaXplIGluIGJ5dGVzLlxudmFyIFRZUEVfU0laRVMgPSBbXVxuVFlQRV9TSVpFU1tHTF9VTlNJR05FRF9CWVRFJDVdID0gMVxuVFlQRV9TSVpFU1tHTF9GTE9BVCQ0XSA9IDRcblRZUEVfU0laRVNbR0xfSEFMRl9GTE9BVF9PRVMkMV0gPSAyXG5cblRZUEVfU0laRVNbR0xfVU5TSUdORURfU0hPUlQkM10gPSAyXG5UWVBFX1NJWkVTW0dMX1VOU0lHTkVEX0lOVCQzXSA9IDRcblxudmFyIEZPUk1BVF9TSVpFU19TUEVDSUFMID0gW11cbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX1JHQkE0XSA9IDJcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX1JHQjVfQTFdID0gMlxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfUkdCNTY1XSA9IDJcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0RFUFRIX1NURU5DSUxdID0gNFxuXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUXSA9IDAuNVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFRdID0gMC41XG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVF0gPSAxXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVF0gPSAxXG5cbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCX0FUQ19XRUJHTF0gPSAwLjVcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCQV9BVENfRVhQTElDSVRfQUxQSEFfV0VCR0xdID0gMVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19JTlRFUlBPTEFURURfQUxQSEFfV0VCR0xdID0gMVxuXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HXSA9IDAuNVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNR10gPSAwLjI1XG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNR10gPSAwLjVcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HXSA9IDAuMjVcblxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTF0gPSAwLjVcblxuZnVuY3Rpb24gaXNOdW1lcmljQXJyYXkgKGFycikge1xuICByZXR1cm4gKFxuICAgIEFycmF5LmlzQXJyYXkoYXJyKSAmJlxuICAgIChhcnIubGVuZ3RoID09PSAwIHx8XG4gICAgdHlwZW9mIGFyclswXSA9PT0gJ251bWJlcicpKVxufVxuXG5mdW5jdGlvbiBpc1JlY3RBcnJheSAoYXJyKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdmFyIHdpZHRoID0gYXJyLmxlbmd0aFxuICBpZiAod2lkdGggPT09IDAgfHwgIWlzQXJyYXlMaWtlKGFyclswXSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBjbGFzc1N0cmluZyAoeCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpXG59XG5cbmZ1bmN0aW9uIGlzQ2FudmFzRWxlbWVudCAob2JqZWN0KSB7XG4gIHJldHVybiBjbGFzc1N0cmluZyhvYmplY3QpID09PSBDQU5WQVNfQ0xBU1Ncbn1cblxuZnVuY3Rpb24gaXNPZmZzY3JlZW5DYW52YXMgKG9iamVjdCkge1xuICByZXR1cm4gY2xhc3NTdHJpbmcob2JqZWN0KSA9PT0gT0ZGU0NSRUVOQ0FOVkFTX0NMQVNTXG59XG5cbmZ1bmN0aW9uIGlzQ29udGV4dDJEIChvYmplY3QpIHtcbiAgcmV0dXJuIGNsYXNzU3RyaW5nKG9iamVjdCkgPT09IENPTlRFWFQyRF9DTEFTU1xufVxuXG5mdW5jdGlvbiBpc0JpdG1hcCAob2JqZWN0KSB7XG4gIHJldHVybiBjbGFzc1N0cmluZyhvYmplY3QpID09PSBCSVRNQVBfQ0xBU1Ncbn1cblxuZnVuY3Rpb24gaXNJbWFnZUVsZW1lbnQgKG9iamVjdCkge1xuICByZXR1cm4gY2xhc3NTdHJpbmcob2JqZWN0KSA9PT0gSU1BR0VfQ0xBU1Ncbn1cblxuZnVuY3Rpb24gaXNWaWRlb0VsZW1lbnQgKG9iamVjdCkge1xuICByZXR1cm4gY2xhc3NTdHJpbmcob2JqZWN0KSA9PT0gVklERU9fQ0xBU1Ncbn1cblxuZnVuY3Rpb24gaXNQaXhlbERhdGEgKG9iamVjdCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHZhciBjbGFzc05hbWUgPSBjbGFzc1N0cmluZyhvYmplY3QpXG4gIGlmIChQSVhFTF9DTEFTU0VTLmluZGV4T2YoY2xhc3NOYW1lKSA+PSAwKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gKFxuICAgIGlzTnVtZXJpY0FycmF5KG9iamVjdCkgfHxcbiAgICBpc1JlY3RBcnJheShvYmplY3QpIHx8XG4gICAgaXNOREFycmF5TGlrZShvYmplY3QpKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5Q29kZSQxIChkYXRhKSB7XG4gIHJldHVybiBhcnJheVR5cGVzW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhKV0gfCAwXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREYXRhIChyZXN1bHQsIGRhdGEpIHtcbiAgdmFyIG4gPSBkYXRhLmxlbmd0aFxuICBzd2l0Y2ggKHJlc3VsdC50eXBlKSB7XG4gICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFJDU6XG4gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVCQzOlxuICAgIGNhc2UgR0xfVU5TSUdORURfSU5UJDM6XG4gICAgY2FzZSBHTF9GTE9BVCQ0OlxuICAgICAgdmFyIGNvbnZlcnRlZCA9IHBvb2wuYWxsb2NUeXBlKHJlc3VsdC50eXBlLCBuKVxuICAgICAgY29udmVydGVkLnNldChkYXRhKVxuICAgICAgcmVzdWx0LmRhdGEgPSBjb252ZXJ0ZWRcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTJDE6XG4gICAgICByZXN1bHQuZGF0YSA9IGNvbnZlcnRUb0hhbGZGbG9hdChkYXRhKVxuICAgICAgYnJlYWtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBjaGVjayQxLnJhaXNlKCd1bnN1cHBvcnRlZCB0ZXh0dXJlIHR5cGUsIG11c3Qgc3BlY2lmeSBhIHR5cGVkIGFycmF5JylcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVDb252ZXJ0IChpbWFnZSwgbikge1xuICByZXR1cm4gcG9vbC5hbGxvY1R5cGUoXG4gICAgaW1hZ2UudHlwZSA9PT0gR0xfSEFMRl9GTE9BVF9PRVMkMVxuICAgICAgPyBHTF9GTE9BVCQ0XG4gICAgICA6IGltYWdlLnR5cGUsIG4pXG59XG5cbmZ1bmN0aW9uIHBvc3RDb252ZXJ0IChpbWFnZSwgZGF0YSkge1xuICBpZiAoaW1hZ2UudHlwZSA9PT0gR0xfSEFMRl9GTE9BVF9PRVMkMSkge1xuICAgIGltYWdlLmRhdGEgPSBjb252ZXJ0VG9IYWxmRmxvYXQoZGF0YSlcbiAgICBwb29sLmZyZWVUeXBlKGRhdGEpXG4gIH0gZWxzZSB7XG4gICAgaW1hZ2UuZGF0YSA9IGRhdGFcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc3Bvc2VEYXRhIChpbWFnZSwgYXJyYXksIHN0cmlkZVgsIHN0cmlkZVksIHN0cmlkZUMsIG9mZnNldCkge1xuICB2YXIgdyA9IGltYWdlLndpZHRoXG4gIHZhciBoID0gaW1hZ2UuaGVpZ2h0XG4gIHZhciBjID0gaW1hZ2UuY2hhbm5lbHNcbiAgdmFyIG4gPSB3ICogaCAqIGNcbiAgdmFyIGRhdGEgPSBwcmVDb252ZXJ0KGltYWdlLCBuKVxuXG4gIHZhciBwID0gMFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGg7ICsraSkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgdzsgKytqKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IGM7ICsraykge1xuICAgICAgICBkYXRhW3ArK10gPSBhcnJheVtzdHJpZGVYICogaiArIHN0cmlkZVkgKiBpICsgc3RyaWRlQyAqIGsgKyBvZmZzZXRdXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcG9zdENvbnZlcnQoaW1hZ2UsIGRhdGEpXG59XG5cbmZ1bmN0aW9uIGdldFRleHR1cmVTaXplIChmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIGlzTWlwbWFwLCBpc0N1YmUpIHtcbiAgdmFyIHNcbiAgaWYgKHR5cGVvZiBGT1JNQVRfU0laRVNfU1BFQ0lBTFtmb3JtYXRdICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIHdlIGhhdmUgYSBzcGVjaWFsIGFycmF5IGZvciBkZWFsaW5nIHdpdGggd2VpcmQgY29sb3IgZm9ybWF0cyBzdWNoIGFzIFJHQjVBMVxuICAgIHMgPSBGT1JNQVRfU0laRVNfU1BFQ0lBTFtmb3JtYXRdXG4gIH0gZWxzZSB7XG4gICAgcyA9IEZPUk1BVF9DSEFOTkVMU1tmb3JtYXRdICogVFlQRV9TSVpFU1t0eXBlXVxuICB9XG5cbiAgaWYgKGlzQ3ViZSkge1xuICAgIHMgKj0gNlxuICB9XG5cbiAgaWYgKGlzTWlwbWFwKSB7XG4gICAgLy8gY29tcHV0ZSB0aGUgdG90YWwgc2l6ZSBvZiBhbGwgdGhlIG1pcG1hcHMuXG4gICAgdmFyIHRvdGFsID0gMFxuXG4gICAgdmFyIHcgPSB3aWR0aFxuICAgIHdoaWxlICh3ID49IDEpIHtcbiAgICAgIC8vIHdlIGNhbiBvbmx5IHVzZSBtaXBtYXBzIG9uIGEgc3F1YXJlIGltYWdlLFxuICAgICAgLy8gc28gd2UgY2FuIHNpbXBseSB1c2UgdGhlIHdpZHRoIGFuZCBpZ25vcmUgdGhlIGhlaWdodDpcbiAgICAgIHRvdGFsICs9IHMgKiB3ICogd1xuICAgICAgdyAvPSAyXG4gICAgfVxuICAgIHJldHVybiB0b3RhbFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBzICogd2lkdGggKiBoZWlnaHRcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVUZXh0dXJlU2V0IChcbiAgZ2wsIGV4dGVuc2lvbnMsIGxpbWl0cywgcmVnbFBvbGwsIGNvbnRleHRTdGF0ZSwgc3RhdHMsIGNvbmZpZykge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEluaXRpYWxpemUgY29uc3RhbnRzIGFuZCBwYXJhbWV0ZXIgdGFibGVzIGhlcmVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICB2YXIgbWlwbWFwSGludCA9IHtcbiAgICBcImRvbid0IGNhcmVcIjogR0xfRE9OVF9DQVJFLFxuICAgICdkb250IGNhcmUnOiBHTF9ET05UX0NBUkUsXG4gICAgJ25pY2UnOiBHTF9OSUNFU1QsXG4gICAgJ2Zhc3QnOiBHTF9GQVNURVNUXG4gIH1cblxuICB2YXIgd3JhcE1vZGVzID0ge1xuICAgICdyZXBlYXQnOiBHTF9SRVBFQVQsXG4gICAgJ2NsYW1wJzogR0xfQ0xBTVBfVE9fRURHRSQxLFxuICAgICdtaXJyb3InOiBHTF9NSVJST1JFRF9SRVBFQVRcbiAgfVxuXG4gIHZhciBtYWdGaWx0ZXJzID0ge1xuICAgICduZWFyZXN0JzogR0xfTkVBUkVTVCQxLFxuICAgICdsaW5lYXInOiBHTF9MSU5FQVJcbiAgfVxuXG4gIHZhciBtaW5GaWx0ZXJzID0gZXh0ZW5kKHtcbiAgICAnbWlwbWFwJzogR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMSxcbiAgICAnbmVhcmVzdCBtaXBtYXAgbmVhcmVzdCc6IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QkMSxcbiAgICAnbGluZWFyIG1pcG1hcCBuZWFyZXN0JzogR0xfTElORUFSX01JUE1BUF9ORUFSRVNUJDEsXG4gICAgJ25lYXJlc3QgbWlwbWFwIGxpbmVhcic6IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiQxLFxuICAgICdsaW5lYXIgbWlwbWFwIGxpbmVhcic6IEdMX0xJTkVBUl9NSVBNQVBfTElORUFSJDFcbiAgfSwgbWFnRmlsdGVycylcblxuICB2YXIgY29sb3JTcGFjZSA9IHtcbiAgICAnbm9uZSc6IDAsXG4gICAgJ2Jyb3dzZXInOiBHTF9CUk9XU0VSX0RFRkFVTFRfV0VCR0xcbiAgfVxuXG4gIHZhciB0ZXh0dXJlVHlwZXMgPSB7XG4gICAgJ3VpbnQ4JzogR0xfVU5TSUdORURfQllURSQ1LFxuICAgICdyZ2JhNCc6IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQkMSxcbiAgICAncmdiNTY1JzogR0xfVU5TSUdORURfU0hPUlRfNV82XzUkMSxcbiAgICAncmdiNSBhMSc6IEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEkMVxuICB9XG5cbiAgdmFyIHRleHR1cmVGb3JtYXRzID0ge1xuICAgICdhbHBoYSc6IEdMX0FMUEhBLFxuICAgICdsdW1pbmFuY2UnOiBHTF9MVU1JTkFOQ0UsXG4gICAgJ2x1bWluYW5jZSBhbHBoYSc6IEdMX0xVTUlOQU5DRV9BTFBIQSxcbiAgICAncmdiJzogR0xfUkdCLFxuICAgICdyZ2JhJzogR0xfUkdCQSQxLFxuICAgICdyZ2JhNCc6IEdMX1JHQkE0LFxuICAgICdyZ2I1IGExJzogR0xfUkdCNV9BMSxcbiAgICAncmdiNTY1JzogR0xfUkdCNTY1XG4gIH1cblxuICB2YXIgY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0ge31cblxuICBpZiAoZXh0ZW5zaW9ucy5leHRfc3JnYikge1xuICAgIHRleHR1cmVGb3JtYXRzLnNyZ2IgPSBHTF9TUkdCX0VYVFxuICAgIHRleHR1cmVGb3JtYXRzLnNyZ2JhID0gR0xfU1JHQl9BTFBIQV9FWFRcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLm9lc190ZXh0dXJlX2Zsb2F0KSB7XG4gICAgdGV4dHVyZVR5cGVzLmZsb2F0MzIgPSB0ZXh0dXJlVHlwZXMuZmxvYXQgPSBHTF9GTE9BVCQ0XG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0KSB7XG4gICAgdGV4dHVyZVR5cGVzWydmbG9hdDE2J10gPSB0ZXh0dXJlVHlwZXNbJ2hhbGYgZmxvYXQnXSA9IEdMX0hBTEZfRkxPQVRfT0VTJDFcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2RlcHRoX3RleHR1cmUpIHtcbiAgICBleHRlbmQodGV4dHVyZUZvcm1hdHMsIHtcbiAgICAgICdkZXB0aCc6IEdMX0RFUFRIX0NPTVBPTkVOVCxcbiAgICAgICdkZXB0aCBzdGVuY2lsJzogR0xfREVQVEhfU1RFTkNJTFxuICAgIH0pXG5cbiAgICBleHRlbmQodGV4dHVyZVR5cGVzLCB7XG4gICAgICAndWludDE2JzogR0xfVU5TSUdORURfU0hPUlQkMyxcbiAgICAgICd1aW50MzInOiBHTF9VTlNJR05FRF9JTlQkMyxcbiAgICAgICdkZXB0aCBzdGVuY2lsJzogR0xfVU5TSUdORURfSU5UXzI0XzhfV0VCR0wkMVxuICAgIH0pXG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfczN0Yykge1xuICAgIGV4dGVuZChjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMsIHtcbiAgICAgICdyZ2IgczN0YyBkeHQxJzogR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCxcbiAgICAgICdyZ2JhIHMzdGMgZHh0MSc6IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULFxuICAgICAgJ3JnYmEgczN0YyBkeHQzJzogR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQsXG4gICAgICAncmdiYSBzM3RjIGR4dDUnOiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVFxuICAgIH0pXG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfYXRjKSB7XG4gICAgZXh0ZW5kKGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cywge1xuICAgICAgJ3JnYiBhdGMnOiBHTF9DT01QUkVTU0VEX1JHQl9BVENfV0VCR0wsXG4gICAgICAncmdiYSBhdGMgZXhwbGljaXQgYWxwaGEnOiBHTF9DT01QUkVTU0VEX1JHQkFfQVRDX0VYUExJQ0lUX0FMUEhBX1dFQkdMLFxuICAgICAgJ3JnYmEgYXRjIGludGVycG9sYXRlZCBhbHBoYSc6IEdMX0NPTVBSRVNTRURfUkdCQV9BVENfSU5URVJQT0xBVEVEX0FMUEhBX1dFQkdMXG4gICAgfSlcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0Yykge1xuICAgIGV4dGVuZChjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMsIHtcbiAgICAgICdyZ2IgcHZydGMgNGJwcHYxJzogR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyxcbiAgICAgICdyZ2IgcHZydGMgMmJwcHYxJzogR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyxcbiAgICAgICdyZ2JhIHB2cnRjIDRicHB2MSc6IEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HLFxuICAgICAgJ3JnYmEgcHZydGMgMmJwcHYxJzogR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUdcbiAgICB9KVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEpIHtcbiAgICBjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHNbJ3JnYiBldGMxJ10gPSBHTF9DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMXG4gIH1cblxuICAvLyBDb3B5IG92ZXIgYWxsIHRleHR1cmUgZm9ybWF0c1xuICB2YXIgc3VwcG9ydGVkQ29tcHJlc3NlZEZvcm1hdHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiAgICBnbC5nZXRQYXJhbWV0ZXIoR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMpKVxuICBPYmplY3Qua2V5cyhjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgZm9ybWF0ID0gY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzW25hbWVdXG4gICAgaWYgKHN1cHBvcnRlZENvbXByZXNzZWRGb3JtYXRzLmluZGV4T2YoZm9ybWF0KSA+PSAwKSB7XG4gICAgICB0ZXh0dXJlRm9ybWF0c1tuYW1lXSA9IGZvcm1hdFxuICAgIH1cbiAgfSlcblxuICB2YXIgc3VwcG9ydGVkRm9ybWF0cyA9IE9iamVjdC5rZXlzKHRleHR1cmVGb3JtYXRzKVxuICBsaW1pdHMudGV4dHVyZUZvcm1hdHMgPSBzdXBwb3J0ZWRGb3JtYXRzXG5cbiAgLy8gYXNzb2NpYXRlIHdpdGggZXZlcnkgZm9ybWF0IHN0cmluZyBpdHNcbiAgLy8gY29ycmVzcG9uZGluZyBHTC12YWx1ZS5cbiAgdmFyIHRleHR1cmVGb3JtYXRzSW52ZXJ0ID0gW11cbiAgT2JqZWN0LmtleXModGV4dHVyZUZvcm1hdHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWwgPSB0ZXh0dXJlRm9ybWF0c1trZXldXG4gICAgdGV4dHVyZUZvcm1hdHNJbnZlcnRbdmFsXSA9IGtleVxuICB9KVxuXG4gIC8vIGFzc29jaWF0ZSB3aXRoIGV2ZXJ5IHR5cGUgc3RyaW5nIGl0c1xuICAvLyBjb3JyZXNwb25kaW5nIEdMLXZhbHVlLlxuICB2YXIgdGV4dHVyZVR5cGVzSW52ZXJ0ID0gW11cbiAgT2JqZWN0LmtleXModGV4dHVyZVR5cGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsID0gdGV4dHVyZVR5cGVzW2tleV1cbiAgICB0ZXh0dXJlVHlwZXNJbnZlcnRbdmFsXSA9IGtleVxuICB9KVxuXG4gIHZhciBtYWdGaWx0ZXJzSW52ZXJ0ID0gW11cbiAgT2JqZWN0LmtleXMobWFnRmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbCA9IG1hZ0ZpbHRlcnNba2V5XVxuICAgIG1hZ0ZpbHRlcnNJbnZlcnRbdmFsXSA9IGtleVxuICB9KVxuXG4gIHZhciBtaW5GaWx0ZXJzSW52ZXJ0ID0gW11cbiAgT2JqZWN0LmtleXMobWluRmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbCA9IG1pbkZpbHRlcnNba2V5XVxuICAgIG1pbkZpbHRlcnNJbnZlcnRbdmFsXSA9IGtleVxuICB9KVxuXG4gIHZhciB3cmFwTW9kZXNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyh3cmFwTW9kZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWwgPSB3cmFwTW9kZXNba2V5XVxuICAgIHdyYXBNb2Rlc0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgLy8gY29sb3JGb3JtYXRzW10gZ2l2ZXMgdGhlIGZvcm1hdCAoY2hhbm5lbHMpIGFzc29jaWF0ZWQgdG8gYW5cbiAgLy8gaW50ZXJuYWxmb3JtYXRcbiAgdmFyIGNvbG9yRm9ybWF0cyA9IHN1cHBvcnRlZEZvcm1hdHMucmVkdWNlKGZ1bmN0aW9uIChjb2xvciwga2V5KSB7XG4gICAgdmFyIGdsZW51bSA9IHRleHR1cmVGb3JtYXRzW2tleV1cbiAgICBpZiAoZ2xlbnVtID09PSBHTF9MVU1JTkFOQ0UgfHxcbiAgICAgICAgZ2xlbnVtID09PSBHTF9BTFBIQSB8fFxuICAgICAgICBnbGVudW0gPT09IEdMX0xVTUlOQU5DRSB8fFxuICAgICAgICBnbGVudW0gPT09IEdMX0xVTUlOQU5DRV9BTFBIQSB8fFxuICAgICAgICBnbGVudW0gPT09IEdMX0RFUFRIX0NPTVBPTkVOVCB8fFxuICAgICAgICBnbGVudW0gPT09IEdMX0RFUFRIX1NURU5DSUwgfHxcbiAgICAgICAgKGV4dGVuc2lvbnMuZXh0X3NyZ2IgJiZcbiAgICAgICAgICAgICAgICAoZ2xlbnVtID09PSBHTF9TUkdCX0VYVCB8fFxuICAgICAgICAgICAgICAgICBnbGVudW0gPT09IEdMX1NSR0JfQUxQSEFfRVhUKSkpIHtcbiAgICAgIGNvbG9yW2dsZW51bV0gPSBnbGVudW1cbiAgICB9IGVsc2UgaWYgKGdsZW51bSA9PT0gR0xfUkdCNV9BMSB8fCBrZXkuaW5kZXhPZigncmdiYScpID49IDApIHtcbiAgICAgIGNvbG9yW2dsZW51bV0gPSBHTF9SR0JBJDFcbiAgICB9IGVsc2Uge1xuICAgICAgY29sb3JbZ2xlbnVtXSA9IEdMX1JHQlxuICAgIH1cbiAgICByZXR1cm4gY29sb3JcbiAgfSwge30pXG5cbiAgZnVuY3Rpb24gVGV4RmxhZ3MgKCkge1xuICAgIC8vIGZvcm1hdCBpbmZvXG4gICAgdGhpcy5pbnRlcm5hbGZvcm1hdCA9IEdMX1JHQkEkMVxuICAgIHRoaXMuZm9ybWF0ID0gR0xfUkdCQSQxXG4gICAgdGhpcy50eXBlID0gR0xfVU5TSUdORURfQllURSQ1XG4gICAgdGhpcy5jb21wcmVzc2VkID0gZmFsc2VcblxuICAgIC8vIHBpeGVsIHN0b3JhZ2VcbiAgICB0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZVxuICAgIHRoaXMuZmxpcFkgPSBmYWxzZVxuICAgIHRoaXMudW5wYWNrQWxpZ25tZW50ID0gMVxuICAgIHRoaXMuY29sb3JTcGFjZSA9IEdMX0JST1dTRVJfREVGQVVMVF9XRUJHTFxuXG4gICAgLy8gc2hhcGUgaW5mb1xuICAgIHRoaXMud2lkdGggPSAwXG4gICAgdGhpcy5oZWlnaHQgPSAwXG4gICAgdGhpcy5jaGFubmVscyA9IDBcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlGbGFncyAocmVzdWx0LCBvdGhlcikge1xuICAgIHJlc3VsdC5pbnRlcm5hbGZvcm1hdCA9IG90aGVyLmludGVybmFsZm9ybWF0XG4gICAgcmVzdWx0LmZvcm1hdCA9IG90aGVyLmZvcm1hdFxuICAgIHJlc3VsdC50eXBlID0gb3RoZXIudHlwZVxuICAgIHJlc3VsdC5jb21wcmVzc2VkID0gb3RoZXIuY29tcHJlc3NlZFxuXG4gICAgcmVzdWx0LnByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5wcmVtdWx0aXBseUFscGhhXG4gICAgcmVzdWx0LmZsaXBZID0gb3RoZXIuZmxpcFlcbiAgICByZXN1bHQudW5wYWNrQWxpZ25tZW50ID0gb3RoZXIudW5wYWNrQWxpZ25tZW50XG4gICAgcmVzdWx0LmNvbG9yU3BhY2UgPSBvdGhlci5jb2xvclNwYWNlXG5cbiAgICByZXN1bHQud2lkdGggPSBvdGhlci53aWR0aFxuICAgIHJlc3VsdC5oZWlnaHQgPSBvdGhlci5oZWlnaHRcbiAgICByZXN1bHQuY2hhbm5lbHMgPSBvdGhlci5jaGFubmVsc1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VGbGFncyAoZmxhZ3MsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnIHx8ICFvcHRpb25zKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoJ3ByZW11bHRpcGx5QWxwaGEnIGluIG9wdGlvbnMpIHtcbiAgICAgIGNoZWNrJDEudHlwZShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEsICdib29sZWFuJyxcbiAgICAgICAgJ2ludmFsaWQgcHJlbXVsdGlwbHlBbHBoYScpXG4gICAgICBmbGFncy5wcmVtdWx0aXBseUFscGhhID0gb3B0aW9ucy5wcmVtdWx0aXBseUFscGhhXG4gICAgfVxuXG4gICAgaWYgKCdmbGlwWScgaW4gb3B0aW9ucykge1xuICAgICAgY2hlY2skMS50eXBlKG9wdGlvbnMuZmxpcFksICdib29sZWFuJyxcbiAgICAgICAgJ2ludmFsaWQgdGV4dHVyZSBmbGlwJylcbiAgICAgIGZsYWdzLmZsaXBZID0gb3B0aW9ucy5mbGlwWVxuICAgIH1cblxuICAgIGlmICgnYWxpZ25tZW50JyBpbiBvcHRpb25zKSB7XG4gICAgICBjaGVjayQxLm9uZU9mKG9wdGlvbnMuYWxpZ25tZW50LCBbMSwgMiwgNCwgOF0sXG4gICAgICAgICdpbnZhbGlkIHRleHR1cmUgdW5wYWNrIGFsaWdubWVudCcpXG4gICAgICBmbGFncy51bnBhY2tBbGlnbm1lbnQgPSBvcHRpb25zLmFsaWdubWVudFxuICAgIH1cblxuICAgIGlmICgnY29sb3JTcGFjZScgaW4gb3B0aW9ucykge1xuICAgICAgY2hlY2skMS5wYXJhbWV0ZXIob3B0aW9ucy5jb2xvclNwYWNlLCBjb2xvclNwYWNlLFxuICAgICAgICAnaW52YWxpZCBjb2xvclNwYWNlJylcbiAgICAgIGZsYWdzLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlW29wdGlvbnMuY29sb3JTcGFjZV1cbiAgICB9XG5cbiAgICBpZiAoJ3R5cGUnIGluIG9wdGlvbnMpIHtcbiAgICAgIHZhciB0eXBlID0gb3B0aW9ucy50eXBlXG4gICAgICBjaGVjayQxKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfZmxvYXQgfHxcbiAgICAgICAgISh0eXBlID09PSAnZmxvYXQnIHx8IHR5cGUgPT09ICdmbG9hdDMyJyksXG4gICAgICAneW91IG11c3QgZW5hYmxlIHRoZSBPRVNfdGV4dHVyZV9mbG9hdCBleHRlbnNpb24gaW4gb3JkZXIgdG8gdXNlIGZsb2F0aW5nIHBvaW50IHRleHR1cmVzLicpXG4gICAgICBjaGVjayQxKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfaGFsZl9mbG9hdCB8fFxuICAgICAgICAhKHR5cGUgPT09ICdoYWxmIGZsb2F0JyB8fCB0eXBlID09PSAnZmxvYXQxNicpLFxuICAgICAgJ3lvdSBtdXN0IGVuYWJsZSB0aGUgT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBleHRlbnNpb24gaW4gb3JkZXIgdG8gdXNlIDE2LWJpdCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlcy4nKVxuICAgICAgY2hlY2skMShleHRlbnNpb25zLndlYmdsX2RlcHRoX3RleHR1cmUgfHxcbiAgICAgICAgISh0eXBlID09PSAndWludDE2JyB8fCB0eXBlID09PSAndWludDMyJyB8fCB0eXBlID09PSAnZGVwdGggc3RlbmNpbCcpLFxuICAgICAgJ3lvdSBtdXN0IGVuYWJsZSB0aGUgV0VCR0xfZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gaW4gb3JkZXIgdG8gdXNlIGRlcHRoL3N0ZW5jaWwgdGV4dHVyZXMuJylcbiAgICAgIGNoZWNrJDEucGFyYW1ldGVyKHR5cGUsIHRleHR1cmVUeXBlcyxcbiAgICAgICAgJ2ludmFsaWQgdGV4dHVyZSB0eXBlJylcbiAgICAgIGZsYWdzLnR5cGUgPSB0ZXh0dXJlVHlwZXNbdHlwZV1cbiAgICB9XG5cbiAgICB2YXIgdyA9IGZsYWdzLndpZHRoXG4gICAgdmFyIGggPSBmbGFncy5oZWlnaHRcbiAgICB2YXIgYyA9IGZsYWdzLmNoYW5uZWxzXG4gICAgdmFyIGhhc0NoYW5uZWxzID0gZmFsc2VcbiAgICBpZiAoJ3NoYXBlJyBpbiBvcHRpb25zKSB7XG4gICAgICBjaGVjayQxKEFycmF5LmlzQXJyYXkob3B0aW9ucy5zaGFwZSkgJiYgb3B0aW9ucy5zaGFwZS5sZW5ndGggPj0gMixcbiAgICAgICAgJ3NoYXBlIG11c3QgYmUgYW4gYXJyYXknKVxuICAgICAgdyA9IG9wdGlvbnMuc2hhcGVbMF1cbiAgICAgIGggPSBvcHRpb25zLnNoYXBlWzFdXG4gICAgICBpZiAob3B0aW9ucy5zaGFwZS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgYyA9IG9wdGlvbnMuc2hhcGVbMl1cbiAgICAgICAgY2hlY2skMShjID4gMCAmJiBjIDw9IDQsICdpbnZhbGlkIG51bWJlciBvZiBjaGFubmVscycpXG4gICAgICAgIGhhc0NoYW5uZWxzID0gdHJ1ZVxuICAgICAgfVxuICAgICAgY2hlY2skMSh3ID49IDAgJiYgdyA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsICdpbnZhbGlkIHdpZHRoJylcbiAgICAgIGNoZWNrJDEoaCA+PSAwICYmIGggPD0gbGltaXRzLm1heFRleHR1cmVTaXplLCAnaW52YWxpZCBoZWlnaHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJ3JhZGl1cycgaW4gb3B0aW9ucykge1xuICAgICAgICB3ID0gaCA9IG9wdGlvbnMucmFkaXVzXG4gICAgICAgIGNoZWNrJDEodyA+PSAwICYmIHcgPD0gbGltaXRzLm1heFRleHR1cmVTaXplLCAnaW52YWxpZCByYWRpdXMnKVxuICAgICAgfVxuICAgICAgaWYgKCd3aWR0aCcgaW4gb3B0aW9ucykge1xuICAgICAgICB3ID0gb3B0aW9ucy53aWR0aFxuICAgICAgICBjaGVjayQxKHcgPj0gMCAmJiB3IDw9IGxpbWl0cy5tYXhUZXh0dXJlU2l6ZSwgJ2ludmFsaWQgd2lkdGgnKVxuICAgICAgfVxuICAgICAgaWYgKCdoZWlnaHQnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgaCA9IG9wdGlvbnMuaGVpZ2h0XG4gICAgICAgIGNoZWNrJDEoaCA+PSAwICYmIGggPD0gbGltaXRzLm1heFRleHR1cmVTaXplLCAnaW52YWxpZCBoZWlnaHQnKVxuICAgICAgfVxuICAgICAgaWYgKCdjaGFubmVscycgaW4gb3B0aW9ucykge1xuICAgICAgICBjID0gb3B0aW9ucy5jaGFubmVsc1xuICAgICAgICBjaGVjayQxKGMgPiAwICYmIGMgPD0gNCwgJ2ludmFsaWQgbnVtYmVyIG9mIGNoYW5uZWxzJylcbiAgICAgICAgaGFzQ2hhbm5lbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIGZsYWdzLndpZHRoID0gdyB8IDBcbiAgICBmbGFncy5oZWlnaHQgPSBoIHwgMFxuICAgIGZsYWdzLmNoYW5uZWxzID0gYyB8IDBcblxuICAgIHZhciBoYXNGb3JtYXQgPSBmYWxzZVxuICAgIGlmICgnZm9ybWF0JyBpbiBvcHRpb25zKSB7XG4gICAgICB2YXIgZm9ybWF0U3RyID0gb3B0aW9ucy5mb3JtYXRcbiAgICAgIGNoZWNrJDEoZXh0ZW5zaW9ucy53ZWJnbF9kZXB0aF90ZXh0dXJlIHx8XG4gICAgICAgICEoZm9ybWF0U3RyID09PSAnZGVwdGgnIHx8IGZvcm1hdFN0ciA9PT0gJ2RlcHRoIHN0ZW5jaWwnKSxcbiAgICAgICd5b3UgbXVzdCBlbmFibGUgdGhlIFdFQkdMX2RlcHRoX3RleHR1cmUgZXh0ZW5zaW9uIGluIG9yZGVyIHRvIHVzZSBkZXB0aC9zdGVuY2lsIHRleHR1cmVzLicpXG4gICAgICBjaGVjayQxLnBhcmFtZXRlcihmb3JtYXRTdHIsIHRleHR1cmVGb3JtYXRzLFxuICAgICAgICAnaW52YWxpZCB0ZXh0dXJlIGZvcm1hdCcpXG4gICAgICB2YXIgaW50ZXJuYWxmb3JtYXQgPSBmbGFncy5pbnRlcm5hbGZvcm1hdCA9IHRleHR1cmVGb3JtYXRzW2Zvcm1hdFN0cl1cbiAgICAgIGZsYWdzLmZvcm1hdCA9IGNvbG9yRm9ybWF0c1tpbnRlcm5hbGZvcm1hdF1cbiAgICAgIGlmIChmb3JtYXRTdHIgaW4gdGV4dHVyZVR5cGVzKSB7XG4gICAgICAgIGlmICghKCd0eXBlJyBpbiBvcHRpb25zKSkge1xuICAgICAgICAgIGZsYWdzLnR5cGUgPSB0ZXh0dXJlVHlwZXNbZm9ybWF0U3RyXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm9ybWF0U3RyIGluIGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cykge1xuICAgICAgICBmbGFncy5jb21wcmVzc2VkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaGFzRm9ybWF0ID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFJlY29uY2lsZSBjaGFubmVscyBhbmQgZm9ybWF0XG4gICAgaWYgKCFoYXNDaGFubmVscyAmJiBoYXNGb3JtYXQpIHtcbiAgICAgIGZsYWdzLmNoYW5uZWxzID0gRk9STUFUX0NIQU5ORUxTW2ZsYWdzLmZvcm1hdF1cbiAgICB9IGVsc2UgaWYgKGhhc0NoYW5uZWxzICYmICFoYXNGb3JtYXQpIHtcbiAgICAgIGlmIChmbGFncy5jaGFubmVscyAhPT0gQ0hBTk5FTFNfRk9STUFUW2ZsYWdzLmZvcm1hdF0pIHtcbiAgICAgICAgZmxhZ3MuZm9ybWF0ID0gZmxhZ3MuaW50ZXJuYWxmb3JtYXQgPSBDSEFOTkVMU19GT1JNQVRbZmxhZ3MuY2hhbm5lbHNdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoYXNGb3JtYXQgJiYgaGFzQ2hhbm5lbHMpIHtcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGZsYWdzLmNoYW5uZWxzID09PSBGT1JNQVRfQ0hBTk5FTFNbZmxhZ3MuZm9ybWF0XSxcbiAgICAgICAgJ251bWJlciBvZiBjaGFubmVscyBpbmNvbnNpc3RlbnQgd2l0aCBzcGVjaWZpZWQgZm9ybWF0JylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRGbGFncyAoZmxhZ3MpIHtcbiAgICBnbC5waXhlbFN0b3JlaShHTF9VTlBBQ0tfRkxJUF9ZX1dFQkdMLCBmbGFncy5mbGlwWSlcbiAgICBnbC5waXhlbFN0b3JlaShHTF9VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIGZsYWdzLnByZW11bHRpcGx5QWxwaGEpXG4gICAgZ2wucGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCwgZmxhZ3MuY29sb3JTcGFjZSlcbiAgICBnbC5waXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCBmbGFncy51bnBhY2tBbGlnbm1lbnQpXG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFRleCBpbWFnZSBkYXRhXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZnVuY3Rpb24gVGV4SW1hZ2UgKCkge1xuICAgIFRleEZsYWdzLmNhbGwodGhpcylcblxuICAgIHRoaXMueE9mZnNldCA9IDBcbiAgICB0aGlzLnlPZmZzZXQgPSAwXG5cbiAgICAvLyBkYXRhXG4gICAgdGhpcy5kYXRhID0gbnVsbFxuICAgIHRoaXMubmVlZHNGcmVlID0gZmFsc2VcblxuICAgIC8vIGh0bWwgZWxlbWVudFxuICAgIHRoaXMuZWxlbWVudCA9IG51bGxcblxuICAgIC8vIGNvcHlUZXhJbWFnZSBpbmZvXG4gICAgdGhpcy5uZWVkc0NvcHkgPSBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VJbWFnZSAoaW1hZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF0YSA9IG51bGxcbiAgICBpZiAoaXNQaXhlbERhdGEob3B0aW9ucykpIHtcbiAgICAgIGRhdGEgPSBvcHRpb25zXG4gICAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG4gICAgICBjaGVjayQxLnR5cGUob3B0aW9ucywgJ29iamVjdCcsICdpbnZhbGlkIHBpeGVsIGRhdGEgdHlwZScpXG4gICAgICBwYXJzZUZsYWdzKGltYWdlLCBvcHRpb25zKVxuICAgICAgaWYgKCd4JyBpbiBvcHRpb25zKSB7XG4gICAgICAgIGltYWdlLnhPZmZzZXQgPSBvcHRpb25zLnggfCAwXG4gICAgICB9XG4gICAgICBpZiAoJ3knIGluIG9wdGlvbnMpIHtcbiAgICAgICAgaW1hZ2UueU9mZnNldCA9IG9wdGlvbnMueSB8IDBcbiAgICAgIH1cbiAgICAgIGlmIChpc1BpeGVsRGF0YShvcHRpb25zLmRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBvcHRpb25zLmRhdGFcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVjayQxKFxuICAgICAgIWltYWdlLmNvbXByZXNzZWQgfHxcbiAgICAgIGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5LFxuICAgICAgJ2NvbXByZXNzZWQgdGV4dHVyZSBkYXRhIG11c3QgYmUgc3RvcmVkIGluIGEgdWludDhhcnJheScpXG5cbiAgICBpZiAob3B0aW9ucy5jb3B5KSB7XG4gICAgICBjaGVjayQxKCFkYXRhLCAnY2FuIG5vdCBzcGVjaWZ5IGNvcHkgYW5kIGRhdGEgZmllbGQgZm9yIHRoZSBzYW1lIHRleHR1cmUnKVxuICAgICAgdmFyIHZpZXdXID0gY29udGV4dFN0YXRlLnZpZXdwb3J0V2lkdGhcbiAgICAgIHZhciB2aWV3SCA9IGNvbnRleHRTdGF0ZS52aWV3cG9ydEhlaWdodFxuICAgICAgaW1hZ2Uud2lkdGggPSBpbWFnZS53aWR0aCB8fCAodmlld1cgLSBpbWFnZS54T2Zmc2V0KVxuICAgICAgaW1hZ2UuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0IHx8ICh2aWV3SCAtIGltYWdlLnlPZmZzZXQpXG4gICAgICBpbWFnZS5uZWVkc0NvcHkgPSB0cnVlXG4gICAgICBjaGVjayQxKGltYWdlLnhPZmZzZXQgPj0gMCAmJiBpbWFnZS54T2Zmc2V0IDwgdmlld1cgJiZcbiAgICAgICAgICAgIGltYWdlLnlPZmZzZXQgPj0gMCAmJiBpbWFnZS55T2Zmc2V0IDwgdmlld0ggJiZcbiAgICAgICAgICAgIGltYWdlLndpZHRoID4gMCAmJiBpbWFnZS53aWR0aCA8PSB2aWV3VyAmJlxuICAgICAgICAgICAgaW1hZ2UuaGVpZ2h0ID4gMCAmJiBpbWFnZS5oZWlnaHQgPD0gdmlld0gsXG4gICAgICAnY29weSB0ZXh0dXJlIHJlYWQgb3V0IG9mIGJvdW5kcycpXG4gICAgfSBlbHNlIGlmICghZGF0YSkge1xuICAgICAgaW1hZ2Uud2lkdGggPSBpbWFnZS53aWR0aCB8fCAxXG4gICAgICBpbWFnZS5oZWlnaHQgPSBpbWFnZS5oZWlnaHQgfHwgMVxuICAgICAgaW1hZ2UuY2hhbm5lbHMgPSBpbWFnZS5jaGFubmVscyB8fCA0XG4gICAgfSBlbHNlIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkpIHtcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gaW1hZ2UuY2hhbm5lbHMgfHwgNFxuICAgICAgaW1hZ2UuZGF0YSA9IGRhdGFcbiAgICAgIGlmICghKCd0eXBlJyBpbiBvcHRpb25zKSAmJiBpbWFnZS50eXBlID09PSBHTF9VTlNJR05FRF9CWVRFJDUpIHtcbiAgICAgICAgaW1hZ2UudHlwZSA9IHR5cGVkQXJyYXlDb2RlJDEoZGF0YSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzTnVtZXJpY0FycmF5KGRhdGEpKSB7XG4gICAgICBpbWFnZS5jaGFubmVscyA9IGltYWdlLmNoYW5uZWxzIHx8IDRcbiAgICAgIGNvbnZlcnREYXRhKGltYWdlLCBkYXRhKVxuICAgICAgaW1hZ2UuYWxpZ25tZW50ID0gMVxuICAgICAgaW1hZ2UubmVlZHNGcmVlID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaXNOREFycmF5TGlrZShkYXRhKSkge1xuICAgICAgdmFyIGFycmF5ID0gZGF0YS5kYXRhXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpICYmIGltYWdlLnR5cGUgPT09IEdMX1VOU0lHTkVEX0JZVEUkNSkge1xuICAgICAgICBpbWFnZS50eXBlID0gdHlwZWRBcnJheUNvZGUkMShhcnJheSlcbiAgICAgIH1cbiAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGVcbiAgICAgIHZhciBzdHJpZGUgPSBkYXRhLnN0cmlkZVxuICAgICAgdmFyIHNoYXBlWCwgc2hhcGVZLCBzaGFwZUMsIHN0cmlkZVgsIHN0cmlkZVksIHN0cmlkZUNcbiAgICAgIGlmIChzaGFwZS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgc2hhcGVDID0gc2hhcGVbMl1cbiAgICAgICAgc3RyaWRlQyA9IHN0cmlkZVsyXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMShzaGFwZS5sZW5ndGggPT09IDIsICdpbnZhbGlkIG5kYXJyYXkgcGl4ZWwgZGF0YSwgbXVzdCBiZSAyIG9yIDNEJylcbiAgICAgICAgc2hhcGVDID0gMVxuICAgICAgICBzdHJpZGVDID0gMVxuICAgICAgfVxuICAgICAgc2hhcGVYID0gc2hhcGVbMF1cbiAgICAgIHNoYXBlWSA9IHNoYXBlWzFdXG4gICAgICBzdHJpZGVYID0gc3RyaWRlWzBdXG4gICAgICBzdHJpZGVZID0gc3RyaWRlWzFdXG4gICAgICBpbWFnZS5hbGlnbm1lbnQgPSAxXG4gICAgICBpbWFnZS53aWR0aCA9IHNoYXBlWFxuICAgICAgaW1hZ2UuaGVpZ2h0ID0gc2hhcGVZXG4gICAgICBpbWFnZS5jaGFubmVscyA9IHNoYXBlQ1xuICAgICAgaW1hZ2UuZm9ybWF0ID0gaW1hZ2UuaW50ZXJuYWxmb3JtYXQgPSBDSEFOTkVMU19GT1JNQVRbc2hhcGVDXVxuICAgICAgaW1hZ2UubmVlZHNGcmVlID0gdHJ1ZVxuICAgICAgdHJhbnNwb3NlRGF0YShpbWFnZSwgYXJyYXksIHN0cmlkZVgsIHN0cmlkZVksIHN0cmlkZUMsIGRhdGEub2Zmc2V0KVxuICAgIH0gZWxzZSBpZiAoaXNDYW52YXNFbGVtZW50KGRhdGEpIHx8IGlzT2Zmc2NyZWVuQ2FudmFzKGRhdGEpIHx8IGlzQ29udGV4dDJEKGRhdGEpKSB7XG4gICAgICBpZiAoaXNDYW52YXNFbGVtZW50KGRhdGEpIHx8IGlzT2Zmc2NyZWVuQ2FudmFzKGRhdGEpKSB7XG4gICAgICAgIGltYWdlLmVsZW1lbnQgPSBkYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWFnZS5lbGVtZW50ID0gZGF0YS5jYW52YXNcbiAgICAgIH1cbiAgICAgIGltYWdlLndpZHRoID0gaW1hZ2UuZWxlbWVudC53aWR0aFxuICAgICAgaW1hZ2UuaGVpZ2h0ID0gaW1hZ2UuZWxlbWVudC5oZWlnaHRcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gNFxuICAgIH0gZWxzZSBpZiAoaXNCaXRtYXAoZGF0YSkpIHtcbiAgICAgIGltYWdlLmVsZW1lbnQgPSBkYXRhXG4gICAgICBpbWFnZS53aWR0aCA9IGRhdGEud2lkdGhcbiAgICAgIGltYWdlLmhlaWdodCA9IGRhdGEuaGVpZ2h0XG4gICAgICBpbWFnZS5jaGFubmVscyA9IDRcbiAgICB9IGVsc2UgaWYgKGlzSW1hZ2VFbGVtZW50KGRhdGEpKSB7XG4gICAgICBpbWFnZS5lbGVtZW50ID0gZGF0YVxuICAgICAgaW1hZ2Uud2lkdGggPSBkYXRhLm5hdHVyYWxXaWR0aFxuICAgICAgaW1hZ2UuaGVpZ2h0ID0gZGF0YS5uYXR1cmFsSGVpZ2h0XG4gICAgICBpbWFnZS5jaGFubmVscyA9IDRcbiAgICB9IGVsc2UgaWYgKGlzVmlkZW9FbGVtZW50KGRhdGEpKSB7XG4gICAgICBpbWFnZS5lbGVtZW50ID0gZGF0YVxuICAgICAgaW1hZ2Uud2lkdGggPSBkYXRhLnZpZGVvV2lkdGhcbiAgICAgIGltYWdlLmhlaWdodCA9IGRhdGEudmlkZW9IZWlnaHRcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gNFxuICAgIH0gZWxzZSBpZiAoaXNSZWN0QXJyYXkoZGF0YSkpIHtcbiAgICAgIHZhciB3ID0gaW1hZ2Uud2lkdGggfHwgZGF0YVswXS5sZW5ndGhcbiAgICAgIHZhciBoID0gaW1hZ2UuaGVpZ2h0IHx8IGRhdGEubGVuZ3RoXG4gICAgICB2YXIgYyA9IGltYWdlLmNoYW5uZWxzXG4gICAgICBpZiAoaXNBcnJheUxpa2UoZGF0YVswXVswXSkpIHtcbiAgICAgICAgYyA9IGMgfHwgZGF0YVswXVswXS5sZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGMgPSBjIHx8IDFcbiAgICAgIH1cbiAgICAgIHZhciBhcnJheVNoYXBlID0gZmxhdHRlblV0aWxzLnNoYXBlKGRhdGEpXG4gICAgICB2YXIgbiA9IDFcbiAgICAgIGZvciAodmFyIGRkID0gMDsgZGQgPCBhcnJheVNoYXBlLmxlbmd0aDsgKytkZCkge1xuICAgICAgICBuICo9IGFycmF5U2hhcGVbZGRdXG4gICAgICB9XG4gICAgICB2YXIgYWxsb2NEYXRhID0gcHJlQ29udmVydChpbWFnZSwgbilcbiAgICAgIGZsYXR0ZW5VdGlscy5mbGF0dGVuKGRhdGEsIGFycmF5U2hhcGUsICcnLCBhbGxvY0RhdGEpXG4gICAgICBwb3N0Q29udmVydChpbWFnZSwgYWxsb2NEYXRhKVxuICAgICAgaW1hZ2UuYWxpZ25tZW50ID0gMVxuICAgICAgaW1hZ2Uud2lkdGggPSB3XG4gICAgICBpbWFnZS5oZWlnaHQgPSBoXG4gICAgICBpbWFnZS5jaGFubmVscyA9IGNcbiAgICAgIGltYWdlLmZvcm1hdCA9IGltYWdlLmludGVybmFsZm9ybWF0ID0gQ0hBTk5FTFNfRk9STUFUW2NdXG4gICAgICBpbWFnZS5uZWVkc0ZyZWUgPSB0cnVlXG4gICAgfVxuXG4gICAgaWYgKGltYWdlLnR5cGUgPT09IEdMX0ZMT0FUJDQpIHtcbiAgICAgIGNoZWNrJDEobGltaXRzLmV4dGVuc2lvbnMuaW5kZXhPZignb2VzX3RleHR1cmVfZmxvYXQnKSA+PSAwLFxuICAgICAgICAnb2VzX3RleHR1cmVfZmxvYXQgZXh0ZW5zaW9uIG5vdCBlbmFibGVkJylcbiAgICB9IGVsc2UgaWYgKGltYWdlLnR5cGUgPT09IEdMX0hBTEZfRkxPQVRfT0VTJDEpIHtcbiAgICAgIGNoZWNrJDEobGltaXRzLmV4dGVuc2lvbnMuaW5kZXhPZignb2VzX3RleHR1cmVfaGFsZl9mbG9hdCcpID49IDAsXG4gICAgICAgICdvZXNfdGV4dHVyZV9oYWxmX2Zsb2F0IGV4dGVuc2lvbiBub3QgZW5hYmxlZCcpXG4gICAgfVxuXG4gICAgLy8gZG8gY29tcHJlc3NlZCB0ZXh0dXJlICB2YWxpZGF0aW9uIGhlcmUuXG4gIH1cblxuICBmdW5jdGlvbiBzZXRJbWFnZSAoaW5mbywgdGFyZ2V0LCBtaXBsZXZlbCkge1xuICAgIHZhciBlbGVtZW50ID0gaW5mby5lbGVtZW50XG4gICAgdmFyIGRhdGEgPSBpbmZvLmRhdGFcbiAgICB2YXIgaW50ZXJuYWxmb3JtYXQgPSBpbmZvLmludGVybmFsZm9ybWF0XG4gICAgdmFyIGZvcm1hdCA9IGluZm8uZm9ybWF0XG4gICAgdmFyIHR5cGUgPSBpbmZvLnR5cGVcbiAgICB2YXIgd2lkdGggPSBpbmZvLndpZHRoXG4gICAgdmFyIGhlaWdodCA9IGluZm8uaGVpZ2h0XG5cbiAgICBzZXRGbGFncyhpbmZvKVxuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGdsLnRleEltYWdlMkQodGFyZ2V0LCBtaXBsZXZlbCwgZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGVsZW1lbnQpXG4gICAgfSBlbHNlIGlmIChpbmZvLmNvbXByZXNzZWQpIHtcbiAgICAgIGdsLmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbWlwbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBkYXRhKVxuICAgIH0gZWxzZSBpZiAoaW5mby5uZWVkc0NvcHkpIHtcbiAgICAgIHJlZ2xQb2xsKClcbiAgICAgIGdsLmNvcHlUZXhJbWFnZTJEKFxuICAgICAgICB0YXJnZXQsIG1pcGxldmVsLCBmb3JtYXQsIGluZm8ueE9mZnNldCwgaW5mby55T2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICBnbC50ZXhJbWFnZTJEKHRhcmdldCwgbWlwbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCBkYXRhIHx8IG51bGwpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0U3ViSW1hZ2UgKGluZm8sIHRhcmdldCwgeCwgeSwgbWlwbGV2ZWwpIHtcbiAgICB2YXIgZWxlbWVudCA9IGluZm8uZWxlbWVudFxuICAgIHZhciBkYXRhID0gaW5mby5kYXRhXG4gICAgdmFyIGludGVybmFsZm9ybWF0ID0gaW5mby5pbnRlcm5hbGZvcm1hdFxuICAgIHZhciBmb3JtYXQgPSBpbmZvLmZvcm1hdFxuICAgIHZhciB0eXBlID0gaW5mby50eXBlXG4gICAgdmFyIHdpZHRoID0gaW5mby53aWR0aFxuICAgIHZhciBoZWlnaHQgPSBpbmZvLmhlaWdodFxuXG4gICAgc2V0RmxhZ3MoaW5mbylcblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBnbC50ZXhTdWJJbWFnZTJEKFxuICAgICAgICB0YXJnZXQsIG1pcGxldmVsLCB4LCB5LCBmb3JtYXQsIHR5cGUsIGVsZW1lbnQpXG4gICAgfSBlbHNlIGlmIChpbmZvLmNvbXByZXNzZWQpIHtcbiAgICAgIGdsLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKFxuICAgICAgICB0YXJnZXQsIG1pcGxldmVsLCB4LCB5LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbiAgICB9IGVsc2UgaWYgKGluZm8ubmVlZHNDb3B5KSB7XG4gICAgICByZWdsUG9sbCgpXG4gICAgICBnbC5jb3B5VGV4U3ViSW1hZ2UyRChcbiAgICAgICAgdGFyZ2V0LCBtaXBsZXZlbCwgeCwgeSwgaW5mby54T2Zmc2V0LCBpbmZvLnlPZmZzZXQsIHdpZHRoLCBoZWlnaHQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGdsLnRleFN1YkltYWdlMkQoXG4gICAgICAgIHRhcmdldCwgbWlwbGV2ZWwsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSlcbiAgICB9XG4gIH1cblxuICAvLyB0ZXhJbWFnZSBwb29sXG4gIHZhciBpbWFnZVBvb2wgPSBbXVxuXG4gIGZ1bmN0aW9uIGFsbG9jSW1hZ2UgKCkge1xuICAgIHJldHVybiBpbWFnZVBvb2wucG9wKCkgfHwgbmV3IFRleEltYWdlKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZyZWVJbWFnZSAoaW1hZ2UpIHtcbiAgICBpZiAoaW1hZ2UubmVlZHNGcmVlKSB7XG4gICAgICBwb29sLmZyZWVUeXBlKGltYWdlLmRhdGEpXG4gICAgfVxuICAgIFRleEltYWdlLmNhbGwoaW1hZ2UpXG4gICAgaW1hZ2VQb29sLnB1c2goaW1hZ2UpXG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE1pcCBtYXBcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBmdW5jdGlvbiBNaXBNYXAgKCkge1xuICAgIFRleEZsYWdzLmNhbGwodGhpcylcblxuICAgIHRoaXMuZ2VuTWlwbWFwcyA9IGZhbHNlXG4gICAgdGhpcy5taXBtYXBIaW50ID0gR0xfRE9OVF9DQVJFXG4gICAgdGhpcy5taXBtYXNrID0gMFxuICAgIHRoaXMuaW1hZ2VzID0gQXJyYXkoMTYpXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1pcE1hcEZyb21TaGFwZSAobWlwbWFwLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdmFyIGltZyA9IG1pcG1hcC5pbWFnZXNbMF0gPSBhbGxvY0ltYWdlKClcbiAgICBtaXBtYXAubWlwbWFzayA9IDFcbiAgICBpbWcud2lkdGggPSBtaXBtYXAud2lkdGggPSB3aWR0aFxuICAgIGltZy5oZWlnaHQgPSBtaXBtYXAuaGVpZ2h0ID0gaGVpZ2h0XG4gICAgaW1nLmNoYW5uZWxzID0gbWlwbWFwLmNoYW5uZWxzID0gNFxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VNaXBNYXBGcm9tT2JqZWN0IChtaXBtYXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgaW1nRGF0YSA9IG51bGxcbiAgICBpZiAoaXNQaXhlbERhdGEob3B0aW9ucykpIHtcbiAgICAgIGltZ0RhdGEgPSBtaXBtYXAuaW1hZ2VzWzBdID0gYWxsb2NJbWFnZSgpXG4gICAgICBjb3B5RmxhZ3MoaW1nRGF0YSwgbWlwbWFwKVxuICAgICAgcGFyc2VJbWFnZShpbWdEYXRhLCBvcHRpb25zKVxuICAgICAgbWlwbWFwLm1pcG1hc2sgPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlRmxhZ3MobWlwbWFwLCBvcHRpb25zKVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5taXBtYXApKSB7XG4gICAgICAgIHZhciBtaXBEYXRhID0gb3B0aW9ucy5taXBtYXBcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXBEYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaW1nRGF0YSA9IG1pcG1hcC5pbWFnZXNbaV0gPSBhbGxvY0ltYWdlKClcbiAgICAgICAgICBjb3B5RmxhZ3MoaW1nRGF0YSwgbWlwbWFwKVxuICAgICAgICAgIGltZ0RhdGEud2lkdGggPj49IGlcbiAgICAgICAgICBpbWdEYXRhLmhlaWdodCA+Pj0gaVxuICAgICAgICAgIHBhcnNlSW1hZ2UoaW1nRGF0YSwgbWlwRGF0YVtpXSlcbiAgICAgICAgICBtaXBtYXAubWlwbWFzayB8PSAoMSA8PCBpKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWdEYXRhID0gbWlwbWFwLmltYWdlc1swXSA9IGFsbG9jSW1hZ2UoKVxuICAgICAgICBjb3B5RmxhZ3MoaW1nRGF0YSwgbWlwbWFwKVxuICAgICAgICBwYXJzZUltYWdlKGltZ0RhdGEsIG9wdGlvbnMpXG4gICAgICAgIG1pcG1hcC5taXBtYXNrID0gMVxuICAgICAgfVxuICAgIH1cbiAgICBjb3B5RmxhZ3MobWlwbWFwLCBtaXBtYXAuaW1hZ2VzWzBdKVxuXG4gICAgLy8gRm9yIHRleHR1cmVzIG9mIHRoZSBjb21wcmVzc2VkIGZvcm1hdCBXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y1xuICAgIC8vIHdlIG11c3QgaGF2ZSB0aGF0XG4gICAgLy9cbiAgICAvLyBcIldoZW4gbGV2ZWwgZXF1YWxzIHplcm8gd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC5cbiAgICAvLyBXaGVuIGxldmVsIGlzIGdyZWF0ZXIgdGhhbiAwIHdpZHRoIGFuZCBoZWlnaHQgbXVzdCBiZSAwLCAxLCAyIG9yIGEgbXVsdGlwbGUgb2YgNC4gXCJcbiAgICAvL1xuICAgIC8vIGJ1dCB3ZSBkbyBub3QgeWV0IHN1cHBvcnQgaGF2aW5nIG11bHRpcGxlIG1pcG1hcCBsZXZlbHMgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMsXG4gICAgLy8gc28gd2Ugb25seSB0ZXN0IGZvciBsZXZlbCB6ZXJvLlxuXG4gICAgaWYgKFxuICAgICAgbWlwbWFwLmNvbXByZXNzZWQgJiZcbiAgICAgIChcbiAgICAgICAgbWlwbWFwLmludGVybmFsZm9ybWF0ID09PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUIHx8XG4gICAgICAgIG1pcG1hcC5pbnRlcm5hbGZvcm1hdCA9PT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgfHxcbiAgICAgICAgbWlwbWFwLmludGVybmFsZm9ybWF0ID09PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVCB8fFxuICAgICAgICBtaXBtYXAuaW50ZXJuYWxmb3JtYXQgPT09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUXG4gICAgICApXG4gICAgKSB7XG4gICAgICBjaGVjayQxKG1pcG1hcC53aWR0aCAlIDQgPT09IDAgJiYgbWlwbWFwLmhlaWdodCAlIDQgPT09IDAsXG4gICAgICAgICdmb3IgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdHMsIG1pcG1hcCBsZXZlbCAwIG11c3QgaGF2ZSB3aWR0aCBhbmQgaGVpZ2h0IHRoYXQgYXJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0TWlwTWFwIChtaXBtYXAsIHRhcmdldCkge1xuICAgIHZhciBpbWFnZXMgPSBtaXBtYXAuaW1hZ2VzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmICghaW1hZ2VzW2ldKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc2V0SW1hZ2UoaW1hZ2VzW2ldLCB0YXJnZXQsIGkpXG4gICAgfVxuICB9XG5cbiAgdmFyIG1pcFBvb2wgPSBbXVxuXG4gIGZ1bmN0aW9uIGFsbG9jTWlwTWFwICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gbWlwUG9vbC5wb3AoKSB8fCBuZXcgTWlwTWFwKClcbiAgICBUZXhGbGFncy5jYWxsKHJlc3VsdClcbiAgICByZXN1bHQubWlwbWFzayA9IDBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIHJlc3VsdC5pbWFnZXNbaV0gPSBudWxsXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGZyZWVNaXBNYXAgKG1pcG1hcCkge1xuICAgIHZhciBpbWFnZXMgPSBtaXBtYXAuaW1hZ2VzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChpbWFnZXNbaV0pIHtcbiAgICAgICAgZnJlZUltYWdlKGltYWdlc1tpXSlcbiAgICAgIH1cbiAgICAgIGltYWdlc1tpXSA9IG51bGxcbiAgICB9XG4gICAgbWlwUG9vbC5wdXNoKG1pcG1hcClcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVGV4IGluZm9cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBmdW5jdGlvbiBUZXhJbmZvICgpIHtcbiAgICB0aGlzLm1pbkZpbHRlciA9IEdMX05FQVJFU1QkMVxuICAgIHRoaXMubWFnRmlsdGVyID0gR0xfTkVBUkVTVCQxXG5cbiAgICB0aGlzLndyYXBTID0gR0xfQ0xBTVBfVE9fRURHRSQxXG4gICAgdGhpcy53cmFwVCA9IEdMX0NMQU1QX1RPX0VER0UkMVxuXG4gICAgdGhpcy5hbmlzb3Ryb3BpYyA9IDFcblxuICAgIHRoaXMuZ2VuTWlwbWFwcyA9IGZhbHNlXG4gICAgdGhpcy5taXBtYXBIaW50ID0gR0xfRE9OVF9DQVJFXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVRleEluZm8gKGluZm8sIG9wdGlvbnMpIHtcbiAgICBpZiAoJ21pbicgaW4gb3B0aW9ucykge1xuICAgICAgdmFyIG1pbkZpbHRlciA9IG9wdGlvbnMubWluXG4gICAgICBjaGVjayQxLnBhcmFtZXRlcihtaW5GaWx0ZXIsIG1pbkZpbHRlcnMpXG4gICAgICBpbmZvLm1pbkZpbHRlciA9IG1pbkZpbHRlcnNbbWluRmlsdGVyXVxuICAgICAgaWYgKE1JUE1BUF9GSUxURVJTLmluZGV4T2YoaW5mby5taW5GaWx0ZXIpID49IDAgJiYgISgnZmFjZXMnIGluIG9wdGlvbnMpKSB7XG4gICAgICAgIGluZm8uZ2VuTWlwbWFwcyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJ21hZycgaW4gb3B0aW9ucykge1xuICAgICAgdmFyIG1hZ0ZpbHRlciA9IG9wdGlvbnMubWFnXG4gICAgICBjaGVjayQxLnBhcmFtZXRlcihtYWdGaWx0ZXIsIG1hZ0ZpbHRlcnMpXG4gICAgICBpbmZvLm1hZ0ZpbHRlciA9IG1hZ0ZpbHRlcnNbbWFnRmlsdGVyXVxuICAgIH1cblxuICAgIHZhciB3cmFwUyA9IGluZm8ud3JhcFNcbiAgICB2YXIgd3JhcFQgPSBpbmZvLndyYXBUXG4gICAgaWYgKCd3cmFwJyBpbiBvcHRpb25zKSB7XG4gICAgICB2YXIgd3JhcCA9IG9wdGlvbnMud3JhcFxuICAgICAgaWYgKHR5cGVvZiB3cmFwID09PSAnc3RyaW5nJykge1xuICAgICAgICBjaGVjayQxLnBhcmFtZXRlcih3cmFwLCB3cmFwTW9kZXMpXG4gICAgICAgIHdyYXBTID0gd3JhcFQgPSB3cmFwTW9kZXNbd3JhcF1cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh3cmFwKSkge1xuICAgICAgICBjaGVjayQxLnBhcmFtZXRlcih3cmFwWzBdLCB3cmFwTW9kZXMpXG4gICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKHdyYXBbMV0sIHdyYXBNb2RlcylcbiAgICAgICAgd3JhcFMgPSB3cmFwTW9kZXNbd3JhcFswXV1cbiAgICAgICAgd3JhcFQgPSB3cmFwTW9kZXNbd3JhcFsxXV1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCd3cmFwUycgaW4gb3B0aW9ucykge1xuICAgICAgICB2YXIgb3B0V3JhcFMgPSBvcHRpb25zLndyYXBTXG4gICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG9wdFdyYXBTLCB3cmFwTW9kZXMpXG4gICAgICAgIHdyYXBTID0gd3JhcE1vZGVzW29wdFdyYXBTXVxuICAgICAgfVxuICAgICAgaWYgKCd3cmFwVCcgaW4gb3B0aW9ucykge1xuICAgICAgICB2YXIgb3B0V3JhcFQgPSBvcHRpb25zLndyYXBUXG4gICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG9wdFdyYXBULCB3cmFwTW9kZXMpXG4gICAgICAgIHdyYXBUID0gd3JhcE1vZGVzW29wdFdyYXBUXVxuICAgICAgfVxuICAgIH1cbiAgICBpbmZvLndyYXBTID0gd3JhcFNcbiAgICBpbmZvLndyYXBUID0gd3JhcFRcblxuICAgIGlmICgnYW5pc290cm9waWMnIGluIG9wdGlvbnMpIHtcbiAgICAgIHZhciBhbmlzb3Ryb3BpYyA9IG9wdGlvbnMuYW5pc290cm9waWNcbiAgICAgIGNoZWNrJDEodHlwZW9mIGFuaXNvdHJvcGljID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgYW5pc290cm9waWMgPj0gMSAmJiBhbmlzb3Ryb3BpYyA8PSBsaW1pdHMubWF4QW5pc290cm9waWMsXG4gICAgICAnYW5pc28gc2FtcGxlcyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgJylcbiAgICAgIGluZm8uYW5pc290cm9waWMgPSBvcHRpb25zLmFuaXNvdHJvcGljXG4gICAgfVxuXG4gICAgaWYgKCdtaXBtYXAnIGluIG9wdGlvbnMpIHtcbiAgICAgIHZhciBoYXNNaXBNYXAgPSBmYWxzZVxuICAgICAgc3dpdGNoICh0eXBlb2Ygb3B0aW9ucy5taXBtYXApIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihvcHRpb25zLm1pcG1hcCwgbWlwbWFwSGludCxcbiAgICAgICAgICAgICdpbnZhbGlkIG1pcG1hcCBoaW50JylcbiAgICAgICAgICBpbmZvLm1pcG1hcEhpbnQgPSBtaXBtYXBIaW50W29wdGlvbnMubWlwbWFwXVxuICAgICAgICAgIGluZm8uZ2VuTWlwbWFwcyA9IHRydWVcbiAgICAgICAgICBoYXNNaXBNYXAgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICBoYXNNaXBNYXAgPSBpbmZvLmdlbk1pcG1hcHMgPSBvcHRpb25zLm1pcG1hcFxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICBjaGVjayQxKEFycmF5LmlzQXJyYXkob3B0aW9ucy5taXBtYXApLCAnaW52YWxpZCBtaXBtYXAgdHlwZScpXG4gICAgICAgICAgaW5mby5nZW5NaXBtYXBzID0gZmFsc2VcbiAgICAgICAgICBoYXNNaXBNYXAgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgbWlwbWFwIHR5cGUnKVxuICAgICAgfVxuICAgICAgaWYgKGhhc01pcE1hcCAmJiAhKCdtaW4nIGluIG9wdGlvbnMpKSB7XG4gICAgICAgIGluZm8ubWluRmlsdGVyID0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCQxXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0VGV4SW5mbyAoaW5mbywgdGFyZ2V0KSB7XG4gICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgaW5mby5taW5GaWx0ZXIpXG4gICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgaW5mby5tYWdGaWx0ZXIpXG4gICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBpbmZvLndyYXBTKVxuICAgIGdsLnRleFBhcmFtZXRlcmkodGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgaW5mby53cmFwVClcbiAgICBpZiAoZXh0ZW5zaW9ucy5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMpIHtcbiAgICAgIGdsLnRleFBhcmFtZXRlcmkodGFyZ2V0LCBHTF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgaW5mby5hbmlzb3Ryb3BpYylcbiAgICB9XG4gICAgaWYgKGluZm8uZ2VuTWlwbWFwcykge1xuICAgICAgZ2wuaGludChHTF9HRU5FUkFURV9NSVBNQVBfSElOVCwgaW5mby5taXBtYXBIaW50KVxuICAgICAgZ2wuZ2VuZXJhdGVNaXBtYXAodGFyZ2V0KVxuICAgIH1cbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gRnVsbCB0ZXh0dXJlIG9iamVjdFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHZhciB0ZXh0dXJlQ291bnQgPSAwXG4gIHZhciB0ZXh0dXJlU2V0ID0ge31cbiAgdmFyIG51bVRleFVuaXRzID0gbGltaXRzLm1heFRleHR1cmVVbml0c1xuICB2YXIgdGV4dHVyZVVuaXRzID0gQXJyYXkobnVtVGV4VW5pdHMpLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfSlcblxuICBmdW5jdGlvbiBSRUdMVGV4dHVyZSAodGFyZ2V0KSB7XG4gICAgVGV4RmxhZ3MuY2FsbCh0aGlzKVxuICAgIHRoaXMubWlwbWFzayA9IDBcbiAgICB0aGlzLmludGVybmFsZm9ybWF0ID0gR0xfUkdCQSQxXG5cbiAgICB0aGlzLmlkID0gdGV4dHVyZUNvdW50KytcblxuICAgIHRoaXMucmVmQ291bnQgPSAxXG5cbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldFxuICAgIHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKVxuXG4gICAgdGhpcy51bml0ID0gLTFcbiAgICB0aGlzLmJpbmRDb3VudCA9IDBcblxuICAgIHRoaXMudGV4SW5mbyA9IG5ldyBUZXhJbmZvKClcblxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgdGhpcy5zdGF0cyA9IHsgc2l6ZTogMCB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdGVtcEJpbmQgKHRleHR1cmUpIHtcbiAgICBnbC5hY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwJDEpXG4gICAgZ2wuYmluZFRleHR1cmUodGV4dHVyZS50YXJnZXQsIHRleHR1cmUudGV4dHVyZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHRlbXBSZXN0b3JlICgpIHtcbiAgICB2YXIgcHJldiA9IHRleHR1cmVVbml0c1swXVxuICAgIGlmIChwcmV2KSB7XG4gICAgICBnbC5iaW5kVGV4dHVyZShwcmV2LnRhcmdldCwgcHJldi50ZXh0dXJlKVxuICAgIH0gZWxzZSB7XG4gICAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFXzJEJDEsIG51bGwpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSAodGV4dHVyZSkge1xuICAgIHZhciBoYW5kbGUgPSB0ZXh0dXJlLnRleHR1cmVcbiAgICBjaGVjayQxKGhhbmRsZSwgJ211c3Qgbm90IGRvdWJsZSBkZXN0cm95IHRleHR1cmUnKVxuICAgIHZhciB1bml0ID0gdGV4dHVyZS51bml0XG4gICAgdmFyIHRhcmdldCA9IHRleHR1cmUudGFyZ2V0XG4gICAgaWYgKHVuaXQgPj0gMCkge1xuICAgICAgZ2wuYWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCQxICsgdW5pdClcbiAgICAgIGdsLmJpbmRUZXh0dXJlKHRhcmdldCwgbnVsbClcbiAgICAgIHRleHR1cmVVbml0c1t1bml0XSA9IG51bGxcbiAgICB9XG4gICAgZ2wuZGVsZXRlVGV4dHVyZShoYW5kbGUpXG4gICAgdGV4dHVyZS50ZXh0dXJlID0gbnVsbFxuICAgIHRleHR1cmUucGFyYW1zID0gbnVsbFxuICAgIHRleHR1cmUucGl4ZWxzID0gbnVsbFxuICAgIHRleHR1cmUucmVmQ291bnQgPSAwXG4gICAgZGVsZXRlIHRleHR1cmVTZXRbdGV4dHVyZS5pZF1cbiAgICBzdGF0cy50ZXh0dXJlQ291bnQtLVxuICB9XG5cbiAgZXh0ZW5kKFJFR0xUZXh0dXJlLnByb3RvdHlwZSwge1xuICAgIGJpbmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0ZXh0dXJlID0gdGhpc1xuICAgICAgdGV4dHVyZS5iaW5kQ291bnQgKz0gMVxuICAgICAgdmFyIHVuaXQgPSB0ZXh0dXJlLnVuaXRcbiAgICAgIGlmICh1bml0IDwgMCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVRleFVuaXRzOyArK2kpIHtcbiAgICAgICAgICB2YXIgb3RoZXIgPSB0ZXh0dXJlVW5pdHNbaV1cbiAgICAgICAgICBpZiAob3RoZXIpIHtcbiAgICAgICAgICAgIGlmIChvdGhlci5iaW5kQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdGhlci51bml0ID0gLTFcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dHVyZVVuaXRzW2ldID0gdGV4dHVyZVxuICAgICAgICAgIHVuaXQgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5pdCA+PSBudW1UZXhVbml0cykge1xuICAgICAgICAgIGNoZWNrJDEucmFpc2UoJ2luc3VmZmljaWVudCBudW1iZXIgb2YgdGV4dHVyZSB1bml0cycpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5wcm9maWxlICYmIHN0YXRzLm1heFRleHR1cmVVbml0cyA8ICh1bml0ICsgMSkpIHtcbiAgICAgICAgICBzdGF0cy5tYXhUZXh0dXJlVW5pdHMgPSB1bml0ICsgMSAvLyArMSwgc2luY2UgdGhlIHVuaXRzIGFyZSB6ZXJvLWJhc2VkXG4gICAgICAgIH1cbiAgICAgICAgdGV4dHVyZS51bml0ID0gdW5pdFxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwJDEgKyB1bml0KVxuICAgICAgICBnbC5iaW5kVGV4dHVyZSh0ZXh0dXJlLnRhcmdldCwgdGV4dHVyZS50ZXh0dXJlKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuaXRcbiAgICB9LFxuXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmJpbmRDb3VudCAtPSAxXG4gICAgfSxcblxuICAgIGRlY1JlZjogZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKC0tdGhpcy5yZWZDb3VudCA8PSAwKSB7XG4gICAgICAgIGRlc3Ryb3kodGhpcylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgZnVuY3Rpb24gY3JlYXRlVGV4dHVyZTJEIChhLCBiKSB7XG4gICAgdmFyIHRleHR1cmUgPSBuZXcgUkVHTFRleHR1cmUoR0xfVEVYVFVSRV8yRCQxKVxuICAgIHRleHR1cmVTZXRbdGV4dHVyZS5pZF0gPSB0ZXh0dXJlXG4gICAgc3RhdHMudGV4dHVyZUNvdW50KytcblxuICAgIGZ1bmN0aW9uIHJlZ2xUZXh0dXJlMkQgKGEsIGIpIHtcbiAgICAgIHZhciB0ZXhJbmZvID0gdGV4dHVyZS50ZXhJbmZvXG4gICAgICBUZXhJbmZvLmNhbGwodGV4SW5mbylcbiAgICAgIHZhciBtaXBEYXRhID0gYWxsb2NNaXBNYXAoKVxuXG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21TaGFwZShtaXBEYXRhLCBhIHwgMCwgYiB8IDApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VNaXBNYXBGcm9tU2hhcGUobWlwRGF0YSwgYSB8IDAsIGEgfCAwKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGEpIHtcbiAgICAgICAgY2hlY2skMS50eXBlKGEsICdvYmplY3QnLCAnaW52YWxpZCBhcmd1bWVudHMgdG8gcmVnbC50ZXh0dXJlJylcbiAgICAgICAgcGFyc2VUZXhJbmZvKHRleEluZm8sIGEpXG4gICAgICAgIHBhcnNlTWlwTWFwRnJvbU9iamVjdChtaXBEYXRhLCBhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZW1wdHkgdGV4dHVyZXMgZ2V0IGFzc2lnbmVkIGEgZGVmYXVsdCBzaGFwZSBvZiAxeDFcbiAgICAgICAgcGFyc2VNaXBNYXBGcm9tU2hhcGUobWlwRGF0YSwgMSwgMSlcbiAgICAgIH1cblxuICAgICAgaWYgKHRleEluZm8uZ2VuTWlwbWFwcykge1xuICAgICAgICBtaXBEYXRhLm1pcG1hc2sgPSAobWlwRGF0YS53aWR0aCA8PCAxKSAtIDFcbiAgICAgIH1cbiAgICAgIHRleHR1cmUubWlwbWFzayA9IG1pcERhdGEubWlwbWFza1xuXG4gICAgICBjb3B5RmxhZ3ModGV4dHVyZSwgbWlwRGF0YSlcblxuICAgICAgY2hlY2skMS50ZXh0dXJlMkQodGV4SW5mbywgbWlwRGF0YSwgbGltaXRzKVxuICAgICAgdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCA9IG1pcERhdGEuaW50ZXJuYWxmb3JtYXRcblxuICAgICAgcmVnbFRleHR1cmUyRC53aWR0aCA9IG1pcERhdGEud2lkdGhcbiAgICAgIHJlZ2xUZXh0dXJlMkQuaGVpZ2h0ID0gbWlwRGF0YS5oZWlnaHRcblxuICAgICAgdGVtcEJpbmQodGV4dHVyZSlcbiAgICAgIHNldE1pcE1hcChtaXBEYXRhLCBHTF9URVhUVVJFXzJEJDEpXG4gICAgICBzZXRUZXhJbmZvKHRleEluZm8sIEdMX1RFWFRVUkVfMkQkMSlcbiAgICAgIHRlbXBSZXN0b3JlKClcblxuICAgICAgZnJlZU1pcE1hcChtaXBEYXRhKVxuXG4gICAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgICAgdGV4dHVyZS5zdGF0cy5zaXplID0gZ2V0VGV4dHVyZVNpemUoXG4gICAgICAgICAgdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgICAgICB0ZXh0dXJlLnR5cGUsXG4gICAgICAgICAgbWlwRGF0YS53aWR0aCxcbiAgICAgICAgICBtaXBEYXRhLmhlaWdodCxcbiAgICAgICAgICB0ZXhJbmZvLmdlbk1pcG1hcHMsXG4gICAgICAgICAgZmFsc2UpXG4gICAgICB9XG4gICAgICByZWdsVGV4dHVyZTJELmZvcm1hdCA9IHRleHR1cmVGb3JtYXRzSW52ZXJ0W3RleHR1cmUuaW50ZXJuYWxmb3JtYXRdXG4gICAgICByZWdsVGV4dHVyZTJELnR5cGUgPSB0ZXh0dXJlVHlwZXNJbnZlcnRbdGV4dHVyZS50eXBlXVxuXG4gICAgICByZWdsVGV4dHVyZTJELm1hZyA9IG1hZ0ZpbHRlcnNJbnZlcnRbdGV4SW5mby5tYWdGaWx0ZXJdXG4gICAgICByZWdsVGV4dHVyZTJELm1pbiA9IG1pbkZpbHRlcnNJbnZlcnRbdGV4SW5mby5taW5GaWx0ZXJdXG5cbiAgICAgIHJlZ2xUZXh0dXJlMkQud3JhcFMgPSB3cmFwTW9kZXNJbnZlcnRbdGV4SW5mby53cmFwU11cbiAgICAgIHJlZ2xUZXh0dXJlMkQud3JhcFQgPSB3cmFwTW9kZXNJbnZlcnRbdGV4SW5mby53cmFwVF1cblxuICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlMkRcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdWJpbWFnZSAoaW1hZ2UsIHhfLCB5XywgbGV2ZWxfKSB7XG4gICAgICBjaGVjayQxKCEhaW1hZ2UsICdtdXN0IHNwZWNpZnkgaW1hZ2UgZGF0YScpXG5cbiAgICAgIHZhciB4ID0geF8gfCAwXG4gICAgICB2YXIgeSA9IHlfIHwgMFxuICAgICAgdmFyIGxldmVsID0gbGV2ZWxfIHwgMFxuXG4gICAgICB2YXIgaW1hZ2VEYXRhID0gYWxsb2NJbWFnZSgpXG4gICAgICBjb3B5RmxhZ3MoaW1hZ2VEYXRhLCB0ZXh0dXJlKVxuICAgICAgaW1hZ2VEYXRhLndpZHRoID0gMFxuICAgICAgaW1hZ2VEYXRhLmhlaWdodCA9IDBcbiAgICAgIHBhcnNlSW1hZ2UoaW1hZ2VEYXRhLCBpbWFnZSlcbiAgICAgIGltYWdlRGF0YS53aWR0aCA9IGltYWdlRGF0YS53aWR0aCB8fCAoKHRleHR1cmUud2lkdGggPj4gbGV2ZWwpIC0geClcbiAgICAgIGltYWdlRGF0YS5oZWlnaHQgPSBpbWFnZURhdGEuaGVpZ2h0IHx8ICgodGV4dHVyZS5oZWlnaHQgPj4gbGV2ZWwpIC0geSlcblxuICAgICAgY2hlY2skMShcbiAgICAgICAgdGV4dHVyZS50eXBlID09PSBpbWFnZURhdGEudHlwZSAmJlxuICAgICAgICB0ZXh0dXJlLmZvcm1hdCA9PT0gaW1hZ2VEYXRhLmZvcm1hdCAmJlxuICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0ID09PSBpbWFnZURhdGEuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICdpbmNvbXBhdGlibGUgZm9ybWF0IGZvciB0ZXh0dXJlLnN1YmltYWdlJylcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHggPj0gMCAmJiB5ID49IDAgJiZcbiAgICAgICAgeCArIGltYWdlRGF0YS53aWR0aCA8PSB0ZXh0dXJlLndpZHRoICYmXG4gICAgICAgIHkgKyBpbWFnZURhdGEuaGVpZ2h0IDw9IHRleHR1cmUuaGVpZ2h0LFxuICAgICAgICAndGV4dHVyZS5zdWJpbWFnZSB3cml0ZSBvdXQgb2YgYm91bmRzJylcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHRleHR1cmUubWlwbWFzayAmICgxIDw8IGxldmVsKSxcbiAgICAgICAgJ21pc3NpbmcgbWlwbWFwIGRhdGEnKVxuICAgICAgY2hlY2skMShcbiAgICAgICAgaW1hZ2VEYXRhLmRhdGEgfHwgaW1hZ2VEYXRhLmVsZW1lbnQgfHwgaW1hZ2VEYXRhLm5lZWRzQ29weSxcbiAgICAgICAgJ21pc3NpbmcgaW1hZ2UgZGF0YScpXG5cbiAgICAgIHRlbXBCaW5kKHRleHR1cmUpXG4gICAgICBzZXRTdWJJbWFnZShpbWFnZURhdGEsIEdMX1RFWFRVUkVfMkQkMSwgeCwgeSwgbGV2ZWwpXG4gICAgICB0ZW1wUmVzdG9yZSgpXG5cbiAgICAgIGZyZWVJbWFnZShpbWFnZURhdGEpXG5cbiAgICAgIHJldHVybiByZWdsVGV4dHVyZTJEXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplICh3XywgaF8pIHtcbiAgICAgIHZhciB3ID0gd18gfCAwXG4gICAgICB2YXIgaCA9IChoXyB8IDApIHx8IHdcbiAgICAgIGlmICh3ID09PSB0ZXh0dXJlLndpZHRoICYmIGggPT09IHRleHR1cmUuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiByZWdsVGV4dHVyZTJEXG4gICAgICB9XG5cbiAgICAgIHJlZ2xUZXh0dXJlMkQud2lkdGggPSB0ZXh0dXJlLndpZHRoID0gd1xuICAgICAgcmVnbFRleHR1cmUyRC5oZWlnaHQgPSB0ZXh0dXJlLmhlaWdodCA9IGhcblxuICAgICAgdGVtcEJpbmQodGV4dHVyZSlcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IHRleHR1cmUubWlwbWFzayA+PiBpOyArK2kpIHtcbiAgICAgICAgdmFyIF93ID0gdyA+PiBpXG4gICAgICAgIHZhciBfaCA9IGggPj4gaVxuICAgICAgICBpZiAoIV93IHx8ICFfaCkgYnJlYWtcbiAgICAgICAgZ2wudGV4SW1hZ2UyRChcbiAgICAgICAgICBHTF9URVhUVVJFXzJEJDEsXG4gICAgICAgICAgaSxcbiAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCxcbiAgICAgICAgICBfdyxcbiAgICAgICAgICBfaCxcbiAgICAgICAgICAwLFxuICAgICAgICAgIHRleHR1cmUuZm9ybWF0LFxuICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICBudWxsKVxuICAgICAgfVxuICAgICAgdGVtcFJlc3RvcmUoKVxuXG4gICAgICAvLyBhbHNvLCByZWNvbXB1dGUgdGhlIHRleHR1cmUgc2l6ZS5cbiAgICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgICB0ZXh0dXJlLnN0YXRzLnNpemUgPSBnZXRUZXh0dXJlU2l6ZShcbiAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICB3LFxuICAgICAgICAgIGgsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgZmFsc2UpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWdsVGV4dHVyZTJEXG4gICAgfVxuXG4gICAgcmVnbFRleHR1cmUyRChhLCBiKVxuXG4gICAgcmVnbFRleHR1cmUyRC5zdWJpbWFnZSA9IHN1YmltYWdlXG4gICAgcmVnbFRleHR1cmUyRC5yZXNpemUgPSByZXNpemVcbiAgICByZWdsVGV4dHVyZTJELl9yZWdsVHlwZSA9ICd0ZXh0dXJlMmQnXG4gICAgcmVnbFRleHR1cmUyRC5fdGV4dHVyZSA9IHRleHR1cmVcbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHJlZ2xUZXh0dXJlMkQuc3RhdHMgPSB0ZXh0dXJlLnN0YXRzXG4gICAgfVxuICAgIHJlZ2xUZXh0dXJlMkQuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRleHR1cmUuZGVjUmVmKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnbFRleHR1cmUyRFxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVGV4dHVyZUN1YmUgKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBSRUdMVGV4dHVyZShHTF9URVhUVVJFX0NVQkVfTUFQJDEpXG4gICAgdGV4dHVyZVNldFt0ZXh0dXJlLmlkXSA9IHRleHR1cmVcbiAgICBzdGF0cy5jdWJlQ291bnQrK1xuXG4gICAgdmFyIGZhY2VzID0gbmV3IEFycmF5KDYpXG5cbiAgICBmdW5jdGlvbiByZWdsVGV4dHVyZUN1YmUgKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgICAgIHZhciBpXG4gICAgICB2YXIgdGV4SW5mbyA9IHRleHR1cmUudGV4SW5mb1xuICAgICAgVGV4SW5mby5jYWxsKHRleEluZm8pXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgKytpKSB7XG4gICAgICAgIGZhY2VzW2ldID0gYWxsb2NNaXBNYXAoKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGEwID09PSAnbnVtYmVyJyB8fCAhYTApIHtcbiAgICAgICAgdmFyIHMgPSAoYTAgfCAwKSB8fCAxXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21TaGFwZShmYWNlc1tpXSwgcywgcylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYTAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChhMSkge1xuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbU9iamVjdChmYWNlc1swXSwgYTApXG4gICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzWzFdLCBhMSlcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21PYmplY3QoZmFjZXNbMl0sIGEyKVxuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbU9iamVjdChmYWNlc1szXSwgYTMpXG4gICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzWzRdLCBhNClcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21PYmplY3QoZmFjZXNbNV0sIGE1KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlVGV4SW5mbyh0ZXhJbmZvLCBhMClcbiAgICAgICAgICBwYXJzZUZsYWdzKHRleHR1cmUsIGEwKVxuICAgICAgICAgIGlmICgnZmFjZXMnIGluIGEwKSB7XG4gICAgICAgICAgICB2YXIgZmFjZUlucHV0ID0gYTAuZmFjZXNcbiAgICAgICAgICAgIGNoZWNrJDEoQXJyYXkuaXNBcnJheShmYWNlSW5wdXQpICYmIGZhY2VJbnB1dC5sZW5ndGggPT09IDYsXG4gICAgICAgICAgICAgICdjdWJlIGZhY2VzIG11c3QgYmUgYSBsZW5ndGggNiBhcnJheScpXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgKytpKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEodHlwZW9mIGZhY2VJbnB1dFtpXSA9PT0gJ29iamVjdCcgJiYgISFmYWNlSW5wdXRbaV0sXG4gICAgICAgICAgICAgICAgJ2ludmFsaWQgaW5wdXQgZm9yIGN1YmUgbWFwIGZhY2UnKVxuICAgICAgICAgICAgICBjb3B5RmxhZ3MoZmFjZXNbaV0sIHRleHR1cmUpXG4gICAgICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbU9iamVjdChmYWNlc1tpXSwgZmFjZUlucHV0W2ldKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgKytpKSB7XG4gICAgICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbU9iamVjdChmYWNlc1tpXSwgYTApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGFyZ3VtZW50cyB0byBjdWJlIG1hcCcpXG4gICAgICB9XG5cbiAgICAgIGNvcHlGbGFncyh0ZXh0dXJlLCBmYWNlc1swXSlcblxuICAgICAgaWYgKCFsaW1pdHMubnBvdFRleHR1cmVDdWJlKSB7XG4gICAgICAgIGNoZWNrJDEoaXNQb3cyJDEodGV4dHVyZS53aWR0aCkgJiYgaXNQb3cyJDEodGV4dHVyZS5oZWlnaHQpLCAneW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgbm9uIHBvd2VyIG9yIHR3byB0ZXh0dXJlIGRpbWVuc2lvbnMnKVxuICAgICAgfVxuXG4gICAgICBpZiAodGV4SW5mby5nZW5NaXBtYXBzKSB7XG4gICAgICAgIHRleHR1cmUubWlwbWFzayA9IChmYWNlc1swXS53aWR0aCA8PCAxKSAtIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHR1cmUubWlwbWFzayA9IGZhY2VzWzBdLm1pcG1hc2tcbiAgICAgIH1cblxuICAgICAgY2hlY2skMS50ZXh0dXJlQ3ViZSh0ZXh0dXJlLCB0ZXhJbmZvLCBmYWNlcywgbGltaXRzKVxuICAgICAgdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCA9IGZhY2VzWzBdLmludGVybmFsZm9ybWF0XG5cbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS53aWR0aCA9IGZhY2VzWzBdLndpZHRoXG4gICAgICByZWdsVGV4dHVyZUN1YmUuaGVpZ2h0ID0gZmFjZXNbMF0uaGVpZ2h0XG5cbiAgICAgIHRlbXBCaW5kKHRleHR1cmUpXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgKytpKSB7XG4gICAgICAgIHNldE1pcE1hcChmYWNlc1tpXSwgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDEgKyBpKVxuICAgICAgfVxuICAgICAgc2V0VGV4SW5mbyh0ZXhJbmZvLCBHTF9URVhUVVJFX0NVQkVfTUFQJDEpXG4gICAgICB0ZW1wUmVzdG9yZSgpXG5cbiAgICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgICB0ZXh0dXJlLnN0YXRzLnNpemUgPSBnZXRUZXh0dXJlU2l6ZShcbiAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICByZWdsVGV4dHVyZUN1YmUud2lkdGgsXG4gICAgICAgICAgcmVnbFRleHR1cmVDdWJlLmhlaWdodCxcbiAgICAgICAgICB0ZXhJbmZvLmdlbk1pcG1hcHMsXG4gICAgICAgICAgdHJ1ZSlcbiAgICAgIH1cblxuICAgICAgcmVnbFRleHR1cmVDdWJlLmZvcm1hdCA9IHRleHR1cmVGb3JtYXRzSW52ZXJ0W3RleHR1cmUuaW50ZXJuYWxmb3JtYXRdXG4gICAgICByZWdsVGV4dHVyZUN1YmUudHlwZSA9IHRleHR1cmVUeXBlc0ludmVydFt0ZXh0dXJlLnR5cGVdXG5cbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS5tYWcgPSBtYWdGaWx0ZXJzSW52ZXJ0W3RleEluZm8ubWFnRmlsdGVyXVxuICAgICAgcmVnbFRleHR1cmVDdWJlLm1pbiA9IG1pbkZpbHRlcnNJbnZlcnRbdGV4SW5mby5taW5GaWx0ZXJdXG5cbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS53cmFwUyA9IHdyYXBNb2Rlc0ludmVydFt0ZXhJbmZvLndyYXBTXVxuICAgICAgcmVnbFRleHR1cmVDdWJlLndyYXBUID0gd3JhcE1vZGVzSW52ZXJ0W3RleEluZm8ud3JhcFRdXG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZnJlZU1pcE1hcChmYWNlc1tpXSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlQ3ViZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN1YmltYWdlIChmYWNlLCBpbWFnZSwgeF8sIHlfLCBsZXZlbF8pIHtcbiAgICAgIGNoZWNrJDEoISFpbWFnZSwgJ211c3Qgc3BlY2lmeSBpbWFnZSBkYXRhJylcbiAgICAgIGNoZWNrJDEodHlwZW9mIGZhY2UgPT09ICdudW1iZXInICYmIGZhY2UgPT09IChmYWNlIHwgMCkgJiZcbiAgICAgICAgZmFjZSA+PSAwICYmIGZhY2UgPCA2LCAnaW52YWxpZCBmYWNlJylcblxuICAgICAgdmFyIHggPSB4XyB8IDBcbiAgICAgIHZhciB5ID0geV8gfCAwXG4gICAgICB2YXIgbGV2ZWwgPSBsZXZlbF8gfCAwXG5cbiAgICAgIHZhciBpbWFnZURhdGEgPSBhbGxvY0ltYWdlKClcbiAgICAgIGNvcHlGbGFncyhpbWFnZURhdGEsIHRleHR1cmUpXG4gICAgICBpbWFnZURhdGEud2lkdGggPSAwXG4gICAgICBpbWFnZURhdGEuaGVpZ2h0ID0gMFxuICAgICAgcGFyc2VJbWFnZShpbWFnZURhdGEsIGltYWdlKVxuICAgICAgaW1hZ2VEYXRhLndpZHRoID0gaW1hZ2VEYXRhLndpZHRoIHx8ICgodGV4dHVyZS53aWR0aCA+PiBsZXZlbCkgLSB4KVxuICAgICAgaW1hZ2VEYXRhLmhlaWdodCA9IGltYWdlRGF0YS5oZWlnaHQgfHwgKCh0ZXh0dXJlLmhlaWdodCA+PiBsZXZlbCkgLSB5KVxuXG4gICAgICBjaGVjayQxKFxuICAgICAgICB0ZXh0dXJlLnR5cGUgPT09IGltYWdlRGF0YS50eXBlICYmXG4gICAgICAgIHRleHR1cmUuZm9ybWF0ID09PSBpbWFnZURhdGEuZm9ybWF0ICYmXG4gICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQgPT09IGltYWdlRGF0YS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgICAgJ2luY29tcGF0aWJsZSBmb3JtYXQgZm9yIHRleHR1cmUuc3ViaW1hZ2UnKVxuICAgICAgY2hlY2skMShcbiAgICAgICAgeCA+PSAwICYmIHkgPj0gMCAmJlxuICAgICAgICB4ICsgaW1hZ2VEYXRhLndpZHRoIDw9IHRleHR1cmUud2lkdGggJiZcbiAgICAgICAgeSArIGltYWdlRGF0YS5oZWlnaHQgPD0gdGV4dHVyZS5oZWlnaHQsXG4gICAgICAgICd0ZXh0dXJlLnN1YmltYWdlIHdyaXRlIG91dCBvZiBib3VuZHMnKVxuICAgICAgY2hlY2skMShcbiAgICAgICAgdGV4dHVyZS5taXBtYXNrICYgKDEgPDwgbGV2ZWwpLFxuICAgICAgICAnbWlzc2luZyBtaXBtYXAgZGF0YScpXG4gICAgICBjaGVjayQxKFxuICAgICAgICBpbWFnZURhdGEuZGF0YSB8fCBpbWFnZURhdGEuZWxlbWVudCB8fCBpbWFnZURhdGEubmVlZHNDb3B5LFxuICAgICAgICAnbWlzc2luZyBpbWFnZSBkYXRhJylcblxuICAgICAgdGVtcEJpbmQodGV4dHVyZSlcbiAgICAgIHNldFN1YkltYWdlKGltYWdlRGF0YSwgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDEgKyBmYWNlLCB4LCB5LCBsZXZlbClcbiAgICAgIHRlbXBSZXN0b3JlKClcblxuICAgICAgZnJlZUltYWdlKGltYWdlRGF0YSlcblxuICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlQ3ViZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2l6ZSAocmFkaXVzXykge1xuICAgICAgdmFyIHJhZGl1cyA9IHJhZGl1c18gfCAwXG4gICAgICBpZiAocmFkaXVzID09PSB0ZXh0dXJlLndpZHRoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZWdsVGV4dHVyZUN1YmUud2lkdGggPSB0ZXh0dXJlLndpZHRoID0gcmFkaXVzXG4gICAgICByZWdsVGV4dHVyZUN1YmUuaGVpZ2h0ID0gdGV4dHVyZS5oZWlnaHQgPSByYWRpdXNcblxuICAgICAgdGVtcEJpbmQodGV4dHVyZSlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyB0ZXh0dXJlLm1pcG1hc2sgPj4gajsgKytqKSB7XG4gICAgICAgICAgZ2wudGV4SW1hZ2UyRChcbiAgICAgICAgICAgIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQxICsgaSxcbiAgICAgICAgICAgIGosXG4gICAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCxcbiAgICAgICAgICAgIHJhZGl1cyA+PiBqLFxuICAgICAgICAgICAgcmFkaXVzID4+IGosXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdGV4dHVyZS5mb3JtYXQsXG4gICAgICAgICAgICB0ZXh0dXJlLnR5cGUsXG4gICAgICAgICAgICBudWxsKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0ZW1wUmVzdG9yZSgpXG5cbiAgICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgICB0ZXh0dXJlLnN0YXRzLnNpemUgPSBnZXRUZXh0dXJlU2l6ZShcbiAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICByZWdsVGV4dHVyZUN1YmUud2lkdGgsXG4gICAgICAgICAgcmVnbFRleHR1cmVDdWJlLmhlaWdodCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0cnVlKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVnbFRleHR1cmVDdWJlXG4gICAgfVxuXG4gICAgcmVnbFRleHR1cmVDdWJlKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUpXG5cbiAgICByZWdsVGV4dHVyZUN1YmUuc3ViaW1hZ2UgPSBzdWJpbWFnZVxuICAgIHJlZ2xUZXh0dXJlQ3ViZS5yZXNpemUgPSByZXNpemVcbiAgICByZWdsVGV4dHVyZUN1YmUuX3JlZ2xUeXBlID0gJ3RleHR1cmVDdWJlJ1xuICAgIHJlZ2xUZXh0dXJlQ3ViZS5fdGV4dHVyZSA9IHRleHR1cmVcbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS5zdGF0cyA9IHRleHR1cmUuc3RhdHNcbiAgICB9XG4gICAgcmVnbFRleHR1cmVDdWJlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0ZXh0dXJlLmRlY1JlZigpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2xUZXh0dXJlQ3ViZVxuICB9XG5cbiAgLy8gQ2FsbGVkIHdoZW4gcmVnbCBpcyBkZXN0cm95ZWRcbiAgZnVuY3Rpb24gZGVzdHJveVRleHR1cmVzICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVRleFVuaXRzOyArK2kpIHtcbiAgICAgIGdsLmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAkMSArIGkpXG4gICAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFXzJEJDEsIG51bGwpXG4gICAgICB0ZXh0dXJlVW5pdHNbaV0gPSBudWxsXG4gICAgfVxuICAgIHZhbHVlcyh0ZXh0dXJlU2V0KS5mb3JFYWNoKGRlc3Ryb3kpXG5cbiAgICBzdGF0cy5jdWJlQ291bnQgPSAwXG4gICAgc3RhdHMudGV4dHVyZUNvdW50ID0gMFxuICB9XG5cbiAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgc3RhdHMuZ2V0VG90YWxUZXh0dXJlU2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0b3RhbCA9IDBcbiAgICAgIE9iamVjdC5rZXlzKHRleHR1cmVTZXQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB0b3RhbCArPSB0ZXh0dXJlU2V0W2tleV0uc3RhdHMuc2l6ZVxuICAgICAgfSlcbiAgICAgIHJldHVybiB0b3RhbFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVUZXh0dXJlcyAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1UZXhVbml0czsgKytpKSB7XG4gICAgICB2YXIgdGV4ID0gdGV4dHVyZVVuaXRzW2ldXG4gICAgICBpZiAodGV4KSB7XG4gICAgICAgIHRleC5iaW5kQ291bnQgPSAwXG4gICAgICAgIHRleC51bml0ID0gLTFcbiAgICAgICAgdGV4dHVyZVVuaXRzW2ldID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlcyh0ZXh0dXJlU2V0KS5mb3JFYWNoKGZ1bmN0aW9uICh0ZXh0dXJlKSB7XG4gICAgICB0ZXh0dXJlLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKClcbiAgICAgIGdsLmJpbmRUZXh0dXJlKHRleHR1cmUudGFyZ2V0LCB0ZXh0dXJlLnRleHR1cmUpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDMyOyArK2kpIHtcbiAgICAgICAgaWYgKCh0ZXh0dXJlLm1pcG1hc2sgJiAoMSA8PCBpKSkgPT09IDApIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0dXJlLnRhcmdldCA9PT0gR0xfVEVYVFVSRV8yRCQxKSB7XG4gICAgICAgICAgZ2wudGV4SW1hZ2UyRChHTF9URVhUVVJFXzJEJDEsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgICAgICAgIHRleHR1cmUud2lkdGggPj4gaSxcbiAgICAgICAgICAgIHRleHR1cmUuaGVpZ2h0ID4+IGksXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICAgIG51bGwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA2OyArK2opIHtcbiAgICAgICAgICAgIGdsLnRleEltYWdlMkQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDEgKyBqLFxuICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgICAgICB0ZXh0dXJlLndpZHRoID4+IGksXG4gICAgICAgICAgICAgIHRleHR1cmUuaGVpZ2h0ID4+IGksXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICAgICAgbnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldFRleEluZm8odGV4dHVyZS50ZXhJbmZvLCB0ZXh0dXJlLnRhcmdldClcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaFRleHR1cmVzICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVRleFVuaXRzOyArK2kpIHtcbiAgICAgIHZhciB0ZXggPSB0ZXh0dXJlVW5pdHNbaV1cbiAgICAgIGlmICh0ZXgpIHtcbiAgICAgICAgdGV4LmJpbmRDb3VudCA9IDBcbiAgICAgICAgdGV4LnVuaXQgPSAtMVxuICAgICAgICB0ZXh0dXJlVW5pdHNbaV0gPSBudWxsXG4gICAgICB9XG4gICAgICBnbC5hY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwJDEgKyBpKVxuICAgICAgZ2wuYmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCQxLCBudWxsKVxuICAgICAgZ2wuYmluZFRleHR1cmUoR0xfVEVYVFVSRV9DVUJFX01BUCQxLCBudWxsKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlMkQ6IGNyZWF0ZVRleHR1cmUyRCxcbiAgICBjcmVhdGVDdWJlOiBjcmVhdGVUZXh0dXJlQ3ViZSxcbiAgICBjbGVhcjogZGVzdHJveVRleHR1cmVzLFxuICAgIGdldFRleHR1cmU6IGZ1bmN0aW9uICh3cmFwcGVyKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG4gICAgcmVzdG9yZTogcmVzdG9yZVRleHR1cmVzLFxuICAgIHJlZnJlc2g6IHJlZnJlc2hUZXh0dXJlc1xuICB9XG59XG5cbnZhciBHTF9SRU5ERVJCVUZGRVIgPSAweDhENDFcblxudmFyIEdMX1JHQkE0JDEgPSAweDgwNTZcbnZhciBHTF9SR0I1X0ExJDEgPSAweDgwNTdcbnZhciBHTF9SR0I1NjUkMSA9IDB4OEQ2MlxudmFyIEdMX0RFUFRIX0NPTVBPTkVOVDE2ID0gMHg4MUE1XG52YXIgR0xfU1RFTkNJTF9JTkRFWDggPSAweDhENDhcbnZhciBHTF9ERVBUSF9TVEVOQ0lMJDEgPSAweDg0RjlcblxudmFyIEdMX1NSR0I4X0FMUEhBOF9FWFQgPSAweDhDNDNcblxudmFyIEdMX1JHQkEzMkZfRVhUID0gMHg4ODE0XG5cbnZhciBHTF9SR0JBMTZGX0VYVCA9IDB4ODgxQVxudmFyIEdMX1JHQjE2Rl9FWFQgPSAweDg4MUJcblxudmFyIEZPUk1BVF9TSVpFUyA9IFtdXG5cbkZPUk1BVF9TSVpFU1tHTF9SR0JBNCQxXSA9IDJcbkZPUk1BVF9TSVpFU1tHTF9SR0I1X0ExJDFdID0gMlxuRk9STUFUX1NJWkVTW0dMX1JHQjU2NSQxXSA9IDJcblxuRk9STUFUX1NJWkVTW0dMX0RFUFRIX0NPTVBPTkVOVDE2XSA9IDJcbkZPUk1BVF9TSVpFU1tHTF9TVEVOQ0lMX0lOREVYOF0gPSAxXG5GT1JNQVRfU0laRVNbR0xfREVQVEhfU1RFTkNJTCQxXSA9IDRcblxuRk9STUFUX1NJWkVTW0dMX1NSR0I4X0FMUEhBOF9FWFRdID0gNFxuRk9STUFUX1NJWkVTW0dMX1JHQkEzMkZfRVhUXSA9IDE2XG5GT1JNQVRfU0laRVNbR0xfUkdCQTE2Rl9FWFRdID0gOFxuRk9STUFUX1NJWkVTW0dMX1JHQjE2Rl9FWFRdID0gNlxuXG5mdW5jdGlvbiBnZXRSZW5kZXJidWZmZXJTaXplIChmb3JtYXQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIEZPUk1BVF9TSVpFU1tmb3JtYXRdICogd2lkdGggKiBoZWlnaHRcbn1cblxudmFyIHdyYXBSZW5kZXJidWZmZXJzID0gZnVuY3Rpb24gKGdsLCBleHRlbnNpb25zLCBsaW1pdHMsIHN0YXRzLCBjb25maWcpIHtcbiAgdmFyIGZvcm1hdFR5cGVzID0ge1xuICAgICdyZ2JhNCc6IEdMX1JHQkE0JDEsXG4gICAgJ3JnYjU2NSc6IEdMX1JHQjU2NSQxLFxuICAgICdyZ2I1IGExJzogR0xfUkdCNV9BMSQxLFxuICAgICdkZXB0aCc6IEdMX0RFUFRIX0NPTVBPTkVOVDE2LFxuICAgICdzdGVuY2lsJzogR0xfU1RFTkNJTF9JTkRFWDgsXG4gICAgJ2RlcHRoIHN0ZW5jaWwnOiBHTF9ERVBUSF9TVEVOQ0lMJDFcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLmV4dF9zcmdiKSB7XG4gICAgZm9ybWF0VHlwZXNbJ3NyZ2JhJ10gPSBHTF9TUkdCOF9BTFBIQThfRVhUXG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQpIHtcbiAgICBmb3JtYXRUeXBlc1sncmdiYTE2ZiddID0gR0xfUkdCQTE2Rl9FWFRcbiAgICBmb3JtYXRUeXBlc1sncmdiMTZmJ10gPSBHTF9SR0IxNkZfRVhUXG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQpIHtcbiAgICBmb3JtYXRUeXBlc1sncmdiYTMyZiddID0gR0xfUkdCQTMyRl9FWFRcbiAgfVxuXG4gIHZhciBmb3JtYXRUeXBlc0ludmVydCA9IFtdXG4gIE9iamVjdC5rZXlzKGZvcm1hdFR5cGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsID0gZm9ybWF0VHlwZXNba2V5XVxuICAgIGZvcm1hdFR5cGVzSW52ZXJ0W3ZhbF0gPSBrZXlcbiAgfSlcblxuICB2YXIgcmVuZGVyYnVmZmVyQ291bnQgPSAwXG4gIHZhciByZW5kZXJidWZmZXJTZXQgPSB7fVxuXG4gIGZ1bmN0aW9uIFJFR0xSZW5kZXJidWZmZXIgKHJlbmRlcmJ1ZmZlcikge1xuICAgIHRoaXMuaWQgPSByZW5kZXJidWZmZXJDb3VudCsrXG4gICAgdGhpcy5yZWZDb3VudCA9IDFcblxuICAgIHRoaXMucmVuZGVyYnVmZmVyID0gcmVuZGVyYnVmZmVyXG5cbiAgICB0aGlzLmZvcm1hdCA9IEdMX1JHQkE0JDFcbiAgICB0aGlzLndpZHRoID0gMFxuICAgIHRoaXMuaGVpZ2h0ID0gMFxuXG4gICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICB0aGlzLnN0YXRzID0geyBzaXplOiAwIH1cbiAgICB9XG4gIH1cblxuICBSRUdMUmVuZGVyYnVmZmVyLnByb3RvdHlwZS5kZWNSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKC0tdGhpcy5yZWZDb3VudCA8PSAwKSB7XG4gICAgICBkZXN0cm95KHRoaXMpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSAocmIpIHtcbiAgICB2YXIgaGFuZGxlID0gcmIucmVuZGVyYnVmZmVyXG4gICAgY2hlY2skMShoYW5kbGUsICdtdXN0IG5vdCBkb3VibGUgZGVzdHJveSByZW5kZXJidWZmZXInKVxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBudWxsKVxuICAgIGdsLmRlbGV0ZVJlbmRlcmJ1ZmZlcihoYW5kbGUpXG4gICAgcmIucmVuZGVyYnVmZmVyID0gbnVsbFxuICAgIHJiLnJlZkNvdW50ID0gMFxuICAgIGRlbGV0ZSByZW5kZXJidWZmZXJTZXRbcmIuaWRdXG4gICAgc3RhdHMucmVuZGVyYnVmZmVyQ291bnQtLVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVuZGVyYnVmZmVyIChhLCBiKSB7XG4gICAgdmFyIHJlbmRlcmJ1ZmZlciA9IG5ldyBSRUdMUmVuZGVyYnVmZmVyKGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKVxuICAgIHJlbmRlcmJ1ZmZlclNldFtyZW5kZXJidWZmZXIuaWRdID0gcmVuZGVyYnVmZmVyXG4gICAgc3RhdHMucmVuZGVyYnVmZmVyQ291bnQrK1xuXG4gICAgZnVuY3Rpb24gcmVnbFJlbmRlcmJ1ZmZlciAoYSwgYikge1xuICAgICAgdmFyIHcgPSAwXG4gICAgICB2YXIgaCA9IDBcbiAgICAgIHZhciBmb3JtYXQgPSBHTF9SR0JBNCQxXG5cbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgYSkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IGFcbiAgICAgICAgaWYgKCdzaGFwZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgIHZhciBzaGFwZSA9IG9wdGlvbnMuc2hhcGVcbiAgICAgICAgICBjaGVjayQxKEFycmF5LmlzQXJyYXkoc2hhcGUpICYmIHNoYXBlLmxlbmd0aCA+PSAyLFxuICAgICAgICAgICAgJ2ludmFsaWQgcmVuZGVyYnVmZmVyIHNoYXBlJylcbiAgICAgICAgICB3ID0gc2hhcGVbMF0gfCAwXG4gICAgICAgICAgaCA9IHNoYXBlWzFdIHwgMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgncmFkaXVzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICB3ID0gaCA9IG9wdGlvbnMucmFkaXVzIHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ3dpZHRoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICB3ID0gb3B0aW9ucy53aWR0aCB8IDBcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCdoZWlnaHQnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGggPSBvcHRpb25zLmhlaWdodCB8IDBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCdmb3JtYXQnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihvcHRpb25zLmZvcm1hdCwgZm9ybWF0VHlwZXMsXG4gICAgICAgICAgICAnaW52YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0JylcbiAgICAgICAgICBmb3JtYXQgPSBmb3JtYXRUeXBlc1tvcHRpb25zLmZvcm1hdF1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdyA9IGEgfCAwXG4gICAgICAgIGlmICh0eXBlb2YgYiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBoID0gYiB8IDBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoID0gd1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFhKSB7XG4gICAgICAgIHcgPSBoID0gMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBhcmd1bWVudHMgdG8gcmVuZGVyYnVmZmVyIGNvbnN0cnVjdG9yJylcbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgc2hhcGVcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHcgPiAwICYmIGggPiAwICYmXG4gICAgICAgIHcgPD0gbGltaXRzLm1heFJlbmRlcmJ1ZmZlclNpemUgJiYgaCA8PSBsaW1pdHMubWF4UmVuZGVyYnVmZmVyU2l6ZSxcbiAgICAgICAgJ2ludmFsaWQgcmVuZGVyYnVmZmVyIHNpemUnKVxuXG4gICAgICBpZiAodyA9PT0gcmVuZGVyYnVmZmVyLndpZHRoICYmXG4gICAgICAgICAgaCA9PT0gcmVuZGVyYnVmZmVyLmhlaWdodCAmJlxuICAgICAgICAgIGZvcm1hdCA9PT0gcmVuZGVyYnVmZmVyLmZvcm1hdCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVnbFJlbmRlcmJ1ZmZlci53aWR0aCA9IHJlbmRlcmJ1ZmZlci53aWR0aCA9IHdcbiAgICAgIHJlZ2xSZW5kZXJidWZmZXIuaGVpZ2h0ID0gcmVuZGVyYnVmZmVyLmhlaWdodCA9IGhcbiAgICAgIHJlbmRlcmJ1ZmZlci5mb3JtYXQgPSBmb3JtYXRcblxuICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpXG4gICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgZm9ybWF0LCB3LCBoKVxuXG4gICAgICBjaGVjayQxKFxuICAgICAgICBnbC5nZXRFcnJvcigpID09PSAwLFxuICAgICAgICAnaW52YWxpZCByZW5kZXIgYnVmZmVyIGZvcm1hdCcpXG5cbiAgICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgICByZW5kZXJidWZmZXIuc3RhdHMuc2l6ZSA9IGdldFJlbmRlcmJ1ZmZlclNpemUocmVuZGVyYnVmZmVyLmZvcm1hdCwgcmVuZGVyYnVmZmVyLndpZHRoLCByZW5kZXJidWZmZXIuaGVpZ2h0KVxuICAgICAgfVxuICAgICAgcmVnbFJlbmRlcmJ1ZmZlci5mb3JtYXQgPSBmb3JtYXRUeXBlc0ludmVydFtyZW5kZXJidWZmZXIuZm9ybWF0XVxuXG4gICAgICByZXR1cm4gcmVnbFJlbmRlcmJ1ZmZlclxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2l6ZSAod18sIGhfKSB7XG4gICAgICB2YXIgdyA9IHdfIHwgMFxuICAgICAgdmFyIGggPSAoaF8gfCAwKSB8fCB3XG5cbiAgICAgIGlmICh3ID09PSByZW5kZXJidWZmZXIud2lkdGggJiYgaCA9PT0gcmVuZGVyYnVmZmVyLmhlaWdodCkge1xuICAgICAgICByZXR1cm4gcmVnbFJlbmRlcmJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBzaGFwZVxuICAgICAgY2hlY2skMShcbiAgICAgICAgdyA+IDAgJiYgaCA+IDAgJiZcbiAgICAgICAgdyA8PSBsaW1pdHMubWF4UmVuZGVyYnVmZmVyU2l6ZSAmJiBoIDw9IGxpbWl0cy5tYXhSZW5kZXJidWZmZXJTaXplLFxuICAgICAgICAnaW52YWxpZCByZW5kZXJidWZmZXIgc2l6ZScpXG5cbiAgICAgIHJlZ2xSZW5kZXJidWZmZXIud2lkdGggPSByZW5kZXJidWZmZXIud2lkdGggPSB3XG4gICAgICByZWdsUmVuZGVyYnVmZmVyLmhlaWdodCA9IHJlbmRlcmJ1ZmZlci5oZWlnaHQgPSBoXG5cbiAgICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIucmVuZGVyYnVmZmVyKVxuICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlci5mb3JtYXQsIHcsIGgpXG5cbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGdsLmdldEVycm9yKCkgPT09IDAsXG4gICAgICAgICdpbnZhbGlkIHJlbmRlciBidWZmZXIgZm9ybWF0JylcblxuICAgICAgLy8gYWxzbywgcmVjb21wdXRlIHNpemUuXG4gICAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgICAgcmVuZGVyYnVmZmVyLnN0YXRzLnNpemUgPSBnZXRSZW5kZXJidWZmZXJTaXplKFxuICAgICAgICAgIHJlbmRlcmJ1ZmZlci5mb3JtYXQsIHJlbmRlcmJ1ZmZlci53aWR0aCwgcmVuZGVyYnVmZmVyLmhlaWdodClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlZ2xSZW5kZXJidWZmZXJcbiAgICB9XG5cbiAgICByZWdsUmVuZGVyYnVmZmVyKGEsIGIpXG5cbiAgICByZWdsUmVuZGVyYnVmZmVyLnJlc2l6ZSA9IHJlc2l6ZVxuICAgIHJlZ2xSZW5kZXJidWZmZXIuX3JlZ2xUeXBlID0gJ3JlbmRlcmJ1ZmZlcidcbiAgICByZWdsUmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIgPSByZW5kZXJidWZmZXJcbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHJlZ2xSZW5kZXJidWZmZXIuc3RhdHMgPSByZW5kZXJidWZmZXIuc3RhdHNcbiAgICB9XG4gICAgcmVnbFJlbmRlcmJ1ZmZlci5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmVuZGVyYnVmZmVyLmRlY1JlZigpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2xSZW5kZXJidWZmZXJcbiAgfVxuXG4gIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgIHN0YXRzLmdldFRvdGFsUmVuZGVyYnVmZmVyU2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0b3RhbCA9IDBcbiAgICAgIE9iamVjdC5rZXlzKHJlbmRlcmJ1ZmZlclNldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHRvdGFsICs9IHJlbmRlcmJ1ZmZlclNldFtrZXldLnN0YXRzLnNpemVcbiAgICAgIH0pXG4gICAgICByZXR1cm4gdG90YWxcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlUmVuZGVyYnVmZmVycyAoKSB7XG4gICAgdmFsdWVzKHJlbmRlcmJ1ZmZlclNldCkuZm9yRWFjaChmdW5jdGlvbiAocmIpIHtcbiAgICAgIHJiLnJlbmRlcmJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpXG4gICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmIucmVuZGVyYnVmZmVyKVxuICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIHJiLmZvcm1hdCwgcmIud2lkdGgsIHJiLmhlaWdodClcbiAgICB9KVxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBudWxsKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGU6IGNyZWF0ZVJlbmRlcmJ1ZmZlcixcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFsdWVzKHJlbmRlcmJ1ZmZlclNldCkuZm9yRWFjaChkZXN0cm95KVxuICAgIH0sXG4gICAgcmVzdG9yZTogcmVzdG9yZVJlbmRlcmJ1ZmZlcnNcbiAgfVxufVxuXG4vLyBXZSBzdG9yZSB0aGVzZSBjb25zdGFudHMgc28gdGhhdCB0aGUgbWluaWZpZXIgY2FuIGlubGluZSB0aGVtXG52YXIgR0xfRlJBTUVCVUZGRVIkMSA9IDB4OEQ0MFxudmFyIEdMX1JFTkRFUkJVRkZFUiQxID0gMHg4RDQxXG5cbnZhciBHTF9URVhUVVJFXzJEJDIgPSAweDBERTFcbnZhciBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMiA9IDB4ODUxNVxuXG52YXIgR0xfQ09MT1JfQVRUQUNITUVOVDAkMSA9IDB4OENFMFxudmFyIEdMX0RFUFRIX0FUVEFDSE1FTlQgPSAweDhEMDBcbnZhciBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQgPSAweDhEMjBcbnZhciBHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgPSAweDgyMUFcblxudmFyIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFJDEgPSAweDhDRDVcbnZhciBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgPSAweDhDRDZcbnZhciBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA9IDB4OENEN1xudmFyIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyA9IDB4OENEOVxudmFyIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEID0gMHg4Q0REXG5cbnZhciBHTF9IQUxGX0ZMT0FUX09FUyQyID0gMHg4RDYxXG52YXIgR0xfVU5TSUdORURfQllURSQ2ID0gMHgxNDAxXG52YXIgR0xfRkxPQVQkNSA9IDB4MTQwNlxuXG52YXIgR0xfUkdCJDEgPSAweDE5MDdcbnZhciBHTF9SR0JBJDIgPSAweDE5MDhcblxudmFyIEdMX0RFUFRIX0NPTVBPTkVOVCQxID0gMHgxOTAyXG5cbnZhciBjb2xvclRleHR1cmVGb3JtYXRFbnVtcyA9IFtcbiAgR0xfUkdCJDEsXG4gIEdMX1JHQkEkMlxuXVxuXG4vLyBmb3IgZXZlcnkgdGV4dHVyZSBmb3JtYXQsIHN0b3JlXG4vLyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzXG52YXIgdGV4dHVyZUZvcm1hdENoYW5uZWxzID0gW11cbnRleHR1cmVGb3JtYXRDaGFubmVsc1tHTF9SR0JBJDJdID0gNFxudGV4dHVyZUZvcm1hdENoYW5uZWxzW0dMX1JHQiQxXSA9IDNcblxuLy8gZm9yIGV2ZXJ5IHRleHR1cmUgdHlwZSwgc3RvcmVcbi8vIHRoZSBzaXplIGluIGJ5dGVzLlxudmFyIHRleHR1cmVUeXBlU2l6ZXMgPSBbXVxudGV4dHVyZVR5cGVTaXplc1tHTF9VTlNJR05FRF9CWVRFJDZdID0gMVxudGV4dHVyZVR5cGVTaXplc1tHTF9GTE9BVCQ1XSA9IDRcbnRleHR1cmVUeXBlU2l6ZXNbR0xfSEFMRl9GTE9BVF9PRVMkMl0gPSAyXG5cbnZhciBHTF9SR0JBNCQyID0gMHg4MDU2XG52YXIgR0xfUkdCNV9BMSQyID0gMHg4MDU3XG52YXIgR0xfUkdCNTY1JDIgPSAweDhENjJcbnZhciBHTF9ERVBUSF9DT01QT05FTlQxNiQxID0gMHg4MUE1XG52YXIgR0xfU1RFTkNJTF9JTkRFWDgkMSA9IDB4OEQ0OFxudmFyIEdMX0RFUFRIX1NURU5DSUwkMiA9IDB4ODRGOVxuXG52YXIgR0xfU1JHQjhfQUxQSEE4X0VYVCQxID0gMHg4QzQzXG5cbnZhciBHTF9SR0JBMzJGX0VYVCQxID0gMHg4ODE0XG5cbnZhciBHTF9SR0JBMTZGX0VYVCQxID0gMHg4ODFBXG52YXIgR0xfUkdCMTZGX0VYVCQxID0gMHg4ODFCXG5cbnZhciBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdEVudW1zID0gW1xuICBHTF9SR0JBNCQyLFxuICBHTF9SR0I1X0ExJDIsXG4gIEdMX1JHQjU2NSQyLFxuICBHTF9TUkdCOF9BTFBIQThfRVhUJDEsXG4gIEdMX1JHQkExNkZfRVhUJDEsXG4gIEdMX1JHQjE2Rl9FWFQkMSxcbiAgR0xfUkdCQTMyRl9FWFQkMVxuXVxuXG52YXIgc3RhdHVzQ29kZSA9IHt9XG5zdGF0dXNDb2RlW0dMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFJDFdID0gJ2NvbXBsZXRlJ1xuc3RhdHVzQ29kZVtHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlRdID0gJ2luY29tcGxldGUgYXR0YWNobWVudCdcbnN0YXR1c0NvZGVbR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TXSA9ICdpbmNvbXBsZXRlIGRpbWVuc2lvbnMnXG5zdGF0dXNDb2RlW0dMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UXSA9ICdpbmNvbXBsZXRlLCBtaXNzaW5nIGF0dGFjaG1lbnQnXG5zdGF0dXNDb2RlW0dMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEXSA9ICd1bnN1cHBvcnRlZCdcblxuZnVuY3Rpb24gd3JhcEZCT1N0YXRlIChcbiAgZ2wsXG4gIGV4dGVuc2lvbnMsXG4gIGxpbWl0cyxcbiAgdGV4dHVyZVN0YXRlLFxuICByZW5kZXJidWZmZXJTdGF0ZSxcbiAgc3RhdHMpIHtcbiAgdmFyIGZyYW1lYnVmZmVyU3RhdGUgPSB7XG4gICAgY3VyOiBudWxsLFxuICAgIG5leHQ6IG51bGwsXG4gICAgZGlydHk6IGZhbHNlLFxuICAgIHNldEZCTzogbnVsbFxuICB9XG5cbiAgdmFyIGNvbG9yVGV4dHVyZUZvcm1hdHMgPSBbJ3JnYmEnXVxuICB2YXIgY29sb3JSZW5kZXJidWZmZXJGb3JtYXRzID0gWydyZ2JhNCcsICdyZ2I1NjUnLCAncmdiNSBhMSddXG5cbiAgaWYgKGV4dGVuc2lvbnMuZXh0X3NyZ2IpIHtcbiAgICBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdHMucHVzaCgnc3JnYmEnKVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0KSB7XG4gICAgY29sb3JSZW5kZXJidWZmZXJGb3JtYXRzLnB1c2goJ3JnYmExNmYnLCAncmdiMTZmJylcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCkge1xuICAgIGNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cy5wdXNoKCdyZ2JhMzJmJylcbiAgfVxuXG4gIHZhciBjb2xvclR5cGVzID0gWyd1aW50OCddXG4gIGlmIChleHRlbnNpb25zLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQpIHtcbiAgICBjb2xvclR5cGVzLnB1c2goJ2hhbGYgZmxvYXQnLCAnZmxvYXQxNicpXG4gIH1cbiAgaWYgKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfZmxvYXQpIHtcbiAgICBjb2xvclR5cGVzLnB1c2goJ2Zsb2F0JywgJ2Zsb2F0MzInKVxuICB9XG5cbiAgZnVuY3Rpb24gRnJhbWVidWZmZXJBdHRhY2htZW50ICh0YXJnZXQsIHRleHR1cmUsIHJlbmRlcmJ1ZmZlcikge1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyYnVmZmVyID0gcmVuZGVyYnVmZmVyXG5cbiAgICB2YXIgdyA9IDBcbiAgICB2YXIgaCA9IDBcbiAgICBpZiAodGV4dHVyZSkge1xuICAgICAgdyA9IHRleHR1cmUud2lkdGhcbiAgICAgIGggPSB0ZXh0dXJlLmhlaWdodFxuICAgIH0gZWxzZSBpZiAocmVuZGVyYnVmZmVyKSB7XG4gICAgICB3ID0gcmVuZGVyYnVmZmVyLndpZHRoXG4gICAgICBoID0gcmVuZGVyYnVmZmVyLmhlaWdodFxuICAgIH1cbiAgICB0aGlzLndpZHRoID0gd1xuICAgIHRoaXMuaGVpZ2h0ID0gaFxuICB9XG5cbiAgZnVuY3Rpb24gZGVjUmVmIChhdHRhY2htZW50KSB7XG4gICAgaWYgKGF0dGFjaG1lbnQpIHtcbiAgICAgIGlmIChhdHRhY2htZW50LnRleHR1cmUpIHtcbiAgICAgICAgYXR0YWNobWVudC50ZXh0dXJlLl90ZXh0dXJlLmRlY1JlZigpXG4gICAgICB9XG4gICAgICBpZiAoYXR0YWNobWVudC5yZW5kZXJidWZmZXIpIHtcbiAgICAgICAgYXR0YWNobWVudC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5kZWNSZWYoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluY1JlZkFuZENoZWNrU2hhcGUgKGF0dGFjaG1lbnQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBpZiAoIWF0dGFjaG1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYXR0YWNobWVudC50ZXh0dXJlKSB7XG4gICAgICB2YXIgdGV4dHVyZSA9IGF0dGFjaG1lbnQudGV4dHVyZS5fdGV4dHVyZVxuICAgICAgdmFyIHR3ID0gTWF0aC5tYXgoMSwgdGV4dHVyZS53aWR0aClcbiAgICAgIHZhciB0aCA9IE1hdGgubWF4KDEsIHRleHR1cmUuaGVpZ2h0KVxuICAgICAgY2hlY2skMSh0dyA9PT0gd2lkdGggJiYgdGggPT09IGhlaWdodCxcbiAgICAgICAgJ2luY29uc2lzdGVudCB3aWR0aC9oZWlnaHQgZm9yIHN1cHBsaWVkIHRleHR1cmUnKVxuICAgICAgdGV4dHVyZS5yZWZDb3VudCArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZW5kZXJidWZmZXIgPSBhdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyXG4gICAgICBjaGVjayQxKFxuICAgICAgICByZW5kZXJidWZmZXIud2lkdGggPT09IHdpZHRoICYmIHJlbmRlcmJ1ZmZlci5oZWlnaHQgPT09IGhlaWdodCxcbiAgICAgICAgJ2luY29uc2lzdGVudCB3aWR0aC9oZWlnaHQgZm9yIHJlbmRlcmJ1ZmZlcicpXG4gICAgICByZW5kZXJidWZmZXIucmVmQ291bnQgKz0gMVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dGFjaCAobG9jYXRpb24sIGF0dGFjaG1lbnQpIHtcbiAgICBpZiAoYXR0YWNobWVudCkge1xuICAgICAgaWYgKGF0dGFjaG1lbnQudGV4dHVyZSkge1xuICAgICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChcbiAgICAgICAgICBHTF9GUkFNRUJVRkZFUiQxLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIGF0dGFjaG1lbnQudGFyZ2V0LFxuICAgICAgICAgIGF0dGFjaG1lbnQudGV4dHVyZS5fdGV4dHVyZS50ZXh0dXJlLFxuICAgICAgICAgIDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihcbiAgICAgICAgICBHTF9GUkFNRUJVRkZFUiQxLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIEdMX1JFTkRFUkJVRkZFUiQxLFxuICAgICAgICAgIGF0dGFjaG1lbnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVuZGVyYnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQXR0YWNobWVudCAoYXR0YWNobWVudCkge1xuICAgIHZhciB0YXJnZXQgPSBHTF9URVhUVVJFXzJEJDJcbiAgICB2YXIgdGV4dHVyZSA9IG51bGxcbiAgICB2YXIgcmVuZGVyYnVmZmVyID0gbnVsbFxuXG4gICAgdmFyIGRhdGEgPSBhdHRhY2htZW50XG4gICAgaWYgKHR5cGVvZiBhdHRhY2htZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgZGF0YSA9IGF0dGFjaG1lbnQuZGF0YVxuICAgICAgaWYgKCd0YXJnZXQnIGluIGF0dGFjaG1lbnQpIHtcbiAgICAgICAgdGFyZ2V0ID0gYXR0YWNobWVudC50YXJnZXQgfCAwXG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2skMS50eXBlKGRhdGEsICdmdW5jdGlvbicsICdpbnZhbGlkIGF0dGFjaG1lbnQgZGF0YScpXG5cbiAgICB2YXIgdHlwZSA9IGRhdGEuX3JlZ2xUeXBlXG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0dXJlMmQnKSB7XG4gICAgICB0ZXh0dXJlID0gZGF0YVxuICAgICAgY2hlY2skMSh0YXJnZXQgPT09IEdMX1RFWFRVUkVfMkQkMilcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0ZXh0dXJlQ3ViZScpIHtcbiAgICAgIHRleHR1cmUgPSBkYXRhXG4gICAgICBjaGVjayQxKFxuICAgICAgICB0YXJnZXQgPj0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDIgJiZcbiAgICAgICAgdGFyZ2V0IDwgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDIgKyA2LFxuICAgICAgICAnaW52YWxpZCBjdWJlIG1hcCB0YXJnZXQnKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3JlbmRlcmJ1ZmZlcicpIHtcbiAgICAgIHJlbmRlcmJ1ZmZlciA9IGRhdGFcbiAgICAgIHRhcmdldCA9IEdMX1JFTkRFUkJVRkZFUiQxXG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgcmVnbCBvYmplY3QgZm9yIGF0dGFjaG1lbnQnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgRnJhbWVidWZmZXJBdHRhY2htZW50KHRhcmdldCwgdGV4dHVyZSwgcmVuZGVyYnVmZmVyKVxuICB9XG5cbiAgZnVuY3Rpb24gYWxsb2NBdHRhY2htZW50IChcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgaXNUZXh0dXJlLFxuICAgIGZvcm1hdCxcbiAgICB0eXBlKSB7XG4gICAgaWYgKGlzVGV4dHVyZSkge1xuICAgICAgdmFyIHRleHR1cmUgPSB0ZXh0dXJlU3RhdGUuY3JlYXRlMkQoe1xuICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICAgICAgdHlwZTogdHlwZVxuICAgICAgfSlcbiAgICAgIHRleHR1cmUuX3RleHR1cmUucmVmQ291bnQgPSAwXG4gICAgICByZXR1cm4gbmV3IEZyYW1lYnVmZmVyQXR0YWNobWVudChHTF9URVhUVVJFXzJEJDIsIHRleHR1cmUsIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByYiA9IHJlbmRlcmJ1ZmZlclN0YXRlLmNyZWF0ZSh7XG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIGZvcm1hdDogZm9ybWF0XG4gICAgICB9KVxuICAgICAgcmIuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudCA9IDBcbiAgICAgIHJldHVybiBuZXcgRnJhbWVidWZmZXJBdHRhY2htZW50KEdMX1JFTkRFUkJVRkZFUiQxLCBudWxsLCByYilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1bndyYXBBdHRhY2htZW50IChhdHRhY2htZW50KSB7XG4gICAgcmV0dXJuIGF0dGFjaG1lbnQgJiYgKGF0dGFjaG1lbnQudGV4dHVyZSB8fCBhdHRhY2htZW50LnJlbmRlcmJ1ZmZlcilcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2l6ZUF0dGFjaG1lbnQgKGF0dGFjaG1lbnQsIHcsIGgpIHtcbiAgICBpZiAoYXR0YWNobWVudCkge1xuICAgICAgaWYgKGF0dGFjaG1lbnQudGV4dHVyZSkge1xuICAgICAgICBhdHRhY2htZW50LnRleHR1cmUucmVzaXplKHcsIGgpXG4gICAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnQucmVuZGVyYnVmZmVyKSB7XG4gICAgICAgIGF0dGFjaG1lbnQucmVuZGVyYnVmZmVyLnJlc2l6ZSh3LCBoKVxuICAgICAgfVxuICAgICAgYXR0YWNobWVudC53aWR0aCA9IHdcbiAgICAgIGF0dGFjaG1lbnQuaGVpZ2h0ID0gaFxuICAgIH1cbiAgfVxuXG4gIHZhciBmcmFtZWJ1ZmZlckNvdW50ID0gMFxuICB2YXIgZnJhbWVidWZmZXJTZXQgPSB7fVxuXG4gIGZ1bmN0aW9uIFJFR0xGcmFtZWJ1ZmZlciAoKSB7XG4gICAgdGhpcy5pZCA9IGZyYW1lYnVmZmVyQ291bnQrK1xuICAgIGZyYW1lYnVmZmVyU2V0W3RoaXMuaWRdID0gdGhpc1xuXG4gICAgdGhpcy5mcmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKClcbiAgICB0aGlzLndpZHRoID0gMFxuICAgIHRoaXMuaGVpZ2h0ID0gMFxuXG4gICAgdGhpcy5jb2xvckF0dGFjaG1lbnRzID0gW11cbiAgICB0aGlzLmRlcHRoQXR0YWNobWVudCA9IG51bGxcbiAgICB0aGlzLnN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbFxuICAgIHRoaXMuZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY0ZCT1JlZnMgKGZyYW1lYnVmZmVyKSB7XG4gICAgZnJhbWVidWZmZXIuY29sb3JBdHRhY2htZW50cy5mb3JFYWNoKGRlY1JlZilcbiAgICBkZWNSZWYoZnJhbWVidWZmZXIuZGVwdGhBdHRhY2htZW50KVxuICAgIGRlY1JlZihmcmFtZWJ1ZmZlci5zdGVuY2lsQXR0YWNobWVudClcbiAgICBkZWNSZWYoZnJhbWVidWZmZXIuZGVwdGhTdGVuY2lsQXR0YWNobWVudClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3kgKGZyYW1lYnVmZmVyKSB7XG4gICAgdmFyIGhhbmRsZSA9IGZyYW1lYnVmZmVyLmZyYW1lYnVmZmVyXG4gICAgY2hlY2skMShoYW5kbGUsICdtdXN0IG5vdCBkb3VibGUgZGVzdHJveSBmcmFtZWJ1ZmZlcicpXG4gICAgZ2wuZGVsZXRlRnJhbWVidWZmZXIoaGFuZGxlKVxuICAgIGZyYW1lYnVmZmVyLmZyYW1lYnVmZmVyID0gbnVsbFxuICAgIHN0YXRzLmZyYW1lYnVmZmVyQ291bnQtLVxuICAgIGRlbGV0ZSBmcmFtZWJ1ZmZlclNldFtmcmFtZWJ1ZmZlci5pZF1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyYW1lYnVmZmVyIChmcmFtZWJ1ZmZlcikge1xuICAgIHZhciBpXG5cbiAgICBnbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIkMSwgZnJhbWVidWZmZXIuZnJhbWVidWZmZXIpXG4gICAgdmFyIGNvbG9yQXR0YWNobWVudHMgPSBmcmFtZWJ1ZmZlci5jb2xvckF0dGFjaG1lbnRzXG4gICAgZm9yIChpID0gMDsgaSA8IGNvbG9yQXR0YWNobWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGF0dGFjaChHTF9DT0xPUl9BVFRBQ0hNRU5UMCQxICsgaSwgY29sb3JBdHRhY2htZW50c1tpXSlcbiAgICB9XG4gICAgZm9yIChpID0gY29sb3JBdHRhY2htZW50cy5sZW5ndGg7IGkgPCBsaW1pdHMubWF4Q29sb3JBdHRhY2htZW50czsgKytpKSB7XG4gICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChcbiAgICAgICAgR0xfRlJBTUVCVUZGRVIkMSxcbiAgICAgICAgR0xfQ09MT1JfQVRUQUNITUVOVDAkMSArIGksXG4gICAgICAgIEdMX1RFWFRVUkVfMkQkMixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMClcbiAgICB9XG5cbiAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChcbiAgICAgIEdMX0ZSQU1FQlVGRkVSJDEsXG4gICAgICBHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsXG4gICAgICBHTF9URVhUVVJFXzJEJDIsXG4gICAgICBudWxsLFxuICAgICAgMClcbiAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChcbiAgICAgIEdMX0ZSQU1FQlVGRkVSJDEsXG4gICAgICBHTF9ERVBUSF9BVFRBQ0hNRU5ULFxuICAgICAgR0xfVEVYVFVSRV8yRCQyLFxuICAgICAgbnVsbCxcbiAgICAgIDApXG4gICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoXG4gICAgICBHTF9GUkFNRUJVRkZFUiQxLFxuICAgICAgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULFxuICAgICAgR0xfVEVYVFVSRV8yRCQyLFxuICAgICAgbnVsbCxcbiAgICAgIDApXG5cbiAgICBhdHRhY2goR0xfREVQVEhfQVRUQUNITUVOVCwgZnJhbWVidWZmZXIuZGVwdGhBdHRhY2htZW50KVxuICAgIGF0dGFjaChHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGZyYW1lYnVmZmVyLnN0ZW5jaWxBdHRhY2htZW50KVxuICAgIGF0dGFjaChHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGZyYW1lYnVmZmVyLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpXG5cbiAgICAvLyBDaGVjayBzdGF0dXMgY29kZVxuICAgIHZhciBzdGF0dXMgPSBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSJDEpXG4gICAgaWYgKCFnbC5pc0NvbnRleHRMb3N0KCkgJiYgc3RhdHVzICE9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSQxKSB7XG4gICAgICBjaGVjayQxLnJhaXNlKCdmcmFtZWJ1ZmZlciBjb25maWd1cmF0aW9uIG5vdCBzdXBwb3J0ZWQsIHN0YXR1cyA9ICcgK1xuICAgICAgICBzdGF0dXNDb2RlW3N0YXR1c10pXG4gICAgfVxuXG4gICAgZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSJDEsIGZyYW1lYnVmZmVyU3RhdGUubmV4dCA/IGZyYW1lYnVmZmVyU3RhdGUubmV4dC5mcmFtZWJ1ZmZlciA6IG51bGwpXG4gICAgZnJhbWVidWZmZXJTdGF0ZS5jdXIgPSBmcmFtZWJ1ZmZlclN0YXRlLm5leHRcblxuICAgIC8vIEZJWE1FOiBDbGVhciBlcnJvciBjb2RlIGhlcmUuICBUaGlzIGlzIGEgd29yayBhcm91bmQgZm9yIGEgYnVnIGluXG4gICAgLy8gaGVhZGxlc3MtZ2xcbiAgICBnbC5nZXRFcnJvcigpXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVGQk8gKGEwLCBhMSkge1xuICAgIHZhciBmcmFtZWJ1ZmZlciA9IG5ldyBSRUdMRnJhbWVidWZmZXIoKVxuICAgIHN0YXRzLmZyYW1lYnVmZmVyQ291bnQrK1xuXG4gICAgZnVuY3Rpb24gcmVnbEZyYW1lYnVmZmVyIChhLCBiKSB7XG4gICAgICB2YXIgaVxuXG4gICAgICBjaGVjayQxKGZyYW1lYnVmZmVyU3RhdGUubmV4dCAhPT0gZnJhbWVidWZmZXIsXG4gICAgICAgICdjYW4gbm90IHVwZGF0ZSBmcmFtZWJ1ZmZlciB3aGljaCBpcyBjdXJyZW50bHkgaW4gdXNlJylcblxuICAgICAgdmFyIHdpZHRoID0gMFxuICAgICAgdmFyIGhlaWdodCA9IDBcblxuICAgICAgdmFyIG5lZWRzRGVwdGggPSB0cnVlXG4gICAgICB2YXIgbmVlZHNTdGVuY2lsID0gdHJ1ZVxuXG4gICAgICB2YXIgY29sb3JCdWZmZXIgPSBudWxsXG4gICAgICB2YXIgY29sb3JUZXh0dXJlID0gdHJ1ZVxuICAgICAgdmFyIGNvbG9yRm9ybWF0ID0gJ3JnYmEnXG4gICAgICB2YXIgY29sb3JUeXBlID0gJ3VpbnQ4J1xuICAgICAgdmFyIGNvbG9yQ291bnQgPSAxXG5cbiAgICAgIHZhciBkZXB0aEJ1ZmZlciA9IG51bGxcbiAgICAgIHZhciBzdGVuY2lsQnVmZmVyID0gbnVsbFxuICAgICAgdmFyIGRlcHRoU3RlbmNpbEJ1ZmZlciA9IG51bGxcbiAgICAgIHZhciBkZXB0aFN0ZW5jaWxUZXh0dXJlID0gZmFsc2VcblxuICAgICAgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJykge1xuICAgICAgICB3aWR0aCA9IGEgfCAwXG4gICAgICAgIGhlaWdodCA9IChiIHwgMCkgfHwgd2lkdGhcbiAgICAgIH0gZWxzZSBpZiAoIWEpIHtcbiAgICAgICAgd2lkdGggPSBoZWlnaHQgPSAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxLnR5cGUoYSwgJ29iamVjdCcsICdpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnJhbWVidWZmZXInKVxuICAgICAgICB2YXIgb3B0aW9ucyA9IGFcblxuICAgICAgICBpZiAoJ3NoYXBlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgdmFyIHNoYXBlID0gb3B0aW9ucy5zaGFwZVxuICAgICAgICAgIGNoZWNrJDEoQXJyYXkuaXNBcnJheShzaGFwZSkgJiYgc2hhcGUubGVuZ3RoID49IDIsXG4gICAgICAgICAgICAnaW52YWxpZCBzaGFwZSBmb3IgZnJhbWVidWZmZXInKVxuICAgICAgICAgIHdpZHRoID0gc2hhcGVbMF1cbiAgICAgICAgICBoZWlnaHQgPSBzaGFwZVsxXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgncmFkaXVzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IG9wdGlvbnMucmFkaXVzXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnd2lkdGgnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHdpZHRoID0gb3B0aW9ucy53aWR0aFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ2hlaWdodCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2NvbG9yJyBpbiBvcHRpb25zIHx8XG4gICAgICAgICAgICAnY29sb3JzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgY29sb3JCdWZmZXIgPVxuICAgICAgICAgICAgb3B0aW9ucy5jb2xvciB8fFxuICAgICAgICAgICAgb3B0aW9ucy5jb2xvcnNcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2xvckJ1ZmZlcikpIHtcbiAgICAgICAgICAgIGNoZWNrJDEoXG4gICAgICAgICAgICAgIGNvbG9yQnVmZmVyLmxlbmd0aCA9PT0gMSB8fCBleHRlbnNpb25zLndlYmdsX2RyYXdfYnVmZmVycyxcbiAgICAgICAgICAgICAgJ211bHRpcGxlIHJlbmRlciB0YXJnZXRzIG5vdCBzdXBwb3J0ZWQnKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29sb3JCdWZmZXIpIHtcbiAgICAgICAgICBpZiAoJ2NvbG9yQ291bnQnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbG9yQ291bnQgPSBvcHRpb25zLmNvbG9yQ291bnQgfCAwXG4gICAgICAgICAgICBjaGVjayQxKGNvbG9yQ291bnQgPiAwLCAnaW52YWxpZCBjb2xvciBidWZmZXIgY291bnQnKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgnY29sb3JUZXh0dXJlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb2xvclRleHR1cmUgPSAhIW9wdGlvbnMuY29sb3JUZXh0dXJlXG4gICAgICAgICAgICBjb2xvckZvcm1hdCA9ICdyZ2JhNCdcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJ2NvbG9yVHlwZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY29sb3JUeXBlID0gb3B0aW9ucy5jb2xvclR5cGVcbiAgICAgICAgICAgIGlmICghY29sb3JUZXh0dXJlKSB7XG4gICAgICAgICAgICAgIGlmIChjb2xvclR5cGUgPT09ICdoYWxmIGZsb2F0JyB8fCBjb2xvclR5cGUgPT09ICdmbG9hdDE2Jykge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEoZXh0ZW5zaW9ucy5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQsXG4gICAgICAgICAgICAgICAgICAneW91IG11c3QgZW5hYmxlIEVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCB0byB1c2UgMTYtYml0IHJlbmRlciBidWZmZXJzJylcbiAgICAgICAgICAgICAgICBjb2xvckZvcm1hdCA9ICdyZ2JhMTZmJ1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbG9yVHlwZSA9PT0gJ2Zsb2F0JyB8fCBjb2xvclR5cGUgPT09ICdmbG9hdDMyJykge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEoZXh0ZW5zaW9ucy53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQsXG4gICAgICAgICAgICAgICAgICAneW91IG11c3QgZW5hYmxlIFdFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCBpbiBvcmRlciB0byB1c2UgMzItYml0IGZsb2F0aW5nIHBvaW50IHJlbmRlcmJ1ZmZlcnMnKVxuICAgICAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gJ3JnYmEzMmYnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9mbG9hdCB8fFxuICAgICAgICAgICAgICAgICEoY29sb3JUeXBlID09PSAnZmxvYXQnIHx8IGNvbG9yVHlwZSA9PT0gJ2Zsb2F0MzInKSxcbiAgICAgICAgICAgICAgJ3lvdSBtdXN0IGVuYWJsZSBPRVNfdGV4dHVyZV9mbG9hdCBpbiBvcmRlciB0byB1c2UgZmxvYXRpbmcgcG9pbnQgZnJhbWVidWZmZXIgb2JqZWN0cycpXG4gICAgICAgICAgICAgIGNoZWNrJDEoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0IHx8XG4gICAgICAgICAgICAgICAgIShjb2xvclR5cGUgPT09ICdoYWxmIGZsb2F0JyB8fCBjb2xvclR5cGUgPT09ICdmbG9hdDE2JyksXG4gICAgICAgICAgICAgICd5b3UgbXVzdCBlbmFibGUgT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpbiBvcmRlciB0byB1c2UgMTYtYml0IGZsb2F0aW5nIHBvaW50IGZyYW1lYnVmZmVyIG9iamVjdHMnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hlY2skMS5vbmVPZihjb2xvclR5cGUsIGNvbG9yVHlwZXMsICdpbnZhbGlkIGNvbG9yIHR5cGUnKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgnY29sb3JGb3JtYXQnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gb3B0aW9ucy5jb2xvckZvcm1hdFxuICAgICAgICAgICAgaWYgKGNvbG9yVGV4dHVyZUZvcm1hdHMuaW5kZXhPZihjb2xvckZvcm1hdCkgPj0gMCkge1xuICAgICAgICAgICAgICBjb2xvclRleHR1cmUgPSB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cy5pbmRleE9mKGNvbG9yRm9ybWF0KSA+PSAwKSB7XG4gICAgICAgICAgICAgIGNvbG9yVGV4dHVyZSA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoY29sb3JUZXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMS5vbmVPZihcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29sb3JGb3JtYXQsIGNvbG9yVGV4dHVyZUZvcm1hdHMsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBjb2xvciBmb3JtYXQgZm9yIHRleHR1cmUnKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEub25lT2YoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbG9yRm9ybWF0LCBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdHMsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBjb2xvciBmb3JtYXQgZm9yIHJlbmRlcmJ1ZmZlcicpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2RlcHRoVGV4dHVyZScgaW4gb3B0aW9ucyB8fCAnZGVwdGhTdGVuY2lsVGV4dHVyZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmUgPSAhIShvcHRpb25zLmRlcHRoVGV4dHVyZSB8fFxuICAgICAgICAgICAgb3B0aW9ucy5kZXB0aFN0ZW5jaWxUZXh0dXJlKVxuICAgICAgICAgIGNoZWNrJDEoIWRlcHRoU3RlbmNpbFRleHR1cmUgfHwgZXh0ZW5zaW9ucy53ZWJnbF9kZXB0aF90ZXh0dXJlLFxuICAgICAgICAgICAgJ3dlYmdsX2RlcHRoX3RleHR1cmUgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQnKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkZXB0aCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXB0aCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBuZWVkc0RlcHRoID0gb3B0aW9ucy5kZXB0aFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZXB0aEJ1ZmZlciA9IG9wdGlvbnMuZGVwdGhcbiAgICAgICAgICAgIG5lZWRzU3RlbmNpbCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdzdGVuY2lsJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnN0ZW5jaWwgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgbmVlZHNTdGVuY2lsID0gb3B0aW9ucy5zdGVuY2lsXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0ZW5jaWxCdWZmZXIgPSBvcHRpb25zLnN0ZW5jaWxcbiAgICAgICAgICAgIG5lZWRzRGVwdGggPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnZGVwdGhTdGVuY2lsJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlcHRoU3RlbmNpbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBuZWVkc0RlcHRoID0gbmVlZHNTdGVuY2lsID0gb3B0aW9ucy5kZXB0aFN0ZW5jaWxcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVwdGhTdGVuY2lsQnVmZmVyID0gb3B0aW9ucy5kZXB0aFN0ZW5jaWxcbiAgICAgICAgICAgIG5lZWRzRGVwdGggPSBmYWxzZVxuICAgICAgICAgICAgbmVlZHNTdGVuY2lsID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcGFyc2UgYXR0YWNobWVudHNcbiAgICAgIHZhciBjb2xvckF0dGFjaG1lbnRzID0gbnVsbFxuICAgICAgdmFyIGRlcHRoQXR0YWNobWVudCA9IG51bGxcbiAgICAgIHZhciBzdGVuY2lsQXR0YWNobWVudCA9IG51bGxcbiAgICAgIHZhciBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbFxuXG4gICAgICAvLyBTZXQgdXAgY29sb3IgYXR0YWNobWVudHNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yQnVmZmVyKSkge1xuICAgICAgICBjb2xvckF0dGFjaG1lbnRzID0gY29sb3JCdWZmZXIubWFwKHBhcnNlQXR0YWNobWVudClcbiAgICAgIH0gZWxzZSBpZiAoY29sb3JCdWZmZXIpIHtcbiAgICAgICAgY29sb3JBdHRhY2htZW50cyA9IFtwYXJzZUF0dGFjaG1lbnQoY29sb3JCdWZmZXIpXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sb3JBdHRhY2htZW50cyA9IG5ldyBBcnJheShjb2xvckNvdW50KVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JDb3VudDsgKytpKSB7XG4gICAgICAgICAgY29sb3JBdHRhY2htZW50c1tpXSA9IGFsbG9jQXR0YWNobWVudChcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgY29sb3JUZXh0dXJlLFxuICAgICAgICAgICAgY29sb3JGb3JtYXQsXG4gICAgICAgICAgICBjb2xvclR5cGUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2hlY2skMShleHRlbnNpb25zLndlYmdsX2RyYXdfYnVmZmVycyB8fCBjb2xvckF0dGFjaG1lbnRzLmxlbmd0aCA8PSAxLFxuICAgICAgICAneW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uIGluIG9yZGVyIHRvIHVzZSBtdWx0aXBsZSBjb2xvciBidWZmZXJzLicpXG4gICAgICBjaGVjayQxKGNvbG9yQXR0YWNobWVudHMubGVuZ3RoIDw9IGxpbWl0cy5tYXhDb2xvckF0dGFjaG1lbnRzLFxuICAgICAgICAndG9vIG1hbnkgY29sb3IgYXR0YWNobWVudHMsIG5vdCBzdXBwb3J0ZWQnKVxuXG4gICAgICB3aWR0aCA9IHdpZHRoIHx8IGNvbG9yQXR0YWNobWVudHNbMF0ud2lkdGhcbiAgICAgIGhlaWdodCA9IGhlaWdodCB8fCBjb2xvckF0dGFjaG1lbnRzWzBdLmhlaWdodFxuXG4gICAgICBpZiAoZGVwdGhCdWZmZXIpIHtcbiAgICAgICAgZGVwdGhBdHRhY2htZW50ID0gcGFyc2VBdHRhY2htZW50KGRlcHRoQnVmZmVyKVxuICAgICAgfSBlbHNlIGlmIChuZWVkc0RlcHRoICYmICFuZWVkc1N0ZW5jaWwpIHtcbiAgICAgICAgZGVwdGhBdHRhY2htZW50ID0gYWxsb2NBdHRhY2htZW50KFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlLFxuICAgICAgICAgICdkZXB0aCcsXG4gICAgICAgICAgJ3VpbnQzMicpXG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVuY2lsQnVmZmVyKSB7XG4gICAgICAgIHN0ZW5jaWxBdHRhY2htZW50ID0gcGFyc2VBdHRhY2htZW50KHN0ZW5jaWxCdWZmZXIpXG4gICAgICB9IGVsc2UgaWYgKG5lZWRzU3RlbmNpbCAmJiAhbmVlZHNEZXB0aCkge1xuICAgICAgICBzdGVuY2lsQXR0YWNobWVudCA9IGFsbG9jQXR0YWNobWVudChcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgJ3N0ZW5jaWwnLFxuICAgICAgICAgICd1aW50OCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChkZXB0aFN0ZW5jaWxCdWZmZXIpIHtcbiAgICAgICAgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IHBhcnNlQXR0YWNobWVudChkZXB0aFN0ZW5jaWxCdWZmZXIpXG4gICAgICB9IGVsc2UgaWYgKCFkZXB0aEJ1ZmZlciAmJiAhc3RlbmNpbEJ1ZmZlciAmJiBuZWVkc1N0ZW5jaWwgJiYgbmVlZHNEZXB0aCkge1xuICAgICAgICBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gYWxsb2NBdHRhY2htZW50KFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlLFxuICAgICAgICAgICdkZXB0aCBzdGVuY2lsJyxcbiAgICAgICAgICAnZGVwdGggc3RlbmNpbCcpXG4gICAgICB9XG5cbiAgICAgIGNoZWNrJDEoXG4gICAgICAgICghIWRlcHRoQnVmZmVyKSArICghIXN0ZW5jaWxCdWZmZXIpICsgKCEhZGVwdGhTdGVuY2lsQnVmZmVyKSA8PSAxLFxuICAgICAgICAnaW52YWxpZCBmcmFtZWJ1ZmZlciBjb25maWd1cmF0aW9uLCBjYW4gc3BlY2lmeSBleGFjdGx5IG9uZSBkZXB0aC9zdGVuY2lsIGF0dGFjaG1lbnQnKVxuXG4gICAgICB2YXIgY29tbW9uQ29sb3JBdHRhY2htZW50U2l6ZSA9IG51bGxcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yQXR0YWNobWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaW5jUmVmQW5kQ2hlY2tTaGFwZShjb2xvckF0dGFjaG1lbnRzW2ldLCB3aWR0aCwgaGVpZ2h0KVxuICAgICAgICBjaGVjayQxKCFjb2xvckF0dGFjaG1lbnRzW2ldIHx8XG4gICAgICAgICAgKGNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZSAmJlxuICAgICAgICAgICAgY29sb3JUZXh0dXJlRm9ybWF0RW51bXMuaW5kZXhPZihjb2xvckF0dGFjaG1lbnRzW2ldLnRleHR1cmUuX3RleHR1cmUuZm9ybWF0KSA+PSAwKSB8fFxuICAgICAgICAgIChjb2xvckF0dGFjaG1lbnRzW2ldLnJlbmRlcmJ1ZmZlciAmJlxuICAgICAgICAgICAgY29sb3JSZW5kZXJidWZmZXJGb3JtYXRFbnVtcy5pbmRleE9mKGNvbG9yQXR0YWNobWVudHNbaV0ucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0KSA+PSAwKSxcbiAgICAgICAgJ2ZyYW1lYnVmZmVyIGNvbG9yIGF0dGFjaG1lbnQgJyArIGkgKyAnIGlzIGludmFsaWQnKVxuXG4gICAgICAgIGlmIChjb2xvckF0dGFjaG1lbnRzW2ldICYmIGNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZSkge1xuICAgICAgICAgIHZhciBjb2xvckF0dGFjaG1lbnRTaXplID1cbiAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdENoYW5uZWxzW2NvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5fdGV4dHVyZS5mb3JtYXRdICpcbiAgICAgICAgICAgICAgdGV4dHVyZVR5cGVTaXplc1tjb2xvckF0dGFjaG1lbnRzW2ldLnRleHR1cmUuX3RleHR1cmUudHlwZV1cblxuICAgICAgICAgIGlmIChjb21tb25Db2xvckF0dGFjaG1lbnRTaXplID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb21tb25Db2xvckF0dGFjaG1lbnRTaXplID0gY29sb3JBdHRhY2htZW50U2l6ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBjb2xvciBhdHRhY2htZW50cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBiaXRwbGFuZXNcbiAgICAgICAgICAgIC8vICh0aGF0IGlzLCB0aGUgc2FtZSBudW1lciBvZiBiaXRzIHBlciBwaXhlbClcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIEdMRVMyLjAgc3RhbmRhcmQuIFNlZSB0aGUgYmVnaW5uaW5nIG9mIENoYXB0ZXIgNCBpbiB0aGF0IGRvY3VtZW50LlxuICAgICAgICAgICAgY2hlY2skMShjb21tb25Db2xvckF0dGFjaG1lbnRTaXplID09PSBjb2xvckF0dGFjaG1lbnRTaXplLFxuICAgICAgICAgICAgICAnYWxsIGNvbG9yIGF0dGFjaG1lbnRzIG11Y2ggaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwuJylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGluY1JlZkFuZENoZWNrU2hhcGUoZGVwdGhBdHRhY2htZW50LCB3aWR0aCwgaGVpZ2h0KVxuICAgICAgY2hlY2skMSghZGVwdGhBdHRhY2htZW50IHx8XG4gICAgICAgIChkZXB0aEF0dGFjaG1lbnQudGV4dHVyZSAmJlxuICAgICAgICAgIGRlcHRoQXR0YWNobWVudC50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdCA9PT0gR0xfREVQVEhfQ09NUE9ORU5UJDEpIHx8XG4gICAgICAgIChkZXB0aEF0dGFjaG1lbnQucmVuZGVyYnVmZmVyICYmXG4gICAgICAgICAgZGVwdGhBdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdCA9PT0gR0xfREVQVEhfQ09NUE9ORU5UMTYkMSksXG4gICAgICAnaW52YWxpZCBkZXB0aCBhdHRhY2htZW50IGZvciBmcmFtZWJ1ZmZlciBvYmplY3QnKVxuICAgICAgaW5jUmVmQW5kQ2hlY2tTaGFwZShzdGVuY2lsQXR0YWNobWVudCwgd2lkdGgsIGhlaWdodClcbiAgICAgIGNoZWNrJDEoIXN0ZW5jaWxBdHRhY2htZW50IHx8XG4gICAgICAgIChzdGVuY2lsQXR0YWNobWVudC5yZW5kZXJidWZmZXIgJiZcbiAgICAgICAgICBzdGVuY2lsQXR0YWNobWVudC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5mb3JtYXQgPT09IEdMX1NURU5DSUxfSU5ERVg4JDEpLFxuICAgICAgJ2ludmFsaWQgc3RlbmNpbCBhdHRhY2htZW50IGZvciBmcmFtZWJ1ZmZlciBvYmplY3QnKVxuICAgICAgaW5jUmVmQW5kQ2hlY2tTaGFwZShkZXB0aFN0ZW5jaWxBdHRhY2htZW50LCB3aWR0aCwgaGVpZ2h0KVxuICAgICAgY2hlY2skMSghZGVwdGhTdGVuY2lsQXR0YWNobWVudCB8fFxuICAgICAgICAoZGVwdGhTdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlICYmXG4gICAgICAgICAgZGVwdGhTdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdCA9PT0gR0xfREVQVEhfU1RFTkNJTCQyKSB8fFxuICAgICAgICAoZGVwdGhTdGVuY2lsQXR0YWNobWVudC5yZW5kZXJidWZmZXIgJiZcbiAgICAgICAgICBkZXB0aFN0ZW5jaWxBdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdCA9PT0gR0xfREVQVEhfU1RFTkNJTCQyKSxcbiAgICAgICdpbnZhbGlkIGRlcHRoLXN0ZW5jaWwgYXR0YWNobWVudCBmb3IgZnJhbWVidWZmZXIgb2JqZWN0JylcblxuICAgICAgLy8gZGVjcmVtZW50IHJlZmVyZW5jZXNcbiAgICAgIGRlY0ZCT1JlZnMoZnJhbWVidWZmZXIpXG5cbiAgICAgIGZyYW1lYnVmZmVyLndpZHRoID0gd2lkdGhcbiAgICAgIGZyYW1lYnVmZmVyLmhlaWdodCA9IGhlaWdodFxuXG4gICAgICBmcmFtZWJ1ZmZlci5jb2xvckF0dGFjaG1lbnRzID0gY29sb3JBdHRhY2htZW50c1xuICAgICAgZnJhbWVidWZmZXIuZGVwdGhBdHRhY2htZW50ID0gZGVwdGhBdHRhY2htZW50XG4gICAgICBmcmFtZWJ1ZmZlci5zdGVuY2lsQXR0YWNobWVudCA9IHN0ZW5jaWxBdHRhY2htZW50XG4gICAgICBmcmFtZWJ1ZmZlci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gZGVwdGhTdGVuY2lsQXR0YWNobWVudFxuXG4gICAgICByZWdsRnJhbWVidWZmZXIuY29sb3IgPSBjb2xvckF0dGFjaG1lbnRzLm1hcCh1bndyYXBBdHRhY2htZW50KVxuICAgICAgcmVnbEZyYW1lYnVmZmVyLmRlcHRoID0gdW53cmFwQXR0YWNobWVudChkZXB0aEF0dGFjaG1lbnQpXG4gICAgICByZWdsRnJhbWVidWZmZXIuc3RlbmNpbCA9IHVud3JhcEF0dGFjaG1lbnQoc3RlbmNpbEF0dGFjaG1lbnQpXG4gICAgICByZWdsRnJhbWVidWZmZXIuZGVwdGhTdGVuY2lsID0gdW53cmFwQXR0YWNobWVudChkZXB0aFN0ZW5jaWxBdHRhY2htZW50KVxuXG4gICAgICByZWdsRnJhbWVidWZmZXIud2lkdGggPSBmcmFtZWJ1ZmZlci53aWR0aFxuICAgICAgcmVnbEZyYW1lYnVmZmVyLmhlaWdodCA9IGZyYW1lYnVmZmVyLmhlaWdodFxuXG4gICAgICB1cGRhdGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcilcblxuICAgICAgcmV0dXJuIHJlZ2xGcmFtZWJ1ZmZlclxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2l6ZSAod18sIGhfKSB7XG4gICAgICBjaGVjayQxKGZyYW1lYnVmZmVyU3RhdGUubmV4dCAhPT0gZnJhbWVidWZmZXIsXG4gICAgICAgICdjYW4gbm90IHJlc2l6ZSBhIGZyYW1lYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiB1c2UnKVxuXG4gICAgICB2YXIgdyA9IE1hdGgubWF4KHdfIHwgMCwgMSlcbiAgICAgIHZhciBoID0gTWF0aC5tYXgoKGhfIHwgMCkgfHwgdywgMSlcbiAgICAgIGlmICh3ID09PSBmcmFtZWJ1ZmZlci53aWR0aCAmJiBoID09PSBmcmFtZWJ1ZmZlci5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2xGcmFtZWJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvLyByZXNpemUgYWxsIGJ1ZmZlcnNcbiAgICAgIHZhciBjb2xvckF0dGFjaG1lbnRzID0gZnJhbWVidWZmZXIuY29sb3JBdHRhY2htZW50c1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvckF0dGFjaG1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHJlc2l6ZUF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50c1tpXSwgdywgaClcbiAgICAgIH1cbiAgICAgIHJlc2l6ZUF0dGFjaG1lbnQoZnJhbWVidWZmZXIuZGVwdGhBdHRhY2htZW50LCB3LCBoKVxuICAgICAgcmVzaXplQXR0YWNobWVudChmcmFtZWJ1ZmZlci5zdGVuY2lsQXR0YWNobWVudCwgdywgaClcbiAgICAgIHJlc2l6ZUF0dGFjaG1lbnQoZnJhbWVidWZmZXIuZGVwdGhTdGVuY2lsQXR0YWNobWVudCwgdywgaClcblxuICAgICAgZnJhbWVidWZmZXIud2lkdGggPSByZWdsRnJhbWVidWZmZXIud2lkdGggPSB3XG4gICAgICBmcmFtZWJ1ZmZlci5oZWlnaHQgPSByZWdsRnJhbWVidWZmZXIuaGVpZ2h0ID0gaFxuXG4gICAgICB1cGRhdGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcilcblxuICAgICAgcmV0dXJuIHJlZ2xGcmFtZWJ1ZmZlclxuICAgIH1cblxuICAgIHJlZ2xGcmFtZWJ1ZmZlcihhMCwgYTEpXG5cbiAgICByZXR1cm4gZXh0ZW5kKHJlZ2xGcmFtZWJ1ZmZlciwge1xuICAgICAgcmVzaXplOiByZXNpemUsXG4gICAgICBfcmVnbFR5cGU6ICdmcmFtZWJ1ZmZlcicsXG4gICAgICBfZnJhbWVidWZmZXI6IGZyYW1lYnVmZmVyLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXN0cm95KGZyYW1lYnVmZmVyKVxuICAgICAgICBkZWNGQk9SZWZzKGZyYW1lYnVmZmVyKVxuICAgICAgfSxcbiAgICAgIHVzZTogZnVuY3Rpb24gKGJsb2NrKSB7XG4gICAgICAgIGZyYW1lYnVmZmVyU3RhdGUuc2V0RkJPKHtcbiAgICAgICAgICBmcmFtZWJ1ZmZlcjogcmVnbEZyYW1lYnVmZmVyXG4gICAgICAgIH0sIGJsb2NrKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDdWJlRkJPIChvcHRpb25zKSB7XG4gICAgdmFyIGZhY2VzID0gQXJyYXkoNilcblxuICAgIGZ1bmN0aW9uIHJlZ2xGcmFtZWJ1ZmZlckN1YmUgKGEpIHtcbiAgICAgIHZhciBpXG5cbiAgICAgIGNoZWNrJDEoZmFjZXMuaW5kZXhPZihmcmFtZWJ1ZmZlclN0YXRlLm5leHQpIDwgMCxcbiAgICAgICAgJ2NhbiBub3QgdXBkYXRlIGZyYW1lYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiB1c2UnKVxuXG4gICAgICB2YXIgcGFyYW1zID0ge1xuICAgICAgICBjb2xvcjogbnVsbFxuICAgICAgfVxuXG4gICAgICB2YXIgcmFkaXVzID0gMFxuXG4gICAgICB2YXIgY29sb3JCdWZmZXIgPSBudWxsXG4gICAgICB2YXIgY29sb3JGb3JtYXQgPSAncmdiYSdcbiAgICAgIHZhciBjb2xvclR5cGUgPSAndWludDgnXG4gICAgICB2YXIgY29sb3JDb3VudCA9IDFcblxuICAgICAgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJykge1xuICAgICAgICByYWRpdXMgPSBhIHwgMFxuICAgICAgfSBlbHNlIGlmICghYSkge1xuICAgICAgICByYWRpdXMgPSAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxLnR5cGUoYSwgJ29iamVjdCcsICdpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnJhbWVidWZmZXInKVxuICAgICAgICB2YXIgb3B0aW9ucyA9IGFcblxuICAgICAgICBpZiAoJ3NoYXBlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgdmFyIHNoYXBlID0gb3B0aW9ucy5zaGFwZVxuICAgICAgICAgIGNoZWNrJDEoXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHNoYXBlKSAmJiBzaGFwZS5sZW5ndGggPj0gMixcbiAgICAgICAgICAgICdpbnZhbGlkIHNoYXBlIGZvciBmcmFtZWJ1ZmZlcicpXG4gICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgIHNoYXBlWzBdID09PSBzaGFwZVsxXSxcbiAgICAgICAgICAgICdjdWJlIGZyYW1lYnVmZmVyIG11c3QgYmUgc3F1YXJlJylcbiAgICAgICAgICByYWRpdXMgPSBzaGFwZVswXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgncmFkaXVzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICByYWRpdXMgPSBvcHRpb25zLnJhZGl1cyB8IDBcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCd3aWR0aCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgcmFkaXVzID0gb3B0aW9ucy53aWR0aCB8IDBcbiAgICAgICAgICAgIGlmICgnaGVpZ2h0JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEob3B0aW9ucy5oZWlnaHQgPT09IHJhZGl1cywgJ211c3QgYmUgc3F1YXJlJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCdoZWlnaHQnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJhZGl1cyA9IG9wdGlvbnMuaGVpZ2h0IHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnY29sb3InIGluIG9wdGlvbnMgfHxcbiAgICAgICAgICAgICdjb2xvcnMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjb2xvckJ1ZmZlciA9XG4gICAgICAgICAgICBvcHRpb25zLmNvbG9yIHx8XG4gICAgICAgICAgICBvcHRpb25zLmNvbG9yc1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yQnVmZmVyKSkge1xuICAgICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgICAgY29sb3JCdWZmZXIubGVuZ3RoID09PSAxIHx8IGV4dGVuc2lvbnMud2ViZ2xfZHJhd19idWZmZXJzLFxuICAgICAgICAgICAgICAnbXVsdGlwbGUgcmVuZGVyIHRhcmdldHMgbm90IHN1cHBvcnRlZCcpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb2xvckJ1ZmZlcikge1xuICAgICAgICAgIGlmICgnY29sb3JDb3VudCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY29sb3JDb3VudCA9IG9wdGlvbnMuY29sb3JDb3VudCB8IDBcbiAgICAgICAgICAgIGNoZWNrJDEoY29sb3JDb3VudCA+IDAsICdpbnZhbGlkIGNvbG9yIGJ1ZmZlciBjb3VudCcpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCdjb2xvclR5cGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNoZWNrJDEub25lT2YoXG4gICAgICAgICAgICAgIG9wdGlvbnMuY29sb3JUeXBlLCBjb2xvclR5cGVzLFxuICAgICAgICAgICAgICAnaW52YWxpZCBjb2xvciB0eXBlJylcbiAgICAgICAgICAgIGNvbG9yVHlwZSA9IG9wdGlvbnMuY29sb3JUeXBlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCdjb2xvckZvcm1hdCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY29sb3JGb3JtYXQgPSBvcHRpb25zLmNvbG9yRm9ybWF0XG4gICAgICAgICAgICBjaGVjayQxLm9uZU9mKFxuICAgICAgICAgICAgICBvcHRpb25zLmNvbG9yRm9ybWF0LCBjb2xvclRleHR1cmVGb3JtYXRzLFxuICAgICAgICAgICAgICAnaW52YWxpZCBjb2xvciBmb3JtYXQgZm9yIHRleHR1cmUnKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnZGVwdGgnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBwYXJhbXMuZGVwdGggPSBvcHRpb25zLmRlcHRoXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3N0ZW5jaWwnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBwYXJhbXMuc3RlbmNpbCA9IG9wdGlvbnMuc3RlbmNpbFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkZXB0aFN0ZW5jaWwnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBwYXJhbXMuZGVwdGhTdGVuY2lsID0gb3B0aW9ucy5kZXB0aFN0ZW5jaWxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY29sb3JDdWJlc1xuICAgICAgaWYgKGNvbG9yQnVmZmVyKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yQnVmZmVyKSkge1xuICAgICAgICAgIGNvbG9yQ3ViZXMgPSBbXVxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvckJ1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgY29sb3JDdWJlc1tpXSA9IGNvbG9yQnVmZmVyW2ldXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbG9yQ3ViZXMgPSBbIGNvbG9yQnVmZmVyIF1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sb3JDdWJlcyA9IEFycmF5KGNvbG9yQ291bnQpXG4gICAgICAgIHZhciBjdWJlTWFwUGFyYW1zID0ge1xuICAgICAgICAgIHJhZGl1czogcmFkaXVzLFxuICAgICAgICAgIGZvcm1hdDogY29sb3JGb3JtYXQsXG4gICAgICAgICAgdHlwZTogY29sb3JUeXBlXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yQ291bnQ7ICsraSkge1xuICAgICAgICAgIGNvbG9yQ3ViZXNbaV0gPSB0ZXh0dXJlU3RhdGUuY3JlYXRlQ3ViZShjdWJlTWFwUGFyYW1zKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGNvbG9yIGN1YmVzXG4gICAgICBwYXJhbXMuY29sb3IgPSBBcnJheShjb2xvckN1YmVzLmxlbmd0aClcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvckN1YmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjdWJlID0gY29sb3JDdWJlc1tpXVxuICAgICAgICBjaGVjayQxKFxuICAgICAgICAgIHR5cGVvZiBjdWJlID09PSAnZnVuY3Rpb24nICYmIGN1YmUuX3JlZ2xUeXBlID09PSAndGV4dHVyZUN1YmUnLFxuICAgICAgICAgICdpbnZhbGlkIGN1YmUgbWFwJylcbiAgICAgICAgcmFkaXVzID0gcmFkaXVzIHx8IGN1YmUud2lkdGhcbiAgICAgICAgY2hlY2skMShcbiAgICAgICAgICBjdWJlLndpZHRoID09PSByYWRpdXMgJiYgY3ViZS5oZWlnaHQgPT09IHJhZGl1cyxcbiAgICAgICAgICAnaW52YWxpZCBjdWJlIG1hcCBzaGFwZScpXG4gICAgICAgIHBhcmFtcy5jb2xvcltpXSA9IHtcbiAgICAgICAgICB0YXJnZXQ6IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQyLFxuICAgICAgICAgIGRhdGE6IGNvbG9yQ3ViZXNbaV1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sb3JDdWJlcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIHBhcmFtcy5jb2xvcltqXS50YXJnZXQgPSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMiArIGlcbiAgICAgICAgfVxuICAgICAgICAvLyByZXVzZSBkZXB0aC1zdGVuY2lsIGF0dGFjaG1lbnRzIGFjcm9zcyBhbGwgY3ViZSBtYXBzXG4gICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgIHBhcmFtcy5kZXB0aCA9IGZhY2VzWzBdLmRlcHRoXG4gICAgICAgICAgcGFyYW1zLnN0ZW5jaWwgPSBmYWNlc1swXS5zdGVuY2lsXG4gICAgICAgICAgcGFyYW1zLmRlcHRoU3RlbmNpbCA9IGZhY2VzWzBdLmRlcHRoU3RlbmNpbFxuICAgICAgICB9XG4gICAgICAgIGlmIChmYWNlc1tpXSkge1xuICAgICAgICAgIChmYWNlc1tpXSkocGFyYW1zKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZhY2VzW2ldID0gY3JlYXRlRkJPKHBhcmFtcylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXh0ZW5kKHJlZ2xGcmFtZWJ1ZmZlckN1YmUsIHtcbiAgICAgICAgd2lkdGg6IHJhZGl1cyxcbiAgICAgICAgaGVpZ2h0OiByYWRpdXMsXG4gICAgICAgIGNvbG9yOiBjb2xvckN1YmVzXG4gICAgICB9KVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2l6ZSAocmFkaXVzXykge1xuICAgICAgdmFyIGlcbiAgICAgIHZhciByYWRpdXMgPSByYWRpdXNfIHwgMFxuICAgICAgY2hlY2skMShyYWRpdXMgPiAwICYmIHJhZGl1cyA8PSBsaW1pdHMubWF4Q3ViZU1hcFNpemUsXG4gICAgICAgICdpbnZhbGlkIHJhZGl1cyBmb3IgY3ViZSBmYm8nKVxuXG4gICAgICBpZiAocmFkaXVzID09PSByZWdsRnJhbWVidWZmZXJDdWJlLndpZHRoKSB7XG4gICAgICAgIHJldHVybiByZWdsRnJhbWVidWZmZXJDdWJlXG4gICAgICB9XG5cbiAgICAgIHZhciBjb2xvcnMgPSByZWdsRnJhbWVidWZmZXJDdWJlLmNvbG9yXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbG9yc1tpXS5yZXNpemUocmFkaXVzKVxuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgKytpKSB7XG4gICAgICAgIGZhY2VzW2ldLnJlc2l6ZShyYWRpdXMpXG4gICAgICB9XG5cbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlckN1YmUud2lkdGggPSByZWdsRnJhbWVidWZmZXJDdWJlLmhlaWdodCA9IHJhZGl1c1xuXG4gICAgICByZXR1cm4gcmVnbEZyYW1lYnVmZmVyQ3ViZVxuICAgIH1cblxuICAgIHJlZ2xGcmFtZWJ1ZmZlckN1YmUob3B0aW9ucylcblxuICAgIHJldHVybiBleHRlbmQocmVnbEZyYW1lYnVmZmVyQ3ViZSwge1xuICAgICAgZmFjZXM6IGZhY2VzLFxuICAgICAgcmVzaXplOiByZXNpemUsXG4gICAgICBfcmVnbFR5cGU6ICdmcmFtZWJ1ZmZlckN1YmUnLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xuICAgICAgICBmYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgICAgZi5kZXN0cm95KClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdG9yZUZyYW1lYnVmZmVycyAoKSB7XG4gICAgZnJhbWVidWZmZXJTdGF0ZS5jdXIgPSBudWxsXG4gICAgZnJhbWVidWZmZXJTdGF0ZS5uZXh0ID0gbnVsbFxuICAgIGZyYW1lYnVmZmVyU3RhdGUuZGlydHkgPSB0cnVlXG4gICAgdmFsdWVzKGZyYW1lYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChmYikge1xuICAgICAgZmIuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpXG4gICAgICB1cGRhdGVGcmFtZWJ1ZmZlcihmYilcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGV4dGVuZChmcmFtZWJ1ZmZlclN0YXRlLCB7XG4gICAgZ2V0RnJhbWVidWZmZXI6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnZnVuY3Rpb24nICYmIG9iamVjdC5fcmVnbFR5cGUgPT09ICdmcmFtZWJ1ZmZlcicpIHtcbiAgICAgICAgdmFyIGZibyA9IG9iamVjdC5fZnJhbWVidWZmZXJcbiAgICAgICAgaWYgKGZibyBpbnN0YW5jZW9mIFJFR0xGcmFtZWJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBmYm9cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuICAgIGNyZWF0ZTogY3JlYXRlRkJPLFxuICAgIGNyZWF0ZUN1YmU6IGNyZWF0ZUN1YmVGQk8sXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhbHVlcyhmcmFtZWJ1ZmZlclNldCkuZm9yRWFjaChkZXN0cm95KVxuICAgIH0sXG4gICAgcmVzdG9yZTogcmVzdG9yZUZyYW1lYnVmZmVyc1xuICB9KVxufVxuXG52YXIgR0xfRkxPQVQkNiA9IDUxMjZcbnZhciBHTF9BUlJBWV9CVUZGRVIkMSA9IDM0OTYyXG5cbmZ1bmN0aW9uIEF0dHJpYnV0ZVJlY29yZCAoKSB7XG4gIHRoaXMuc3RhdGUgPSAwXG5cbiAgdGhpcy54ID0gMC4wXG4gIHRoaXMueSA9IDAuMFxuICB0aGlzLnogPSAwLjBcbiAgdGhpcy53ID0gMC4wXG5cbiAgdGhpcy5idWZmZXIgPSBudWxsXG4gIHRoaXMuc2l6ZSA9IDBcbiAgdGhpcy5ub3JtYWxpemVkID0gZmFsc2VcbiAgdGhpcy50eXBlID0gR0xfRkxPQVQkNlxuICB0aGlzLm9mZnNldCA9IDBcbiAgdGhpcy5zdHJpZGUgPSAwXG4gIHRoaXMuZGl2aXNvciA9IDBcbn1cblxuZnVuY3Rpb24gd3JhcEF0dHJpYnV0ZVN0YXRlIChcbiAgZ2wsXG4gIGV4dGVuc2lvbnMsXG4gIGxpbWl0cyxcbiAgc3RhdHMsXG4gIGJ1ZmZlclN0YXRlKSB7XG4gIHZhciBOVU1fQVRUUklCVVRFUyA9IGxpbWl0cy5tYXhBdHRyaWJ1dGVzXG4gIHZhciBhdHRyaWJ1dGVCaW5kaW5ncyA9IG5ldyBBcnJheShOVU1fQVRUUklCVVRFUylcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBOVU1fQVRUUklCVVRFUzsgKytpKSB7XG4gICAgYXR0cmlidXRlQmluZGluZ3NbaV0gPSBuZXcgQXR0cmlidXRlUmVjb3JkKClcbiAgfVxuICB2YXIgdmFvQ291bnQgPSAwXG4gIHZhciB2YW9TZXQgPSB7fVxuXG4gIHZhciBzdGF0ZSA9IHtcbiAgICBSZWNvcmQ6IEF0dHJpYnV0ZVJlY29yZCxcbiAgICBzY29wZToge30sXG4gICAgc3RhdGU6IGF0dHJpYnV0ZUJpbmRpbmdzLFxuICAgIGN1cnJlbnRWQU86IG51bGwsXG4gICAgdGFyZ2V0VkFPOiBudWxsLFxuICAgIHJlc3RvcmU6IGV4dFZBTygpID8gcmVzdG9yZVZBTyA6IGZ1bmN0aW9uICgpIHt9LFxuICAgIGNyZWF0ZVZBTzogY3JlYXRlVkFPLFxuICAgIGdldFZBTzogZ2V0VkFPLFxuICAgIGRlc3Ryb3lCdWZmZXI6IGRlc3Ryb3lCdWZmZXIsXG4gICAgc2V0VkFPOiBleHRWQU8oKSA/IHNldFZBT0VYVCA6IHNldFZBT0VtdWxhdGVkLFxuICAgIGNsZWFyOiBleHRWQU8oKSA/IGRlc3Ryb3lWQU9FWFQgOiBmdW5jdGlvbiAoKSB7fVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveUJ1ZmZlciAoYnVmZmVyKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVCaW5kaW5ncy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHJlY29yZCA9IGF0dHJpYnV0ZUJpbmRpbmdzW2ldXG4gICAgICBpZiAocmVjb3JkLmJ1ZmZlciA9PT0gYnVmZmVyKSB7XG4gICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKVxuICAgICAgICByZWNvcmQuYnVmZmVyID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGV4dFZBTyAoKSB7XG4gICAgcmV0dXJuIGV4dGVuc2lvbnMub2VzX3ZlcnRleF9hcnJheV9vYmplY3RcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4dEluc3RhbmNlZCAoKSB7XG4gICAgcmV0dXJuIGV4dGVuc2lvbnMuYW5nbGVfaW5zdGFuY2VkX2FycmF5c1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VkFPICh2YW8pIHtcbiAgICBpZiAodHlwZW9mIHZhbyA9PT0gJ2Z1bmN0aW9uJyAmJiB2YW8uX3Zhbykge1xuICAgICAgcmV0dXJuIHZhby5fdmFvXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBzZXRWQU9FWFQgKHZhbykge1xuICAgIGlmICh2YW8gPT09IHN0YXRlLmN1cnJlbnRWQU8pIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgZXh0ID0gZXh0VkFPKClcbiAgICBpZiAodmFvKSB7XG4gICAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhby52YW8pXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbClcbiAgICB9XG4gICAgc3RhdGUuY3VycmVudFZBTyA9IHZhb1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0VkFPRW11bGF0ZWQgKHZhbykge1xuICAgIGlmICh2YW8gPT09IHN0YXRlLmN1cnJlbnRWQU8pIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAodmFvKSB7XG4gICAgICB2YW8uYmluZEF0dHJzKClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGV4dGkgPSBleHRJbnN0YW5jZWQoKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVCaW5kaW5ncy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgYmluZGluZyA9IGF0dHJpYnV0ZUJpbmRpbmdzW2ldXG4gICAgICAgIGlmIChiaW5kaW5nLmJ1ZmZlcikge1xuICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpXG4gICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihpLCBiaW5kaW5nLnNpemUsIGJpbmRpbmcudHlwZSwgYmluZGluZy5ub3JtYWxpemVkLCBiaW5kaW5nLnN0cmlkZSwgYmluZGluZy5vZmZmc2V0KVxuICAgICAgICAgIGlmIChleHRpICYmIGJpbmRpbmcuZGl2aXNvcikge1xuICAgICAgICAgICAgZXh0aS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaSwgYmluZGluZy5kaXZpc29yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSlcbiAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWI0ZihpLCBiaW5kaW5nLngsIGJpbmRpbmcueSwgYmluZGluZy56LCBiaW5kaW5nLncpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGUuY3VycmVudFZBTyA9IHZhb1xuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveVZBT0VYVCAoKSB7XG4gICAgdmFsdWVzKHZhb1NldCkuZm9yRWFjaChmdW5jdGlvbiAodmFvKSB7XG4gICAgICB2YW8uZGVzdHJveSgpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFJFR0xWQU8gKCkge1xuICAgIHRoaXMuaWQgPSArK3Zhb0NvdW50XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gW11cbiAgICB2YXIgZXh0ZW5zaW9uID0gZXh0VkFPKClcbiAgICBpZiAoZXh0ZW5zaW9uKSB7XG4gICAgICB0aGlzLnZhbyA9IGV4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFvID0gbnVsbFxuICAgIH1cbiAgICB2YW9TZXRbdGhpcy5pZF0gPSB0aGlzXG4gICAgdGhpcy5idWZmZXJzID0gW11cbiAgfVxuXG4gIFJFR0xWQU8ucHJvdG90eXBlLmJpbmRBdHRycyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0aSA9IGV4dEluc3RhbmNlZCgpXG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBhdHRyID0gYXR0cmlidXRlc1tpXVxuICAgICAgaWYgKGF0dHIuYnVmZmVyKSB7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSJDEsIGF0dHIuYnVmZmVyLmJ1ZmZlcilcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihpLCBhdHRyLnNpemUsIGF0dHIudHlwZSwgYXR0ci5ub3JtYWxpemVkLCBhdHRyLnN0cmlkZSwgYXR0ci5vZmZzZXQpXG4gICAgICAgIGlmIChleHRpICYmIGF0dHIuZGl2aXNvcikge1xuICAgICAgICAgIGV4dGkudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGksIGF0dHIuZGl2aXNvcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYjRmKGksIGF0dHIueCwgYXR0ci55LCBhdHRyLnosIGF0dHIudylcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBqIDwgTlVNX0FUVFJJQlVURVM7ICsraikge1xuICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGopXG4gICAgfVxuICB9XG5cbiAgUkVHTFZBTy5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ID0gZXh0VkFPKClcbiAgICBpZiAoZXh0KSB7XG4gICAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHRoaXMudmFvKVxuICAgICAgdGhpcy5iaW5kQXR0cnMoKVxuICAgICAgc3RhdGUuY3VycmVudFZBTyA9IHRoaXNcbiAgICB9XG4gIH1cblxuICBSRUdMVkFPLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnZhbykge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dFZBTygpXG4gICAgICBpZiAodGhpcyA9PT0gc3RhdGUuY3VycmVudFZBTykge1xuICAgICAgICBzdGF0ZS5jdXJyZW50VkFPID0gbnVsbFxuICAgICAgICBleHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpXG4gICAgICB9XG4gICAgICBleHRlbnNpb24uZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy52YW8pXG4gICAgICB0aGlzLnZhbyA9IG51bGxcbiAgICB9XG4gICAgaWYgKHZhb1NldFt0aGlzLmlkXSkge1xuICAgICAgZGVsZXRlIHZhb1NldFt0aGlzLmlkXVxuICAgICAgc3RhdHMudmFvQ291bnQgLT0gMVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVWQU8gKCkge1xuICAgIHZhciBleHQgPSBleHRWQU8oKVxuICAgIGlmIChleHQpIHtcbiAgICAgIHZhbHVlcyh2YW9TZXQpLmZvckVhY2goZnVuY3Rpb24gKHZhbykge1xuICAgICAgICB2YW8ucmVmcmVzaCgpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVZBTyAoX2F0dHIpIHtcbiAgICB2YXIgdmFvID0gbmV3IFJFR0xWQU8oKVxuICAgIHN0YXRzLnZhb0NvdW50ICs9IDFcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVZBTyAoYXR0cmlidXRlcykge1xuICAgICAgY2hlY2skMShBcnJheS5pc0FycmF5KGF0dHJpYnV0ZXMpLCAnYXJndW1lbnRzIHRvIHZlcnRleCBhcnJheSBjb25zdHJ1Y3RvciBtdXN0IGJlIGFuIGFycmF5JylcbiAgICAgIGNoZWNrJDEoYXR0cmlidXRlcy5sZW5ndGggPCBOVU1fQVRUUklCVVRFUywgJ3RvbyBtYW55IGF0dHJpYnV0ZXMnKVxuICAgICAgY2hlY2skMShhdHRyaWJ1dGVzLmxlbmd0aCA+IDAsICdtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZScpXG5cbiAgICAgIHZhciBidWZVcGRhdGVkID0ge31cbiAgICAgIHZhciBuYXR0cmlidXRlcyA9IHZhby5hdHRyaWJ1dGVzXG4gICAgICBuYXR0cmlidXRlcy5sZW5ndGggPSBhdHRyaWJ1dGVzLmxlbmd0aFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzcGVjID0gYXR0cmlidXRlc1tpXVxuICAgICAgICB2YXIgcmVjID0gbmF0dHJpYnV0ZXNbaV0gPSBuZXcgQXR0cmlidXRlUmVjb3JkKClcbiAgICAgICAgdmFyIGRhdGEgPSBzcGVjLmRhdGEgfHwgc3BlY1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1R5cGVkQXJyYXkoZGF0YSkgfHwgaXNOREFycmF5TGlrZShkYXRhKSkge1xuICAgICAgICAgIHZhciBidWZcbiAgICAgICAgICBpZiAodmFvLmJ1ZmZlcnNbaV0pIHtcbiAgICAgICAgICAgIGJ1ZiA9IHZhby5idWZmZXJzW2ldXG4gICAgICAgICAgICBpZiAoaXNUeXBlZEFycmF5KGRhdGEpICYmIGJ1Zi5fYnVmZmVyLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGJ1Zi5zdWJkYXRhKGRhdGEpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBidWYuZGVzdHJveSgpXG4gICAgICAgICAgICAgIHZhby5idWZmZXJzW2ldID0gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXZhby5idWZmZXJzW2ldKSB7XG4gICAgICAgICAgICBidWYgPSB2YW8uYnVmZmVyc1tpXSA9IGJ1ZmZlclN0YXRlLmNyZWF0ZShzcGVjLCBHTF9BUlJBWV9CVUZGRVIkMSwgZmFsc2UsIHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYy5idWZmZXIgPSBidWZmZXJTdGF0ZS5nZXRCdWZmZXIoYnVmKVxuICAgICAgICAgIHJlYy5zaXplID0gcmVjLmJ1ZmZlci5kaW1lbnNpb24gfCAwXG4gICAgICAgICAgcmVjLm5vcm1hbGl6ZWQgPSBmYWxzZVxuICAgICAgICAgIHJlYy50eXBlID0gcmVjLmJ1ZmZlci5kdHlwZVxuICAgICAgICAgIHJlYy5vZmZzZXQgPSAwXG4gICAgICAgICAgcmVjLnN0cmlkZSA9IDBcbiAgICAgICAgICByZWMuZGl2aXNvciA9IDBcbiAgICAgICAgICByZWMuc3RhdGUgPSAxXG4gICAgICAgICAgYnVmVXBkYXRlZFtpXSA9IDFcbiAgICAgICAgfSBlbHNlIGlmIChidWZmZXJTdGF0ZS5nZXRCdWZmZXIoc3BlYykpIHtcbiAgICAgICAgICByZWMuYnVmZmVyID0gYnVmZmVyU3RhdGUuZ2V0QnVmZmVyKHNwZWMpXG4gICAgICAgICAgcmVjLnNpemUgPSByZWMuYnVmZmVyLmRpbWVuc2lvbiB8IDBcbiAgICAgICAgICByZWMubm9ybWFsaXplZCA9IGZhbHNlXG4gICAgICAgICAgcmVjLnR5cGUgPSByZWMuYnVmZmVyLmR0eXBlXG4gICAgICAgICAgcmVjLm9mZnNldCA9IDBcbiAgICAgICAgICByZWMuc3RyaWRlID0gMFxuICAgICAgICAgIHJlYy5kaXZpc29yID0gMFxuICAgICAgICAgIHJlYy5zdGF0ZSA9IDFcbiAgICAgICAgfSBlbHNlIGlmIChidWZmZXJTdGF0ZS5nZXRCdWZmZXIoc3BlYy5idWZmZXIpKSB7XG4gICAgICAgICAgcmVjLmJ1ZmZlciA9IGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihzcGVjLmJ1ZmZlcilcbiAgICAgICAgICByZWMuc2l6ZSA9ICgoK3NwZWMuc2l6ZSkgfHwgcmVjLmJ1ZmZlci5kaW1lbnNpb24pIHwgMFxuICAgICAgICAgIHJlYy5ub3JtYWxpemVkID0gISFzcGVjLm5vcm1hbGl6ZWQgfHwgZmFsc2VcbiAgICAgICAgICBpZiAoJ3R5cGUnIGluIHNwZWMpIHtcbiAgICAgICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKHNwZWMudHlwZSwgZ2xUeXBlcywgJ2ludmFsaWQgYnVmZmVyIHR5cGUnKVxuICAgICAgICAgICAgcmVjLnR5cGUgPSBnbFR5cGVzW3NwZWMudHlwZV1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVjLnR5cGUgPSByZWMuYnVmZmVyLmR0eXBlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYy5vZmZzZXQgPSAoc3BlYy5vZmZzZXQgfHwgMCkgfCAwXG4gICAgICAgICAgcmVjLnN0cmlkZSA9IChzcGVjLnN0cmlkZSB8fCAwKSB8IDBcbiAgICAgICAgICByZWMuZGl2aXNvciA9IChzcGVjLmRpdmlzb3IgfHwgMCkgfCAwXG4gICAgICAgICAgcmVjLnN0YXRlID0gMVxuXG4gICAgICAgICAgY2hlY2skMShyZWMuc2l6ZSA+PSAxICYmIHJlYy5zaXplIDw9IDQsICdzaXplIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0JylcbiAgICAgICAgICBjaGVjayQxKHJlYy5vZmZzZXQgPj0gMCwgJ2ludmFsaWQgb2Zmc2V0JylcbiAgICAgICAgICBjaGVjayQxKHJlYy5zdHJpZGUgPj0gMCAmJiByZWMuc3RyaWRlIDw9IDI1NSwgJ3N0cmlkZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1JylcbiAgICAgICAgICBjaGVjayQxKHJlYy5kaXZpc29yID49IDAsICdkaXZpc29yIG11c3QgYmUgcG9zaXRpdmUnKVxuICAgICAgICAgIGNoZWNrJDEoIXJlYy5kaXZpc29yIHx8ICEhZXh0ZW5zaW9ucy5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cyBtdXN0IGJlIGVuYWJsZWQgdG8gdXNlIGRpdmlzb3InKVxuICAgICAgICB9IGVsc2UgaWYgKCd4JyBpbiBzcGVjKSB7XG4gICAgICAgICAgY2hlY2skMShpID4gMCwgJ2ZpcnN0IGF0dHJpYnV0ZSBtdXN0IG5vdCBiZSBhIGNvbnN0YW50JylcbiAgICAgICAgICByZWMueCA9ICtzcGVjLnggfHwgMFxuICAgICAgICAgIHJlYy55ID0gK3NwZWMueSB8fCAwXG4gICAgICAgICAgcmVjLnogPSArc3BlYy56IHx8IDBcbiAgICAgICAgICByZWMudyA9ICtzcGVjLncgfHwgMFxuICAgICAgICAgIHJlYy5zdGF0ZSA9IDJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGVjayQxKGZhbHNlLCAnaW52YWxpZCBhdHRyaWJ1dGUgc3BlYyBmb3IgbG9jYXRpb24gJyArIGkpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcmV0aXJlIHVudXNlZCBidWZmZXJzXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhby5idWZmZXJzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGlmICghYnVmVXBkYXRlZFtqXSAmJiB2YW8uYnVmZmVyc1tqXSkge1xuICAgICAgICAgIHZhby5idWZmZXJzW2pdLmRlc3Ryb3koKVxuICAgICAgICAgIHZhby5idWZmZXJzW2pdID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhby5yZWZyZXNoKClcbiAgICAgIHJldHVybiB1cGRhdGVWQU9cbiAgICB9XG5cbiAgICB1cGRhdGVWQU8uZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFvLmJ1ZmZlcnMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaWYgKHZhby5idWZmZXJzW2pdKSB7XG4gICAgICAgICAgdmFvLmJ1ZmZlcnNbal0uZGVzdHJveSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhby5idWZmZXJzLmxlbmd0aCA9IDBcbiAgICAgIHZhby5kZXN0cm95KClcbiAgICB9XG5cbiAgICB1cGRhdGVWQU8uX3ZhbyA9IHZhb1xuICAgIHVwZGF0ZVZBTy5fcmVnbFR5cGUgPSAndmFvJ1xuXG4gICAgcmV0dXJuIHVwZGF0ZVZBTyhfYXR0cilcbiAgfVxuXG4gIHJldHVybiBzdGF0ZVxufVxuXG52YXIgR0xfRlJBR01FTlRfU0hBREVSID0gMzU2MzJcbnZhciBHTF9WRVJURVhfU0hBREVSID0gMzU2MzNcblxudmFyIEdMX0FDVElWRV9VTklGT1JNUyA9IDB4OEI4NlxudmFyIEdMX0FDVElWRV9BVFRSSUJVVEVTID0gMHg4Qjg5XG5cbmZ1bmN0aW9uIHdyYXBTaGFkZXJTdGF0ZSAoZ2wsIHN0cmluZ1N0b3JlLCBzdGF0cywgY29uZmlnKSB7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBnbHNsIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZnJhZ1NoYWRlcnMgPSB7fVxuICB2YXIgdmVydFNoYWRlcnMgPSB7fVxuXG4gIGZ1bmN0aW9uIEFjdGl2ZUluZm8gKG5hbWUsIGlkLCBsb2NhdGlvbiwgaW5mbykge1xuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLmlkID0gaWRcbiAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb25cbiAgICB0aGlzLmluZm8gPSBpbmZvXG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnRBY3RpdmVJbmZvIChsaXN0LCBpbmZvKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAobGlzdFtpXS5pZCA9PT0gaW5mby5pZCkge1xuICAgICAgICBsaXN0W2ldLmxvY2F0aW9uID0gaW5mby5sb2NhdGlvblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgbGlzdC5wdXNoKGluZm8pXG4gIH1cblxuICBmdW5jdGlvbiBnZXRTaGFkZXIgKHR5cGUsIGlkLCBjb21tYW5kKSB7XG4gICAgdmFyIGNhY2hlID0gdHlwZSA9PT0gR0xfRlJBR01FTlRfU0hBREVSID8gZnJhZ1NoYWRlcnMgOiB2ZXJ0U2hhZGVyc1xuICAgIHZhciBzaGFkZXIgPSBjYWNoZVtpZF1cblxuICAgIGlmICghc2hhZGVyKSB7XG4gICAgICB2YXIgc291cmNlID0gc3RyaW5nU3RvcmUuc3RyKGlkKVxuICAgICAgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKHR5cGUpXG4gICAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzb3VyY2UpXG4gICAgICBnbC5jb21waWxlU2hhZGVyKHNoYWRlcilcbiAgICAgIGNoZWNrJDEuc2hhZGVyRXJyb3IoZ2wsIHNoYWRlciwgc291cmNlLCB0eXBlLCBjb21tYW5kKVxuICAgICAgY2FjaGVbaWRdID0gc2hhZGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlclxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIHByb2dyYW0gbGlua2luZ1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHByb2dyYW1DYWNoZSA9IHt9XG4gIHZhciBwcm9ncmFtTGlzdCA9IFtdXG5cbiAgdmFyIFBST0dSQU1fQ09VTlRFUiA9IDBcblxuICBmdW5jdGlvbiBSRUdMUHJvZ3JhbSAoZnJhZ0lkLCB2ZXJ0SWQpIHtcbiAgICB0aGlzLmlkID0gUFJPR1JBTV9DT1VOVEVSKytcbiAgICB0aGlzLmZyYWdJZCA9IGZyYWdJZFxuICAgIHRoaXMudmVydElkID0gdmVydElkXG4gICAgdGhpcy5wcm9ncmFtID0gbnVsbFxuICAgIHRoaXMudW5pZm9ybXMgPSBbXVxuICAgIHRoaXMuYXR0cmlidXRlcyA9IFtdXG4gICAgdGhpcy5yZWZDb3VudCA9IDFcblxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgdGhpcy5zdGF0cyA9IHtcbiAgICAgICAgdW5pZm9ybXNDb3VudDogMCxcbiAgICAgICAgYXR0cmlidXRlc0NvdW50OiAwXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbGlua1Byb2dyYW0gKGRlc2MsIGNvbW1hbmQsIGF0dHJpYnV0ZUxvY2F0aW9ucykge1xuICAgIHZhciBpLCBpbmZvXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gY29tcGlsZSAmIGxpbmtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdmFyIGZyYWdTaGFkZXIgPSBnZXRTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSLCBkZXNjLmZyYWdJZClcbiAgICB2YXIgdmVydFNoYWRlciA9IGdldFNoYWRlcihHTF9WRVJURVhfU0hBREVSLCBkZXNjLnZlcnRJZClcblxuICAgIHZhciBwcm9ncmFtID0gZGVzYy5wcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdTaGFkZXIpXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRTaGFkZXIpXG4gICAgaWYgKGF0dHJpYnV0ZUxvY2F0aW9ucykge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZUxvY2F0aW9ucy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgYmluZGluZyA9IGF0dHJpYnV0ZUxvY2F0aW9uc1tpXVxuICAgICAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgYmluZGluZ1swXSwgYmluZGluZ1sxXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKVxuICAgIGNoZWNrJDEubGlua0Vycm9yKFxuICAgICAgZ2wsXG4gICAgICBwcm9ncmFtLFxuICAgICAgc3RyaW5nU3RvcmUuc3RyKGRlc2MuZnJhZ0lkKSxcbiAgICAgIHN0cmluZ1N0b3JlLnN0cihkZXNjLnZlcnRJZCksXG4gICAgICBjb21tYW5kKVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGdyYWIgdW5pZm9ybXNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdmFyIG51bVVuaWZvcm1zID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STVMpXG4gICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICBkZXNjLnN0YXRzLnVuaWZvcm1zQ291bnQgPSBudW1Vbmlmb3Jtc1xuICAgIH1cbiAgICB2YXIgdW5pZm9ybXMgPSBkZXNjLnVuaWZvcm1zXG4gICAgZm9yIChpID0gMDsgaSA8IG51bVVuaWZvcm1zOyArK2kpIHtcbiAgICAgIGluZm8gPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpXG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICBpZiAoaW5mby5zaXplID4gMSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5mby5zaXplOyArK2opIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gaW5mby5uYW1lLnJlcGxhY2UoJ1swXScsICdbJyArIGogKyAnXScpXG4gICAgICAgICAgICBpbnNlcnRBY3RpdmVJbmZvKHVuaWZvcm1zLCBuZXcgQWN0aXZlSW5mbyhcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgc3RyaW5nU3RvcmUuaWQobmFtZSksXG4gICAgICAgICAgICAgIGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICAgICAgICAgICAgaW5mbykpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluc2VydEFjdGl2ZUluZm8odW5pZm9ybXMsIG5ldyBBY3RpdmVJbmZvKFxuICAgICAgICAgICAgaW5mby5uYW1lLFxuICAgICAgICAgICAgc3RyaW5nU3RvcmUuaWQoaW5mby5uYW1lKSxcbiAgICAgICAgICAgIGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBpbmZvLm5hbWUpLFxuICAgICAgICAgICAgaW5mbykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZ3JhYiBhdHRyaWJ1dGVzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHZhciBudW1BdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFUylcbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIGRlc2Muc3RhdHMuYXR0cmlidXRlc0NvdW50ID0gbnVtQXR0cmlidXRlc1xuICAgIH1cblxuICAgIHZhciBhdHRyaWJ1dGVzID0gZGVzYy5hdHRyaWJ1dGVzXG4gICAgZm9yIChpID0gMDsgaSA8IG51bUF0dHJpYnV0ZXM7ICsraSkge1xuICAgICAgaW5mbyA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKVxuICAgICAgaWYgKGluZm8pIHtcbiAgICAgICAgaW5zZXJ0QWN0aXZlSW5mbyhhdHRyaWJ1dGVzLCBuZXcgQWN0aXZlSW5mbyhcbiAgICAgICAgICBpbmZvLm5hbWUsXG4gICAgICAgICAgc3RyaW5nU3RvcmUuaWQoaW5mby5uYW1lKSxcbiAgICAgICAgICBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmZvLm5hbWUpLFxuICAgICAgICAgIGluZm8pKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgIHN0YXRzLmdldE1heFVuaWZvcm1zQ291bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbSA9IDBcbiAgICAgIHByb2dyYW1MaXN0LmZvckVhY2goZnVuY3Rpb24gKGRlc2MpIHtcbiAgICAgICAgaWYgKGRlc2Muc3RhdHMudW5pZm9ybXNDb3VudCA+IG0pIHtcbiAgICAgICAgICBtID0gZGVzYy5zdGF0cy51bmlmb3Jtc0NvdW50XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm4gbVxuICAgIH1cblxuICAgIHN0YXRzLmdldE1heEF0dHJpYnV0ZXNDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtID0gMFxuICAgICAgcHJvZ3JhbUxpc3QuZm9yRWFjaChmdW5jdGlvbiAoZGVzYykge1xuICAgICAgICBpZiAoZGVzYy5zdGF0cy5hdHRyaWJ1dGVzQ291bnQgPiBtKSB7XG4gICAgICAgICAgbSA9IGRlc2Muc3RhdHMuYXR0cmlidXRlc0NvdW50XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm4gbVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVTaGFkZXJzICgpIHtcbiAgICBmcmFnU2hhZGVycyA9IHt9XG4gICAgdmVydFNoYWRlcnMgPSB7fVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvZ3JhbUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxpbmtQcm9ncmFtKHByb2dyYW1MaXN0W2ldLCBudWxsLCBwcm9ncmFtTGlzdFtpXS5hdHRyaWJ1dGVzLm1hcChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgICByZXR1cm4gW2luZm8ubG9jYXRpb24sIGluZm8ubmFtZV1cbiAgICAgIH0pKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBkZWxldGVTaGFkZXIgPSBnbC5kZWxldGVTaGFkZXIuYmluZChnbClcbiAgICAgIHZhbHVlcyhmcmFnU2hhZGVycykuZm9yRWFjaChkZWxldGVTaGFkZXIpXG4gICAgICBmcmFnU2hhZGVycyA9IHt9XG4gICAgICB2YWx1ZXModmVydFNoYWRlcnMpLmZvckVhY2goZGVsZXRlU2hhZGVyKVxuICAgICAgdmVydFNoYWRlcnMgPSB7fVxuXG4gICAgICBwcm9ncmFtTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChkZXNjKSB7XG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0oZGVzYy5wcm9ncmFtKVxuICAgICAgfSlcbiAgICAgIHByb2dyYW1MaXN0Lmxlbmd0aCA9IDBcbiAgICAgIHByb2dyYW1DYWNoZSA9IHt9XG5cbiAgICAgIHN0YXRzLnNoYWRlckNvdW50ID0gMFxuICAgIH0sXG5cbiAgICBwcm9ncmFtOiBmdW5jdGlvbiAodmVydElkLCBmcmFnSWQsIGNvbW1hbmQsIGF0dHJpYkxvY2F0aW9ucykge1xuICAgICAgY2hlY2skMS5jb21tYW5kKHZlcnRJZCA+PSAwLCAnbWlzc2luZyB2ZXJ0ZXggc2hhZGVyJywgY29tbWFuZClcbiAgICAgIGNoZWNrJDEuY29tbWFuZChmcmFnSWQgPj0gMCwgJ21pc3NpbmcgZnJhZ21lbnQgc2hhZGVyJywgY29tbWFuZClcblxuICAgICAgdmFyIGNhY2hlID0gcHJvZ3JhbUNhY2hlW2ZyYWdJZF1cbiAgICAgIGlmICghY2FjaGUpIHtcbiAgICAgICAgY2FjaGUgPSBwcm9ncmFtQ2FjaGVbZnJhZ0lkXSA9IHt9XG4gICAgICB9XG4gICAgICB2YXIgcHJldlByb2dyYW0gPSBjYWNoZVt2ZXJ0SWRdXG4gICAgICBpZiAocHJldlByb2dyYW0pIHtcbiAgICAgICAgcHJldlByb2dyYW0ucmVmQ291bnQrK1xuICAgICAgICBpZiAoIWF0dHJpYkxvY2F0aW9ucykge1xuICAgICAgICAgIHJldHVybiBwcmV2UHJvZ3JhbVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgcHJvZ3JhbSA9IG5ldyBSRUdMUHJvZ3JhbShmcmFnSWQsIHZlcnRJZClcbiAgICAgIHN0YXRzLnNoYWRlckNvdW50KytcbiAgICAgIGxpbmtQcm9ncmFtKHByb2dyYW0sIGNvbW1hbmQsIGF0dHJpYkxvY2F0aW9ucylcbiAgICAgIGlmICghcHJldlByb2dyYW0pIHtcbiAgICAgICAgY2FjaGVbdmVydElkXSA9IHByb2dyYW1cbiAgICAgIH1cbiAgICAgIHByb2dyYW1MaXN0LnB1c2gocHJvZ3JhbSlcbiAgICAgIHJldHVybiBleHRlbmQocHJvZ3JhbSwge1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcHJvZ3JhbS5yZWZDb3VudC0tXG4gICAgICAgICAgaWYgKHByb2dyYW0ucmVmQ291bnQgPD0gMCkge1xuICAgICAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtLnByb2dyYW0pXG4gICAgICAgICAgICB2YXIgaWR4ID0gcHJvZ3JhbUxpc3QuaW5kZXhPZihwcm9ncmFtKVxuICAgICAgICAgICAgcHJvZ3JhbUxpc3Quc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICAgIHN0YXRzLnNoYWRlckNvdW50LS1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbm8gcHJvZ3JhbSBpcyBsaW5rZWQgdG8gdGhpcyB2ZXJ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoY2FjaGVbcHJvZ3JhbS52ZXJ0SWRdLnJlZkNvdW50IDw9IDApIHtcbiAgICAgICAgICAgIGdsLmRlbGV0ZVNoYWRlcih2ZXJ0U2hhZGVyc1twcm9ncmFtLnZlcnRJZF0pXG4gICAgICAgICAgICBkZWxldGUgdmVydFNoYWRlcnNbcHJvZ3JhbS52ZXJ0SWRdXG4gICAgICAgICAgICBkZWxldGUgcHJvZ3JhbUNhY2hlW3Byb2dyYW0uZnJhZ0lkXVtwcm9ncmFtLnZlcnRJZF1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbm8gcHJvZ3JhbSBpcyBsaW5rZWQgdG8gdGhpcyBmcmFnIGFueW1vcmVcbiAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKHByb2dyYW1DYWNoZVtwcm9ncmFtLmZyYWdJZF0pLmxlbmd0aCkge1xuICAgICAgICAgICAgZ2wuZGVsZXRlU2hhZGVyKGZyYWdTaGFkZXJzW3Byb2dyYW0uZnJhZ0lkXSlcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnU2hhZGVyc1twcm9ncmFtLmZyYWdJZF1cbiAgICAgICAgICAgIGRlbGV0ZSBwcm9ncmFtQ2FjaGVbcHJvZ3JhbS5mcmFnSWRdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXN0b3JlOiByZXN0b3JlU2hhZGVycyxcblxuICAgIHNoYWRlcjogZ2V0U2hhZGVyLFxuXG4gICAgZnJhZzogLTEsXG4gICAgdmVydDogLTFcbiAgfVxufVxuXG52YXIgR0xfUkdCQSQzID0gNjQwOFxudmFyIEdMX1VOU0lHTkVEX0JZVEUkNyA9IDUxMjFcbnZhciBHTF9QQUNLX0FMSUdOTUVOVCA9IDB4MEQwNVxudmFyIEdMX0ZMT0FUJDcgPSAweDE0MDYgLy8gNTEyNlxuXG5mdW5jdGlvbiB3cmFwUmVhZFBpeGVscyAoXG4gIGdsLFxuICBmcmFtZWJ1ZmZlclN0YXRlLFxuICByZWdsUG9sbCxcbiAgY29udGV4dCxcbiAgZ2xBdHRyaWJ1dGVzLFxuICBleHRlbnNpb25zLFxuICBsaW1pdHMpIHtcbiAgZnVuY3Rpb24gcmVhZFBpeGVsc0ltcGwgKGlucHV0KSB7XG4gICAgdmFyIHR5cGVcbiAgICBpZiAoZnJhbWVidWZmZXJTdGF0ZS5uZXh0ID09PSBudWxsKSB7XG4gICAgICBjaGVjayQxKFxuICAgICAgICBnbEF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyLFxuICAgICAgICAneW91IG11c3QgY3JlYXRlIGEgd2ViZ2wgY29udGV4dCB3aXRoIFwicHJlc2VydmVEcmF3aW5nQnVmZmVyXCI6dHJ1ZSBpbiBvcmRlciB0byByZWFkIHBpeGVscyBmcm9tIHRoZSBkcmF3aW5nIGJ1ZmZlcicpXG4gICAgICB0eXBlID0gR0xfVU5TSUdORURfQllURSQ3XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGZyYW1lYnVmZmVyU3RhdGUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUgIT09IG51bGwsXG4gICAgICAgICdZb3UgY2Fubm90IHJlYWQgZnJvbSBhIHJlbmRlcmJ1ZmZlcicpXG4gICAgICB0eXBlID0gZnJhbWVidWZmZXJTdGF0ZS5uZXh0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZS5fdGV4dHVyZS50eXBlXG5cbiAgICAgIGlmIChleHRlbnNpb25zLm9lc190ZXh0dXJlX2Zsb2F0KSB7XG4gICAgICAgIGNoZWNrJDEoXG4gICAgICAgICAgdHlwZSA9PT0gR0xfVU5TSUdORURfQllURSQ3IHx8IHR5cGUgPT09IEdMX0ZMT0FUJDcsXG4gICAgICAgICAgJ1JlYWRpbmcgZnJvbSBhIGZyYW1lYnVmZmVyIGlzIG9ubHkgYWxsb3dlZCBmb3IgdGhlIHR5cGVzIFxcJ3VpbnQ4XFwnIGFuZCBcXCdmbG9hdFxcJycpXG5cbiAgICAgICAgaWYgKHR5cGUgPT09IEdMX0ZMT0FUJDcpIHtcbiAgICAgICAgICBjaGVjayQxKGxpbWl0cy5yZWFkRmxvYXQsICdSZWFkaW5nIFxcJ2Zsb2F0XFwnIHZhbHVlcyBpcyBub3QgcGVybWl0dGVkIGluIHlvdXIgYnJvd3Nlci4gRm9yIGEgZmFsbGJhY2ssIHBsZWFzZSBzZWU6IGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2dsc2wtcmVhZC1mbG9hdCcpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEoXG4gICAgICAgICAgdHlwZSA9PT0gR0xfVU5TSUdORURfQllURSQ3LFxuICAgICAgICAgICdSZWFkaW5nIGZyb20gYSBmcmFtZWJ1ZmZlciBpcyBvbmx5IGFsbG93ZWQgZm9yIHRoZSB0eXBlIFxcJ3VpbnQ4XFwnJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgeCA9IDBcbiAgICB2YXIgeSA9IDBcbiAgICB2YXIgd2lkdGggPSBjb250ZXh0LmZyYW1lYnVmZmVyV2lkdGhcbiAgICB2YXIgaGVpZ2h0ID0gY29udGV4dC5mcmFtZWJ1ZmZlckhlaWdodFxuICAgIHZhciBkYXRhID0gbnVsbFxuXG4gICAgaWYgKGlzVHlwZWRBcnJheShpbnB1dCkpIHtcbiAgICAgIGRhdGEgPSBpbnB1dFxuICAgIH0gZWxzZSBpZiAoaW5wdXQpIHtcbiAgICAgIGNoZWNrJDEudHlwZShpbnB1dCwgJ29iamVjdCcsICdpbnZhbGlkIGFyZ3VtZW50cyB0byByZWdsLnJlYWQoKScpXG4gICAgICB4ID0gaW5wdXQueCB8IDBcbiAgICAgIHkgPSBpbnB1dC55IHwgMFxuICAgICAgY2hlY2skMShcbiAgICAgICAgeCA+PSAwICYmIHggPCBjb250ZXh0LmZyYW1lYnVmZmVyV2lkdGgsXG4gICAgICAgICdpbnZhbGlkIHggb2Zmc2V0IGZvciByZWdsLnJlYWQnKVxuICAgICAgY2hlY2skMShcbiAgICAgICAgeSA+PSAwICYmIHkgPCBjb250ZXh0LmZyYW1lYnVmZmVySGVpZ2h0LFxuICAgICAgICAnaW52YWxpZCB5IG9mZnNldCBmb3IgcmVnbC5yZWFkJylcbiAgICAgIHdpZHRoID0gKGlucHV0LndpZHRoIHx8IChjb250ZXh0LmZyYW1lYnVmZmVyV2lkdGggLSB4KSkgfCAwXG4gICAgICBoZWlnaHQgPSAoaW5wdXQuaGVpZ2h0IHx8IChjb250ZXh0LmZyYW1lYnVmZmVySGVpZ2h0IC0geSkpIHwgMFxuICAgICAgZGF0YSA9IGlucHV0LmRhdGEgfHwgbnVsbFxuICAgIH1cblxuICAgIC8vIHNhbml0eSBjaGVjayBpbnB1dC5kYXRhXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlID09PSBHTF9VTlNJR05FRF9CWVRFJDcpIHtcbiAgICAgICAgY2hlY2skMShcbiAgICAgICAgICBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSxcbiAgICAgICAgICAnYnVmZmVyIG11c3QgYmUgXFwnVWludDhBcnJheVxcJyB3aGVuIHJlYWRpbmcgZnJvbSBhIGZyYW1lYnVmZmVyIG9mIHR5cGUgXFwndWludDhcXCcnKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBHTF9GTE9BVCQ3KSB7XG4gICAgICAgIGNoZWNrJDEoXG4gICAgICAgICAgZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAnYnVmZmVyIG11c3QgYmUgXFwnRmxvYXQzMkFycmF5XFwnIHdoZW4gcmVhZGluZyBmcm9tIGEgZnJhbWVidWZmZXIgb2YgdHlwZSBcXCdmbG9hdFxcJycpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2skMShcbiAgICAgIHdpZHRoID4gMCAmJiB3aWR0aCArIHggPD0gY29udGV4dC5mcmFtZWJ1ZmZlcldpZHRoLFxuICAgICAgJ2ludmFsaWQgd2lkdGggZm9yIHJlYWQgcGl4ZWxzJylcbiAgICBjaGVjayQxKFxuICAgICAgaGVpZ2h0ID4gMCAmJiBoZWlnaHQgKyB5IDw9IGNvbnRleHQuZnJhbWVidWZmZXJIZWlnaHQsXG4gICAgICAnaW52YWxpZCBoZWlnaHQgZm9yIHJlYWQgcGl4ZWxzJylcblxuICAgIC8vIFVwZGF0ZSBXZWJHTCBzdGF0ZVxuICAgIHJlZ2xQb2xsKClcblxuICAgIC8vIENvbXB1dGUgc2l6ZVxuICAgIHZhciBzaXplID0gd2lkdGggKiBoZWlnaHQgKiA0XG5cbiAgICAvLyBBbGxvY2F0ZSBkYXRhXG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICBpZiAodHlwZSA9PT0gR0xfVU5TSUdORURfQllURSQ3KSB7XG4gICAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShzaXplKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBHTF9GTE9BVCQ3KSB7XG4gICAgICAgIGRhdGEgPSBkYXRhIHx8IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUeXBlIGNoZWNrXG4gICAgY2hlY2skMS5pc1R5cGVkQXJyYXkoZGF0YSwgJ2RhdGEgYnVmZmVyIGZvciByZWdsLnJlYWQoKSBtdXN0IGJlIGEgdHlwZWRhcnJheScpXG4gICAgY2hlY2skMShkYXRhLmJ5dGVMZW5ndGggPj0gc2l6ZSwgJ2RhdGEgYnVmZmVyIGZvciByZWdsLnJlYWQoKSB0b28gc21hbGwnKVxuXG4gICAgLy8gUnVuIHJlYWQgcGl4ZWxzXG4gICAgZ2wucGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQpXG4gICAgZ2wucmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JBJDMsXG4gICAgICB0eXBlLFxuICAgICAgZGF0YSlcblxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBmdW5jdGlvbiByZWFkUGl4ZWxzRkJPIChvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdFxuICAgIGZyYW1lYnVmZmVyU3RhdGUuc2V0RkJPKHtcbiAgICAgIGZyYW1lYnVmZmVyOiBvcHRpb25zLmZyYW1lYnVmZmVyXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgcmVzdWx0ID0gcmVhZFBpeGVsc0ltcGwob3B0aW9ucylcbiAgICB9KVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRQaXhlbHMgKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgISgnZnJhbWVidWZmZXInIGluIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gcmVhZFBpeGVsc0ltcGwob3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlYWRQaXhlbHNGQk8ob3B0aW9ucylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVhZFBpeGVsc1xufVxuXG5mdW5jdGlvbiBzbGljZSAoeCkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeClcbn1cblxuZnVuY3Rpb24gam9pbiAoeCkge1xuICByZXR1cm4gc2xpY2UoeCkuam9pbignJylcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW52aXJvbm1lbnQgKCkge1xuICAvLyBVbmlxdWUgdmFyaWFibGUgaWQgY291bnRlclxuICB2YXIgdmFyQ291bnRlciA9IDBcblxuICAvLyBMaW5rZWQgdmFsdWVzIGFyZSBwYXNzZWQgZnJvbSB0aGlzIHNjb3BlIGludG8gdGhlIGdlbmVyYXRlZCBjb2RlIGJsb2NrXG4gIC8vIENhbGxpbmcgbGluaygpIHBhc3NlcyBhIHZhbHVlIGludG8gdGhlIGdlbmVyYXRlZCBzY29wZSBhbmQgcmV0dXJuc1xuICAvLyB0aGUgdmFyaWFibGUgbmFtZSB3aGljaCBpdCBpcyBib3VuZCB0b1xuICB2YXIgbGlua2VkTmFtZXMgPSBbXVxuICB2YXIgbGlua2VkVmFsdWVzID0gW11cbiAgZnVuY3Rpb24gbGluayAodmFsdWUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtlZFZhbHVlcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGxpbmtlZFZhbHVlc1tpXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGxpbmtlZE5hbWVzW2ldXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSAnZycgKyAodmFyQ291bnRlcisrKVxuICAgIGxpbmtlZE5hbWVzLnB1c2gobmFtZSlcbiAgICBsaW5rZWRWYWx1ZXMucHVzaCh2YWx1ZSlcbiAgICByZXR1cm4gbmFtZVxuICB9XG5cbiAgLy8gY3JlYXRlIGEgY29kZSBibG9ja1xuICBmdW5jdGlvbiBibG9jayAoKSB7XG4gICAgdmFyIGNvZGUgPSBbXVxuICAgIGZ1bmN0aW9uIHB1c2ggKCkge1xuICAgICAgY29kZS5wdXNoLmFwcGx5KGNvZGUsIHNsaWNlKGFyZ3VtZW50cykpXG4gICAgfVxuXG4gICAgdmFyIHZhcnMgPSBbXVxuICAgIGZ1bmN0aW9uIGRlZiAoKSB7XG4gICAgICB2YXIgbmFtZSA9ICd2JyArICh2YXJDb3VudGVyKyspXG4gICAgICB2YXJzLnB1c2gobmFtZSlcblxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvZGUucHVzaChuYW1lLCAnPScpXG4gICAgICAgIGNvZGUucHVzaC5hcHBseShjb2RlLCBzbGljZShhcmd1bWVudHMpKVxuICAgICAgICBjb2RlLnB1c2goJzsnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmFtZVxuICAgIH1cblxuICAgIHJldHVybiBleHRlbmQocHVzaCwge1xuICAgICAgZGVmOiBkZWYsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gam9pbihbXG4gICAgICAgICAgKHZhcnMubGVuZ3RoID4gMCA/ICd2YXIgJyArIHZhcnMuam9pbignLCcpICsgJzsnIDogJycpLFxuICAgICAgICAgIGpvaW4oY29kZSlcbiAgICAgICAgXSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gc2NvcGUgKCkge1xuICAgIHZhciBlbnRyeSA9IGJsb2NrKClcbiAgICB2YXIgZXhpdCA9IGJsb2NrKClcblxuICAgIHZhciBlbnRyeVRvU3RyaW5nID0gZW50cnkudG9TdHJpbmdcbiAgICB2YXIgZXhpdFRvU3RyaW5nID0gZXhpdC50b1N0cmluZ1xuXG4gICAgZnVuY3Rpb24gc2F2ZSAob2JqZWN0LCBwcm9wKSB7XG4gICAgICBleGl0KG9iamVjdCwgcHJvcCwgJz0nLCBlbnRyeS5kZWYob2JqZWN0LCBwcm9wKSwgJzsnKVxuICAgIH1cblxuICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgZW50cnkuYXBwbHkoZW50cnksIHNsaWNlKGFyZ3VtZW50cykpXG4gICAgfSwge1xuICAgICAgZGVmOiBlbnRyeS5kZWYsXG4gICAgICBlbnRyeTogZW50cnksXG4gICAgICBleGl0OiBleGl0LFxuICAgICAgc2F2ZTogc2F2ZSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG9iamVjdCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgc2F2ZShvYmplY3QsIHByb3ApXG4gICAgICAgIGVudHJ5KG9iamVjdCwgcHJvcCwgJz0nLCB2YWx1ZSwgJzsnKVxuICAgICAgfSxcbiAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBlbnRyeVRvU3RyaW5nKCkgKyBleGl0VG9TdHJpbmcoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBjb25kaXRpb25hbCAoKSB7XG4gICAgdmFyIHByZWQgPSBqb2luKGFyZ3VtZW50cylcbiAgICB2YXIgdGhlbkJsb2NrID0gc2NvcGUoKVxuICAgIHZhciBlbHNlQmxvY2sgPSBzY29wZSgpXG5cbiAgICB2YXIgdGhlblRvU3RyaW5nID0gdGhlbkJsb2NrLnRvU3RyaW5nXG4gICAgdmFyIGVsc2VUb1N0cmluZyA9IGVsc2VCbG9jay50b1N0cmluZ1xuXG4gICAgcmV0dXJuIGV4dGVuZCh0aGVuQmxvY2ssIHtcbiAgICAgIHRoZW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhlbkJsb2NrLmFwcGx5KHRoZW5CbG9jaywgc2xpY2UoYXJndW1lbnRzKSlcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH0sXG4gICAgICBlbHNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVsc2VCbG9jay5hcHBseShlbHNlQmxvY2ssIHNsaWNlKGFyZ3VtZW50cykpXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9LFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsc2VDbGF1c2UgPSBlbHNlVG9TdHJpbmcoKVxuICAgICAgICBpZiAoZWxzZUNsYXVzZSkge1xuICAgICAgICAgIGVsc2VDbGF1c2UgPSAnZWxzZXsnICsgZWxzZUNsYXVzZSArICd9J1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqb2luKFtcbiAgICAgICAgICAnaWYoJywgcHJlZCwgJyl7JyxcbiAgICAgICAgICB0aGVuVG9TdHJpbmcoKSxcbiAgICAgICAgICAnfScsIGVsc2VDbGF1c2VcbiAgICAgICAgXSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gcHJvY2VkdXJlIGxpc3RcbiAgdmFyIGdsb2JhbEJsb2NrID0gYmxvY2soKVxuICB2YXIgcHJvY2VkdXJlcyA9IHt9XG4gIGZ1bmN0aW9uIHByb2MgKG5hbWUsIGNvdW50KSB7XG4gICAgdmFyIGFyZ3MgPSBbXVxuICAgIGZ1bmN0aW9uIGFyZyAoKSB7XG4gICAgICB2YXIgbmFtZSA9ICdhJyArIGFyZ3MubGVuZ3RoXG4gICAgICBhcmdzLnB1c2gobmFtZSlcbiAgICAgIHJldHVybiBuYW1lXG4gICAgfVxuXG4gICAgY291bnQgPSBjb3VudCB8fCAwXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICBhcmcoKVxuICAgIH1cblxuICAgIHZhciBib2R5ID0gc2NvcGUoKVxuICAgIHZhciBib2R5VG9TdHJpbmcgPSBib2R5LnRvU3RyaW5nXG5cbiAgICB2YXIgcmVzdWx0ID0gcHJvY2VkdXJlc1tuYW1lXSA9IGV4dGVuZChib2R5LCB7XG4gICAgICBhcmc6IGFyZyxcbiAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqb2luKFtcbiAgICAgICAgICAnZnVuY3Rpb24oJywgYXJncy5qb2luKCksICcpeycsXG4gICAgICAgICAgYm9keVRvU3RyaW5nKCksXG4gICAgICAgICAgJ30nXG4gICAgICAgIF0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBpbGUgKCkge1xuICAgIHZhciBjb2RlID0gWydcInVzZSBzdHJpY3RcIjsnLFxuICAgICAgZ2xvYmFsQmxvY2ssXG4gICAgICAncmV0dXJuIHsnXVxuICAgIE9iamVjdC5rZXlzKHByb2NlZHVyZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIGNvZGUucHVzaCgnXCInLCBuYW1lLCAnXCI6JywgcHJvY2VkdXJlc1tuYW1lXS50b1N0cmluZygpLCAnLCcpXG4gICAgfSlcbiAgICBjb2RlLnB1c2goJ30nKVxuICAgIHZhciBzcmMgPSBqb2luKGNvZGUpXG4gICAgICAucmVwbGFjZSgvOy9nLCAnO1xcbicpXG4gICAgICAucmVwbGFjZSgvfS9nLCAnfVxcbicpXG4gICAgICAucmVwbGFjZSgvey9nLCAne1xcbicpXG4gICAgdmFyIHByb2MgPSBGdW5jdGlvbi5hcHBseShudWxsLCBsaW5rZWROYW1lcy5jb25jYXQoc3JjKSlcbiAgICByZXR1cm4gcHJvYy5hcHBseShudWxsLCBsaW5rZWRWYWx1ZXMpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGdsb2JhbDogZ2xvYmFsQmxvY2ssXG4gICAgbGluazogbGluayxcbiAgICBibG9jazogYmxvY2ssXG4gICAgcHJvYzogcHJvYyxcbiAgICBzY29wZTogc2NvcGUsXG4gICAgY29uZDogY29uZGl0aW9uYWwsXG4gICAgY29tcGlsZTogY29tcGlsZVxuICB9XG59XG5cbi8vIFwiY3V0ZVwiIG5hbWVzIGZvciB2ZWN0b3IgY29tcG9uZW50c1xudmFyIENVVEVfQ09NUE9ORU5UUyA9ICd4eXp3Jy5zcGxpdCgnJylcblxudmFyIEdMX1VOU0lHTkVEX0JZVEUkOCA9IDUxMjFcblxudmFyIEFUVFJJQl9TVEFURV9QT0lOVEVSID0gMVxudmFyIEFUVFJJQl9TVEFURV9DT05TVEFOVCA9IDJcblxudmFyIERZTl9GVU5DJDEgPSAwXG52YXIgRFlOX1BST1AkMSA9IDFcbnZhciBEWU5fQ09OVEVYVCQxID0gMlxudmFyIERZTl9TVEFURSQxID0gM1xudmFyIERZTl9USFVOSyA9IDRcbnZhciBEWU5fQ09OU1RBTlQkMSA9IDVcbnZhciBEWU5fQVJSQVkkMSA9IDZcblxudmFyIFNfRElUSEVSID0gJ2RpdGhlcidcbnZhciBTX0JMRU5EX0VOQUJMRSA9ICdibGVuZC5lbmFibGUnXG52YXIgU19CTEVORF9DT0xPUiA9ICdibGVuZC5jb2xvcidcbnZhciBTX0JMRU5EX0VRVUFUSU9OID0gJ2JsZW5kLmVxdWF0aW9uJ1xudmFyIFNfQkxFTkRfRlVOQyA9ICdibGVuZC5mdW5jJ1xudmFyIFNfREVQVEhfRU5BQkxFID0gJ2RlcHRoLmVuYWJsZSdcbnZhciBTX0RFUFRIX0ZVTkMgPSAnZGVwdGguZnVuYydcbnZhciBTX0RFUFRIX1JBTkdFID0gJ2RlcHRoLnJhbmdlJ1xudmFyIFNfREVQVEhfTUFTSyA9ICdkZXB0aC5tYXNrJ1xudmFyIFNfQ09MT1JfTUFTSyA9ICdjb2xvck1hc2snXG52YXIgU19DVUxMX0VOQUJMRSA9ICdjdWxsLmVuYWJsZSdcbnZhciBTX0NVTExfRkFDRSA9ICdjdWxsLmZhY2UnXG52YXIgU19GUk9OVF9GQUNFID0gJ2Zyb250RmFjZSdcbnZhciBTX0xJTkVfV0lEVEggPSAnbGluZVdpZHRoJ1xudmFyIFNfUE9MWUdPTl9PRkZTRVRfRU5BQkxFID0gJ3BvbHlnb25PZmZzZXQuZW5hYmxlJ1xudmFyIFNfUE9MWUdPTl9PRkZTRVRfT0ZGU0VUID0gJ3BvbHlnb25PZmZzZXQub2Zmc2V0J1xudmFyIFNfU0FNUExFX0FMUEhBID0gJ3NhbXBsZS5hbHBoYSdcbnZhciBTX1NBTVBMRV9FTkFCTEUgPSAnc2FtcGxlLmVuYWJsZSdcbnZhciBTX1NBTVBMRV9DT1ZFUkFHRSA9ICdzYW1wbGUuY292ZXJhZ2UnXG52YXIgU19TVEVOQ0lMX0VOQUJMRSA9ICdzdGVuY2lsLmVuYWJsZSdcbnZhciBTX1NURU5DSUxfTUFTSyA9ICdzdGVuY2lsLm1hc2snXG52YXIgU19TVEVOQ0lMX0ZVTkMgPSAnc3RlbmNpbC5mdW5jJ1xudmFyIFNfU1RFTkNJTF9PUEZST05UID0gJ3N0ZW5jaWwub3BGcm9udCdcbnZhciBTX1NURU5DSUxfT1BCQUNLID0gJ3N0ZW5jaWwub3BCYWNrJ1xudmFyIFNfU0NJU1NPUl9FTkFCTEUgPSAnc2Npc3Nvci5lbmFibGUnXG52YXIgU19TQ0lTU09SX0JPWCA9ICdzY2lzc29yLmJveCdcbnZhciBTX1ZJRVdQT1JUID0gJ3ZpZXdwb3J0J1xuXG52YXIgU19QUk9GSUxFID0gJ3Byb2ZpbGUnXG5cbnZhciBTX0ZSQU1FQlVGRkVSID0gJ2ZyYW1lYnVmZmVyJ1xudmFyIFNfVkVSVCA9ICd2ZXJ0J1xudmFyIFNfRlJBRyA9ICdmcmFnJ1xudmFyIFNfRUxFTUVOVFMgPSAnZWxlbWVudHMnXG52YXIgU19QUklNSVRJVkUgPSAncHJpbWl0aXZlJ1xudmFyIFNfQ09VTlQgPSAnY291bnQnXG52YXIgU19PRkZTRVQgPSAnb2Zmc2V0J1xudmFyIFNfSU5TVEFOQ0VTID0gJ2luc3RhbmNlcydcbnZhciBTX1ZBTyA9ICd2YW8nXG5cbnZhciBTVUZGSVhfV0lEVEggPSAnV2lkdGgnXG52YXIgU1VGRklYX0hFSUdIVCA9ICdIZWlnaHQnXG5cbnZhciBTX0ZSQU1FQlVGRkVSX1dJRFRIID0gU19GUkFNRUJVRkZFUiArIFNVRkZJWF9XSURUSFxudmFyIFNfRlJBTUVCVUZGRVJfSEVJR0hUID0gU19GUkFNRUJVRkZFUiArIFNVRkZJWF9IRUlHSFRcbnZhciBTX1ZJRVdQT1JUX1dJRFRIID0gU19WSUVXUE9SVCArIFNVRkZJWF9XSURUSFxudmFyIFNfVklFV1BPUlRfSEVJR0hUID0gU19WSUVXUE9SVCArIFNVRkZJWF9IRUlHSFRcbnZhciBTX0RSQVdJTkdCVUZGRVIgPSAnZHJhd2luZ0J1ZmZlcidcbnZhciBTX0RSQVdJTkdCVUZGRVJfV0lEVEggPSBTX0RSQVdJTkdCVUZGRVIgKyBTVUZGSVhfV0lEVEhcbnZhciBTX0RSQVdJTkdCVUZGRVJfSEVJR0hUID0gU19EUkFXSU5HQlVGRkVSICsgU1VGRklYX0hFSUdIVFxuXG52YXIgTkVTVEVEX09QVElPTlMgPSBbXG4gIFNfQkxFTkRfRlVOQyxcbiAgU19CTEVORF9FUVVBVElPTixcbiAgU19TVEVOQ0lMX0ZVTkMsXG4gIFNfU1RFTkNJTF9PUEZST05ULFxuICBTX1NURU5DSUxfT1BCQUNLLFxuICBTX1NBTVBMRV9DT1ZFUkFHRSxcbiAgU19WSUVXUE9SVCxcbiAgU19TQ0lTU09SX0JPWCxcbiAgU19QT0xZR09OX09GRlNFVF9PRkZTRVRcbl1cblxudmFyIEdMX0FSUkFZX0JVRkZFUiQyID0gMzQ5NjJcbnZhciBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiQxID0gMzQ5NjNcblxudmFyIEdMX0ZSQUdNRU5UX1NIQURFUiQxID0gMzU2MzJcbnZhciBHTF9WRVJURVhfU0hBREVSJDEgPSAzNTYzM1xuXG52YXIgR0xfVEVYVFVSRV8yRCQzID0gMHgwREUxXG52YXIgR0xfVEVYVFVSRV9DVUJFX01BUCQyID0gMHg4NTEzXG5cbnZhciBHTF9DVUxMX0ZBQ0UgPSAweDBCNDRcbnZhciBHTF9CTEVORCA9IDB4MEJFMlxudmFyIEdMX0RJVEhFUiA9IDB4MEJEMFxudmFyIEdMX1NURU5DSUxfVEVTVCA9IDB4MEI5MFxudmFyIEdMX0RFUFRIX1RFU1QgPSAweDBCNzFcbnZhciBHTF9TQ0lTU09SX1RFU1QgPSAweDBDMTFcbnZhciBHTF9QT0xZR09OX09GRlNFVF9GSUxMID0gMHg4MDM3XG52YXIgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFID0gMHg4MDlFXG52YXIgR0xfU0FNUExFX0NPVkVSQUdFID0gMHg4MEEwXG5cbnZhciBHTF9GTE9BVCQ4ID0gNTEyNlxudmFyIEdMX0ZMT0FUX1ZFQzIgPSAzNTY2NFxudmFyIEdMX0ZMT0FUX1ZFQzMgPSAzNTY2NVxudmFyIEdMX0ZMT0FUX1ZFQzQgPSAzNTY2NlxudmFyIEdMX0lOVCQzID0gNTEyNFxudmFyIEdMX0lOVF9WRUMyID0gMzU2NjdcbnZhciBHTF9JTlRfVkVDMyA9IDM1NjY4XG52YXIgR0xfSU5UX1ZFQzQgPSAzNTY2OVxudmFyIEdMX0JPT0wgPSAzNTY3MFxudmFyIEdMX0JPT0xfVkVDMiA9IDM1NjcxXG52YXIgR0xfQk9PTF9WRUMzID0gMzU2NzJcbnZhciBHTF9CT09MX1ZFQzQgPSAzNTY3M1xudmFyIEdMX0ZMT0FUX01BVDIgPSAzNTY3NFxudmFyIEdMX0ZMT0FUX01BVDMgPSAzNTY3NVxudmFyIEdMX0ZMT0FUX01BVDQgPSAzNTY3NlxudmFyIEdMX1NBTVBMRVJfMkQgPSAzNTY3OFxudmFyIEdMX1NBTVBMRVJfQ1VCRSA9IDM1NjgwXG5cbnZhciBHTF9UUklBTkdMRVMkMSA9IDRcblxudmFyIEdMX0ZST05UID0gMTAyOFxudmFyIEdMX0JBQ0sgPSAxMDI5XG52YXIgR0xfQ1cgPSAweDA5MDBcbnZhciBHTF9DQ1cgPSAweDA5MDFcbnZhciBHTF9NSU5fRVhUID0gMHg4MDA3XG52YXIgR0xfTUFYX0VYVCA9IDB4ODAwOFxudmFyIEdMX0FMV0FZUyA9IDUxOVxudmFyIEdMX0tFRVAgPSA3NjgwXG52YXIgR0xfWkVSTyA9IDBcbnZhciBHTF9PTkUgPSAxXG52YXIgR0xfRlVOQ19BREQgPSAweDgwMDZcbnZhciBHTF9MRVNTID0gNTEzXG5cbnZhciBHTF9GUkFNRUJVRkZFUiQyID0gMHg4RDQwXG52YXIgR0xfQ09MT1JfQVRUQUNITUVOVDAkMiA9IDB4OENFMFxuXG52YXIgYmxlbmRGdW5jcyA9IHtcbiAgJzAnOiAwLFxuICAnMSc6IDEsXG4gICd6ZXJvJzogMCxcbiAgJ29uZSc6IDEsXG4gICdzcmMgY29sb3InOiA3NjgsXG4gICdvbmUgbWludXMgc3JjIGNvbG9yJzogNzY5LFxuICAnc3JjIGFscGhhJzogNzcwLFxuICAnb25lIG1pbnVzIHNyYyBhbHBoYSc6IDc3MSxcbiAgJ2RzdCBjb2xvcic6IDc3NCxcbiAgJ29uZSBtaW51cyBkc3QgY29sb3InOiA3NzUsXG4gICdkc3QgYWxwaGEnOiA3NzIsXG4gICdvbmUgbWludXMgZHN0IGFscGhhJzogNzczLFxuICAnY29uc3RhbnQgY29sb3InOiAzMjc2OSxcbiAgJ29uZSBtaW51cyBjb25zdGFudCBjb2xvcic6IDMyNzcwLFxuICAnY29uc3RhbnQgYWxwaGEnOiAzMjc3MSxcbiAgJ29uZSBtaW51cyBjb25zdGFudCBhbHBoYSc6IDMyNzcyLFxuICAnc3JjIGFscGhhIHNhdHVyYXRlJzogNzc2XG59XG5cbi8vIFRoZXJlIGFyZSBpbnZhbGlkIHZhbHVlcyBmb3Igc3JjUkdCIGFuZCBkc3RSR0IuIFNlZTpcbi8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzLzEuMC8jNi4xM1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9XZWJHTC9ibG9iLzBkMzIwMWY1ZjdlYzNjMDA2MGJjMWYwNDA3NzQ2MTU0MWYxOTg3YjkvY29uZm9ybWFuY2Utc3VpdGVzLzEuMC4zL2NvbmZvcm1hbmNlL21pc2Mvd2ViZ2wtc3BlY2lmaWMuaHRtbCNMNTZcbnZhciBpbnZhbGlkQmxlbmRDb21iaW5hdGlvbnMgPSBbXG4gICdjb25zdGFudCBjb2xvciwgY29uc3RhbnQgYWxwaGEnLFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yLCBjb25zdGFudCBhbHBoYScsXG4gICdjb25zdGFudCBjb2xvciwgb25lIG1pbnVzIGNvbnN0YW50IGFscGhhJyxcbiAgJ29uZSBtaW51cyBjb25zdGFudCBjb2xvciwgb25lIG1pbnVzIGNvbnN0YW50IGFscGhhJyxcbiAgJ2NvbnN0YW50IGFscGhhLCBjb25zdGFudCBjb2xvcicsXG4gICdjb25zdGFudCBhbHBoYSwgb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yJyxcbiAgJ29uZSBtaW51cyBjb25zdGFudCBhbHBoYSwgY29uc3RhbnQgY29sb3InLFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGFscGhhLCBvbmUgbWludXMgY29uc3RhbnQgY29sb3InXG5dXG5cbnZhciBjb21wYXJlRnVuY3MgPSB7XG4gICduZXZlcic6IDUxMixcbiAgJ2xlc3MnOiA1MTMsXG4gICc8JzogNTEzLFxuICAnZXF1YWwnOiA1MTQsXG4gICc9JzogNTE0LFxuICAnPT0nOiA1MTQsXG4gICc9PT0nOiA1MTQsXG4gICdsZXF1YWwnOiA1MTUsXG4gICc8PSc6IDUxNSxcbiAgJ2dyZWF0ZXInOiA1MTYsXG4gICc+JzogNTE2LFxuICAnbm90ZXF1YWwnOiA1MTcsXG4gICchPSc6IDUxNyxcbiAgJyE9PSc6IDUxNyxcbiAgJ2dlcXVhbCc6IDUxOCxcbiAgJz49JzogNTE4LFxuICAnYWx3YXlzJzogNTE5XG59XG5cbnZhciBzdGVuY2lsT3BzID0ge1xuICAnMCc6IDAsXG4gICd6ZXJvJzogMCxcbiAgJ2tlZXAnOiA3NjgwLFxuICAncmVwbGFjZSc6IDc2ODEsXG4gICdpbmNyZW1lbnQnOiA3NjgyLFxuICAnZGVjcmVtZW50JzogNzY4MyxcbiAgJ2luY3JlbWVudCB3cmFwJzogMzQwNTUsXG4gICdkZWNyZW1lbnQgd3JhcCc6IDM0MDU2LFxuICAnaW52ZXJ0JzogNTM4NlxufVxuXG52YXIgc2hhZGVyVHlwZSA9IHtcbiAgJ2ZyYWcnOiBHTF9GUkFHTUVOVF9TSEFERVIkMSxcbiAgJ3ZlcnQnOiBHTF9WRVJURVhfU0hBREVSJDFcbn1cblxudmFyIG9yaWVudGF0aW9uVHlwZSA9IHtcbiAgJ2N3JzogR0xfQ1csXG4gICdjY3cnOiBHTF9DQ1dcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXJBcmdzICh4KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHgpIHx8XG4gICAgaXNUeXBlZEFycmF5KHgpIHx8XG4gICAgaXNOREFycmF5TGlrZSh4KVxufVxuXG4vLyBNYWtlIHN1cmUgdmlld3BvcnQgaXMgcHJvY2Vzc2VkIGZpcnN0XG5mdW5jdGlvbiBzb3J0U3RhdGUgKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgaWYgKGEgPT09IFNfVklFV1BPUlQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH0gZWxzZSBpZiAoYiA9PT0gU19WSUVXUE9SVCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgcmV0dXJuIChhIDwgYikgPyAtMSA6IDFcbiAgfSlcbn1cblxuZnVuY3Rpb24gRGVjbGFyYXRpb24gKHRoaXNEZXAsIGNvbnRleHREZXAsIHByb3BEZXAsIGFwcGVuZCkge1xuICB0aGlzLnRoaXNEZXAgPSB0aGlzRGVwXG4gIHRoaXMuY29udGV4dERlcCA9IGNvbnRleHREZXBcbiAgdGhpcy5wcm9wRGVwID0gcHJvcERlcFxuICB0aGlzLmFwcGVuZCA9IGFwcGVuZFxufVxuXG5mdW5jdGlvbiBpc1N0YXRpYyAoZGVjbCkge1xuICByZXR1cm4gZGVjbCAmJiAhKGRlY2wudGhpc0RlcCB8fCBkZWNsLmNvbnRleHREZXAgfHwgZGVjbC5wcm9wRGVwKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdGF0aWNEZWNsIChhcHBlbmQpIHtcbiAgcmV0dXJuIG5ldyBEZWNsYXJhdGlvbihmYWxzZSwgZmFsc2UsIGZhbHNlLCBhcHBlbmQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUR5bmFtaWNEZWNsIChkeW4sIGFwcGVuZCkge1xuICB2YXIgdHlwZSA9IGR5bi50eXBlXG4gIGlmICh0eXBlID09PSBEWU5fRlVOQyQxKSB7XG4gICAgdmFyIG51bUFyZ3MgPSBkeW4uZGF0YS5sZW5ndGhcbiAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgdHJ1ZSxcbiAgICAgIG51bUFyZ3MgPj0gMSxcbiAgICAgIG51bUFyZ3MgPj0gMixcbiAgICAgIGFwcGVuZClcbiAgfSBlbHNlIGlmICh0eXBlID09PSBEWU5fVEhVTkspIHtcbiAgICB2YXIgZGF0YSA9IGR5bi5kYXRhXG4gICAgcmV0dXJuIG5ldyBEZWNsYXJhdGlvbihcbiAgICAgIGRhdGEudGhpc0RlcCxcbiAgICAgIGRhdGEuY29udGV4dERlcCxcbiAgICAgIGRhdGEucHJvcERlcCxcbiAgICAgIGFwcGVuZClcbiAgfSBlbHNlIGlmICh0eXBlID09PSBEWU5fQ09OU1RBTlQkMSkge1xuICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICBmYWxzZSxcbiAgICAgIGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICBhcHBlbmQpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gRFlOX0FSUkFZJDEpIHtcbiAgICB2YXIgdGhpc0RlcCA9IGZhbHNlXG4gICAgdmFyIGNvbnRleHREZXAgPSBmYWxzZVxuICAgIHZhciBwcm9wRGVwID0gZmFsc2VcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGR5bi5kYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3ViRHluID0gZHluLmRhdGFbaV1cbiAgICAgIGlmIChzdWJEeW4udHlwZSA9PT0gRFlOX1BST1AkMSkge1xuICAgICAgICBwcm9wRGVwID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChzdWJEeW4udHlwZSA9PT0gRFlOX0NPTlRFWFQkMSkge1xuICAgICAgICBjb250ZXh0RGVwID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChzdWJEeW4udHlwZSA9PT0gRFlOX1NUQVRFJDEpIHtcbiAgICAgICAgdGhpc0RlcCA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAoc3ViRHluLnR5cGUgPT09IERZTl9GVU5DJDEpIHtcbiAgICAgICAgdGhpc0RlcCA9IHRydWVcbiAgICAgICAgdmFyIHN1YkFyZ3MgPSBzdWJEeW4uZGF0YVxuICAgICAgICBpZiAoc3ViQXJncyA+PSAxKSB7XG4gICAgICAgICAgY29udGV4dERlcCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3ViQXJncyA+PSAyKSB7XG4gICAgICAgICAgcHJvcERlcCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdWJEeW4udHlwZSA9PT0gRFlOX1RIVU5LKSB7XG4gICAgICAgIHRoaXNEZXAgPSB0aGlzRGVwIHx8IHN1YkR5bi5kYXRhLnRoaXNEZXBcbiAgICAgICAgY29udGV4dERlcCA9IGNvbnRleHREZXAgfHwgc3ViRHluLmRhdGEuY29udGV4dERlcFxuICAgICAgICBwcm9wRGVwID0gcHJvcERlcCB8fCBzdWJEeW4uZGF0YS5wcm9wRGVwXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICB0aGlzRGVwLFxuICAgICAgY29udGV4dERlcCxcbiAgICAgIHByb3BEZXAsXG4gICAgICBhcHBlbmQpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBEZWNsYXJhdGlvbihcbiAgICAgIHR5cGUgPT09IERZTl9TVEFURSQxLFxuICAgICAgdHlwZSA9PT0gRFlOX0NPTlRFWFQkMSxcbiAgICAgIHR5cGUgPT09IERZTl9QUk9QJDEsXG4gICAgICBhcHBlbmQpXG4gIH1cbn1cblxudmFyIFNDT1BFX0RFQ0wgPSBuZXcgRGVjbGFyYXRpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZnVuY3Rpb24gKCkge30pXG5cbmZ1bmN0aW9uIHJlZ2xDb3JlIChcbiAgZ2wsXG4gIHN0cmluZ1N0b3JlLFxuICBleHRlbnNpb25zLFxuICBsaW1pdHMsXG4gIGJ1ZmZlclN0YXRlLFxuICBlbGVtZW50U3RhdGUsXG4gIHRleHR1cmVTdGF0ZSxcbiAgZnJhbWVidWZmZXJTdGF0ZSxcbiAgdW5pZm9ybVN0YXRlLFxuICBhdHRyaWJ1dGVTdGF0ZSxcbiAgc2hhZGVyU3RhdGUsXG4gIGRyYXdTdGF0ZSxcbiAgY29udGV4dFN0YXRlLFxuICB0aW1lcixcbiAgY29uZmlnKSB7XG4gIHZhciBBdHRyaWJ1dGVSZWNvcmQgPSBhdHRyaWJ1dGVTdGF0ZS5SZWNvcmRcblxuICB2YXIgYmxlbmRFcXVhdGlvbnMgPSB7XG4gICAgJ2FkZCc6IDMyNzc0LFxuICAgICdzdWJ0cmFjdCc6IDMyNzc4LFxuICAgICdyZXZlcnNlIHN1YnRyYWN0JzogMzI3NzlcbiAgfVxuICBpZiAoZXh0ZW5zaW9ucy5leHRfYmxlbmRfbWlubWF4KSB7XG4gICAgYmxlbmRFcXVhdGlvbnMubWluID0gR0xfTUlOX0VYVFxuICAgIGJsZW5kRXF1YXRpb25zLm1heCA9IEdMX01BWF9FWFRcbiAgfVxuXG4gIHZhciBleHRJbnN0YW5jaW5nID0gZXh0ZW5zaW9ucy5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzXG4gIHZhciBleHREcmF3QnVmZmVycyA9IGV4dGVuc2lvbnMud2ViZ2xfZHJhd19idWZmZXJzXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBXRUJHTCBTVEFURVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBjdXJyZW50U3RhdGUgPSB7XG4gICAgZGlydHk6IHRydWUsXG4gICAgcHJvZmlsZTogY29uZmlnLnByb2ZpbGVcbiAgfVxuICB2YXIgbmV4dFN0YXRlID0ge31cbiAgdmFyIEdMX1NUQVRFX05BTUVTID0gW11cbiAgdmFyIEdMX0ZMQUdTID0ge31cbiAgdmFyIEdMX1ZBUklBQkxFUyA9IHt9XG5cbiAgZnVuY3Rpb24gcHJvcE5hbWUgKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKCcuJywgJ18nKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdGVGbGFnIChzbmFtZSwgY2FwLCBpbml0KSB7XG4gICAgdmFyIG5hbWUgPSBwcm9wTmFtZShzbmFtZSlcbiAgICBHTF9TVEFURV9OQU1FUy5wdXNoKHNuYW1lKVxuICAgIG5leHRTdGF0ZVtuYW1lXSA9IGN1cnJlbnRTdGF0ZVtuYW1lXSA9ICEhaW5pdFxuICAgIEdMX0ZMQUdTW25hbWVdID0gY2FwXG4gIH1cblxuICBmdW5jdGlvbiBzdGF0ZVZhcmlhYmxlIChzbmFtZSwgZnVuYywgaW5pdCkge1xuICAgIHZhciBuYW1lID0gcHJvcE5hbWUoc25hbWUpXG4gICAgR0xfU1RBVEVfTkFNRVMucHVzaChzbmFtZSlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbml0KSkge1xuICAgICAgY3VycmVudFN0YXRlW25hbWVdID0gaW5pdC5zbGljZSgpXG4gICAgICBuZXh0U3RhdGVbbmFtZV0gPSBpbml0LnNsaWNlKClcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFN0YXRlW25hbWVdID0gbmV4dFN0YXRlW25hbWVdID0gaW5pdFxuICAgIH1cbiAgICBHTF9WQVJJQUJMRVNbbmFtZV0gPSBmdW5jXG4gIH1cblxuICAvLyBEaXRoZXJpbmdcbiAgc3RhdGVGbGFnKFNfRElUSEVSLCBHTF9ESVRIRVIpXG5cbiAgLy8gQmxlbmRpbmdcbiAgc3RhdGVGbGFnKFNfQkxFTkRfRU5BQkxFLCBHTF9CTEVORClcbiAgc3RhdGVWYXJpYWJsZShTX0JMRU5EX0NPTE9SLCAnYmxlbmRDb2xvcicsIFswLCAwLCAwLCAwXSlcbiAgc3RhdGVWYXJpYWJsZShTX0JMRU5EX0VRVUFUSU9OLCAnYmxlbmRFcXVhdGlvblNlcGFyYXRlJyxcbiAgICBbR0xfRlVOQ19BREQsIEdMX0ZVTkNfQUREXSlcbiAgc3RhdGVWYXJpYWJsZShTX0JMRU5EX0ZVTkMsICdibGVuZEZ1bmNTZXBhcmF0ZScsXG4gICAgW0dMX09ORSwgR0xfWkVSTywgR0xfT05FLCBHTF9aRVJPXSlcblxuICAvLyBEZXB0aFxuICBzdGF0ZUZsYWcoU19ERVBUSF9FTkFCTEUsIEdMX0RFUFRIX1RFU1QsIHRydWUpXG4gIHN0YXRlVmFyaWFibGUoU19ERVBUSF9GVU5DLCAnZGVwdGhGdW5jJywgR0xfTEVTUylcbiAgc3RhdGVWYXJpYWJsZShTX0RFUFRIX1JBTkdFLCAnZGVwdGhSYW5nZScsIFswLCAxXSlcbiAgc3RhdGVWYXJpYWJsZShTX0RFUFRIX01BU0ssICdkZXB0aE1hc2snLCB0cnVlKVxuXG4gIC8vIENvbG9yIG1hc2tcbiAgc3RhdGVWYXJpYWJsZShTX0NPTE9SX01BU0ssIFNfQ09MT1JfTUFTSywgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKVxuXG4gIC8vIEZhY2UgY3VsbGluZ1xuICBzdGF0ZUZsYWcoU19DVUxMX0VOQUJMRSwgR0xfQ1VMTF9GQUNFKVxuICBzdGF0ZVZhcmlhYmxlKFNfQ1VMTF9GQUNFLCAnY3VsbEZhY2UnLCBHTF9CQUNLKVxuXG4gIC8vIEZyb250IGZhY2Ugb3JpZW50YXRpb25cbiAgc3RhdGVWYXJpYWJsZShTX0ZST05UX0ZBQ0UsIFNfRlJPTlRfRkFDRSwgR0xfQ0NXKVxuXG4gIC8vIExpbmUgd2lkdGhcbiAgc3RhdGVWYXJpYWJsZShTX0xJTkVfV0lEVEgsIFNfTElORV9XSURUSCwgMSlcblxuICAvLyBQb2x5Z29uIG9mZnNldFxuICBzdGF0ZUZsYWcoU19QT0xZR09OX09GRlNFVF9FTkFCTEUsIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwpXG4gIHN0YXRlVmFyaWFibGUoU19QT0xZR09OX09GRlNFVF9PRkZTRVQsICdwb2x5Z29uT2Zmc2V0JywgWzAsIDBdKVxuXG4gIC8vIFNhbXBsZSBjb3ZlcmFnZVxuICBzdGF0ZUZsYWcoU19TQU1QTEVfQUxQSEEsIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSlcbiAgc3RhdGVGbGFnKFNfU0FNUExFX0VOQUJMRSwgR0xfU0FNUExFX0NPVkVSQUdFKVxuICBzdGF0ZVZhcmlhYmxlKFNfU0FNUExFX0NPVkVSQUdFLCAnc2FtcGxlQ292ZXJhZ2UnLCBbMSwgZmFsc2VdKVxuXG4gIC8vIFN0ZW5jaWxcbiAgc3RhdGVGbGFnKFNfU1RFTkNJTF9FTkFCTEUsIEdMX1NURU5DSUxfVEVTVClcbiAgc3RhdGVWYXJpYWJsZShTX1NURU5DSUxfTUFTSywgJ3N0ZW5jaWxNYXNrJywgLTEpXG4gIHN0YXRlVmFyaWFibGUoU19TVEVOQ0lMX0ZVTkMsICdzdGVuY2lsRnVuYycsIFtHTF9BTFdBWVMsIDAsIC0xXSlcbiAgc3RhdGVWYXJpYWJsZShTX1NURU5DSUxfT1BGUk9OVCwgJ3N0ZW5jaWxPcFNlcGFyYXRlJyxcbiAgICBbR0xfRlJPTlQsIEdMX0tFRVAsIEdMX0tFRVAsIEdMX0tFRVBdKVxuICBzdGF0ZVZhcmlhYmxlKFNfU1RFTkNJTF9PUEJBQ0ssICdzdGVuY2lsT3BTZXBhcmF0ZScsXG4gICAgW0dMX0JBQ0ssIEdMX0tFRVAsIEdMX0tFRVAsIEdMX0tFRVBdKVxuXG4gIC8vIFNjaXNzb3JcbiAgc3RhdGVGbGFnKFNfU0NJU1NPUl9FTkFCTEUsIEdMX1NDSVNTT1JfVEVTVClcbiAgc3RhdGVWYXJpYWJsZShTX1NDSVNTT1JfQk9YLCAnc2Npc3NvcicsXG4gICAgWzAsIDAsIGdsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodF0pXG5cbiAgLy8gVmlld3BvcnRcbiAgc3RhdGVWYXJpYWJsZShTX1ZJRVdQT1JULCBTX1ZJRVdQT1JULFxuICAgIFswLCAwLCBnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHRdKVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRU5WSVJPTk1FTlRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgc2hhcmVkU3RhdGUgPSB7XG4gICAgZ2w6IGdsLFxuICAgIGNvbnRleHQ6IGNvbnRleHRTdGF0ZSxcbiAgICBzdHJpbmdzOiBzdHJpbmdTdG9yZSxcbiAgICBuZXh0OiBuZXh0U3RhdGUsXG4gICAgY3VycmVudDogY3VycmVudFN0YXRlLFxuICAgIGRyYXc6IGRyYXdTdGF0ZSxcbiAgICBlbGVtZW50czogZWxlbWVudFN0YXRlLFxuICAgIGJ1ZmZlcjogYnVmZmVyU3RhdGUsXG4gICAgc2hhZGVyOiBzaGFkZXJTdGF0ZSxcbiAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVTdGF0ZS5zdGF0ZSxcbiAgICB2YW86IGF0dHJpYnV0ZVN0YXRlLFxuICAgIHVuaWZvcm1zOiB1bmlmb3JtU3RhdGUsXG4gICAgZnJhbWVidWZmZXI6IGZyYW1lYnVmZmVyU3RhdGUsXG4gICAgZXh0ZW5zaW9uczogZXh0ZW5zaW9ucyxcblxuICAgIHRpbWVyOiB0aW1lcixcbiAgICBpc0J1ZmZlckFyZ3M6IGlzQnVmZmVyQXJnc1xuICB9XG5cbiAgdmFyIHNoYXJlZENvbnN0YW50cyA9IHtcbiAgICBwcmltVHlwZXM6IHByaW1UeXBlcyxcbiAgICBjb21wYXJlRnVuY3M6IGNvbXBhcmVGdW5jcyxcbiAgICBibGVuZEZ1bmNzOiBibGVuZEZ1bmNzLFxuICAgIGJsZW5kRXF1YXRpb25zOiBibGVuZEVxdWF0aW9ucyxcbiAgICBzdGVuY2lsT3BzOiBzdGVuY2lsT3BzLFxuICAgIGdsVHlwZXM6IGdsVHlwZXMsXG4gICAgb3JpZW50YXRpb25UeXBlOiBvcmllbnRhdGlvblR5cGVcbiAgfVxuXG4gIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgIHNoYXJlZFN0YXRlLmlzQXJyYXlMaWtlID0gaXNBcnJheUxpa2VcbiAgfSlcblxuICBpZiAoZXh0RHJhd0J1ZmZlcnMpIHtcbiAgICBzaGFyZWRDb25zdGFudHMuYmFja0J1ZmZlciA9IFtHTF9CQUNLXVxuICAgIHNoYXJlZENvbnN0YW50cy5kcmF3QnVmZmVyID0gbG9vcChsaW1pdHMubWF4RHJhd2J1ZmZlcnMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzBdXG4gICAgICB9XG4gICAgICByZXR1cm4gbG9vcChpLCBmdW5jdGlvbiAoaikge1xuICAgICAgICByZXR1cm4gR0xfQ09MT1JfQVRUQUNITUVOVDAkMiArIGpcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHZhciBkcmF3Q2FsbENvdW50ZXIgPSAwXG4gIGZ1bmN0aW9uIGNyZWF0ZVJFR0xFbnZpcm9ubWVudCAoKSB7XG4gICAgdmFyIGVudiA9IGNyZWF0ZUVudmlyb25tZW50KClcbiAgICB2YXIgbGluayA9IGVudi5saW5rXG4gICAgdmFyIGdsb2JhbCA9IGVudi5nbG9iYWxcbiAgICBlbnYuaWQgPSBkcmF3Q2FsbENvdW50ZXIrK1xuXG4gICAgZW52LmJhdGNoSWQgPSAnMCdcblxuICAgIC8vIGxpbmsgc2hhcmVkIHN0YXRlXG4gICAgdmFyIFNIQVJFRCA9IGxpbmsoc2hhcmVkU3RhdGUpXG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWQgPSB7XG4gICAgICBwcm9wczogJ2EwJ1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhzaGFyZWRTdGF0ZSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgc2hhcmVkW3Byb3BdID0gZ2xvYmFsLmRlZihTSEFSRUQsICcuJywgcHJvcClcbiAgICB9KVxuXG4gICAgLy8gSW5qZWN0IHJ1bnRpbWUgYXNzZXJ0aW9uIHN0dWZmIGZvciBkZWJ1ZyBidWlsZHNcbiAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgIGVudi5DSEVDSyA9IGxpbmsoY2hlY2skMSlcbiAgICAgIGVudi5jb21tYW5kU3RyID0gY2hlY2skMS5ndWVzc0NvbW1hbmQoKVxuICAgICAgZW52LmNvbW1hbmQgPSBsaW5rKGVudi5jb21tYW5kU3RyKVxuICAgICAgZW52LmFzc2VydCA9IGZ1bmN0aW9uIChibG9jaywgcHJlZCwgbWVzc2FnZSkge1xuICAgICAgICBibG9jayhcbiAgICAgICAgICAnaWYoISgnLCBwcmVkLCAnKSknLFxuICAgICAgICAgIHRoaXMuQ0hFQ0ssICcuY29tbWFuZFJhaXNlKCcsIGxpbmsobWVzc2FnZSksICcsJywgdGhpcy5jb21tYW5kLCAnKTsnKVxuICAgICAgfVxuXG4gICAgICBzaGFyZWRDb25zdGFudHMuaW52YWxpZEJsZW5kQ29tYmluYXRpb25zID0gaW52YWxpZEJsZW5kQ29tYmluYXRpb25zXG4gICAgfSlcblxuICAgIC8vIENvcHkgR0wgc3RhdGUgdmFyaWFibGVzIG92ZXJcbiAgICB2YXIgbmV4dFZhcnMgPSBlbnYubmV4dCA9IHt9XG4gICAgdmFyIGN1cnJlbnRWYXJzID0gZW52LmN1cnJlbnQgPSB7fVxuICAgIE9iamVjdC5rZXlzKEdMX1ZBUklBQkxFUykuZm9yRWFjaChmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnRTdGF0ZVt2YXJpYWJsZV0pKSB7XG4gICAgICAgIG5leHRWYXJzW3ZhcmlhYmxlXSA9IGdsb2JhbC5kZWYoc2hhcmVkLm5leHQsICcuJywgdmFyaWFibGUpXG4gICAgICAgIGN1cnJlbnRWYXJzW3ZhcmlhYmxlXSA9IGdsb2JhbC5kZWYoc2hhcmVkLmN1cnJlbnQsICcuJywgdmFyaWFibGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIEluaXRpYWxpemUgc2hhcmVkIGNvbnN0YW50c1xuICAgIHZhciBjb25zdGFudHMgPSBlbnYuY29uc3RhbnRzID0ge31cbiAgICBPYmplY3Qua2V5cyhzaGFyZWRDb25zdGFudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIGNvbnN0YW50c1tuYW1lXSA9IGdsb2JhbC5kZWYoSlNPTi5zdHJpbmdpZnkoc2hhcmVkQ29uc3RhbnRzW25hbWVdKSlcbiAgICB9KVxuXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBjYWxsaW5nIGEgYmxvY2tcbiAgICBlbnYuaW52b2tlID0gZnVuY3Rpb24gKGJsb2NrLCB4KSB7XG4gICAgICBzd2l0Y2ggKHgudHlwZSkge1xuICAgICAgICBjYXNlIERZTl9GVU5DJDE6XG4gICAgICAgICAgdmFyIGFyZ0xpc3QgPSBbXG4gICAgICAgICAgICAndGhpcycsXG4gICAgICAgICAgICBzaGFyZWQuY29udGV4dCxcbiAgICAgICAgICAgIHNoYXJlZC5wcm9wcyxcbiAgICAgICAgICAgIGVudi5iYXRjaElkXG4gICAgICAgICAgXVxuICAgICAgICAgIHJldHVybiBibG9jay5kZWYoXG4gICAgICAgICAgICBsaW5rKHguZGF0YSksICcuY2FsbCgnLFxuICAgICAgICAgICAgYXJnTGlzdC5zbGljZSgwLCBNYXRoLm1heCh4LmRhdGEubGVuZ3RoICsgMSwgNCkpLFxuICAgICAgICAgICAgJyknKVxuICAgICAgICBjYXNlIERZTl9QUk9QJDE6XG4gICAgICAgICAgcmV0dXJuIGJsb2NrLmRlZihzaGFyZWQucHJvcHMsIHguZGF0YSlcbiAgICAgICAgY2FzZSBEWU5fQ09OVEVYVCQxOlxuICAgICAgICAgIHJldHVybiBibG9jay5kZWYoc2hhcmVkLmNvbnRleHQsIHguZGF0YSlcbiAgICAgICAgY2FzZSBEWU5fU1RBVEUkMTpcbiAgICAgICAgICByZXR1cm4gYmxvY2suZGVmKCd0aGlzJywgeC5kYXRhKVxuICAgICAgICBjYXNlIERZTl9USFVOSzpcbiAgICAgICAgICB4LmRhdGEuYXBwZW5kKGVudiwgYmxvY2spXG4gICAgICAgICAgcmV0dXJuIHguZGF0YS5yZWZcbiAgICAgICAgY2FzZSBEWU5fQ09OU1RBTlQkMTpcbiAgICAgICAgICByZXR1cm4geC5kYXRhLnRvU3RyaW5nKClcbiAgICAgICAgY2FzZSBEWU5fQVJSQVkkMTpcbiAgICAgICAgICByZXR1cm4geC5kYXRhLm1hcChmdW5jdGlvbiAoeSkge1xuICAgICAgICAgICAgcmV0dXJuIGVudi5pbnZva2UoYmxvY2ssIHkpXG4gICAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbnYuYXR0cmliQ2FjaGUgPSB7fVxuXG4gICAgdmFyIHNjb3BlQXR0cmlicyA9IHt9XG4gICAgZW52LnNjb3BlQXR0cmliID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBpZCA9IHN0cmluZ1N0b3JlLmlkKG5hbWUpXG4gICAgICBpZiAoaWQgaW4gc2NvcGVBdHRyaWJzKSB7XG4gICAgICAgIHJldHVybiBzY29wZUF0dHJpYnNbaWRdXG4gICAgICB9XG4gICAgICB2YXIgYmluZGluZyA9IGF0dHJpYnV0ZVN0YXRlLnNjb3BlW2lkXVxuICAgICAgaWYgKCFiaW5kaW5nKSB7XG4gICAgICAgIGJpbmRpbmcgPSBhdHRyaWJ1dGVTdGF0ZS5zY29wZVtpZF0gPSBuZXcgQXR0cmlidXRlUmVjb3JkKClcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBzY29wZUF0dHJpYnNbaWRdID0gbGluayhiaW5kaW5nKVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIHJldHVybiBlbnZcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUEFSU0lOR1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGZ1bmN0aW9uIHBhcnNlUHJvZmlsZSAob3B0aW9ucykge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY09wdGlvbnMgPSBvcHRpb25zLmR5bmFtaWNcblxuICAgIHZhciBwcm9maWxlRW5hYmxlXG4gICAgaWYgKFNfUFJPRklMRSBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICB2YXIgdmFsdWUgPSAhIXN0YXRpY09wdGlvbnNbU19QUk9GSUxFXVxuICAgICAgcHJvZmlsZUVuYWJsZSA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9KVxuICAgICAgcHJvZmlsZUVuYWJsZS5lbmFibGUgPSB2YWx1ZVxuICAgIH0gZWxzZSBpZiAoU19QUk9GSUxFIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY09wdGlvbnNbU19QUk9GSUxFXVxuICAgICAgcHJvZmlsZUVuYWJsZSA9IGNyZWF0ZUR5bmFtaWNEZWNsKGR5biwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgcmV0dXJuIGVudi5pbnZva2Uoc2NvcGUsIGR5bilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2ZpbGVFbmFibGVcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlRnJhbWVidWZmZXIgKG9wdGlvbnMsIGVudikge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY09wdGlvbnMgPSBvcHRpb25zLmR5bmFtaWNcblxuICAgIGlmIChTX0ZSQU1FQlVGRkVSIGluIHN0YXRpY09wdGlvbnMpIHtcbiAgICAgIHZhciBmcmFtZWJ1ZmZlciA9IHN0YXRpY09wdGlvbnNbU19GUkFNRUJVRkZFUl1cbiAgICAgIGlmIChmcmFtZWJ1ZmZlcikge1xuICAgICAgICBmcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyU3RhdGUuZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpXG4gICAgICAgIGNoZWNrJDEuY29tbWFuZChmcmFtZWJ1ZmZlciwgJ2ludmFsaWQgZnJhbWVidWZmZXIgb2JqZWN0JylcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgYmxvY2spIHtcbiAgICAgICAgICB2YXIgRlJBTUVCVUZGRVIgPSBlbnYubGluayhmcmFtZWJ1ZmZlcilcbiAgICAgICAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgICAgICAgIGJsb2NrLnNldChcbiAgICAgICAgICAgIHNoYXJlZC5mcmFtZWJ1ZmZlcixcbiAgICAgICAgICAgICcubmV4dCcsXG4gICAgICAgICAgICBGUkFNRUJVRkZFUilcbiAgICAgICAgICB2YXIgQ09OVEVYVCA9IHNoYXJlZC5jb250ZXh0XG4gICAgICAgICAgYmxvY2suc2V0KFxuICAgICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAgICcuJyArIFNfRlJBTUVCVUZGRVJfV0lEVEgsXG4gICAgICAgICAgICBGUkFNRUJVRkZFUiArICcud2lkdGgnKVxuICAgICAgICAgIGJsb2NrLnNldChcbiAgICAgICAgICAgIENPTlRFWFQsXG4gICAgICAgICAgICAnLicgKyBTX0ZSQU1FQlVGRkVSX0hFSUdIVCxcbiAgICAgICAgICAgIEZSQU1FQlVGRkVSICsgJy5oZWlnaHQnKVxuICAgICAgICAgIHJldHVybiBGUkFNRUJVRkZFUlxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICAgIHNoYXJlZC5mcmFtZWJ1ZmZlcixcbiAgICAgICAgICAgICcubmV4dCcsXG4gICAgICAgICAgICAnbnVsbCcpXG4gICAgICAgICAgdmFyIENPTlRFWFQgPSBzaGFyZWQuY29udGV4dFxuICAgICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICAgIENPTlRFWFQsXG4gICAgICAgICAgICAnLicgKyBTX0ZSQU1FQlVGRkVSX1dJRFRILFxuICAgICAgICAgICAgQ09OVEVYVCArICcuJyArIFNfRFJBV0lOR0JVRkZFUl9XSURUSClcbiAgICAgICAgICBzY29wZS5zZXQoXG4gICAgICAgICAgICBDT05URVhULFxuICAgICAgICAgICAgJy4nICsgU19GUkFNRUJVRkZFUl9IRUlHSFQsXG4gICAgICAgICAgICBDT05URVhUICsgJy4nICsgU19EUkFXSU5HQlVGRkVSX0hFSUdIVClcbiAgICAgICAgICByZXR1cm4gJ251bGwnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChTX0ZSQU1FQlVGRkVSIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY09wdGlvbnNbU19GUkFNRUJVRkZFUl1cbiAgICAgIHJldHVybiBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgIHZhciBGUkFNRUJVRkZFUl9GVU5DID0gZW52Lmludm9rZShzY29wZSwgZHluKVxuICAgICAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgICAgICB2YXIgRlJBTUVCVUZGRVJfU1RBVEUgPSBzaGFyZWQuZnJhbWVidWZmZXJcbiAgICAgICAgdmFyIEZSQU1FQlVGRkVSID0gc2NvcGUuZGVmKFxuICAgICAgICAgIEZSQU1FQlVGRkVSX1NUQVRFLCAnLmdldEZyYW1lYnVmZmVyKCcsIEZSQU1FQlVGRkVSX0ZVTkMsICcpJylcblxuICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgJyEnICsgRlJBTUVCVUZGRVJfRlVOQyArICd8fCcgKyBGUkFNRUJVRkZFUixcbiAgICAgICAgICAgICdpbnZhbGlkIGZyYW1lYnVmZmVyIG9iamVjdCcpXG4gICAgICAgIH0pXG5cbiAgICAgICAgc2NvcGUuc2V0KFxuICAgICAgICAgIEZSQU1FQlVGRkVSX1NUQVRFLFxuICAgICAgICAgICcubmV4dCcsXG4gICAgICAgICAgRlJBTUVCVUZGRVIpXG4gICAgICAgIHZhciBDT05URVhUID0gc2hhcmVkLmNvbnRleHRcbiAgICAgICAgc2NvcGUuc2V0KFxuICAgICAgICAgIENPTlRFWFQsXG4gICAgICAgICAgJy4nICsgU19GUkFNRUJVRkZFUl9XSURUSCxcbiAgICAgICAgICBGUkFNRUJVRkZFUiArICc/JyArIEZSQU1FQlVGRkVSICsgJy53aWR0aDonICtcbiAgICAgICAgICBDT05URVhUICsgJy4nICsgU19EUkFXSU5HQlVGRkVSX1dJRFRIKVxuICAgICAgICBzY29wZS5zZXQoXG4gICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAnLicgKyBTX0ZSQU1FQlVGRkVSX0hFSUdIVCxcbiAgICAgICAgICBGUkFNRUJVRkZFUiArXG4gICAgICAgICAgJz8nICsgRlJBTUVCVUZGRVIgKyAnLmhlaWdodDonICtcbiAgICAgICAgICBDT05URVhUICsgJy4nICsgU19EUkFXSU5HQlVGRkVSX0hFSUdIVClcbiAgICAgICAgcmV0dXJuIEZSQU1FQlVGRkVSXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVmlld3BvcnRTY2lzc29yIChvcHRpb25zLCBmcmFtZWJ1ZmZlciwgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgZnVuY3Rpb24gcGFyc2VCb3ggKHBhcmFtKSB7XG4gICAgICBpZiAocGFyYW0gaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICB2YXIgYm94ID0gc3RhdGljT3B0aW9uc1twYXJhbV1cbiAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZShib3gsICdvYmplY3QnLCAnaW52YWxpZCAnICsgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuXG4gICAgICAgIHZhciBpc1N0YXRpYyA9IHRydWVcbiAgICAgICAgdmFyIHggPSBib3gueCB8IDBcbiAgICAgICAgdmFyIHkgPSBib3gueSB8IDBcbiAgICAgICAgdmFyIHcsIGhcbiAgICAgICAgaWYgKCd3aWR0aCcgaW4gYm94KSB7XG4gICAgICAgICAgdyA9IGJveC53aWR0aCB8IDBcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQodyA+PSAwLCAnaW52YWxpZCAnICsgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzU3RhdGljID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2hlaWdodCcgaW4gYm94KSB7XG4gICAgICAgICAgaCA9IGJveC5oZWlnaHQgfCAwXG4gICAgICAgICAgY2hlY2skMS5jb21tYW5kKGggPj0gMCwgJ2ludmFsaWQgJyArIHBhcmFtLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc1N0YXRpYyA9IGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICAgICFpc1N0YXRpYyAmJiBmcmFtZWJ1ZmZlciAmJiBmcmFtZWJ1ZmZlci50aGlzRGVwLFxuICAgICAgICAgICFpc1N0YXRpYyAmJiBmcmFtZWJ1ZmZlciAmJiBmcmFtZWJ1ZmZlci5jb250ZXh0RGVwLFxuICAgICAgICAgICFpc1N0YXRpYyAmJiBmcmFtZWJ1ZmZlciAmJiBmcmFtZWJ1ZmZlci5wcm9wRGVwLFxuICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgICB2YXIgQ09OVEVYVCA9IGVudi5zaGFyZWQuY29udGV4dFxuICAgICAgICAgICAgdmFyIEJPWF9XID0gd1xuICAgICAgICAgICAgaWYgKCEoJ3dpZHRoJyBpbiBib3gpKSB7XG4gICAgICAgICAgICAgIEJPWF9XID0gc2NvcGUuZGVmKENPTlRFWFQsICcuJywgU19GUkFNRUJVRkZFUl9XSURUSCwgJy0nLCB4KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIEJPWF9IID0gaFxuICAgICAgICAgICAgaWYgKCEoJ2hlaWdodCcgaW4gYm94KSkge1xuICAgICAgICAgICAgICBCT1hfSCA9IHNjb3BlLmRlZihDT05URVhULCAnLicsIFNfRlJBTUVCVUZGRVJfSEVJR0hULCAnLScsIHkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW3gsIHksIEJPWF9XLCBCT1hfSF1cbiAgICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbiBkeW5hbWljT3B0aW9ucykge1xuICAgICAgICB2YXIgZHluQm94ID0gZHluYW1pY09wdGlvbnNbcGFyYW1dXG4gICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVEeW5hbWljRGVjbChkeW5Cb3gsIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgdmFyIEJPWCA9IGVudi5pbnZva2Uoc2NvcGUsIGR5bkJveClcblxuICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgQk9YICsgJyYmdHlwZW9mICcgKyBCT1ggKyAnPT09XCJvYmplY3RcIicsXG4gICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwYXJhbSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgdmFyIENPTlRFWFQgPSBlbnYuc2hhcmVkLmNvbnRleHRcbiAgICAgICAgICB2YXIgQk9YX1ggPSBzY29wZS5kZWYoQk9YLCAnLnh8MCcpXG4gICAgICAgICAgdmFyIEJPWF9ZID0gc2NvcGUuZGVmKEJPWCwgJy55fDAnKVxuICAgICAgICAgIHZhciBCT1hfVyA9IHNjb3BlLmRlZihcbiAgICAgICAgICAgICdcIndpZHRoXCIgaW4gJywgQk9YLCAnPycsIEJPWCwgJy53aWR0aHwwOicsXG4gICAgICAgICAgICAnKCcsIENPTlRFWFQsICcuJywgU19GUkFNRUJVRkZFUl9XSURUSCwgJy0nLCBCT1hfWCwgJyknKVxuICAgICAgICAgIHZhciBCT1hfSCA9IHNjb3BlLmRlZihcbiAgICAgICAgICAgICdcImhlaWdodFwiIGluICcsIEJPWCwgJz8nLCBCT1gsICcuaGVpZ2h0fDA6JyxcbiAgICAgICAgICAgICcoJywgQ09OVEVYVCwgJy4nLCBTX0ZSQU1FQlVGRkVSX0hFSUdIVCwgJy0nLCBCT1hfWSwgJyknKVxuXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICBCT1hfVyArICc+PTAmJicgK1xuICAgICAgICAgICAgICBCT1hfSCArICc+PTAnLFxuICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcGFyYW0pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiBbQk9YX1gsIEJPWF9ZLCBCT1hfVywgQk9YX0hdXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChmcmFtZWJ1ZmZlcikge1xuICAgICAgICAgIHJlc3VsdC50aGlzRGVwID0gcmVzdWx0LnRoaXNEZXAgfHwgZnJhbWVidWZmZXIudGhpc0RlcFxuICAgICAgICAgIHJlc3VsdC5jb250ZXh0RGVwID0gcmVzdWx0LmNvbnRleHREZXAgfHwgZnJhbWVidWZmZXIuY29udGV4dERlcFxuICAgICAgICAgIHJlc3VsdC5wcm9wRGVwID0gcmVzdWx0LnByb3BEZXAgfHwgZnJhbWVidWZmZXIucHJvcERlcFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gZWxzZSBpZiAoZnJhbWVidWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWNsYXJhdGlvbihcbiAgICAgICAgICBmcmFtZWJ1ZmZlci50aGlzRGVwLFxuICAgICAgICAgIGZyYW1lYnVmZmVyLmNvbnRleHREZXAsXG4gICAgICAgICAgZnJhbWVidWZmZXIucHJvcERlcCxcbiAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgICAgdmFyIENPTlRFWFQgPSBlbnYuc2hhcmVkLmNvbnRleHRcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIDAsIDAsXG4gICAgICAgICAgICAgIHNjb3BlLmRlZihDT05URVhULCAnLicsIFNfRlJBTUVCVUZGRVJfV0lEVEgpLFxuICAgICAgICAgICAgICBzY29wZS5kZWYoQ09OVEVYVCwgJy4nLCBTX0ZSQU1FQlVGRkVSX0hFSUdIVCldXG4gICAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHZpZXdwb3J0ID0gcGFyc2VCb3goU19WSUVXUE9SVClcblxuICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgdmFyIHByZXZWaWV3cG9ydCA9IHZpZXdwb3J0XG4gICAgICB2aWV3cG9ydCA9IG5ldyBEZWNsYXJhdGlvbihcbiAgICAgICAgdmlld3BvcnQudGhpc0RlcCxcbiAgICAgICAgdmlld3BvcnQuY29udGV4dERlcCxcbiAgICAgICAgdmlld3BvcnQucHJvcERlcCxcbiAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgVklFV1BPUlQgPSBwcmV2Vmlld3BvcnQuYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICAgICAgdmFyIENPTlRFWFQgPSBlbnYuc2hhcmVkLmNvbnRleHRcbiAgICAgICAgICBzY29wZS5zZXQoXG4gICAgICAgICAgICBDT05URVhULFxuICAgICAgICAgICAgJy4nICsgU19WSUVXUE9SVF9XSURUSCxcbiAgICAgICAgICAgIFZJRVdQT1JUWzJdKVxuICAgICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICAgIENPTlRFWFQsXG4gICAgICAgICAgICAnLicgKyBTX1ZJRVdQT1JUX0hFSUdIVCxcbiAgICAgICAgICAgIFZJRVdQT1JUWzNdKVxuICAgICAgICAgIHJldHVybiBWSUVXUE9SVFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2aWV3cG9ydDogdmlld3BvcnQsXG4gICAgICBzY2lzc29yX2JveDogcGFyc2VCb3goU19TQ0lTU09SX0JPWClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUF0dHJpYkxvY2F0aW9ucyAob3B0aW9ucywgYXR0cmlidXRlcykge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgc3RhdGljUHJvZ3JhbSA9XG4gICAgICB0eXBlb2Ygc3RhdGljT3B0aW9uc1tTX0ZSQUddID09PSAnc3RyaW5nJyAmJlxuICAgICAgdHlwZW9mIHN0YXRpY09wdGlvbnNbU19WRVJUXSA9PT0gJ3N0cmluZydcbiAgICBpZiAoc3RhdGljUHJvZ3JhbSkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMuZHluYW1pYykubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgdmFyIHN0YXRpY0F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLnN0YXRpY1xuICAgICAgdmFyIHNBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMoc3RhdGljQXR0cmlidXRlcylcbiAgICAgIGlmIChzQXR0cmlidXRlcy5sZW5ndGggPiAwICYmIHR5cGVvZiBzdGF0aWNBdHRyaWJ1dGVzW3NBdHRyaWJ1dGVzWzBdXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdmFyIGJpbmRpbmdzID0gW11cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzQXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGNoZWNrJDEodHlwZW9mIHN0YXRpY0F0dHJpYnV0ZXNbc0F0dHJpYnV0ZXNbaV1dID09PSAnbnVtYmVyJywgJ211c3Qgc3BlY2lmeSBhbGwgdmVydGV4IGF0dHJpYnV0ZSBsb2NhdGlvbnMgd2hlbiB1c2luZyB2YW9zJylcbiAgICAgICAgICBiaW5kaW5ncy5wdXNoKFtzdGF0aWNBdHRyaWJ1dGVzW3NBdHRyaWJ1dGVzW2ldXSB8IDAsIHNBdHRyaWJ1dGVzW2ldXSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmluZGluZ3NcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlUHJvZ3JhbSAob3B0aW9ucywgZW52LCBhdHRyaWJMb2NhdGlvbnMpIHtcbiAgICB2YXIgc3RhdGljT3B0aW9ucyA9IG9wdGlvbnMuc3RhdGljXG4gICAgdmFyIGR5bmFtaWNPcHRpb25zID0gb3B0aW9ucy5keW5hbWljXG5cbiAgICBmdW5jdGlvbiBwYXJzZVNoYWRlciAobmFtZSkge1xuICAgICAgaWYgKG5hbWUgaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICB2YXIgaWQgPSBzdHJpbmdTdG9yZS5pZChzdGF0aWNPcHRpb25zW25hbWVdKVxuICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaGFkZXJTdGF0ZS5zaGFkZXIoc2hhZGVyVHlwZVtuYW1lXSwgaWQsIGNoZWNrJDEuZ3Vlc3NDb21tYW5kKCkpXG4gICAgICAgIH0pXG4gICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gaWRcbiAgICAgICAgfSlcbiAgICAgICAgcmVzdWx0LmlkID0gaWRcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmIChuYW1lIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBkeW4gPSBkeW5hbWljT3B0aW9uc1tuYW1lXVxuICAgICAgICByZXR1cm4gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBzdHIgPSBlbnYuaW52b2tlKHNjb3BlLCBkeW4pXG4gICAgICAgICAgdmFyIGlkID0gc2NvcGUuZGVmKGVudi5zaGFyZWQuc3RyaW5ncywgJy5pZCgnLCBzdHIsICcpJylcbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNjb3BlKFxuICAgICAgICAgICAgICBlbnYuc2hhcmVkLnNoYWRlciwgJy5zaGFkZXIoJyxcbiAgICAgICAgICAgICAgc2hhZGVyVHlwZVtuYW1lXSwgJywnLFxuICAgICAgICAgICAgICBpZCwgJywnLFxuICAgICAgICAgICAgICBlbnYuY29tbWFuZCwgJyk7JylcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVybiBpZFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICB2YXIgZnJhZyA9IHBhcnNlU2hhZGVyKFNfRlJBRylcbiAgICB2YXIgdmVydCA9IHBhcnNlU2hhZGVyKFNfVkVSVClcblxuICAgIHZhciBwcm9ncmFtID0gbnVsbFxuICAgIHZhciBwcm9nVmFyXG4gICAgaWYgKGlzU3RhdGljKGZyYWcpICYmIGlzU3RhdGljKHZlcnQpKSB7XG4gICAgICBwcm9ncmFtID0gc2hhZGVyU3RhdGUucHJvZ3JhbSh2ZXJ0LmlkLCBmcmFnLmlkLCBudWxsLCBhdHRyaWJMb2NhdGlvbnMpXG4gICAgICBwcm9nVmFyID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICByZXR1cm4gZW52LmxpbmsocHJvZ3JhbSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dWYXIgPSBuZXcgRGVjbGFyYXRpb24oXG4gICAgICAgIChmcmFnICYmIGZyYWcudGhpc0RlcCkgfHwgKHZlcnQgJiYgdmVydC50aGlzRGVwKSxcbiAgICAgICAgKGZyYWcgJiYgZnJhZy5jb250ZXh0RGVwKSB8fCAodmVydCAmJiB2ZXJ0LmNvbnRleHREZXApLFxuICAgICAgICAoZnJhZyAmJiBmcmFnLnByb3BEZXApIHx8ICh2ZXJ0ICYmIHZlcnQucHJvcERlcCksXG4gICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgdmFyIFNIQURFUl9TVEFURSA9IGVudi5zaGFyZWQuc2hhZGVyXG4gICAgICAgICAgdmFyIGZyYWdJZFxuICAgICAgICAgIGlmIChmcmFnKSB7XG4gICAgICAgICAgICBmcmFnSWQgPSBmcmFnLmFwcGVuZChlbnYsIHNjb3BlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcmFnSWQgPSBzY29wZS5kZWYoU0hBREVSX1NUQVRFLCAnLicsIFNfRlJBRylcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHZlcnRJZFxuICAgICAgICAgIGlmICh2ZXJ0KSB7XG4gICAgICAgICAgICB2ZXJ0SWQgPSB2ZXJ0LmFwcGVuZChlbnYsIHNjb3BlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ZXJ0SWQgPSBzY29wZS5kZWYoU0hBREVSX1NUQVRFLCAnLicsIFNfVkVSVClcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHByb2dEZWYgPSBTSEFERVJfU1RBVEUgKyAnLnByb2dyYW0oJyArIHZlcnRJZCArICcsJyArIGZyYWdJZFxuICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcHJvZ0RlZiArPSAnLCcgKyBlbnYuY29tbWFuZFxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihwcm9nRGVmICsgJyknKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmcmFnOiBmcmFnLFxuICAgICAgdmVydDogdmVydCxcbiAgICAgIHByb2dWYXI6IHByb2dWYXIsXG4gICAgICBwcm9ncmFtOiBwcm9ncmFtXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VEcmF3IChvcHRpb25zLCBlbnYpIHtcbiAgICB2YXIgc3RhdGljT3B0aW9ucyA9IG9wdGlvbnMuc3RhdGljXG4gICAgdmFyIGR5bmFtaWNPcHRpb25zID0gb3B0aW9ucy5keW5hbWljXG5cbiAgICBmdW5jdGlvbiBwYXJzZUVsZW1lbnRzICgpIHtcbiAgICAgIGlmIChTX0VMRU1FTlRTIGluIHN0YXRpY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gc3RhdGljT3B0aW9uc1tTX0VMRU1FTlRTXVxuICAgICAgICBpZiAoaXNCdWZmZXJBcmdzKGVsZW1lbnRzKSkge1xuICAgICAgICAgIGVsZW1lbnRzID0gZWxlbWVudFN0YXRlLmdldEVsZW1lbnRzKGVsZW1lbnRTdGF0ZS5jcmVhdGUoZWxlbWVudHMsIHRydWUpKVxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRzKSB7XG4gICAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50U3RhdGUuZ2V0RWxlbWVudHMoZWxlbWVudHMpXG4gICAgICAgICAgY2hlY2skMS5jb21tYW5kKGVsZW1lbnRzLCAnaW52YWxpZCBlbGVtZW50cycsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gZW52LmxpbmsoZWxlbWVudHMpXG4gICAgICAgICAgICBlbnYuRUxFTUVOVFMgPSByZXN1bHRcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgICAgZW52LkVMRU1FTlRTID0gbnVsbFxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0pXG4gICAgICAgIHJlc3VsdC52YWx1ZSA9IGVsZW1lbnRzXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gZWxzZSBpZiAoU19FTEVNRU5UUyBpbiBkeW5hbWljT3B0aW9ucykge1xuICAgICAgICB2YXIgZHluID0gZHluYW1pY09wdGlvbnNbU19FTEVNRU5UU11cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5biwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuXG4gICAgICAgICAgdmFyIElTX0JVRkZFUl9BUkdTID0gc2hhcmVkLmlzQnVmZmVyQXJnc1xuICAgICAgICAgIHZhciBFTEVNRU5UX1NUQVRFID0gc2hhcmVkLmVsZW1lbnRzXG5cbiAgICAgICAgICB2YXIgZWxlbWVudERlZm4gPSBlbnYuaW52b2tlKHNjb3BlLCBkeW4pXG4gICAgICAgICAgdmFyIGVsZW1lbnRzID0gc2NvcGUuZGVmKCdudWxsJylcbiAgICAgICAgICB2YXIgZWxlbWVudFN0cmVhbSA9IHNjb3BlLmRlZihJU19CVUZGRVJfQVJHUywgJygnLCBlbGVtZW50RGVmbiwgJyknKVxuXG4gICAgICAgICAgdmFyIGlmdGUgPSBlbnYuY29uZChlbGVtZW50U3RyZWFtKVxuICAgICAgICAgICAgLnRoZW4oZWxlbWVudHMsICc9JywgRUxFTUVOVF9TVEFURSwgJy5jcmVhdGVTdHJlYW0oJywgZWxlbWVudERlZm4sICcpOycpXG4gICAgICAgICAgICAuZWxzZShlbGVtZW50cywgJz0nLCBFTEVNRU5UX1NUQVRFLCAnLmdldEVsZW1lbnRzKCcsIGVsZW1lbnREZWZuLCAnKTsnKVxuXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbnYuYXNzZXJ0KGlmdGUuZWxzZSxcbiAgICAgICAgICAgICAgJyEnICsgZWxlbWVudERlZm4gKyAnfHwnICsgZWxlbWVudHMsXG4gICAgICAgICAgICAgICdpbnZhbGlkIGVsZW1lbnRzJylcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgc2NvcGUuZW50cnkoaWZ0ZSlcbiAgICAgICAgICBzY29wZS5leGl0KFxuICAgICAgICAgICAgZW52LmNvbmQoZWxlbWVudFN0cmVhbSlcbiAgICAgICAgICAgICAgLnRoZW4oRUxFTUVOVF9TVEFURSwgJy5kZXN0cm95U3RyZWFtKCcsIGVsZW1lbnRzLCAnKTsnKSlcblxuICAgICAgICAgIGVudi5FTEVNRU5UUyA9IGVsZW1lbnRzXG5cbiAgICAgICAgICByZXR1cm4gZWxlbWVudHNcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudHMgPSBwYXJzZUVsZW1lbnRzKClcblxuICAgIGZ1bmN0aW9uIHBhcnNlUHJpbWl0aXZlICgpIHtcbiAgICAgIGlmIChTX1BSSU1JVElWRSBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBwcmltaXRpdmUgPSBzdGF0aWNPcHRpb25zW1NfUFJJTUlUSVZFXVxuICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIocHJpbWl0aXZlLCBwcmltVHlwZXMsICdpbnZhbGlkIHByaW1pdHZlJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgIHJldHVybiBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgcmV0dXJuIHByaW1UeXBlc1twcmltaXRpdmVdXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKFNfUFJJTUlUSVZFIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBkeW5QcmltaXRpdmUgPSBkeW5hbWljT3B0aW9uc1tTX1BSSU1JVElWRV1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5blByaW1pdGl2ZSwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgUFJJTV9UWVBFUyA9IGVudi5jb25zdGFudHMucHJpbVR5cGVzXG4gICAgICAgICAgdmFyIHByaW0gPSBlbnYuaW52b2tlKHNjb3BlLCBkeW5QcmltaXRpdmUpXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICBwcmltICsgJyBpbiAnICsgUFJJTV9UWVBFUyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgcHJpbWl0aXZlLCBtdXN0IGJlIG9uZSBvZiAnICsgT2JqZWN0LmtleXMocHJpbVR5cGVzKSlcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoUFJJTV9UWVBFUywgJ1snLCBwcmltLCAnXScpXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChpc1N0YXRpYyhlbGVtZW50cykpIHtcbiAgICAgICAgICBpZiAoZWxlbWVudHMudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoZW52LkVMRU1FTlRTLCAnLnByaW1UeXBlJylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSSUFOR0xFUyQxXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICAgICAgZWxlbWVudHMudGhpc0RlcCxcbiAgICAgICAgICAgIGVsZW1lbnRzLmNvbnRleHREZXAsXG4gICAgICAgICAgICBlbGVtZW50cy5wcm9wRGVwLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gZW52LkVMRU1FTlRTXG4gICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoZWxlbWVudHMsICc/JywgZWxlbWVudHMsICcucHJpbVR5cGU6JywgR0xfVFJJQU5HTEVTJDEpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW0gKHBhcmFtLCBpc09mZnNldCkge1xuICAgICAgaWYgKHBhcmFtIGluIHN0YXRpY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc3RhdGljT3B0aW9uc1twYXJhbV0gfCAwXG4gICAgICAgIGNoZWNrJDEuY29tbWFuZCghaXNPZmZzZXQgfHwgdmFsdWUgPj0gMCwgJ2ludmFsaWQgJyArIHBhcmFtLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICBpZiAoaXNPZmZzZXQpIHtcbiAgICAgICAgICAgIGVudi5PRkZTRVQgPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIGR5blZhbHVlID0gZHluYW1pY09wdGlvbnNbcGFyYW1dXG4gICAgICAgIHJldHVybiBjcmVhdGVEeW5hbWljRGVjbChkeW5WYWx1ZSwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gZW52Lmludm9rZShzY29wZSwgZHluVmFsdWUpXG4gICAgICAgICAgaWYgKGlzT2Zmc2V0KSB7XG4gICAgICAgICAgICBlbnYuT0ZGU0VUID0gcmVzdWx0XG4gICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICByZXN1bHQgKyAnPj0wJyxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcGFyYW0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGlzT2Zmc2V0ICYmIGVsZW1lbnRzKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgZW52Lk9GRlNFVCA9ICcwJ1xuICAgICAgICAgIHJldHVybiAwXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHZhciBPRkZTRVQgPSBwYXJzZVBhcmFtKFNfT0ZGU0VULCB0cnVlKVxuXG4gICAgZnVuY3Rpb24gcGFyc2VWZXJ0Q291bnQgKCkge1xuICAgICAgaWYgKFNfQ09VTlQgaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICB2YXIgY291bnQgPSBzdGF0aWNPcHRpb25zW1NfQ09VTlRdIHwgMFxuICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgdHlwZW9mIGNvdW50ID09PSAnbnVtYmVyJyAmJiBjb3VudCA+PSAwLCAnaW52YWxpZCB2ZXJ0ZXggY291bnQnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb3VudFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChTX0NPVU5UIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBkeW5Db3VudCA9IGR5bmFtaWNPcHRpb25zW1NfQ09VTlRdXG4gICAgICAgIHJldHVybiBjcmVhdGVEeW5hbWljRGVjbChkeW5Db3VudCwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gZW52Lmludm9rZShzY29wZSwgZHluQ291bnQpXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAndHlwZW9mICcgKyByZXN1bHQgKyAnPT09XCJudW1iZXJcIiYmJyArXG4gICAgICAgICAgICAgIHJlc3VsdCArICc+PTAmJicgK1xuICAgICAgICAgICAgICByZXN1bHQgKyAnPT09KCcgKyByZXN1bHQgKyAnfDApJyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgdmVydGV4IGNvdW50JylcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljKGVsZW1lbnRzKSkge1xuICAgICAgICAgIGlmIChlbGVtZW50cykge1xuICAgICAgICAgICAgaWYgKE9GRlNFVCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICAgIE9GRlNFVC50aGlzRGVwLFxuICAgICAgICAgICAgICAgIE9GRlNFVC5jb250ZXh0RGVwLFxuICAgICAgICAgICAgICAgIE9GRlNFVC5wcm9wRGVwLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gc2NvcGUuZGVmKFxuICAgICAgICAgICAgICAgICAgICBlbnYuRUxFTUVOVFMsICcudmVydENvdW50LScsIGVudi5PRkZTRVQpXG5cbiAgICAgICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArICc+PTAnLFxuICAgICAgICAgICAgICAgICAgICAgICdpbnZhbGlkIHZlcnRleCBvZmZzZXQvZWxlbWVudCBidWZmZXIgdG9vIHNtYWxsJylcbiAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKGVudi5FTEVNRU5UUywgJy52ZXJ0Q291bnQnKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXN1bHQuTUlTU0lORyA9IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB2YXJpYWJsZSA9IG5ldyBEZWNsYXJhdGlvbihcbiAgICAgICAgICAgIGVsZW1lbnRzLnRoaXNEZXAgfHwgT0ZGU0VULnRoaXNEZXAsXG4gICAgICAgICAgICBlbGVtZW50cy5jb250ZXh0RGVwIHx8IE9GRlNFVC5jb250ZXh0RGVwLFxuICAgICAgICAgICAgZWxlbWVudHMucHJvcERlcCB8fCBPRkZTRVQucHJvcERlcCxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IGVudi5FTEVNRU5UU1xuICAgICAgICAgICAgICBpZiAoZW52Lk9GRlNFVCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoZWxlbWVudHMsICc/JywgZWxlbWVudHMsICcudmVydENvdW50LScsXG4gICAgICAgICAgICAgICAgICBlbnYuT0ZGU0VULCAnOi0xJylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKGVsZW1lbnRzLCAnPycsIGVsZW1lbnRzLCAnLnZlcnRDb3VudDotMScpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyaWFibGUuRFlOQU1JQyA9IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVybiB2YXJpYWJsZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgICBwcmltaXRpdmU6IHBhcnNlUHJpbWl0aXZlKCksXG4gICAgICBjb3VudDogcGFyc2VWZXJ0Q291bnQoKSxcbiAgICAgIGluc3RhbmNlczogcGFyc2VQYXJhbShTX0lOU1RBTkNFUywgZmFsc2UpLFxuICAgICAgb2Zmc2V0OiBPRkZTRVRcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUdMU3RhdGUgKG9wdGlvbnMsIGVudikge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY09wdGlvbnMgPSBvcHRpb25zLmR5bmFtaWNcblxuICAgIHZhciBTVEFURSA9IHt9XG5cbiAgICBHTF9TVEFURV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICB2YXIgcGFyYW0gPSBwcm9wTmFtZShwcm9wKVxuXG4gICAgICBmdW5jdGlvbiBwYXJzZVBhcmFtIChwYXJzZVN0YXRpYywgcGFyc2VEeW5hbWljKSB7XG4gICAgICAgIGlmIChwcm9wIGluIHN0YXRpY09wdGlvbnMpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZVN0YXRpYyhzdGF0aWNPcHRpb25zW3Byb3BdKVxuICAgICAgICAgIFNUQVRFW3BhcmFtXSA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICAgICAgdmFyIGR5biA9IGR5bmFtaWNPcHRpb25zW3Byb3BdXG4gICAgICAgICAgU1RBVEVbcGFyYW1dID0gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRHluYW1pYyhlbnYsIHNjb3BlLCBlbnYuaW52b2tlKHNjb3BlLCBkeW4pKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChwcm9wKSB7XG4gICAgICAgIGNhc2UgU19DVUxMX0VOQUJMRTpcbiAgICAgICAgY2FzZSBTX0JMRU5EX0VOQUJMRTpcbiAgICAgICAgY2FzZSBTX0RJVEhFUjpcbiAgICAgICAgY2FzZSBTX1NURU5DSUxfRU5BQkxFOlxuICAgICAgICBjYXNlIFNfREVQVEhfRU5BQkxFOlxuICAgICAgICBjYXNlIFNfU0NJU1NPUl9FTkFCTEU6XG4gICAgICAgIGNhc2UgU19QT0xZR09OX09GRlNFVF9FTkFCTEU6XG4gICAgICAgIGNhc2UgU19TQU1QTEVfQUxQSEE6XG4gICAgICAgIGNhc2UgU19TQU1QTEVfRU5BQkxFOlxuICAgICAgICBjYXNlIFNfREVQVEhfTUFTSzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHZhbHVlLCAnYm9vbGVhbicsIHByb3AsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgICd0eXBlb2YgJyArIHZhbHVlICsgJz09PVwiYm9vbGVhblwiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGZsYWcgJyArIHByb3AsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0RFUFRIX0ZVTkM6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKHZhbHVlLCBjb21wYXJlRnVuY3MsICdpbnZhbGlkICcgKyBwcm9wLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVGdW5jc1t2YWx1ZV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFyIENPTVBBUkVfRlVOQ1MgPSBlbnYuY29uc3RhbnRzLmNvbXBhcmVGdW5jc1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnIGluICcgKyBDT01QQVJFX0ZVTkNTLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHByb3AgKyAnLCBtdXN0IGJlIG9uZSBvZiAnICsgT2JqZWN0LmtleXMoY29tcGFyZUZ1bmNzKSlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihDT01QQVJFX0ZVTkNTLCAnWycsIHZhbHVlLCAnXScpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGNhc2UgU19ERVBUSF9SQU5HRTpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgdmFsdWUubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlWzBdID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZVsxXSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZVswXSA8PSB2YWx1ZVsxXSxcbiAgICAgICAgICAgICAgICAnZGVwdGggcmFuZ2UgaXMgMmQgYXJyYXknLFxuICAgICAgICAgICAgICAgIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIGVudi5zaGFyZWQuaXNBcnJheUxpa2UgKyAnKCcgKyB2YWx1ZSArICcpJiYnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJy5sZW5ndGg9PT0yJiYnICtcbiAgICAgICAgICAgICAgICAgICd0eXBlb2YgJyArIHZhbHVlICsgJ1swXT09PVwibnVtYmVyXCImJicgK1xuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnWzFdPT09XCJudW1iZXJcIiYmJyArXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICdbMF08PScgKyB2YWx1ZSArICdbMV0nLFxuICAgICAgICAgICAgICAgICAgJ2RlcHRoIHJhbmdlIG11c3QgYmUgYSAyZCBhcnJheScpXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgdmFyIFpfTkVBUiA9IHNjb3BlLmRlZignKycsIHZhbHVlLCAnWzBdJylcbiAgICAgICAgICAgICAgdmFyIFpfRkFSID0gc2NvcGUuZGVmKCcrJywgdmFsdWUsICdbMV0nKVxuICAgICAgICAgICAgICByZXR1cm4gW1pfTkVBUiwgWl9GQVJdXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGNhc2UgU19CTEVORF9GVU5DOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdvYmplY3QnLCAnYmxlbmQuZnVuYycsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICB2YXIgc3JjUkdCID0gKCdzcmNSR0InIGluIHZhbHVlID8gdmFsdWUuc3JjUkdCIDogdmFsdWUuc3JjKVxuICAgICAgICAgICAgICB2YXIgc3JjQWxwaGEgPSAoJ3NyY0FscGhhJyBpbiB2YWx1ZSA/IHZhbHVlLnNyY0FscGhhIDogdmFsdWUuc3JjKVxuICAgICAgICAgICAgICB2YXIgZHN0UkdCID0gKCdkc3RSR0InIGluIHZhbHVlID8gdmFsdWUuZHN0UkdCIDogdmFsdWUuZHN0KVxuICAgICAgICAgICAgICB2YXIgZHN0QWxwaGEgPSAoJ2RzdEFscGhhJyBpbiB2YWx1ZSA/IHZhbHVlLmRzdEFscGhhIDogdmFsdWUuZHN0KVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoc3JjUkdCLCBibGVuZEZ1bmNzLCBwYXJhbSArICcuc3JjUkdCJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihzcmNBbHBoYSwgYmxlbmRGdW5jcywgcGFyYW0gKyAnLnNyY0FscGhhJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihkc3RSR0IsIGJsZW5kRnVuY3MsIHBhcmFtICsgJy5kc3RSR0InLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKGRzdEFscGhhLCBibGVuZEZ1bmNzLCBwYXJhbSArICcuZHN0QWxwaGEnLCBlbnYuY29tbWFuZFN0cilcblxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgKGludmFsaWRCbGVuZENvbWJpbmF0aW9ucy5pbmRleE9mKHNyY1JHQiArICcsICcgKyBkc3RSR0IpID09PSAtMSksXG4gICAgICAgICAgICAgICAgJ3VuYWxsb3dlZCBibGVuZGluZyBjb21iaW5hdGlvbiAoc3JjUkdCLCBkc3RSR0IpID0gKCcgKyBzcmNSR0IgKyAnLCAnICsgZHN0UkdCICsgJyknLCBlbnYuY29tbWFuZFN0cilcblxuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGJsZW5kRnVuY3Nbc3JjUkdCXSxcbiAgICAgICAgICAgICAgICBibGVuZEZ1bmNzW2RzdFJHQl0sXG4gICAgICAgICAgICAgICAgYmxlbmRGdW5jc1tzcmNBbHBoYV0sXG4gICAgICAgICAgICAgICAgYmxlbmRGdW5jc1tkc3RBbHBoYV1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgQkxFTkRfRlVOQ1MgPSBlbnYuY29uc3RhbnRzLmJsZW5kRnVuY3NcblxuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnJiZ0eXBlb2YgJyArIHZhbHVlICsgJz09PVwib2JqZWN0XCInLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgYmxlbmQgZnVuYywgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWQgKHByZWZpeCwgc3VmZml4KSB7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmMgPSBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgICAnXCInLCBwcmVmaXgsIHN1ZmZpeCwgJ1wiIGluICcsIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgJz8nLCB2YWx1ZSwgJy4nLCBwcmVmaXgsIHN1ZmZpeCxcbiAgICAgICAgICAgICAgICAgICc6JywgdmFsdWUsICcuJywgcHJlZml4KVxuXG4gICAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgICBmdW5jICsgJyBpbiAnICsgQkxFTkRfRlVOQ1MsXG4gICAgICAgICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwcm9wICsgJy4nICsgcHJlZml4ICsgc3VmZml4ICsgJywgbXVzdCBiZSBvbmUgb2YgJyArIE9iamVjdC5rZXlzKGJsZW5kRnVuY3MpKVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIHNyY1JHQiA9IHJlYWQoJ3NyYycsICdSR0InKVxuICAgICAgICAgICAgICB2YXIgZHN0UkdCID0gcmVhZCgnZHN0JywgJ1JHQicpXG5cbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIElOVkFMSURfQkxFTkRfQ09NQklOQVRJT05TID0gZW52LmNvbnN0YW50cy5pbnZhbGlkQmxlbmRDb21iaW5hdGlvbnNcblxuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICBJTlZBTElEX0JMRU5EX0NPTUJJTkFUSU9OUyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnLmluZGV4T2YoJyArIHNyY1JHQiArICcrXCIsIFwiKycgKyBkc3RSR0IgKyAnKSA9PT0gLTEgJyxcbiAgICAgICAgICAgICAgICAgICd1bmFsbG93ZWQgYmxlbmRpbmcgY29tYmluYXRpb24gZm9yIChzcmNSR0IsIGRzdFJHQiknXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIHZhciBTUkNfUkdCID0gc2NvcGUuZGVmKEJMRU5EX0ZVTkNTLCAnWycsIHNyY1JHQiwgJ10nKVxuICAgICAgICAgICAgICB2YXIgU1JDX0FMUEhBID0gc2NvcGUuZGVmKEJMRU5EX0ZVTkNTLCAnWycsIHJlYWQoJ3NyYycsICdBbHBoYScpLCAnXScpXG4gICAgICAgICAgICAgIHZhciBEU1RfUkdCID0gc2NvcGUuZGVmKEJMRU5EX0ZVTkNTLCAnWycsIGRzdFJHQiwgJ10nKVxuICAgICAgICAgICAgICB2YXIgRFNUX0FMUEhBID0gc2NvcGUuZGVmKEJMRU5EX0ZVTkNTLCAnWycsIHJlYWQoJ2RzdCcsICdBbHBoYScpLCAnXScpXG5cbiAgICAgICAgICAgICAgcmV0dXJuIFtTUkNfUkdCLCBEU1RfUkdCLCBTUkNfQUxQSEEsIERTVF9BTFBIQV1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0JMRU5EX0VRVUFUSU9OOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKHZhbHVlLCBibGVuZEVxdWF0aW9ucywgJ2ludmFsaWQgJyArIHByb3AsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICBibGVuZEVxdWF0aW9uc1t2YWx1ZV0sXG4gICAgICAgICAgICAgICAgICBibGVuZEVxdWF0aW9uc1t2YWx1ZV1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihcbiAgICAgICAgICAgICAgICAgIHZhbHVlLnJnYiwgYmxlbmRFcXVhdGlvbnMsIHByb3AgKyAnLnJnYicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihcbiAgICAgICAgICAgICAgICAgIHZhbHVlLmFscGhhLCBibGVuZEVxdWF0aW9ucywgcHJvcCArICcuYWxwaGEnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgYmxlbmRFcXVhdGlvbnNbdmFsdWUucmdiXSxcbiAgICAgICAgICAgICAgICAgIGJsZW5kRXF1YXRpb25zW3ZhbHVlLmFscGhhXVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRSYWlzZSgnaW52YWxpZCBibGVuZC5lcXVhdGlvbicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgIHZhciBCTEVORF9FUVVBVElPTlMgPSBlbnYuY29uc3RhbnRzLmJsZW5kRXF1YXRpb25zXG5cbiAgICAgICAgICAgICAgdmFyIFJHQiA9IHNjb3BlLmRlZigpXG4gICAgICAgICAgICAgIHZhciBBTFBIQSA9IHNjb3BlLmRlZigpXG5cbiAgICAgICAgICAgICAgdmFyIGlmdGUgPSBlbnYuY29uZCgndHlwZW9mICcsIHZhbHVlLCAnPT09XCJzdHJpbmdcIicpXG5cbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tQcm9wIChibG9jaywgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoYmxvY2ssXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICsgJyBpbiAnICsgQkxFTkRfRVFVQVRJT05TLFxuICAgICAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgbmFtZSArICcsIG11c3QgYmUgb25lIG9mICcgKyBPYmplY3Qua2V5cyhibGVuZEVxdWF0aW9ucykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoZWNrUHJvcChpZnRlLnRoZW4sIHByb3AsIHZhbHVlKVxuXG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChpZnRlLmVsc2UsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcmJnR5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJvYmplY3RcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcHJvcClcbiAgICAgICAgICAgICAgICBjaGVja1Byb3AoaWZ0ZS5lbHNlLCBwcm9wICsgJy5yZ2InLCB2YWx1ZSArICcucmdiJylcbiAgICAgICAgICAgICAgICBjaGVja1Byb3AoaWZ0ZS5lbHNlLCBwcm9wICsgJy5hbHBoYScsIHZhbHVlICsgJy5hbHBoYScpXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgaWZ0ZS50aGVuKFxuICAgICAgICAgICAgICAgIFJHQiwgJz0nLCBBTFBIQSwgJz0nLCBCTEVORF9FUVVBVElPTlMsICdbJywgdmFsdWUsICddOycpXG4gICAgICAgICAgICAgIGlmdGUuZWxzZShcbiAgICAgICAgICAgICAgICBSR0IsICc9JywgQkxFTkRfRVFVQVRJT05TLCAnWycsIHZhbHVlLCAnLnJnYl07JyxcbiAgICAgICAgICAgICAgICBBTFBIQSwgJz0nLCBCTEVORF9FUVVBVElPTlMsICdbJywgdmFsdWUsICcuYWxwaGFdOycpXG5cbiAgICAgICAgICAgICAgc2NvcGUoaWZ0ZSlcblxuICAgICAgICAgICAgICByZXR1cm4gW1JHQiwgQUxQSEFdXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGNhc2UgU19CTEVORF9DT0xPUjpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgdmFsdWUubGVuZ3RoID09PSA0LFxuICAgICAgICAgICAgICAgICdibGVuZC5jb2xvciBtdXN0IGJlIGEgNGQgYXJyYXknLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIGxvb3AoNCwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gK3ZhbHVlW2ldXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICBlbnYuc2hhcmVkLmlzQXJyYXlMaWtlICsgJygnICsgdmFsdWUgKyAnKSYmJyArXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcubGVuZ3RoPT09NCcsXG4gICAgICAgICAgICAgICAgICAnYmxlbmQuY29sb3IgbXVzdCBiZSBhIDRkIGFycmF5JylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmV0dXJuIGxvb3AoNCwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKCcrJywgdmFsdWUsICdbJywgaSwgJ10nKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfU1RFTkNJTF9NQVNLOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdudW1iZXInLCBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZSB8IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgICd0eXBlb2YgJyArIHZhbHVlICsgJz09PVwibnVtYmVyXCInLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgc3RlbmNpbC5tYXNrJylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZih2YWx1ZSwgJ3wwJylcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX1NURU5DSUxfRlVOQzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHZhbHVlLCAnb2JqZWN0JywgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICB2YXIgY21wID0gdmFsdWUuY21wIHx8ICdrZWVwJ1xuICAgICAgICAgICAgICB2YXIgcmVmID0gdmFsdWUucmVmIHx8IDBcbiAgICAgICAgICAgICAgdmFyIG1hc2sgPSAnbWFzaycgaW4gdmFsdWUgPyB2YWx1ZS5tYXNrIDogLTFcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKGNtcCwgY29tcGFyZUZ1bmNzLCBwcm9wICsgJy5jbXAnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZShyZWYsICdudW1iZXInLCBwcm9wICsgJy5yZWYnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZShtYXNrLCAnbnVtYmVyJywgcHJvcCArICcubWFzaycsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGNvbXBhcmVGdW5jc1tjbXBdLFxuICAgICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgICBtYXNrXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFyIENPTVBBUkVfRlVOQ1MgPSBlbnYuY29uc3RhbnRzLmNvbXBhcmVGdW5jc1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3NlcnQgKCkge1xuICAgICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsICcnKSxcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgc3RlbmNpbC5mdW5jJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNzZXJ0KHZhbHVlICsgJyYmdHlwZW9mICcsIHZhbHVlLCAnPT09XCJvYmplY3RcIicpXG4gICAgICAgICAgICAgICAgYXNzZXJ0KCchKFwiY21wXCIgaW4gJywgdmFsdWUsICcpfHwoJyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLCAnLmNtcCBpbiAnLCBDT01QQVJFX0ZVTkNTLCAnKScpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHZhciBjbXAgPSBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgJ1wiY21wXCIgaW4gJywgdmFsdWUsXG4gICAgICAgICAgICAgICAgJz8nLCBDT01QQVJFX0ZVTkNTLCAnWycsIHZhbHVlLCAnLmNtcF0nLFxuICAgICAgICAgICAgICAgICc6JywgR0xfS0VFUClcbiAgICAgICAgICAgICAgdmFyIHJlZiA9IHNjb3BlLmRlZih2YWx1ZSwgJy5yZWZ8MCcpXG4gICAgICAgICAgICAgIHZhciBtYXNrID0gc2NvcGUuZGVmKFxuICAgICAgICAgICAgICAgICdcIm1hc2tcIiBpbiAnLCB2YWx1ZSxcbiAgICAgICAgICAgICAgICAnPycsIHZhbHVlLCAnLm1hc2t8MDotMScpXG4gICAgICAgICAgICAgIHJldHVybiBbY21wLCByZWYsIG1hc2tdXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGNhc2UgU19TVEVOQ0lMX09QRlJPTlQ6XG4gICAgICAgIGNhc2UgU19TVEVOQ0lMX09QQkFDSzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHZhbHVlLCAnb2JqZWN0JywgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICB2YXIgZmFpbCA9IHZhbHVlLmZhaWwgfHwgJ2tlZXAnXG4gICAgICAgICAgICAgIHZhciB6ZmFpbCA9IHZhbHVlLnpmYWlsIHx8ICdrZWVwJ1xuICAgICAgICAgICAgICB2YXIgenBhc3MgPSB2YWx1ZS56cGFzcyB8fCAna2VlcCdcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKGZhaWwsIHN0ZW5jaWxPcHMsIHByb3AgKyAnLmZhaWwnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKHpmYWlsLCBzdGVuY2lsT3BzLCBwcm9wICsgJy56ZmFpbCcsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoenBhc3MsIHN0ZW5jaWxPcHMsIHByb3AgKyAnLnpwYXNzJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgcHJvcCA9PT0gU19TVEVOQ0lMX09QQkFDSyA/IEdMX0JBQ0sgOiBHTF9GUk9OVCxcbiAgICAgICAgICAgICAgICBzdGVuY2lsT3BzW2ZhaWxdLFxuICAgICAgICAgICAgICAgIHN0ZW5jaWxPcHNbemZhaWxdLFxuICAgICAgICAgICAgICAgIHN0ZW5jaWxPcHNbenBhc3NdXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFyIFNURU5DSUxfT1BTID0gZW52LmNvbnN0YW50cy5zdGVuY2lsT3BzXG5cbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJyYmdHlwZW9mICcgKyB2YWx1ZSArICc9PT1cIm9iamVjdFwiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwcm9wKVxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWQgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICAgICchKFwiJyArIG5hbWUgKyAnXCIgaW4gJyArIHZhbHVlICsgJyl8fCcgK1xuICAgICAgICAgICAgICAgICAgICAnKCcgKyB2YWx1ZSArICcuJyArIG5hbWUgKyAnIGluICcgKyBTVEVOQ0lMX09QUyArICcpJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHByb3AgKyAnLicgKyBuYW1lICsgJywgbXVzdCBiZSBvbmUgb2YgJyArIE9iamVjdC5rZXlzKHN0ZW5jaWxPcHMpKVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKFxuICAgICAgICAgICAgICAgICAgJ1wiJywgbmFtZSwgJ1wiIGluICcsIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgJz8nLCBTVEVOQ0lMX09QUywgJ1snLCB2YWx1ZSwgJy4nLCBuYW1lLCAnXTonLFxuICAgICAgICAgICAgICAgICAgR0xfS0VFUClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgcHJvcCA9PT0gU19TVEVOQ0lMX09QQkFDSyA/IEdMX0JBQ0sgOiBHTF9GUk9OVCxcbiAgICAgICAgICAgICAgICByZWFkKCdmYWlsJyksXG4gICAgICAgICAgICAgICAgcmVhZCgnemZhaWwnKSxcbiAgICAgICAgICAgICAgICByZWFkKCd6cGFzcycpXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX1BPTFlHT05fT0ZGU0VUX09GRlNFVDpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHZhbHVlLCAnb2JqZWN0JywgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICB2YXIgZmFjdG9yID0gdmFsdWUuZmFjdG9yIHwgMFxuICAgICAgICAgICAgICB2YXIgdW5pdHMgPSB2YWx1ZS51bml0cyB8IDBcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZShmYWN0b3IsICdudW1iZXInLCBwYXJhbSArICcuZmFjdG9yJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodW5pdHMsICdudW1iZXInLCBwYXJhbSArICcudW5pdHMnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIFtmYWN0b3IsIHVuaXRzXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnJiZ0eXBlb2YgJyArIHZhbHVlICsgJz09PVwib2JqZWN0XCInLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHByb3ApXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgdmFyIEZBQ1RPUiA9IHNjb3BlLmRlZih2YWx1ZSwgJy5mYWN0b3J8MCcpXG4gICAgICAgICAgICAgIHZhciBVTklUUyA9IHNjb3BlLmRlZih2YWx1ZSwgJy51bml0c3wwJylcblxuICAgICAgICAgICAgICByZXR1cm4gW0ZBQ1RPUiwgVU5JVFNdXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGNhc2UgU19DVUxMX0ZBQ0U6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFyIGZhY2UgPSAwXG4gICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ2Zyb250Jykge1xuICAgICAgICAgICAgICAgIGZhY2UgPSBHTF9GUk9OVFxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnYmFjaycpIHtcbiAgICAgICAgICAgICAgICBmYWNlID0gR0xfQkFDS1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZCghIWZhY2UsIHBhcmFtLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIGZhY2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJz09PVwiZnJvbnRcInx8JyArXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICc9PT1cImJhY2tcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBjdWxsLmZhY2UnKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKHZhbHVlLCAnPT09XCJmcm9udFwiPycsIEdMX0ZST05ULCAnOicsIEdMX0JBQ0spXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGNhc2UgU19MSU5FX1dJRFRIOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgdmFsdWUgPj0gbGltaXRzLmxpbmVXaWR0aERpbXNbMF0gJiZcbiAgICAgICAgICAgICAgICB2YWx1ZSA8PSBsaW1pdHMubGluZVdpZHRoRGltc1sxXSxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBsaW5lIHdpZHRoLCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIGJldHdlZW4gJyArXG4gICAgICAgICAgICAgICAgbGltaXRzLmxpbmVXaWR0aERpbXNbMF0gKyAnIGFuZCAnICsgbGltaXRzLmxpbmVXaWR0aERpbXNbMV0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgICd0eXBlb2YgJyArIHZhbHVlICsgJz09PVwibnVtYmVyXCImJicgK1xuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnPj0nICsgbGltaXRzLmxpbmVXaWR0aERpbXNbMF0gKyAnJiYnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJzw9JyArIGxpbWl0cy5saW5lV2lkdGhEaW1zWzFdLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgbGluZSB3aWR0aCcpXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGNhc2UgU19GUk9OVF9GQUNFOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcih2YWx1ZSwgb3JpZW50YXRpb25UeXBlLCBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiBvcmllbnRhdGlvblR5cGVbdmFsdWVdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICc9PT1cImN3XCJ8fCcgK1xuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnPT09XCJjY3dcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBmcm9udEZhY2UsIG11c3QgYmUgb25lIG9mIGN3LGNjdycpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYodmFsdWUgKyAnPT09XCJjd1wiPycgKyBHTF9DVyArICc6JyArIEdMX0NDVylcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0NPTE9SX01BU0s6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDQsXG4gICAgICAgICAgICAgICAgJ2NvbG9yLm1hc2sgbXVzdCBiZSBsZW5ndGggNCBhcnJheScsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiAhIXYgfSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIGVudi5zaGFyZWQuaXNBcnJheUxpa2UgKyAnKCcgKyB2YWx1ZSArICcpJiYnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJy5sZW5ndGg9PT00JyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yLm1hc2snKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gbG9vcCg0LCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnISEnICsgdmFsdWUgKyAnWycgKyBpICsgJ10nXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGNhc2UgU19TQU1QTEVfQ09WRVJBR0U6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUsIHBhcmFtLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgdmFyIHNhbXBsZVZhbHVlID0gJ3ZhbHVlJyBpbiB2YWx1ZSA/IHZhbHVlLnZhbHVlIDogMVxuICAgICAgICAgICAgICB2YXIgc2FtcGxlSW52ZXJ0ID0gISF2YWx1ZS5pbnZlcnRcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgIHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgICAgICBzYW1wbGVWYWx1ZSA+PSAwICYmIHNhbXBsZVZhbHVlIDw9IDEsXG4gICAgICAgICAgICAgICAgJ3NhbXBsZS5jb3ZlcmFnZS52YWx1ZSBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMScsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gW3NhbXBsZVZhbHVlLCBzYW1wbGVJbnZlcnRdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcmJnR5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJvYmplY3RcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBzYW1wbGUuY292ZXJhZ2UnKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB2YXIgVkFMVUUgPSBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgJ1widmFsdWVcIiBpbiAnLCB2YWx1ZSwgJz8rJywgdmFsdWUsICcudmFsdWU6MScpXG4gICAgICAgICAgICAgIHZhciBJTlZFUlQgPSBzY29wZS5kZWYoJyEhJywgdmFsdWUsICcuaW52ZXJ0JylcbiAgICAgICAgICAgICAgcmV0dXJuIFtWQUxVRSwgSU5WRVJUXVxuICAgICAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIFNUQVRFXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVVuaWZvcm1zICh1bmlmb3JtcywgZW52KSB7XG4gICAgdmFyIHN0YXRpY1VuaWZvcm1zID0gdW5pZm9ybXMuc3RhdGljXG4gICAgdmFyIGR5bmFtaWNVbmlmb3JtcyA9IHVuaWZvcm1zLmR5bmFtaWNcblxuICAgIHZhciBVTklGT1JNUyA9IHt9XG5cbiAgICBPYmplY3Qua2V5cyhzdGF0aWNVbmlmb3JtcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gc3RhdGljVW5pZm9ybXNbbmFtZV1cbiAgICAgIHZhciByZXN1bHRcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgcmVnbFR5cGUgPSB2YWx1ZS5fcmVnbFR5cGVcbiAgICAgICAgaWYgKHJlZ2xUeXBlID09PSAndGV4dHVyZTJkJyB8fFxuICAgICAgICAgICAgcmVnbFR5cGUgPT09ICd0ZXh0dXJlQ3ViZScpIHtcbiAgICAgICAgICByZXN1bHQgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnYubGluayh2YWx1ZSlcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHJlZ2xUeXBlID09PSAnZnJhbWVidWZmZXInIHx8XG4gICAgICAgICAgICAgICAgICAgcmVnbFR5cGUgPT09ICdmcmFtZWJ1ZmZlckN1YmUnKSB7XG4gICAgICAgICAgY2hlY2skMS5jb21tYW5kKHZhbHVlLmNvbG9yLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAnbWlzc2luZyBjb2xvciBhdHRhY2htZW50IGZvciBmcmFtZWJ1ZmZlciBzZW50IHRvIHVuaWZvcm0gXCInICsgbmFtZSArICdcIicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudikge1xuICAgICAgICAgICAgcmV0dXJuIGVudi5saW5rKHZhbHVlLmNvbG9yWzBdKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hlY2skMS5jb21tYW5kUmFpc2UoJ2ludmFsaWQgZGF0YSBmb3IgdW5pZm9ybSBcIicgKyBuYW1lICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudikge1xuICAgICAgICAgIHZhciBJVEVNID0gZW52Lmdsb2JhbC5kZWYoJ1snLFxuICAgICAgICAgICAgbG9vcCh2YWx1ZS5sZW5ndGgsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVbaV0gPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlW2ldID09PSAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgJ2ludmFsaWQgdW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVtpXVxuICAgICAgICAgICAgfSksICddJylcbiAgICAgICAgICByZXR1cm4gSVRFTVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMS5jb21tYW5kUmFpc2UoJ2ludmFsaWQgb3IgbWlzc2luZyBkYXRhIGZvciB1bmlmb3JtIFwiJyArIG5hbWUgKyAnXCInLCBlbnYuY29tbWFuZFN0cilcbiAgICAgIH1cbiAgICAgIHJlc3VsdC52YWx1ZSA9IHZhbHVlXG4gICAgICBVTklGT1JNU1tuYW1lXSA9IHJlc3VsdFxuICAgIH0pXG5cbiAgICBPYmplY3Qua2V5cyhkeW5hbWljVW5pZm9ybXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIGR5biA9IGR5bmFtaWNVbmlmb3Jtc1trZXldXG4gICAgICBVTklGT1JNU1trZXldID0gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICByZXR1cm4gZW52Lmludm9rZShzY29wZSwgZHluKVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIFVOSUZPUk1TXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUF0dHJpYnV0ZXMgKGF0dHJpYnV0ZXMsIGVudikge1xuICAgIHZhciBzdGF0aWNBdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY0F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmR5bmFtaWNcblxuICAgIHZhciBhdHRyaWJ1dGVEZWZzID0ge31cblxuICAgIE9iamVjdC5rZXlzKHN0YXRpY0F0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgdmFyIHZhbHVlID0gc3RhdGljQXR0cmlidXRlc1thdHRyaWJ1dGVdXG4gICAgICB2YXIgaWQgPSBzdHJpbmdTdG9yZS5pZChhdHRyaWJ1dGUpXG5cbiAgICAgIHZhciByZWNvcmQgPSBuZXcgQXR0cmlidXRlUmVjb3JkKClcbiAgICAgIGlmIChpc0J1ZmZlckFyZ3ModmFsdWUpKSB7XG4gICAgICAgIHJlY29yZC5zdGF0ZSA9IEFUVFJJQl9TVEFURV9QT0lOVEVSXG4gICAgICAgIHJlY29yZC5idWZmZXIgPSBidWZmZXJTdGF0ZS5nZXRCdWZmZXIoXG4gICAgICAgICAgYnVmZmVyU3RhdGUuY3JlYXRlKHZhbHVlLCBHTF9BUlJBWV9CVUZGRVIkMiwgZmFsc2UsIHRydWUpKVxuICAgICAgICByZWNvcmQudHlwZSA9IDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJTdGF0ZS5nZXRCdWZmZXIodmFsdWUpXG4gICAgICAgIGlmIChidWZmZXIpIHtcbiAgICAgICAgICByZWNvcmQuc3RhdGUgPSBBVFRSSUJfU1RBVEVfUE9JTlRFUlxuICAgICAgICAgIHJlY29yZC5idWZmZXIgPSBidWZmZXJcbiAgICAgICAgICByZWNvcmQudHlwZSA9IDBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSxcbiAgICAgICAgICAgICdpbnZhbGlkIGRhdGEgZm9yIGF0dHJpYnV0ZSAnICsgYXR0cmlidXRlLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICBpZiAoJ2NvbnN0YW50JyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvbnN0YW50ID0gdmFsdWUuY29uc3RhbnRcbiAgICAgICAgICAgIHJlY29yZC5idWZmZXIgPSAnbnVsbCdcbiAgICAgICAgICAgIHJlY29yZC5zdGF0ZSA9IEFUVFJJQl9TVEFURV9DT05TVEFOVFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zdGFudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgcmVjb3JkLnggPSBjb25zdGFudFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKGNvbnN0YW50KSAmJlxuICAgICAgICAgICAgICAgIGNvbnN0YW50Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBjb25zdGFudC5sZW5ndGggPD0gNCxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBjb25zdGFudCBmb3IgYXR0cmlidXRlICcgKyBhdHRyaWJ1dGUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBDVVRFX0NPTVBPTkVOVFMuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkge1xuICAgICAgICAgICAgICAgIGlmIChpIDwgY29uc3RhbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICByZWNvcmRbY10gPSBjb25zdGFudFtpXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzQnVmZmVyQXJncyh2YWx1ZS5idWZmZXIpKSB7XG4gICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihcbiAgICAgICAgICAgICAgICBidWZmZXJTdGF0ZS5jcmVhdGUodmFsdWUuYnVmZmVyLCBHTF9BUlJBWV9CVUZGRVIkMiwgZmFsc2UsIHRydWUpKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyU3RhdGUuZ2V0QnVmZmVyKHZhbHVlLmJ1ZmZlcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZCghIWJ1ZmZlciwgJ21pc3NpbmcgYnVmZmVyIGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG5cbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWx1ZS5vZmZzZXQgfCAwXG4gICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQob2Zmc2V0ID49IDAsXG4gICAgICAgICAgICAgICdpbnZhbGlkIG9mZnNldCBmb3IgYXR0cmlidXRlIFwiJyArIGF0dHJpYnV0ZSArICdcIicsIGVudi5jb21tYW5kU3RyKVxuXG4gICAgICAgICAgICB2YXIgc3RyaWRlID0gdmFsdWUuc3RyaWRlIHwgMFxuICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKHN0cmlkZSA+PSAwICYmIHN0cmlkZSA8IDI1NixcbiAgICAgICAgICAgICAgJ2ludmFsaWQgc3RyaWRlIGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiLCBtdXN0IGJlIGludGVnZXIgYmV0d2VlZW4gWzAsIDI1NV0nLCBlbnYuY29tbWFuZFN0cilcblxuICAgICAgICAgICAgdmFyIHNpemUgPSB2YWx1ZS5zaXplIHwgMFxuICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKCEoJ3NpemUnIGluIHZhbHVlKSB8fCAoc2l6ZSA+IDAgJiYgc2l6ZSA8PSA0KSxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgc2l6ZSBmb3IgYXR0cmlidXRlIFwiJyArIGF0dHJpYnV0ZSArICdcIiwgbXVzdCBiZSAxLDIsMyw0JywgZW52LmNvbW1hbmRTdHIpXG5cbiAgICAgICAgICAgIHZhciBub3JtYWxpemVkID0gISF2YWx1ZS5ub3JtYWxpemVkXG5cbiAgICAgICAgICAgIHZhciB0eXBlID0gMFxuICAgICAgICAgICAgaWYgKCd0eXBlJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoXG4gICAgICAgICAgICAgICAgdmFsdWUudHlwZSwgZ2xUeXBlcyxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCB0eXBlIGZvciBhdHRyaWJ1dGUgJyArIGF0dHJpYnV0ZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHR5cGUgPSBnbFR5cGVzW3ZhbHVlLnR5cGVdXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBkaXZpc29yID0gdmFsdWUuZGl2aXNvciB8IDBcbiAgICAgICAgICAgIGlmICgnZGl2aXNvcicgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKGRpdmlzb3IgPT09IDAgfHwgZXh0SW5zdGFuY2luZyxcbiAgICAgICAgICAgICAgICAnY2Fubm90IHNwZWNpZnkgZGl2aXNvciBmb3IgYXR0cmlidXRlIFwiJyArIGF0dHJpYnV0ZSArICdcIiwgaW5zdGFuY2luZyBub3Qgc3VwcG9ydGVkJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChkaXZpc29yID49IDAsXG4gICAgICAgICAgICAgICAgJ2ludmFsaWQgZGl2aXNvciBmb3IgYXR0cmlidXRlIFwiJyArIGF0dHJpYnV0ZSArICdcIicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIGNvbW1hbmQgPSBlbnYuY29tbWFuZFN0clxuXG4gICAgICAgICAgICAgIHZhciBWQUxJRF9LRVlTID0gW1xuICAgICAgICAgICAgICAgICdidWZmZXInLFxuICAgICAgICAgICAgICAgICdvZmZzZXQnLFxuICAgICAgICAgICAgICAgICdkaXZpc29yJyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCcsXG4gICAgICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgICAgICdzaXplJyxcbiAgICAgICAgICAgICAgICAnc3RyaWRlJ1xuICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBWQUxJRF9LRVlTLmluZGV4T2YocHJvcCkgPj0gMCxcbiAgICAgICAgICAgICAgICAgICd1bmtub3duIHBhcmFtZXRlciBcIicgKyBwcm9wICsgJ1wiIGZvciBhdHRyaWJ1dGUgcG9pbnRlciBcIicgKyBhdHRyaWJ1dGUgKyAnXCIgKHZhbGlkIHBhcmFtZXRlcnMgYXJlICcgKyBWQUxJRF9LRVlTICsgJyknLFxuICAgICAgICAgICAgICAgICAgY29tbWFuZClcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJlY29yZC5idWZmZXIgPSBidWZmZXJcbiAgICAgICAgICAgIHJlY29yZC5zdGF0ZSA9IEFUVFJJQl9TVEFURV9QT0lOVEVSXG4gICAgICAgICAgICByZWNvcmQuc2l6ZSA9IHNpemVcbiAgICAgICAgICAgIHJlY29yZC5ub3JtYWxpemVkID0gbm9ybWFsaXplZFxuICAgICAgICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlIHx8IGJ1ZmZlci5kdHlwZVxuICAgICAgICAgICAgcmVjb3JkLm9mZnNldCA9IG9mZnNldFxuICAgICAgICAgICAgcmVjb3JkLnN0cmlkZSA9IHN0cmlkZVxuICAgICAgICAgICAgcmVjb3JkLmRpdmlzb3IgPSBkaXZpc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF0dHJpYnV0ZURlZnNbYXR0cmlidXRlXSA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgdmFyIGNhY2hlID0gZW52LmF0dHJpYkNhY2hlXG4gICAgICAgIGlmIChpZCBpbiBjYWNoZSkge1xuICAgICAgICAgIHJldHVybiBjYWNoZVtpZF1cbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICAgIGlzU3RyZWFtOiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5rZXlzKHJlY29yZCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSByZWNvcmRba2V5XVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVjb3JkLmJ1ZmZlcikge1xuICAgICAgICAgIHJlc3VsdC5idWZmZXIgPSBlbnYubGluayhyZWNvcmQuYnVmZmVyKVxuICAgICAgICAgIHJlc3VsdC50eXBlID0gcmVzdWx0LnR5cGUgfHwgKHJlc3VsdC5idWZmZXIgKyAnLmR0eXBlJylcbiAgICAgICAgfVxuICAgICAgICBjYWNoZVtpZF0gPSByZXN1bHRcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgT2JqZWN0LmtleXMoZHluYW1pY0F0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgdmFyIGR5biA9IGR5bmFtaWNBdHRyaWJ1dGVzW2F0dHJpYnV0ZV1cblxuICAgICAgZnVuY3Rpb24gYXBwZW5kQXR0cmlidXRlQ29kZSAoZW52LCBibG9jaykge1xuICAgICAgICB2YXIgVkFMVUUgPSBlbnYuaW52b2tlKGJsb2NrLCBkeW4pXG5cbiAgICAgICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcbiAgICAgICAgdmFyIGNvbnN0YW50cyA9IGVudi5jb25zdGFudHNcblxuICAgICAgICB2YXIgSVNfQlVGRkVSX0FSR1MgPSBzaGFyZWQuaXNCdWZmZXJBcmdzXG4gICAgICAgIHZhciBCVUZGRVJfU1RBVEUgPSBzaGFyZWQuYnVmZmVyXG5cbiAgICAgICAgLy8gUGVyZm9ybSB2YWxpZGF0aW9uIG9uIGF0dHJpYnV0ZVxuICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbnYuYXNzZXJ0KGJsb2NrLFxuICAgICAgICAgICAgVkFMVUUgKyAnJiYodHlwZW9mICcgKyBWQUxVRSArICc9PT1cIm9iamVjdFwifHx0eXBlb2YgJyArXG4gICAgICAgICAgICBWQUxVRSArICc9PT1cImZ1bmN0aW9uXCIpJiYoJyArXG4gICAgICAgICAgICBJU19CVUZGRVJfQVJHUyArICcoJyArIFZBTFVFICsgJyl8fCcgK1xuICAgICAgICAgICAgQlVGRkVSX1NUQVRFICsgJy5nZXRCdWZmZXIoJyArIFZBTFVFICsgJyl8fCcgK1xuICAgICAgICAgICAgQlVGRkVSX1NUQVRFICsgJy5nZXRCdWZmZXIoJyArIFZBTFVFICsgJy5idWZmZXIpfHwnICtcbiAgICAgICAgICAgIElTX0JVRkZFUl9BUkdTICsgJygnICsgVkFMVUUgKyAnLmJ1ZmZlcil8fCcgK1xuICAgICAgICAgICAgJyhcImNvbnN0YW50XCIgaW4gJyArIFZBTFVFICtcbiAgICAgICAgICAgICcmJih0eXBlb2YgJyArIFZBTFVFICsgJy5jb25zdGFudD09PVwibnVtYmVyXCJ8fCcgK1xuICAgICAgICAgICAgc2hhcmVkLmlzQXJyYXlMaWtlICsgJygnICsgVkFMVUUgKyAnLmNvbnN0YW50KSkpKScsXG4gICAgICAgICAgICAnaW52YWxpZCBkeW5hbWljIGF0dHJpYnV0ZSBcIicgKyBhdHRyaWJ1dGUgKyAnXCInKVxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIGFsbG9jYXRlIG5hbWVzIGZvciByZXN1bHRcbiAgICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgICBpc1N0cmVhbTogYmxvY2suZGVmKGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIHZhciBkZWZhdWx0UmVjb3JkID0gbmV3IEF0dHJpYnV0ZVJlY29yZCgpXG4gICAgICAgIGRlZmF1bHRSZWNvcmQuc3RhdGUgPSBBVFRSSUJfU1RBVEVfUE9JTlRFUlxuICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0UmVjb3JkKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IGJsb2NrLmRlZignJyArIGRlZmF1bHRSZWNvcmRba2V5XSlcbiAgICAgICAgfSlcblxuICAgICAgICB2YXIgQlVGRkVSID0gcmVzdWx0LmJ1ZmZlclxuICAgICAgICB2YXIgVFlQRSA9IHJlc3VsdC50eXBlXG4gICAgICAgIGJsb2NrKFxuICAgICAgICAgICdpZignLCBJU19CVUZGRVJfQVJHUywgJygnLCBWQUxVRSwgJykpeycsXG4gICAgICAgICAgcmVzdWx0LmlzU3RyZWFtLCAnPXRydWU7JyxcbiAgICAgICAgICBCVUZGRVIsICc9JywgQlVGRkVSX1NUQVRFLCAnLmNyZWF0ZVN0cmVhbSgnLCBHTF9BUlJBWV9CVUZGRVIkMiwgJywnLCBWQUxVRSwgJyk7JyxcbiAgICAgICAgICBUWVBFLCAnPScsIEJVRkZFUiwgJy5kdHlwZTsnLFxuICAgICAgICAgICd9ZWxzZXsnLFxuICAgICAgICAgIEJVRkZFUiwgJz0nLCBCVUZGRVJfU1RBVEUsICcuZ2V0QnVmZmVyKCcsIFZBTFVFLCAnKTsnLFxuICAgICAgICAgICdpZignLCBCVUZGRVIsICcpeycsXG4gICAgICAgICAgVFlQRSwgJz0nLCBCVUZGRVIsICcuZHR5cGU7JyxcbiAgICAgICAgICAnfWVsc2UgaWYoXCJjb25zdGFudFwiIGluICcsIFZBTFVFLCAnKXsnLFxuICAgICAgICAgIHJlc3VsdC5zdGF0ZSwgJz0nLCBBVFRSSUJfU1RBVEVfQ09OU1RBTlQsICc7JyxcbiAgICAgICAgICAnaWYodHlwZW9mICcgKyBWQUxVRSArICcuY29uc3RhbnQgPT09IFwibnVtYmVyXCIpeycsXG4gICAgICAgICAgcmVzdWx0W0NVVEVfQ09NUE9ORU5UU1swXV0sICc9JywgVkFMVUUsICcuY29uc3RhbnQ7JyxcbiAgICAgICAgICBDVVRFX0NPTVBPTkVOVFMuc2xpY2UoMSkubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0W25dXG4gICAgICAgICAgfSkuam9pbignPScpLCAnPTA7JyxcbiAgICAgICAgICAnfWVsc2V7JyxcbiAgICAgICAgICBDVVRFX0NPTVBPTkVOVFMubWFwKGZ1bmN0aW9uIChuYW1lLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gKyAnPScgKyBWQUxVRSArICcuY29uc3RhbnQubGVuZ3RoPicgKyBpICtcbiAgICAgICAgICAgICAgJz8nICsgVkFMVUUgKyAnLmNvbnN0YW50WycgKyBpICsgJ106MDsnXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSkuam9pbignJyksXG4gICAgICAgICAgJ319ZWxzZXsnLFxuICAgICAgICAgICdpZignLCBJU19CVUZGRVJfQVJHUywgJygnLCBWQUxVRSwgJy5idWZmZXIpKXsnLFxuICAgICAgICAgIEJVRkZFUiwgJz0nLCBCVUZGRVJfU1RBVEUsICcuY3JlYXRlU3RyZWFtKCcsIEdMX0FSUkFZX0JVRkZFUiQyLCAnLCcsIFZBTFVFLCAnLmJ1ZmZlcik7JyxcbiAgICAgICAgICAnfWVsc2V7JyxcbiAgICAgICAgICBCVUZGRVIsICc9JywgQlVGRkVSX1NUQVRFLCAnLmdldEJ1ZmZlcignLCBWQUxVRSwgJy5idWZmZXIpOycsXG4gICAgICAgICAgJ30nLFxuICAgICAgICAgIFRZUEUsICc9XCJ0eXBlXCIgaW4gJywgVkFMVUUsICc/JyxcbiAgICAgICAgICBjb25zdGFudHMuZ2xUeXBlcywgJ1snLCBWQUxVRSwgJy50eXBlXTonLCBCVUZGRVIsICcuZHR5cGU7JyxcbiAgICAgICAgICByZXN1bHQubm9ybWFsaXplZCwgJz0hIScsIFZBTFVFLCAnLm5vcm1hbGl6ZWQ7JylcbiAgICAgICAgZnVuY3Rpb24gZW1pdFJlYWRSZWNvcmQgKG5hbWUpIHtcbiAgICAgICAgICBibG9jayhyZXN1bHRbbmFtZV0sICc9JywgVkFMVUUsICcuJywgbmFtZSwgJ3wwOycpXG4gICAgICAgIH1cbiAgICAgICAgZW1pdFJlYWRSZWNvcmQoJ3NpemUnKVxuICAgICAgICBlbWl0UmVhZFJlY29yZCgnb2Zmc2V0JylcbiAgICAgICAgZW1pdFJlYWRSZWNvcmQoJ3N0cmlkZScpXG4gICAgICAgIGVtaXRSZWFkUmVjb3JkKCdkaXZpc29yJylcblxuICAgICAgICBibG9jaygnfX0nKVxuXG4gICAgICAgIGJsb2NrLmV4aXQoXG4gICAgICAgICAgJ2lmKCcsIHJlc3VsdC5pc1N0cmVhbSwgJyl7JyxcbiAgICAgICAgICBCVUZGRVJfU1RBVEUsICcuZGVzdHJveVN0cmVhbSgnLCBCVUZGRVIsICcpOycsXG4gICAgICAgICAgJ30nKVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cblxuICAgICAgYXR0cmlidXRlRGVmc1thdHRyaWJ1dGVdID0gY3JlYXRlRHluYW1pY0RlY2woZHluLCBhcHBlbmRBdHRyaWJ1dGVDb2RlKVxuICAgIH0pXG5cbiAgICByZXR1cm4gYXR0cmlidXRlRGVmc1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VWQU8gKG9wdGlvbnMsIGVudikge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY09wdGlvbnMgPSBvcHRpb25zLmR5bmFtaWNcbiAgICBpZiAoU19WQU8gaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgdmFyIHZhbyA9IHN0YXRpY09wdGlvbnNbU19WQU9dXG4gICAgICBpZiAodmFvICE9PSBudWxsICYmIGF0dHJpYnV0ZVN0YXRlLmdldFZBTyh2YW8pID09PSBudWxsKSB7XG4gICAgICAgIHZhbyA9IGF0dHJpYnV0ZVN0YXRlLmNyZWF0ZVZBTyh2YW8pXG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52KSB7XG4gICAgICAgIHJldHVybiBlbnYubGluayhhdHRyaWJ1dGVTdGF0ZS5nZXRWQU8odmFvKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChTX1ZBTyBpbiBkeW5hbWljT3B0aW9ucykge1xuICAgICAgdmFyIGR5biA9IGR5bmFtaWNPcHRpb25zW1NfVkFPXVxuICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5biwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgdmFyIHZhb1JlZiA9IGVudi5pbnZva2Uoc2NvcGUsIGR5bilcbiAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihlbnYuc2hhcmVkLnZhbyArICcuZ2V0VkFPKCcgKyB2YW9SZWYgKyAnKScpXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDb250ZXh0IChjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRpY0NvbnRleHQgPSBjb250ZXh0LnN0YXRpY1xuICAgIHZhciBkeW5hbWljQ29udGV4dCA9IGNvbnRleHQuZHluYW1pY1xuICAgIHZhciByZXN1bHQgPSB7fVxuXG4gICAgT2JqZWN0LmtleXMoc3RhdGljQ29udGV4dCkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gc3RhdGljQ29udGV4dFtuYW1lXVxuICAgICAgcmVzdWx0W25hbWVdID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgIHJldHVybiAnJyArIHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVudi5saW5rKHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBPYmplY3Qua2V5cyhkeW5hbWljQ29udGV4dCkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGR5biA9IGR5bmFtaWNDb250ZXh0W25hbWVdXG4gICAgICByZXN1bHRbbmFtZV0gPSBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBlbnYuaW52b2tlKHNjb3BlLCBkeW4pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUFyZ3VtZW50cyAob3B0aW9ucywgYXR0cmlidXRlcywgdW5pZm9ybXMsIGNvbnRleHQsIGVudikge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY09wdGlvbnMgPSBvcHRpb25zLmR5bmFtaWNcblxuICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIEtFWV9OQU1FUyA9IFtcbiAgICAgICAgU19GUkFNRUJVRkZFUixcbiAgICAgICAgU19WRVJULFxuICAgICAgICBTX0ZSQUcsXG4gICAgICAgIFNfRUxFTUVOVFMsXG4gICAgICAgIFNfUFJJTUlUSVZFLFxuICAgICAgICBTX09GRlNFVCxcbiAgICAgICAgU19DT1VOVCxcbiAgICAgICAgU19JTlNUQU5DRVMsXG4gICAgICAgIFNfUFJPRklMRSxcbiAgICAgICAgU19WQU9cbiAgICAgIF0uY29uY2F0KEdMX1NUQVRFX05BTUVTKVxuXG4gICAgICBmdW5jdGlvbiBjaGVja0tleXMgKGRpY3QpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZGljdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgS0VZX05BTUVTLmluZGV4T2Yoa2V5KSA+PSAwLFxuICAgICAgICAgICAgJ3Vua25vd24gcGFyYW1ldGVyIFwiJyArIGtleSArICdcIicsXG4gICAgICAgICAgICBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2hlY2tLZXlzKHN0YXRpY09wdGlvbnMpXG4gICAgICBjaGVja0tleXMoZHluYW1pY09wdGlvbnMpXG4gICAgfSlcblxuICAgIHZhciBhdHRyaWJMb2NhdGlvbnMgPSBwYXJzZUF0dHJpYkxvY2F0aW9ucyhvcHRpb25zLCBhdHRyaWJ1dGVzKVxuXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gcGFyc2VGcmFtZWJ1ZmZlcihvcHRpb25zLCBlbnYpXG4gICAgdmFyIHZpZXdwb3J0QW5kU2Npc3NvciA9IHBhcnNlVmlld3BvcnRTY2lzc29yKG9wdGlvbnMsIGZyYW1lYnVmZmVyLCBlbnYpXG4gICAgdmFyIGRyYXcgPSBwYXJzZURyYXcob3B0aW9ucywgZW52KVxuICAgIHZhciBzdGF0ZSA9IHBhcnNlR0xTdGF0ZShvcHRpb25zLCBlbnYpXG4gICAgdmFyIHNoYWRlciA9IHBhcnNlUHJvZ3JhbShvcHRpb25zLCBlbnYsIGF0dHJpYkxvY2F0aW9ucylcblxuICAgIGZ1bmN0aW9uIGNvcHlCb3ggKG5hbWUpIHtcbiAgICAgIHZhciBkZWZuID0gdmlld3BvcnRBbmRTY2lzc29yW25hbWVdXG4gICAgICBpZiAoZGVmbikge1xuICAgICAgICBzdGF0ZVtuYW1lXSA9IGRlZm5cbiAgICAgIH1cbiAgICB9XG4gICAgY29weUJveChTX1ZJRVdQT1JUKVxuICAgIGNvcHlCb3gocHJvcE5hbWUoU19TQ0lTU09SX0JPWCkpXG5cbiAgICB2YXIgZGlydHkgPSBPYmplY3Qua2V5cyhzdGF0ZSkubGVuZ3RoID4gMFxuXG4gICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgIGZyYW1lYnVmZmVyOiBmcmFtZWJ1ZmZlcixcbiAgICAgIGRyYXc6IGRyYXcsXG4gICAgICBzaGFkZXI6IHNoYWRlcixcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIGRpcnR5OiBkaXJ0eSxcbiAgICAgIHNjb3BlVkFPOiBudWxsLFxuICAgICAgZHJhd1ZBTzogbnVsbCxcbiAgICAgIHVzZVZBTzogZmFsc2UsXG4gICAgICBhdHRyaWJ1dGVzOiB7fVxuICAgIH1cblxuICAgIHJlc3VsdC5wcm9maWxlID0gcGFyc2VQcm9maWxlKG9wdGlvbnMsIGVudilcbiAgICByZXN1bHQudW5pZm9ybXMgPSBwYXJzZVVuaWZvcm1zKHVuaWZvcm1zLCBlbnYpXG4gICAgcmVzdWx0LmRyYXdWQU8gPSByZXN1bHQuc2NvcGVWQU8gPSBwYXJzZVZBTyhvcHRpb25zLCBlbnYpXG4gICAgLy8gc3BlY2lhbCBjYXNlOiBjaGVjayBpZiB3ZSBjYW4gc3RhdGljYWxseSBhbGxvY2F0ZSBhIHZlcnRleCBhcnJheSBvYmplY3QgZm9yIHRoaXMgcHJvZ3JhbVxuICAgIGlmICghcmVzdWx0LmRyYXdWQU8gJiYgc2hhZGVyLnByb2dyYW0gJiYgIWF0dHJpYkxvY2F0aW9ucyAmJiBleHRlbnNpb25zLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMpIHtcbiAgICAgIHZhciB1c2VWQU8gPSB0cnVlXG4gICAgICB2YXIgc3RhdGljQmluZGluZ3MgPSBzaGFkZXIucHJvZ3JhbS5hdHRyaWJ1dGVzLm1hcChmdW5jdGlvbiAoYXR0cikge1xuICAgICAgICB2YXIgYmluZGluZyA9IGF0dHJpYnV0ZXMuc3RhdGljW2F0dHJdXG4gICAgICAgIHVzZVZBTyA9IHVzZVZBTyAmJiAhIWJpbmRpbmdcbiAgICAgICAgcmV0dXJuIGJpbmRpbmdcbiAgICAgIH0pXG4gICAgICBpZiAodXNlVkFPICYmIHN0YXRpY0JpbmRpbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHZhbyA9IGF0dHJpYnV0ZVN0YXRlLmdldFZBTyhhdHRyaWJ1dGVTdGF0ZS5jcmVhdGVWQU8oc3RhdGljQmluZGluZ3MpKVxuICAgICAgICByZXN1bHQuZHJhd1ZBTyA9IG5ldyBEZWNsYXJhdGlvbihudWxsLCBudWxsLCBudWxsLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHJldHVybiBlbnYubGluayh2YW8pXG4gICAgICAgIH0pXG4gICAgICAgIHJlc3VsdC51c2VWQU8gPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhdHRyaWJMb2NhdGlvbnMpIHtcbiAgICAgIHJlc3VsdC51c2VWQU8gPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5hdHRyaWJ1dGVzID0gcGFyc2VBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMsIGVudilcbiAgICB9XG4gICAgcmVzdWx0LmNvbnRleHQgPSBwYXJzZUNvbnRleHQoY29udGV4dCwgZW52KVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ09NTU9OIFVQREFURSBGVU5DVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiBlbWl0Q29udGV4dCAoZW52LCBzY29wZSwgY29udGV4dCkge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgdmFyIENPTlRFWFQgPSBzaGFyZWQuY29udGV4dFxuXG4gICAgdmFyIGNvbnRleHRFbnRlciA9IGVudi5zY29wZSgpXG5cbiAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBzY29wZS5zYXZlKENPTlRFWFQsICcuJyArIG5hbWUpXG4gICAgICB2YXIgZGVmbiA9IGNvbnRleHRbbmFtZV1cbiAgICAgIHZhciB2YWx1ZSA9IGRlZm4uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29udGV4dEVudGVyKENPTlRFWFQsICcuJywgbmFtZSwgJz1bJywgdmFsdWUuam9pbigpLCAnXTsnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dEVudGVyKENPTlRFWFQsICcuJywgbmFtZSwgJz0nLCB2YWx1ZSwgJzsnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzY29wZShjb250ZXh0RW50ZXIpXG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENPTU1PTiBEUkFXSU5HIEZVTkNUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGZ1bmN0aW9uIGVtaXRQb2xsRnJhbWVidWZmZXIgKGVudiwgc2NvcGUsIGZyYW1lYnVmZmVyLCBza2lwQ2hlY2spIHtcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuXG4gICAgdmFyIEdMID0gc2hhcmVkLmdsXG4gICAgdmFyIEZSQU1FQlVGRkVSX1NUQVRFID0gc2hhcmVkLmZyYW1lYnVmZmVyXG4gICAgdmFyIEVYVF9EUkFXX0JVRkZFUlNcbiAgICBpZiAoZXh0RHJhd0J1ZmZlcnMpIHtcbiAgICAgIEVYVF9EUkFXX0JVRkZFUlMgPSBzY29wZS5kZWYoc2hhcmVkLmV4dGVuc2lvbnMsICcud2ViZ2xfZHJhd19idWZmZXJzJylcbiAgICB9XG5cbiAgICB2YXIgY29uc3RhbnRzID0gZW52LmNvbnN0YW50c1xuXG4gICAgdmFyIERSQVdfQlVGRkVSUyA9IGNvbnN0YW50cy5kcmF3QnVmZmVyXG4gICAgdmFyIEJBQ0tfQlVGRkVSID0gY29uc3RhbnRzLmJhY2tCdWZmZXJcblxuICAgIHZhciBORVhUXG4gICAgaWYgKGZyYW1lYnVmZmVyKSB7XG4gICAgICBORVhUID0gZnJhbWVidWZmZXIuYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIE5FWFQgPSBzY29wZS5kZWYoRlJBTUVCVUZGRVJfU1RBVEUsICcubmV4dCcpXG4gICAgfVxuXG4gICAgaWYgKCFza2lwQ2hlY2spIHtcbiAgICAgIHNjb3BlKCdpZignLCBORVhULCAnIT09JywgRlJBTUVCVUZGRVJfU1RBVEUsICcuY3VyKXsnKVxuICAgIH1cbiAgICBzY29wZShcbiAgICAgICdpZignLCBORVhULCAnKXsnLFxuICAgICAgR0wsICcuYmluZEZyYW1lYnVmZmVyKCcsIEdMX0ZSQU1FQlVGRkVSJDIsICcsJywgTkVYVCwgJy5mcmFtZWJ1ZmZlcik7JylcbiAgICBpZiAoZXh0RHJhd0J1ZmZlcnMpIHtcbiAgICAgIHNjb3BlKEVYVF9EUkFXX0JVRkZFUlMsICcuZHJhd0J1ZmZlcnNXRUJHTCgnLFxuICAgICAgICBEUkFXX0JVRkZFUlMsICdbJywgTkVYVCwgJy5jb2xvckF0dGFjaG1lbnRzLmxlbmd0aF0pOycpXG4gICAgfVxuICAgIHNjb3BlKCd9ZWxzZXsnLFxuICAgICAgR0wsICcuYmluZEZyYW1lYnVmZmVyKCcsIEdMX0ZSQU1FQlVGRkVSJDIsICcsbnVsbCk7JylcbiAgICBpZiAoZXh0RHJhd0J1ZmZlcnMpIHtcbiAgICAgIHNjb3BlKEVYVF9EUkFXX0JVRkZFUlMsICcuZHJhd0J1ZmZlcnNXRUJHTCgnLCBCQUNLX0JVRkZFUiwgJyk7JylcbiAgICB9XG4gICAgc2NvcGUoXG4gICAgICAnfScsXG4gICAgICBGUkFNRUJVRkZFUl9TVEFURSwgJy5jdXI9JywgTkVYVCwgJzsnKVxuICAgIGlmICghc2tpcENoZWNrKSB7XG4gICAgICBzY29wZSgnfScpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdFBvbGxTdGF0ZSAoZW52LCBzY29wZSwgYXJncykge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG5cbiAgICB2YXIgR0wgPSBzaGFyZWQuZ2xcblxuICAgIHZhciBDVVJSRU5UX1ZBUlMgPSBlbnYuY3VycmVudFxuICAgIHZhciBORVhUX1ZBUlMgPSBlbnYubmV4dFxuICAgIHZhciBDVVJSRU5UX1NUQVRFID0gc2hhcmVkLmN1cnJlbnRcbiAgICB2YXIgTkVYVF9TVEFURSA9IHNoYXJlZC5uZXh0XG5cbiAgICB2YXIgYmxvY2sgPSBlbnYuY29uZChDVVJSRU5UX1NUQVRFLCAnLmRpcnR5JylcblxuICAgIEdMX1NUQVRFX05BTUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHZhciBwYXJhbSA9IHByb3BOYW1lKHByb3ApXG4gICAgICBpZiAocGFyYW0gaW4gYXJncy5zdGF0ZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdmFyIE5FWFQsIENVUlJFTlRcbiAgICAgIGlmIChwYXJhbSBpbiBORVhUX1ZBUlMpIHtcbiAgICAgICAgTkVYVCA9IE5FWFRfVkFSU1twYXJhbV1cbiAgICAgICAgQ1VSUkVOVCA9IENVUlJFTlRfVkFSU1twYXJhbV1cbiAgICAgICAgdmFyIHBhcnRzID0gbG9vcChjdXJyZW50U3RhdGVbcGFyYW1dLmxlbmd0aCwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICByZXR1cm4gYmxvY2suZGVmKE5FWFQsICdbJywgaSwgJ10nKVxuICAgICAgICB9KVxuICAgICAgICBibG9jayhlbnYuY29uZChwYXJ0cy5tYXAoZnVuY3Rpb24gKHAsIGkpIHtcbiAgICAgICAgICByZXR1cm4gcCArICchPT0nICsgQ1VSUkVOVCArICdbJyArIGkgKyAnXSdcbiAgICAgICAgfSkuam9pbignfHwnKSlcbiAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgIEdMLCAnLicsIEdMX1ZBUklBQkxFU1twYXJhbV0sICcoJywgcGFydHMsICcpOycsXG4gICAgICAgICAgICBwYXJ0cy5tYXAoZnVuY3Rpb24gKHAsIGkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIENVUlJFTlQgKyAnWycgKyBpICsgJ109JyArIHBcbiAgICAgICAgICAgIH0pLmpvaW4oJzsnKSwgJzsnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE5FWFQgPSBibG9jay5kZWYoTkVYVF9TVEFURSwgJy4nLCBwYXJhbSlcbiAgICAgICAgdmFyIGlmdGUgPSBlbnYuY29uZChORVhULCAnIT09JywgQ1VSUkVOVF9TVEFURSwgJy4nLCBwYXJhbSlcbiAgICAgICAgYmxvY2soaWZ0ZSlcbiAgICAgICAgaWYgKHBhcmFtIGluIEdMX0ZMQUdTKSB7XG4gICAgICAgICAgaWZ0ZShcbiAgICAgICAgICAgIGVudi5jb25kKE5FWFQpXG4gICAgICAgICAgICAgIC50aGVuKEdMLCAnLmVuYWJsZSgnLCBHTF9GTEFHU1twYXJhbV0sICcpOycpXG4gICAgICAgICAgICAgIC5lbHNlKEdMLCAnLmRpc2FibGUoJywgR0xfRkxBR1NbcGFyYW1dLCAnKTsnKSxcbiAgICAgICAgICAgIENVUlJFTlRfU1RBVEUsICcuJywgcGFyYW0sICc9JywgTkVYVCwgJzsnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmdGUoXG4gICAgICAgICAgICBHTCwgJy4nLCBHTF9WQVJJQUJMRVNbcGFyYW1dLCAnKCcsIE5FWFQsICcpOycsXG4gICAgICAgICAgICBDVVJSRU5UX1NUQVRFLCAnLicsIHBhcmFtLCAnPScsIE5FWFQsICc7JylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgaWYgKE9iamVjdC5rZXlzKGFyZ3Muc3RhdGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYmxvY2soQ1VSUkVOVF9TVEFURSwgJy5kaXJ0eT1mYWxzZTsnKVxuICAgIH1cbiAgICBzY29wZShibG9jaylcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXRTZXRPcHRpb25zIChlbnYsIHNjb3BlLCBvcHRpb25zLCBmaWx0ZXIpIHtcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgIHZhciBDVVJSRU5UX1ZBUlMgPSBlbnYuY3VycmVudFxuICAgIHZhciBDVVJSRU5UX1NUQVRFID0gc2hhcmVkLmN1cnJlbnRcbiAgICB2YXIgR0wgPSBzaGFyZWQuZ2xcbiAgICBzb3J0U3RhdGUoT2JqZWN0LmtleXMob3B0aW9ucykpLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgZGVmbiA9IG9wdGlvbnNbcGFyYW1dXG4gICAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoZGVmbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB2YXIgdmFyaWFibGUgPSBkZWZuLmFwcGVuZChlbnYsIHNjb3BlKVxuICAgICAgaWYgKEdMX0ZMQUdTW3BhcmFtXSkge1xuICAgICAgICB2YXIgZmxhZyA9IEdMX0ZMQUdTW3BhcmFtXVxuICAgICAgICBpZiAoaXNTdGF0aWMoZGVmbikpIHtcbiAgICAgICAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgICAgICAgIHNjb3BlKEdMLCAnLmVuYWJsZSgnLCBmbGFnLCAnKTsnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzY29wZShHTCwgJy5kaXNhYmxlKCcsIGZsYWcsICcpOycpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjb3BlKGVudi5jb25kKHZhcmlhYmxlKVxuICAgICAgICAgICAgLnRoZW4oR0wsICcuZW5hYmxlKCcsIGZsYWcsICcpOycpXG4gICAgICAgICAgICAuZWxzZShHTCwgJy5kaXNhYmxlKCcsIGZsYWcsICcpOycpKVxuICAgICAgICB9XG4gICAgICAgIHNjb3BlKENVUlJFTlRfU1RBVEUsICcuJywgcGFyYW0sICc9JywgdmFyaWFibGUsICc7JylcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheUxpa2UodmFyaWFibGUpKSB7XG4gICAgICAgIHZhciBDVVJSRU5UID0gQ1VSUkVOVF9WQVJTW3BhcmFtXVxuICAgICAgICBzY29wZShcbiAgICAgICAgICBHTCwgJy4nLCBHTF9WQVJJQUJMRVNbcGFyYW1dLCAnKCcsIHZhcmlhYmxlLCAnKTsnLFxuICAgICAgICAgIHZhcmlhYmxlLm1hcChmdW5jdGlvbiAodiwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIENVUlJFTlQgKyAnWycgKyBpICsgJ109JyArIHZcbiAgICAgICAgICB9KS5qb2luKCc7JyksICc7JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjb3BlKFxuICAgICAgICAgIEdMLCAnLicsIEdMX1ZBUklBQkxFU1twYXJhbV0sICcoJywgdmFyaWFibGUsICcpOycsXG4gICAgICAgICAgQ1VSUkVOVF9TVEFURSwgJy4nLCBwYXJhbSwgJz0nLCB2YXJpYWJsZSwgJzsnKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBpbmplY3RFeHRlbnNpb25zIChlbnYsIHNjb3BlKSB7XG4gICAgaWYgKGV4dEluc3RhbmNpbmcpIHtcbiAgICAgIGVudi5pbnN0YW5jaW5nID0gc2NvcGUuZGVmKFxuICAgICAgICBlbnYuc2hhcmVkLmV4dGVuc2lvbnMsICcuYW5nbGVfaW5zdGFuY2VkX2FycmF5cycpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdFByb2ZpbGUgKGVudiwgc2NvcGUsIGFyZ3MsIHVzZVNjb3BlLCBpbmNyZW1lbnRDb3VudGVyKSB7XG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcbiAgICB2YXIgU1RBVFMgPSBlbnYuc3RhdHNcbiAgICB2YXIgQ1VSUkVOVF9TVEFURSA9IHNoYXJlZC5jdXJyZW50XG4gICAgdmFyIFRJTUVSID0gc2hhcmVkLnRpbWVyXG4gICAgdmFyIHByb2ZpbGVBcmcgPSBhcmdzLnByb2ZpbGVcblxuICAgIGZ1bmN0aW9uIHBlcmZDb3VudGVyICgpIHtcbiAgICAgIGlmICh0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAnRGF0ZS5ub3coKSdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAncGVyZm9ybWFuY2Uubm93KCknXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIENQVV9TVEFSVCwgUVVFUllfQ09VTlRFUlxuICAgIGZ1bmN0aW9uIGVtaXRQcm9maWxlU3RhcnQgKGJsb2NrKSB7XG4gICAgICBDUFVfU1RBUlQgPSBzY29wZS5kZWYoKVxuICAgICAgYmxvY2soQ1BVX1NUQVJULCAnPScsIHBlcmZDb3VudGVyKCksICc7JylcbiAgICAgIGlmICh0eXBlb2YgaW5jcmVtZW50Q291bnRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYmxvY2soU1RBVFMsICcuY291bnQrPScsIGluY3JlbWVudENvdW50ZXIsICc7JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJsb2NrKFNUQVRTLCAnLmNvdW50Kys7JylcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICBpZiAodXNlU2NvcGUpIHtcbiAgICAgICAgICBRVUVSWV9DT1VOVEVSID0gc2NvcGUuZGVmKClcbiAgICAgICAgICBibG9jayhRVUVSWV9DT1VOVEVSLCAnPScsIFRJTUVSLCAnLmdldE51bVBlbmRpbmdRdWVyaWVzKCk7JylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBibG9jayhUSU1FUiwgJy5iZWdpblF1ZXJ5KCcsIFNUQVRTLCAnKTsnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdFByb2ZpbGVFbmQgKGJsb2NrKSB7XG4gICAgICBibG9jayhTVEFUUywgJy5jcHVUaW1lKz0nLCBwZXJmQ291bnRlcigpLCAnLScsIENQVV9TVEFSVCwgJzsnKVxuICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgIGlmICh1c2VTY29wZSkge1xuICAgICAgICAgIGJsb2NrKFRJTUVSLCAnLnB1c2hTY29wZVN0YXRzKCcsXG4gICAgICAgICAgICBRVUVSWV9DT1VOVEVSLCAnLCcsXG4gICAgICAgICAgICBUSU1FUiwgJy5nZXROdW1QZW5kaW5nUXVlcmllcygpLCcsXG4gICAgICAgICAgICBTVEFUUywgJyk7JylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBibG9jayhUSU1FUiwgJy5lbmRRdWVyeSgpOycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY29wZVByb2ZpbGUgKHZhbHVlKSB7XG4gICAgICB2YXIgcHJldiA9IHNjb3BlLmRlZihDVVJSRU5UX1NUQVRFLCAnLnByb2ZpbGUnKVxuICAgICAgc2NvcGUoQ1VSUkVOVF9TVEFURSwgJy5wcm9maWxlPScsIHZhbHVlLCAnOycpXG4gICAgICBzY29wZS5leGl0KENVUlJFTlRfU1RBVEUsICcucHJvZmlsZT0nLCBwcmV2LCAnOycpXG4gICAgfVxuXG4gICAgdmFyIFVTRV9QUk9GSUxFXG4gICAgaWYgKHByb2ZpbGVBcmcpIHtcbiAgICAgIGlmIChpc1N0YXRpYyhwcm9maWxlQXJnKSkge1xuICAgICAgICBpZiAocHJvZmlsZUFyZy5lbmFibGUpIHtcbiAgICAgICAgICBlbWl0UHJvZmlsZVN0YXJ0KHNjb3BlKVxuICAgICAgICAgIGVtaXRQcm9maWxlRW5kKHNjb3BlLmV4aXQpXG4gICAgICAgICAgc2NvcGVQcm9maWxlKCd0cnVlJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY29wZVByb2ZpbGUoJ2ZhbHNlJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIFVTRV9QUk9GSUxFID0gcHJvZmlsZUFyZy5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIHNjb3BlUHJvZmlsZShVU0VfUFJPRklMRSlcbiAgICB9IGVsc2Uge1xuICAgICAgVVNFX1BST0ZJTEUgPSBzY29wZS5kZWYoQ1VSUkVOVF9TVEFURSwgJy5wcm9maWxlJylcbiAgICB9XG5cbiAgICB2YXIgc3RhcnQgPSBlbnYuYmxvY2soKVxuICAgIGVtaXRQcm9maWxlU3RhcnQoc3RhcnQpXG4gICAgc2NvcGUoJ2lmKCcsIFVTRV9QUk9GSUxFLCAnKXsnLCBzdGFydCwgJ30nKVxuICAgIHZhciBlbmQgPSBlbnYuYmxvY2soKVxuICAgIGVtaXRQcm9maWxlRW5kKGVuZClcbiAgICBzY29wZS5leGl0KCdpZignLCBVU0VfUFJPRklMRSwgJyl7JywgZW5kLCAnfScpXG4gIH1cblxuICBmdW5jdGlvbiBlbWl0QXR0cmlidXRlcyAoZW52LCBzY29wZSwgYXJncywgYXR0cmlidXRlcywgZmlsdGVyKSB7XG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcblxuICAgIGZ1bmN0aW9uIHR5cGVMZW5ndGggKHgpIHtcbiAgICAgIHN3aXRjaCAoeCkge1xuICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6XG4gICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6XG4gICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOlxuICAgICAgICAgIHJldHVybiAyXG4gICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzpcbiAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzpcbiAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6XG4gICAgICAgICAgcmV0dXJuIDNcbiAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OlxuICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDpcbiAgICAgICAgICByZXR1cm4gNFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdEJpbmRBdHRyaWJ1dGUgKEFUVFJJQlVURSwgc2l6ZSwgcmVjb3JkKSB7XG4gICAgICB2YXIgR0wgPSBzaGFyZWQuZ2xcblxuICAgICAgdmFyIExPQ0FUSU9OID0gc2NvcGUuZGVmKEFUVFJJQlVURSwgJy5sb2NhdGlvbicpXG4gICAgICB2YXIgQklORElORyA9IHNjb3BlLmRlZihzaGFyZWQuYXR0cmlidXRlcywgJ1snLCBMT0NBVElPTiwgJ10nKVxuXG4gICAgICB2YXIgU1RBVEUgPSByZWNvcmQuc3RhdGVcbiAgICAgIHZhciBCVUZGRVIgPSByZWNvcmQuYnVmZmVyXG4gICAgICB2YXIgQ09OU1RfQ09NUE9ORU5UUyA9IFtcbiAgICAgICAgcmVjb3JkLngsXG4gICAgICAgIHJlY29yZC55LFxuICAgICAgICByZWNvcmQueixcbiAgICAgICAgcmVjb3JkLndcbiAgICAgIF1cblxuICAgICAgdmFyIENPTU1PTl9LRVlTID0gW1xuICAgICAgICAnYnVmZmVyJyxcbiAgICAgICAgJ25vcm1hbGl6ZWQnLFxuICAgICAgICAnb2Zmc2V0JyxcbiAgICAgICAgJ3N0cmlkZSdcbiAgICAgIF1cblxuICAgICAgZnVuY3Rpb24gZW1pdEJ1ZmZlciAoKSB7XG4gICAgICAgIHNjb3BlKFxuICAgICAgICAgICdpZighJywgQklORElORywgJy5idWZmZXIpeycsXG4gICAgICAgICAgR0wsICcuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoJywgTE9DQVRJT04sICcpO30nKVxuXG4gICAgICAgIHZhciBUWVBFID0gcmVjb3JkLnR5cGVcbiAgICAgICAgdmFyIFNJWkVcbiAgICAgICAgaWYgKCFyZWNvcmQuc2l6ZSkge1xuICAgICAgICAgIFNJWkUgPSBzaXplXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgU0laRSA9IHNjb3BlLmRlZihyZWNvcmQuc2l6ZSwgJ3x8Jywgc2l6ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlKCdpZignLFxuICAgICAgICAgIEJJTkRJTkcsICcudHlwZSE9PScsIFRZUEUsICd8fCcsXG4gICAgICAgICAgQklORElORywgJy5zaXplIT09JywgU0laRSwgJ3x8JyxcbiAgICAgICAgICBDT01NT05fS0VZUy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIEJJTkRJTkcgKyAnLicgKyBrZXkgKyAnIT09JyArIHJlY29yZFtrZXldXG4gICAgICAgICAgfSkuam9pbignfHwnKSxcbiAgICAgICAgICAnKXsnLFxuICAgICAgICAgIEdMLCAnLmJpbmRCdWZmZXIoJywgR0xfQVJSQVlfQlVGRkVSJDIsICcsJywgQlVGRkVSLCAnLmJ1ZmZlcik7JyxcbiAgICAgICAgICBHTCwgJy52ZXJ0ZXhBdHRyaWJQb2ludGVyKCcsIFtcbiAgICAgICAgICAgIExPQ0FUSU9OLFxuICAgICAgICAgICAgU0laRSxcbiAgICAgICAgICAgIFRZUEUsXG4gICAgICAgICAgICByZWNvcmQubm9ybWFsaXplZCxcbiAgICAgICAgICAgIHJlY29yZC5zdHJpZGUsXG4gICAgICAgICAgICByZWNvcmQub2Zmc2V0XG4gICAgICAgICAgXSwgJyk7JyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnR5cGU9JywgVFlQRSwgJzsnLFxuICAgICAgICAgIEJJTkRJTkcsICcuc2l6ZT0nLCBTSVpFLCAnOycsXG4gICAgICAgICAgQ09NTU9OX0tFWVMubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBCSU5ESU5HICsgJy4nICsga2V5ICsgJz0nICsgcmVjb3JkW2tleV0gKyAnOydcbiAgICAgICAgICB9KS5qb2luKCcnKSxcbiAgICAgICAgICAnfScpXG5cbiAgICAgICAgaWYgKGV4dEluc3RhbmNpbmcpIHtcbiAgICAgICAgICB2YXIgRElWSVNPUiA9IHJlY29yZC5kaXZpc29yXG4gICAgICAgICAgc2NvcGUoXG4gICAgICAgICAgICAnaWYoJywgQklORElORywgJy5kaXZpc29yIT09JywgRElWSVNPUiwgJyl7JyxcbiAgICAgICAgICAgIGVudi5pbnN0YW5jaW5nLCAnLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSgnLCBbTE9DQVRJT04sIERJVklTT1JdLCAnKTsnLFxuICAgICAgICAgICAgQklORElORywgJy5kaXZpc29yPScsIERJVklTT1IsICc7fScpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZW1pdENvbnN0YW50ICgpIHtcbiAgICAgICAgc2NvcGUoXG4gICAgICAgICAgJ2lmKCcsIEJJTkRJTkcsICcuYnVmZmVyKXsnLFxuICAgICAgICAgIEdMLCAnLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgnLCBMT0NBVElPTiwgJyk7JyxcbiAgICAgICAgICBCSU5ESU5HLCAnLmJ1ZmZlcj1udWxsOycsXG4gICAgICAgICAgJ31pZignLCBDVVRFX0NPTVBPTkVOVFMubWFwKGZ1bmN0aW9uIChjLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gQklORElORyArICcuJyArIGMgKyAnIT09JyArIENPTlNUX0NPTVBPTkVOVFNbaV1cbiAgICAgICAgICB9KS5qb2luKCd8fCcpLCAnKXsnLFxuICAgICAgICAgIEdMLCAnLnZlcnRleEF0dHJpYjRmKCcsIExPQ0FUSU9OLCAnLCcsIENPTlNUX0NPTVBPTkVOVFMsICcpOycsXG4gICAgICAgICAgQ1VURV9DT01QT05FTlRTLm1hcChmdW5jdGlvbiAoYywgaSkge1xuICAgICAgICAgICAgcmV0dXJuIEJJTkRJTkcgKyAnLicgKyBjICsgJz0nICsgQ09OU1RfQ09NUE9ORU5UU1tpXSArICc7J1xuICAgICAgICAgIH0pLmpvaW4oJycpLFxuICAgICAgICAgICd9JylcbiAgICAgIH1cblxuICAgICAgaWYgKFNUQVRFID09PSBBVFRSSUJfU1RBVEVfUE9JTlRFUikge1xuICAgICAgICBlbWl0QnVmZmVyKClcbiAgICAgIH0gZWxzZSBpZiAoU1RBVEUgPT09IEFUVFJJQl9TVEFURV9DT05TVEFOVCkge1xuICAgICAgICBlbWl0Q29uc3RhbnQoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NvcGUoJ2lmKCcsIFNUQVRFLCAnPT09JywgQVRUUklCX1NUQVRFX1BPSU5URVIsICcpeycpXG4gICAgICAgIGVtaXRCdWZmZXIoKVxuICAgICAgICBzY29wZSgnfWVsc2V7JylcbiAgICAgICAgZW1pdENvbnN0YW50KClcbiAgICAgICAgc2NvcGUoJ30nKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZS5uYW1lXG4gICAgICB2YXIgYXJnID0gYXJncy5hdHRyaWJ1dGVzW25hbWVdXG4gICAgICB2YXIgcmVjb3JkXG4gICAgICBpZiAoYXJnKSB7XG4gICAgICAgIGlmICghZmlsdGVyKGFyZykpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByZWNvcmQgPSBhcmcuYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWZpbHRlcihTQ09QRV9ERUNMKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHZhciBzY29wZUF0dHJpYiA9IGVudi5zY29wZUF0dHJpYihuYW1lKVxuICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgc2NvcGVBdHRyaWIgKyAnLnN0YXRlJyxcbiAgICAgICAgICAgICdtaXNzaW5nIGF0dHJpYnV0ZSAnICsgbmFtZSlcbiAgICAgICAgfSlcbiAgICAgICAgcmVjb3JkID0ge31cbiAgICAgICAgT2JqZWN0LmtleXMobmV3IEF0dHJpYnV0ZVJlY29yZCgpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZWNvcmRba2V5XSA9IHNjb3BlLmRlZihzY29wZUF0dHJpYiwgJy4nLCBrZXkpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBlbWl0QmluZEF0dHJpYnV0ZShcbiAgICAgICAgZW52LmxpbmsoYXR0cmlidXRlKSwgdHlwZUxlbmd0aChhdHRyaWJ1dGUuaW5mby50eXBlKSwgcmVjb3JkKVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBlbWl0VW5pZm9ybXMgKGVudiwgc2NvcGUsIGFyZ3MsIHVuaWZvcm1zLCBmaWx0ZXIpIHtcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuXG4gICAgdmFyIGluZml4XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3Jtcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHVuaWZvcm0gPSB1bmlmb3Jtc1tpXVxuICAgICAgdmFyIG5hbWUgPSB1bmlmb3JtLm5hbWVcbiAgICAgIHZhciB0eXBlID0gdW5pZm9ybS5pbmZvLnR5cGVcbiAgICAgIHZhciBhcmcgPSBhcmdzLnVuaWZvcm1zW25hbWVdXG4gICAgICB2YXIgVU5JRk9STSA9IGVudi5saW5rKHVuaWZvcm0pXG4gICAgICB2YXIgTE9DQVRJT04gPSBVTklGT1JNICsgJy5sb2NhdGlvbidcblxuICAgICAgdmFyIFZBTFVFXG4gICAgICBpZiAoYXJnKSB7XG4gICAgICAgIGlmICghZmlsdGVyKGFyZykpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N0YXRpYyhhcmcpKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gYXJnLnZhbHVlXG4gICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyxcbiAgICAgICAgICAgICdtaXNzaW5nIHVuaWZvcm0gXCInICsgbmFtZSArICdcIicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgIGlmICh0eXBlID09PSBHTF9TQU1QTEVSXzJEIHx8IHR5cGUgPT09IEdMX1NBTVBMRVJfQ1VCRSkge1xuICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICAgKCh0eXBlID09PSBHTF9TQU1QTEVSXzJEICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlLl9yZWdsVHlwZSA9PT0gJ3RleHR1cmUyZCcgfHxcbiAgICAgICAgICAgICAgICB2YWx1ZS5fcmVnbFR5cGUgPT09ICdmcmFtZWJ1ZmZlcicpKSB8fFxuICAgICAgICAgICAgICAodHlwZSA9PT0gR0xfU0FNUExFUl9DVUJFICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlLl9yZWdsVHlwZSA9PT0gJ3RleHR1cmVDdWJlJyB8fFxuICAgICAgICAgICAgICAgIHZhbHVlLl9yZWdsVHlwZSA9PT0gJ2ZyYW1lYnVmZmVyQ3ViZScpKSksXG4gICAgICAgICAgICAgICdpbnZhbGlkIHRleHR1cmUgZm9yIHVuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgdmFyIFRFWF9WQUxVRSA9IGVudi5saW5rKHZhbHVlLl90ZXh0dXJlIHx8IHZhbHVlLmNvbG9yWzBdLl90ZXh0dXJlKVxuICAgICAgICAgICAgc2NvcGUoR0wsICcudW5pZm9ybTFpKCcsIExPQ0FUSU9OLCAnLCcsIFRFWF9WQUxVRSArICcuYmluZCgpKTsnKVxuICAgICAgICAgICAgc2NvcGUuZXhpdChURVhfVkFMVUUsICcudW5iaW5kKCk7JylcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZSA9PT0gR0xfRkxPQVRfTUFUMiB8fFxuICAgICAgICAgICAgdHlwZSA9PT0gR0xfRkxPQVRfTUFUMyB8fFxuICAgICAgICAgICAgdHlwZSA9PT0gR0xfRkxPQVRfTUFUNCkge1xuICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChpc0FycmF5TGlrZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgJ2ludmFsaWQgbWF0cml4IGZvciB1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICh0eXBlID09PSBHTF9GTE9BVF9NQVQyICYmIHZhbHVlLmxlbmd0aCA9PT0gNCkgfHxcbiAgICAgICAgICAgICAgICAodHlwZSA9PT0gR0xfRkxPQVRfTUFUMyAmJiB2YWx1ZS5sZW5ndGggPT09IDkpIHx8XG4gICAgICAgICAgICAgICAgKHR5cGUgPT09IEdMX0ZMT0FUX01BVDQgJiYgdmFsdWUubGVuZ3RoID09PSAxNiksXG4gICAgICAgICAgICAgICAgJ2ludmFsaWQgbGVuZ3RoIGZvciBtYXRyaXggdW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFyIE1BVF9WQUxVRSA9IGVudi5nbG9iYWwuZGVmKCduZXcgRmxvYXQzMkFycmF5KFsnICtcbiAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodmFsdWUpICsgJ10pJylcbiAgICAgICAgICAgIHZhciBkaW0gPSAyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gR0xfRkxPQVRfTUFUMykge1xuICAgICAgICAgICAgICBkaW0gPSAzXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEdMX0ZMT0FUX01BVDQpIHtcbiAgICAgICAgICAgICAgZGltID0gNFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NvcGUoXG4gICAgICAgICAgICAgIEdMLCAnLnVuaWZvcm1NYXRyaXgnLCBkaW0sICdmdignLFxuICAgICAgICAgICAgICBMT0NBVElPTiwgJyxmYWxzZSwnLCBNQVRfVkFMVUUsICcpOycpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUJDg6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZSh2YWx1ZSwgJ251bWJlcicsICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICcxZidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMixcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICcyZidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMyxcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICczZidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gNCxcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICc0ZidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZSh2YWx1ZSwgJ2Jvb2xlYW4nLCAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnMWknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9JTlQkMzpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHZhbHVlLCAnbnVtYmVyJywgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzFpJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDIsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnMmknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAyLFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzJpJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDMsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnM2knXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAzLFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzNpJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDQsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnNGknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSA0LFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzRpJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZShHTCwgJy51bmlmb3JtJywgaW5maXgsICcoJywgTE9DQVRJT04sICcsJyxcbiAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodmFsdWUpIDogdmFsdWUsXG4gICAgICAgICAgICAgICcpOycpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgVkFMVUUgPSBhcmcuYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghZmlsdGVyKFNDT1BFX0RFQ0wpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBWQUxVRSA9IHNjb3BlLmRlZihzaGFyZWQudW5pZm9ybXMsICdbJywgc3RyaW5nU3RvcmUuaWQobmFtZSksICddJylcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09IEdMX1NBTVBMRVJfMkQpIHtcbiAgICAgICAgY2hlY2skMSghQXJyYXkuaXNBcnJheShWQUxVRSksICdtdXN0IHNwZWNpZnkgYSBzY2FsYXIgcHJvcCBmb3IgdGV4dHVyZXMnKVxuICAgICAgICBzY29wZShcbiAgICAgICAgICAnaWYoJywgVkFMVUUsICcmJicsIFZBTFVFLCAnLl9yZWdsVHlwZT09PVwiZnJhbWVidWZmZXJcIil7JyxcbiAgICAgICAgICBWQUxVRSwgJz0nLCBWQUxVRSwgJy5jb2xvclswXTsnLFxuICAgICAgICAgICd9JylcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gR0xfU0FNUExFUl9DVUJFKSB7XG4gICAgICAgIGNoZWNrJDEoIUFycmF5LmlzQXJyYXkoVkFMVUUpLCAnbXVzdCBzcGVjaWZ5IGEgc2NhbGFyIHByb3AgZm9yIGN1YmUgbWFwcycpXG4gICAgICAgIHNjb3BlKFxuICAgICAgICAgICdpZignLCBWQUxVRSwgJyYmJywgVkFMVUUsICcuX3JlZ2xUeXBlPT09XCJmcmFtZWJ1ZmZlckN1YmVcIil7JyxcbiAgICAgICAgICBWQUxVRSwgJz0nLCBWQUxVRSwgJy5jb2xvclswXTsnLFxuICAgICAgICAgICd9JylcbiAgICAgIH1cblxuICAgICAgLy8gcGVyZm9ybSB0eXBlIHZhbGlkYXRpb25cbiAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBlbWl0Q2hlY2sgKHByZWQsIG1lc3NhZ2UpIHtcbiAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLCBwcmVkLFxuICAgICAgICAgICAgJ2JhZCBkYXRhIG9yIG1pc3NpbmcgZm9yIHVuaWZvcm0gXCInICsgbmFtZSArICdcIi4gICcgKyBtZXNzYWdlKVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tUeXBlICh0eXBlKSB7XG4gICAgICAgICAgY2hlY2skMSghQXJyYXkuaXNBcnJheShWQUxVRSksICdtdXN0IG5vdCBzcGVjaWZ5IGFuIGFycmF5IHR5cGUgZm9yIHVuaWZvcm0nKVxuICAgICAgICAgIGVtaXRDaGVjayhcbiAgICAgICAgICAgICd0eXBlb2YgJyArIFZBTFVFICsgJz09PVwiJyArIHR5cGUgKyAnXCInLFxuICAgICAgICAgICAgJ2ludmFsaWQgdHlwZSwgZXhwZWN0ZWQgJyArIHR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjaGVja1ZlY3RvciAobiwgdHlwZSkge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KFZBTFVFKSkge1xuICAgICAgICAgICAgY2hlY2skMShWQUxVRS5sZW5ndGggPT09IG4sICdtdXN0IGhhdmUgbGVuZ3RoICcgKyBuKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbWl0Q2hlY2soXG4gICAgICAgICAgICAgIHNoYXJlZC5pc0FycmF5TGlrZSArICcoJyArIFZBTFVFICsgJykmJicgKyBWQUxVRSArICcubGVuZ3RoPT09JyArIG4sXG4gICAgICAgICAgICAgICdpbnZhbGlkIHZlY3Rvciwgc2hvdWxkIGhhdmUgbGVuZ3RoICcgKyBuLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjaGVja1RleHR1cmUgKHRhcmdldCkge1xuICAgICAgICAgIGNoZWNrJDEoIUFycmF5LmlzQXJyYXkoVkFMVUUpLCAnbXVzdCBub3Qgc3BlY2lmeSBhIHZhbHVlIHR5cGUnKVxuICAgICAgICAgIGVtaXRDaGVjayhcbiAgICAgICAgICAgICd0eXBlb2YgJyArIFZBTFVFICsgJz09PVwiZnVuY3Rpb25cIiYmJyArXG4gICAgICAgICAgICBWQUxVRSArICcuX3JlZ2xUeXBlPT09XCJ0ZXh0dXJlJyArXG4gICAgICAgICAgICAodGFyZ2V0ID09PSBHTF9URVhUVVJFXzJEJDMgPyAnMmQnIDogJ0N1YmUnKSArICdcIicsXG4gICAgICAgICAgICAnaW52YWxpZCB0ZXh0dXJlIHR5cGUnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgR0xfSU5UJDM6XG4gICAgICAgICAgICBjaGVja1R5cGUoJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6XG4gICAgICAgICAgICBjaGVja1ZlY3RvcigyLCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDMsICdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoNCwgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfRkxPQVQkODpcbiAgICAgICAgICAgIGNoZWNrVHlwZSgnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoMiwgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDMsICdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6XG4gICAgICAgICAgICBjaGVja1ZlY3Rvcig0LCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9CT09MOlxuICAgICAgICAgICAgY2hlY2tUeXBlKCdib29sZWFuJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6XG4gICAgICAgICAgICBjaGVja1ZlY3RvcigyLCAnYm9vbGVhbicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoMywgJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDQsICdib29sZWFuJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoNCwgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDksICdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6XG4gICAgICAgICAgICBjaGVja1ZlY3RvcigxNiwgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDpcbiAgICAgICAgICAgIGNoZWNrVGV4dHVyZShHTF9URVhUVVJFXzJEJDMpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOlxuICAgICAgICAgICAgY2hlY2tUZXh0dXJlKEdMX1RFWFRVUkVfQ1VCRV9NQVAkMilcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHZhciB1bnJvbGwgPSAxXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOlxuICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRTpcbiAgICAgICAgICB2YXIgVEVYID0gc2NvcGUuZGVmKFZBTFVFLCAnLl90ZXh0dXJlJylcbiAgICAgICAgICBzY29wZShHTCwgJy51bmlmb3JtMWkoJywgTE9DQVRJT04sICcsJywgVEVYLCAnLmJpbmQoKSk7JylcbiAgICAgICAgICBzY29wZS5leGl0KFRFWCwgJy51bmJpbmQoKTsnKVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBHTF9JTlQkMzpcbiAgICAgICAgY2FzZSBHTF9CT09MOlxuICAgICAgICAgIGluZml4ID0gJzFpJ1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjpcbiAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6XG4gICAgICAgICAgaW5maXggPSAnMmknXG4gICAgICAgICAgdW5yb2xsID0gMlxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzpcbiAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6XG4gICAgICAgICAgaW5maXggPSAnM2knXG4gICAgICAgICAgdW5yb2xsID0gM1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDpcbiAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6XG4gICAgICAgICAgaW5maXggPSAnNGknXG4gICAgICAgICAgdW5yb2xsID0gNFxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9GTE9BVCQ4OlxuICAgICAgICAgIGluZml4ID0gJzFmJ1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOlxuICAgICAgICAgIGluZml4ID0gJzJmJ1xuICAgICAgICAgIHVucm9sbCA9IDJcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzpcbiAgICAgICAgICBpbmZpeCA9ICczZidcbiAgICAgICAgICB1bnJvbGwgPSAzXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6XG4gICAgICAgICAgaW5maXggPSAnNGYnXG4gICAgICAgICAgdW5yb2xsID0gNFxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOlxuICAgICAgICAgIGluZml4ID0gJ01hdHJpeDJmdidcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzpcbiAgICAgICAgICBpbmZpeCA9ICdNYXRyaXgzZnYnXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6XG4gICAgICAgICAgaW5maXggPSAnTWF0cml4NGZ2J1xuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNjb3BlKEdMLCAnLnVuaWZvcm0nLCBpbmZpeCwgJygnLCBMT0NBVElPTiwgJywnKVxuICAgICAgaWYgKGluZml4LmNoYXJBdCgwKSA9PT0gJ00nKSB7XG4gICAgICAgIHZhciBtYXRTaXplID0gTWF0aC5wb3codHlwZSAtIEdMX0ZMT0FUX01BVDIgKyAyLCAyKVxuICAgICAgICB2YXIgU1RPUkFHRSA9IGVudi5nbG9iYWwuZGVmKCduZXcgRmxvYXQzMkFycmF5KCcsIG1hdFNpemUsICcpJylcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoVkFMVUUpKSB7XG4gICAgICAgICAgc2NvcGUoXG4gICAgICAgICAgICAnZmFsc2UsKCcsXG4gICAgICAgICAgICBsb29wKG1hdFNpemUsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBTVE9SQUdFICsgJ1snICsgaSArICddPScgKyBWQUxVRVtpXVxuICAgICAgICAgICAgfSksICcsJywgU1RPUkFHRSwgJyknKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjb3BlKFxuICAgICAgICAgICAgJ2ZhbHNlLChBcnJheS5pc0FycmF5KCcsIFZBTFVFLCAnKXx8JywgVkFMVUUsICcgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpPycsIFZBTFVFLCAnOignLFxuICAgICAgICAgICAgbG9vcChtYXRTaXplLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICByZXR1cm4gU1RPUkFHRSArICdbJyArIGkgKyAnXT0nICsgVkFMVUUgKyAnWycgKyBpICsgJ10nXG4gICAgICAgICAgICB9KSwgJywnLCBTVE9SQUdFLCAnKScpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodW5yb2xsID4gMSkge1xuICAgICAgICBzY29wZShsb29wKHVucm9sbCwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShWQUxVRSkgPyBWQUxVRVtpXSA6IFZBTFVFICsgJ1snICsgaSArICddJ1xuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEoIUFycmF5LmlzQXJyYXkoVkFMVUUpLCAndW5pZm9ybSB2YWx1ZSBtdXN0IG5vdCBiZSBhbiBhcnJheScpXG4gICAgICAgIHNjb3BlKFZBTFVFKVxuICAgICAgfVxuICAgICAgc2NvcGUoJyk7JylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0RHJhdyAoZW52LCBvdXRlciwgaW5uZXIsIGFyZ3MpIHtcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuICAgIHZhciBEUkFXX1NUQVRFID0gc2hhcmVkLmRyYXdcblxuICAgIHZhciBkcmF3T3B0aW9ucyA9IGFyZ3MuZHJhd1xuXG4gICAgZnVuY3Rpb24gZW1pdEVsZW1lbnRzICgpIHtcbiAgICAgIHZhciBkZWZuID0gZHJhd09wdGlvbnMuZWxlbWVudHNcbiAgICAgIHZhciBFTEVNRU5UU1xuICAgICAgdmFyIHNjb3BlID0gb3V0ZXJcbiAgICAgIGlmIChkZWZuKSB7XG4gICAgICAgIGlmICgoZGVmbi5jb250ZXh0RGVwICYmIGFyZ3MuY29udGV4dER5bmFtaWMpIHx8IGRlZm4ucHJvcERlcCkge1xuICAgICAgICAgIHNjb3BlID0gaW5uZXJcbiAgICAgICAgfVxuICAgICAgICBFTEVNRU5UUyA9IGRlZm4uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBFTEVNRU5UUyA9IHNjb3BlLmRlZihEUkFXX1NUQVRFLCAnLicsIFNfRUxFTUVOVFMpXG4gICAgICB9XG4gICAgICBpZiAoRUxFTUVOVFMpIHtcbiAgICAgICAgc2NvcGUoXG4gICAgICAgICAgJ2lmKCcgKyBFTEVNRU5UUyArICcpJyArXG4gICAgICAgICAgR0wgKyAnLmJpbmRCdWZmZXIoJyArIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSJDEgKyAnLCcgKyBFTEVNRU5UUyArICcuYnVmZmVyLmJ1ZmZlcik7JylcbiAgICAgIH1cbiAgICAgIHJldHVybiBFTEVNRU5UU1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVtaXRDb3VudCAoKSB7XG4gICAgICB2YXIgZGVmbiA9IGRyYXdPcHRpb25zLmNvdW50XG4gICAgICB2YXIgQ09VTlRcbiAgICAgIHZhciBzY29wZSA9IG91dGVyXG4gICAgICBpZiAoZGVmbikge1xuICAgICAgICBpZiAoKGRlZm4uY29udGV4dERlcCAmJiBhcmdzLmNvbnRleHREeW5hbWljKSB8fCBkZWZuLnByb3BEZXApIHtcbiAgICAgICAgICBzY29wZSA9IGlubmVyXG4gICAgICAgIH1cbiAgICAgICAgQ09VTlQgPSBkZWZuLmFwcGVuZChlbnYsIHNjb3BlKVxuICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoZGVmbi5NSVNTSU5HKSB7XG4gICAgICAgICAgICBlbnYuYXNzZXJ0KG91dGVyLCAnZmFsc2UnLCAnbWlzc2luZyB2ZXJ0ZXggY291bnQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVmbi5EWU5BTUlDKSB7XG4gICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLCBDT1VOVCArICc+PTAnLCAnbWlzc2luZyB2ZXJ0ZXggY291bnQnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIENPVU5UID0gc2NvcGUuZGVmKERSQVdfU1RBVEUsICcuJywgU19DT1VOVClcbiAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZW52LmFzc2VydChzY29wZSwgQ09VTlQgKyAnPj0wJywgJ21pc3NpbmcgdmVydGV4IGNvdW50JylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBDT1VOVFxuICAgIH1cblxuICAgIHZhciBFTEVNRU5UUyA9IGVtaXRFbGVtZW50cygpXG4gICAgZnVuY3Rpb24gZW1pdFZhbHVlIChuYW1lKSB7XG4gICAgICB2YXIgZGVmbiA9IGRyYXdPcHRpb25zW25hbWVdXG4gICAgICBpZiAoZGVmbikge1xuICAgICAgICBpZiAoKGRlZm4uY29udGV4dERlcCAmJiBhcmdzLmNvbnRleHREeW5hbWljKSB8fCBkZWZuLnByb3BEZXApIHtcbiAgICAgICAgICByZXR1cm4gZGVmbi5hcHBlbmQoZW52LCBpbm5lcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZGVmbi5hcHBlbmQoZW52LCBvdXRlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG91dGVyLmRlZihEUkFXX1NUQVRFLCAnLicsIG5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFBSSU1JVElWRSA9IGVtaXRWYWx1ZShTX1BSSU1JVElWRSlcbiAgICB2YXIgT0ZGU0VUID0gZW1pdFZhbHVlKFNfT0ZGU0VUKVxuXG4gICAgdmFyIENPVU5UID0gZW1pdENvdW50KClcbiAgICBpZiAodHlwZW9mIENPVU5UID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKENPVU5UID09PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbm5lcignaWYoJywgQ09VTlQsICcpeycpXG4gICAgICBpbm5lci5leGl0KCd9JylcbiAgICB9XG5cbiAgICB2YXIgSU5TVEFOQ0VTLCBFWFRfSU5TVEFOQ0lOR1xuICAgIGlmIChleHRJbnN0YW5jaW5nKSB7XG4gICAgICBJTlNUQU5DRVMgPSBlbWl0VmFsdWUoU19JTlNUQU5DRVMpXG4gICAgICBFWFRfSU5TVEFOQ0lORyA9IGVudi5pbnN0YW5jaW5nXG4gICAgfVxuXG4gICAgdmFyIEVMRU1FTlRfVFlQRSA9IEVMRU1FTlRTICsgJy50eXBlJ1xuXG4gICAgdmFyIGVsZW1lbnRzU3RhdGljID0gZHJhd09wdGlvbnMuZWxlbWVudHMgJiYgaXNTdGF0aWMoZHJhd09wdGlvbnMuZWxlbWVudHMpXG5cbiAgICBmdW5jdGlvbiBlbWl0SW5zdGFuY2luZyAoKSB7XG4gICAgICBmdW5jdGlvbiBkcmF3RWxlbWVudHMgKCkge1xuICAgICAgICBpbm5lcihFWFRfSU5TVEFOQ0lORywgJy5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSgnLCBbXG4gICAgICAgICAgUFJJTUlUSVZFLFxuICAgICAgICAgIENPVU5ULFxuICAgICAgICAgIEVMRU1FTlRfVFlQRSxcbiAgICAgICAgICBPRkZTRVQgKyAnPDwoKCcgKyBFTEVNRU5UX1RZUEUgKyAnLScgKyBHTF9VTlNJR05FRF9CWVRFJDggKyAnKT4+MSknLFxuICAgICAgICAgIElOU1RBTkNFU1xuICAgICAgICBdLCAnKTsnKVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkcmF3QXJyYXlzICgpIHtcbiAgICAgICAgaW5uZXIoRVhUX0lOU1RBTkNJTkcsICcuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKCcsXG4gICAgICAgICAgW1BSSU1JVElWRSwgT0ZGU0VULCBDT1VOVCwgSU5TVEFOQ0VTXSwgJyk7JylcbiAgICAgIH1cblxuICAgICAgaWYgKEVMRU1FTlRTKSB7XG4gICAgICAgIGlmICghZWxlbWVudHNTdGF0aWMpIHtcbiAgICAgICAgICBpbm5lcignaWYoJywgRUxFTUVOVFMsICcpeycpXG4gICAgICAgICAgZHJhd0VsZW1lbnRzKClcbiAgICAgICAgICBpbm5lcignfWVsc2V7JylcbiAgICAgICAgICBkcmF3QXJyYXlzKClcbiAgICAgICAgICBpbm5lcignfScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZHJhd0VsZW1lbnRzKClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhd0FycmF5cygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdFJlZ3VsYXIgKCkge1xuICAgICAgZnVuY3Rpb24gZHJhd0VsZW1lbnRzICgpIHtcbiAgICAgICAgaW5uZXIoR0wgKyAnLmRyYXdFbGVtZW50cygnICsgW1xuICAgICAgICAgIFBSSU1JVElWRSxcbiAgICAgICAgICBDT1VOVCxcbiAgICAgICAgICBFTEVNRU5UX1RZUEUsXG4gICAgICAgICAgT0ZGU0VUICsgJzw8KCgnICsgRUxFTUVOVF9UWVBFICsgJy0nICsgR0xfVU5TSUdORURfQllURSQ4ICsgJyk+PjEpJ1xuICAgICAgICBdICsgJyk7JylcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZHJhd0FycmF5cyAoKSB7XG4gICAgICAgIGlubmVyKEdMICsgJy5kcmF3QXJyYXlzKCcgKyBbUFJJTUlUSVZFLCBPRkZTRVQsIENPVU5UXSArICcpOycpXG4gICAgICB9XG5cbiAgICAgIGlmIChFTEVNRU5UUykge1xuICAgICAgICBpZiAoIWVsZW1lbnRzU3RhdGljKSB7XG4gICAgICAgICAgaW5uZXIoJ2lmKCcsIEVMRU1FTlRTLCAnKXsnKVxuICAgICAgICAgIGRyYXdFbGVtZW50cygpXG4gICAgICAgICAgaW5uZXIoJ31lbHNleycpXG4gICAgICAgICAgZHJhd0FycmF5cygpXG4gICAgICAgICAgaW5uZXIoJ30nKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRyYXdFbGVtZW50cygpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYXdBcnJheXMoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHRJbnN0YW5jaW5nICYmICh0eXBlb2YgSU5TVEFOQ0VTICE9PSAnbnVtYmVyJyB8fCBJTlNUQU5DRVMgPj0gMCkpIHtcbiAgICAgIGlmICh0eXBlb2YgSU5TVEFOQ0VTID09PSAnc3RyaW5nJykge1xuICAgICAgICBpbm5lcignaWYoJywgSU5TVEFOQ0VTLCAnPjApeycpXG4gICAgICAgIGVtaXRJbnN0YW5jaW5nKClcbiAgICAgICAgaW5uZXIoJ31lbHNlIGlmKCcsIElOU1RBTkNFUywgJzwwKXsnKVxuICAgICAgICBlbWl0UmVndWxhcigpXG4gICAgICAgIGlubmVyKCd9JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXRJbnN0YW5jaW5nKClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdFJlZ3VsYXIoKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUJvZHkgKGVtaXRCb2R5LCBwYXJlbnRFbnYsIGFyZ3MsIHByb2dyYW0sIGNvdW50KSB7XG4gICAgdmFyIGVudiA9IGNyZWF0ZVJFR0xFbnZpcm9ubWVudCgpXG4gICAgdmFyIHNjb3BlID0gZW52LnByb2MoJ2JvZHknLCBjb3VudClcbiAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgIGVudi5jb21tYW5kU3RyID0gcGFyZW50RW52LmNvbW1hbmRTdHJcbiAgICAgIGVudi5jb21tYW5kID0gZW52LmxpbmsocGFyZW50RW52LmNvbW1hbmRTdHIpXG4gICAgfSlcbiAgICBpZiAoZXh0SW5zdGFuY2luZykge1xuICAgICAgZW52Lmluc3RhbmNpbmcgPSBzY29wZS5kZWYoXG4gICAgICAgIGVudi5zaGFyZWQuZXh0ZW5zaW9ucywgJy5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzJylcbiAgICB9XG4gICAgZW1pdEJvZHkoZW52LCBzY29wZSwgYXJncywgcHJvZ3JhbSlcbiAgICByZXR1cm4gZW52LmNvbXBpbGUoKS5ib2R5XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERSQVcgUFJPQ1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGZ1bmN0aW9uIGVtaXREcmF3Qm9keSAoZW52LCBkcmF3LCBhcmdzLCBwcm9ncmFtKSB7XG4gICAgaW5qZWN0RXh0ZW5zaW9ucyhlbnYsIGRyYXcpXG4gICAgaWYgKGFyZ3MudXNlVkFPKSB7XG4gICAgICBpZiAoYXJncy5kcmF3VkFPKSB7XG4gICAgICAgIGRyYXcoZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKCcsIGFyZ3MuZHJhd1ZBTy5hcHBlbmQoZW52LCBkcmF3KSwgJyk7JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYXcoZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKCcsIGVudi5zaGFyZWQudmFvLCAnLnRhcmdldFZBTyk7JylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZHJhdyhlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8obnVsbCk7JylcbiAgICAgIGVtaXRBdHRyaWJ1dGVzKGVudiwgZHJhdywgYXJncywgcHJvZ3JhbS5hdHRyaWJ1dGVzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9KVxuICAgIH1cbiAgICBlbWl0VW5pZm9ybXMoZW52LCBkcmF3LCBhcmdzLCBwcm9ncmFtLnVuaWZvcm1zLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0pXG4gICAgZW1pdERyYXcoZW52LCBkcmF3LCBkcmF3LCBhcmdzKVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdERyYXdQcm9jIChlbnYsIGFyZ3MpIHtcbiAgICB2YXIgZHJhdyA9IGVudi5wcm9jKCdkcmF3JywgMSlcblxuICAgIGluamVjdEV4dGVuc2lvbnMoZW52LCBkcmF3KVxuXG4gICAgZW1pdENvbnRleHQoZW52LCBkcmF3LCBhcmdzLmNvbnRleHQpXG4gICAgZW1pdFBvbGxGcmFtZWJ1ZmZlcihlbnYsIGRyYXcsIGFyZ3MuZnJhbWVidWZmZXIpXG5cbiAgICBlbWl0UG9sbFN0YXRlKGVudiwgZHJhdywgYXJncylcbiAgICBlbWl0U2V0T3B0aW9ucyhlbnYsIGRyYXcsIGFyZ3Muc3RhdGUpXG5cbiAgICBlbWl0UHJvZmlsZShlbnYsIGRyYXcsIGFyZ3MsIGZhbHNlLCB0cnVlKVxuXG4gICAgdmFyIHByb2dyYW0gPSBhcmdzLnNoYWRlci5wcm9nVmFyLmFwcGVuZChlbnYsIGRyYXcpXG4gICAgZHJhdyhlbnYuc2hhcmVkLmdsLCAnLnVzZVByb2dyYW0oJywgcHJvZ3JhbSwgJy5wcm9ncmFtKTsnKVxuXG4gICAgaWYgKGFyZ3Muc2hhZGVyLnByb2dyYW0pIHtcbiAgICAgIGVtaXREcmF3Qm9keShlbnYsIGRyYXcsIGFyZ3MsIGFyZ3Muc2hhZGVyLnByb2dyYW0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYXcoZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKG51bGwpOycpXG4gICAgICB2YXIgZHJhd0NhY2hlID0gZW52Lmdsb2JhbC5kZWYoJ3t9JylcbiAgICAgIHZhciBQUk9HX0lEID0gZHJhdy5kZWYocHJvZ3JhbSwgJy5pZCcpXG4gICAgICB2YXIgQ0FDSEVEX1BST0MgPSBkcmF3LmRlZihkcmF3Q2FjaGUsICdbJywgUFJPR19JRCwgJ10nKVxuICAgICAgZHJhdyhcbiAgICAgICAgZW52LmNvbmQoQ0FDSEVEX1BST0MpXG4gICAgICAgICAgLnRoZW4oQ0FDSEVEX1BST0MsICcuY2FsbCh0aGlzLGEwKTsnKVxuICAgICAgICAgIC5lbHNlKFxuICAgICAgICAgICAgQ0FDSEVEX1BST0MsICc9JywgZHJhd0NhY2hlLCAnWycsIFBST0dfSUQsICddPScsXG4gICAgICAgICAgICBlbnYubGluayhmdW5jdGlvbiAocHJvZ3JhbSkge1xuICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQm9keShlbWl0RHJhd0JvZHksIGVudiwgYXJncywgcHJvZ3JhbSwgMSlcbiAgICAgICAgICAgIH0pLCAnKCcsIHByb2dyYW0sICcpOycsXG4gICAgICAgICAgICBDQUNIRURfUFJPQywgJy5jYWxsKHRoaXMsYTApOycpKVxuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhhcmdzLnN0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICBkcmF3KGVudi5zaGFyZWQuY3VycmVudCwgJy5kaXJ0eT10cnVlOycpXG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBCQVRDSCBQUk9DXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBlbWl0QmF0Y2hEeW5hbWljU2hhZGVyQm9keSAoZW52LCBzY29wZSwgYXJncywgcHJvZ3JhbSkge1xuICAgIGVudi5iYXRjaElkID0gJ2ExJ1xuXG4gICAgaW5qZWN0RXh0ZW5zaW9ucyhlbnYsIHNjb3BlKVxuXG4gICAgZnVuY3Rpb24gYWxsICgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgZW1pdEF0dHJpYnV0ZXMoZW52LCBzY29wZSwgYXJncywgcHJvZ3JhbS5hdHRyaWJ1dGVzLCBhbGwpXG4gICAgZW1pdFVuaWZvcm1zKGVudiwgc2NvcGUsIGFyZ3MsIHByb2dyYW0udW5pZm9ybXMsIGFsbClcbiAgICBlbWl0RHJhdyhlbnYsIHNjb3BlLCBzY29wZSwgYXJncylcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXRCYXRjaEJvZHkgKGVudiwgc2NvcGUsIGFyZ3MsIHByb2dyYW0pIHtcbiAgICBpbmplY3RFeHRlbnNpb25zKGVudiwgc2NvcGUpXG5cbiAgICB2YXIgY29udGV4dER5bmFtaWMgPSBhcmdzLmNvbnRleHREZXBcblxuICAgIHZhciBCQVRDSF9JRCA9IHNjb3BlLmRlZigpXG4gICAgdmFyIFBST1BfTElTVCA9ICdhMCdcbiAgICB2YXIgTlVNX1BST1BTID0gJ2ExJ1xuICAgIHZhciBQUk9QUyA9IHNjb3BlLmRlZigpXG4gICAgZW52LnNoYXJlZC5wcm9wcyA9IFBST1BTXG4gICAgZW52LmJhdGNoSWQgPSBCQVRDSF9JRFxuXG4gICAgdmFyIG91dGVyID0gZW52LnNjb3BlKClcbiAgICB2YXIgaW5uZXIgPSBlbnYuc2NvcGUoKVxuXG4gICAgc2NvcGUoXG4gICAgICBvdXRlci5lbnRyeSxcbiAgICAgICdmb3IoJywgQkFUQ0hfSUQsICc9MDsnLCBCQVRDSF9JRCwgJzwnLCBOVU1fUFJPUFMsICc7KysnLCBCQVRDSF9JRCwgJyl7JyxcbiAgICAgIFBST1BTLCAnPScsIFBST1BfTElTVCwgJ1snLCBCQVRDSF9JRCwgJ107JyxcbiAgICAgIGlubmVyLFxuICAgICAgJ30nLFxuICAgICAgb3V0ZXIuZXhpdClcblxuICAgIGZ1bmN0aW9uIGlzSW5uZXJEZWZuIChkZWZuKSB7XG4gICAgICByZXR1cm4gKChkZWZuLmNvbnRleHREZXAgJiYgY29udGV4dER5bmFtaWMpIHx8IGRlZm4ucHJvcERlcClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc091dGVyRGVmbiAoZGVmbikge1xuICAgICAgcmV0dXJuICFpc0lubmVyRGVmbihkZWZuKVxuICAgIH1cblxuICAgIGlmIChhcmdzLm5lZWRzQ29udGV4dCkge1xuICAgICAgZW1pdENvbnRleHQoZW52LCBpbm5lciwgYXJncy5jb250ZXh0KVxuICAgIH1cbiAgICBpZiAoYXJncy5uZWVkc0ZyYW1lYnVmZmVyKSB7XG4gICAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgaW5uZXIsIGFyZ3MuZnJhbWVidWZmZXIpXG4gICAgfVxuICAgIGVtaXRTZXRPcHRpb25zKGVudiwgaW5uZXIsIGFyZ3Muc3RhdGUsIGlzSW5uZXJEZWZuKVxuXG4gICAgaWYgKGFyZ3MucHJvZmlsZSAmJiBpc0lubmVyRGVmbihhcmdzLnByb2ZpbGUpKSB7XG4gICAgICBlbWl0UHJvZmlsZShlbnYsIGlubmVyLCBhcmdzLCBmYWxzZSwgdHJ1ZSlcbiAgICB9XG5cbiAgICBpZiAoIXByb2dyYW0pIHtcbiAgICAgIHZhciBwcm9nQ2FjaGUgPSBlbnYuZ2xvYmFsLmRlZigne30nKVxuICAgICAgdmFyIFBST0dSQU0gPSBhcmdzLnNoYWRlci5wcm9nVmFyLmFwcGVuZChlbnYsIGlubmVyKVxuICAgICAgdmFyIFBST0dfSUQgPSBpbm5lci5kZWYoUFJPR1JBTSwgJy5pZCcpXG4gICAgICB2YXIgQ0FDSEVEX1BST0MgPSBpbm5lci5kZWYocHJvZ0NhY2hlLCAnWycsIFBST0dfSUQsICddJylcbiAgICAgIGlubmVyKFxuICAgICAgICBlbnYuc2hhcmVkLmdsLCAnLnVzZVByb2dyYW0oJywgUFJPR1JBTSwgJy5wcm9ncmFtKTsnLFxuICAgICAgICAnaWYoIScsIENBQ0hFRF9QUk9DLCAnKXsnLFxuICAgICAgICBDQUNIRURfUFJPQywgJz0nLCBwcm9nQ2FjaGUsICdbJywgUFJPR19JRCwgJ109JyxcbiAgICAgICAgZW52LmxpbmsoZnVuY3Rpb24gKHByb2dyYW0pIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQm9keShcbiAgICAgICAgICAgIGVtaXRCYXRjaER5bmFtaWNTaGFkZXJCb2R5LCBlbnYsIGFyZ3MsIHByb2dyYW0sIDIpXG4gICAgICAgIH0pLCAnKCcsIFBST0dSQU0sICcpO30nLFxuICAgICAgICBDQUNIRURfUFJPQywgJy5jYWxsKHRoaXMsYTBbJywgQkFUQ0hfSUQsICddLCcsIEJBVENIX0lELCAnKTsnKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYXJncy51c2VWQU8pIHtcbiAgICAgICAgaWYgKGFyZ3MuZHJhd1ZBTykge1xuICAgICAgICAgIGlmIChpc0lubmVyRGVmbihhcmdzLmRyYXdWQU8pKSB7XG4gICAgICAgICAgICAvLyB2YW8gaXMgYSBwcm9wXG4gICAgICAgICAgICBpbm5lcihlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgYXJncy5kcmF3VkFPLmFwcGVuZChlbnYsIGlubmVyKSwgJyk7JylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdmFvIGlzIGludmFyaWFudFxuICAgICAgICAgICAgb3V0ZXIoZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKCcsIGFyZ3MuZHJhd1ZBTy5hcHBlbmQoZW52LCBvdXRlciksICcpOycpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHNjb3BlZCB2YW8gYmluZGluZ1xuICAgICAgICAgIG91dGVyKGVudi5zaGFyZWQudmFvLCAnLnNldFZBTygnLCBlbnYuc2hhcmVkLnZhbywgJy50YXJnZXRWQU8pOycpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dGVyKGVudi5zaGFyZWQudmFvLCAnLnNldFZBTyhudWxsKTsnKVxuICAgICAgICBlbWl0QXR0cmlidXRlcyhlbnYsIG91dGVyLCBhcmdzLCBwcm9ncmFtLmF0dHJpYnV0ZXMsIGlzT3V0ZXJEZWZuKVxuICAgICAgICBlbWl0QXR0cmlidXRlcyhlbnYsIGlubmVyLCBhcmdzLCBwcm9ncmFtLmF0dHJpYnV0ZXMsIGlzSW5uZXJEZWZuKVxuICAgICAgfVxuICAgICAgZW1pdFVuaWZvcm1zKGVudiwgb3V0ZXIsIGFyZ3MsIHByb2dyYW0udW5pZm9ybXMsIGlzT3V0ZXJEZWZuKVxuICAgICAgZW1pdFVuaWZvcm1zKGVudiwgaW5uZXIsIGFyZ3MsIHByb2dyYW0udW5pZm9ybXMsIGlzSW5uZXJEZWZuKVxuICAgICAgZW1pdERyYXcoZW52LCBvdXRlciwgaW5uZXIsIGFyZ3MpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdEJhdGNoUHJvYyAoZW52LCBhcmdzKSB7XG4gICAgdmFyIGJhdGNoID0gZW52LnByb2MoJ2JhdGNoJywgMilcbiAgICBlbnYuYmF0Y2hJZCA9ICcwJ1xuXG4gICAgaW5qZWN0RXh0ZW5zaW9ucyhlbnYsIGJhdGNoKVxuXG4gICAgLy8gQ2hlY2sgaWYgYW55IGNvbnRleHQgdmFyaWFibGVzIGRlcGVuZCBvbiBwcm9wc1xuICAgIHZhciBjb250ZXh0RHluYW1pYyA9IGZhbHNlXG4gICAgdmFyIG5lZWRzQ29udGV4dCA9IHRydWVcbiAgICBPYmplY3Qua2V5cyhhcmdzLmNvbnRleHQpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIGNvbnRleHREeW5hbWljID0gY29udGV4dER5bmFtaWMgfHwgYXJncy5jb250ZXh0W25hbWVdLnByb3BEZXBcbiAgICB9KVxuICAgIGlmICghY29udGV4dER5bmFtaWMpIHtcbiAgICAgIGVtaXRDb250ZXh0KGVudiwgYmF0Y2gsIGFyZ3MuY29udGV4dClcbiAgICAgIG5lZWRzQ29udGV4dCA9IGZhbHNlXG4gICAgfVxuXG4gICAgLy8gZnJhbWVidWZmZXIgc3RhdGUgYWZmZWN0cyBmcmFtZWJ1ZmZlcldpZHRoL2hlaWdodCBjb250ZXh0IHZhcnNcbiAgICB2YXIgZnJhbWVidWZmZXIgPSBhcmdzLmZyYW1lYnVmZmVyXG4gICAgdmFyIG5lZWRzRnJhbWVidWZmZXIgPSBmYWxzZVxuICAgIGlmIChmcmFtZWJ1ZmZlcikge1xuICAgICAgaWYgKGZyYW1lYnVmZmVyLnByb3BEZXApIHtcbiAgICAgICAgY29udGV4dER5bmFtaWMgPSBuZWVkc0ZyYW1lYnVmZmVyID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChmcmFtZWJ1ZmZlci5jb250ZXh0RGVwICYmIGNvbnRleHREeW5hbWljKSB7XG4gICAgICAgIG5lZWRzRnJhbWVidWZmZXIgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoIW5lZWRzRnJhbWVidWZmZXIpIHtcbiAgICAgICAgZW1pdFBvbGxGcmFtZWJ1ZmZlcihlbnYsIGJhdGNoLCBmcmFtZWJ1ZmZlcilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdFBvbGxGcmFtZWJ1ZmZlcihlbnYsIGJhdGNoLCBudWxsKVxuICAgIH1cblxuICAgIC8vIHZpZXdwb3J0IGlzIHdlaXJkIGJlY2F1c2UgaXQgY2FuIGFmZmVjdCBjb250ZXh0IHZhcnNcbiAgICBpZiAoYXJncy5zdGF0ZS52aWV3cG9ydCAmJiBhcmdzLnN0YXRlLnZpZXdwb3J0LnByb3BEZXApIHtcbiAgICAgIGNvbnRleHREeW5hbWljID0gdHJ1ZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSW5uZXJEZWZuIChkZWZuKSB7XG4gICAgICByZXR1cm4gKGRlZm4uY29udGV4dERlcCAmJiBjb250ZXh0RHluYW1pYykgfHwgZGVmbi5wcm9wRGVwXG4gICAgfVxuXG4gICAgLy8gc2V0IHdlYmdsIG9wdGlvbnNcbiAgICBlbWl0UG9sbFN0YXRlKGVudiwgYmF0Y2gsIGFyZ3MpXG4gICAgZW1pdFNldE9wdGlvbnMoZW52LCBiYXRjaCwgYXJncy5zdGF0ZSwgZnVuY3Rpb24gKGRlZm4pIHtcbiAgICAgIHJldHVybiAhaXNJbm5lckRlZm4oZGVmbilcbiAgICB9KVxuXG4gICAgaWYgKCFhcmdzLnByb2ZpbGUgfHwgIWlzSW5uZXJEZWZuKGFyZ3MucHJvZmlsZSkpIHtcbiAgICAgIGVtaXRQcm9maWxlKGVudiwgYmF0Y2gsIGFyZ3MsIGZhbHNlLCAnYTEnKVxuICAgIH1cblxuICAgIC8vIFNhdmUgdGhlc2UgdmFsdWVzIHRvIGFyZ3Mgc28gdGhhdCB0aGUgYmF0Y2ggYm9keSByb3V0aW5lIGNhbiB1c2UgdGhlbVxuICAgIGFyZ3MuY29udGV4dERlcCA9IGNvbnRleHREeW5hbWljXG4gICAgYXJncy5uZWVkc0NvbnRleHQgPSBuZWVkc0NvbnRleHRcbiAgICBhcmdzLm5lZWRzRnJhbWVidWZmZXIgPSBuZWVkc0ZyYW1lYnVmZmVyXG5cbiAgICAvLyBkZXRlcm1pbmUgaWYgc2hhZGVyIGlzIGR5bmFtaWNcbiAgICB2YXIgcHJvZ0RlZm4gPSBhcmdzLnNoYWRlci5wcm9nVmFyXG4gICAgaWYgKChwcm9nRGVmbi5jb250ZXh0RGVwICYmIGNvbnRleHREeW5hbWljKSB8fCBwcm9nRGVmbi5wcm9wRGVwKSB7XG4gICAgICBlbWl0QmF0Y2hCb2R5KFxuICAgICAgICBlbnYsXG4gICAgICAgIGJhdGNoLFxuICAgICAgICBhcmdzLFxuICAgICAgICBudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgUFJPR1JBTSA9IHByb2dEZWZuLmFwcGVuZChlbnYsIGJhdGNoKVxuICAgICAgYmF0Y2goZW52LnNoYXJlZC5nbCwgJy51c2VQcm9ncmFtKCcsIFBST0dSQU0sICcucHJvZ3JhbSk7JylcbiAgICAgIGlmIChhcmdzLnNoYWRlci5wcm9ncmFtKSB7XG4gICAgICAgIGVtaXRCYXRjaEJvZHkoXG4gICAgICAgICAgZW52LFxuICAgICAgICAgIGJhdGNoLFxuICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgYXJncy5zaGFkZXIucHJvZ3JhbSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhdGNoKGVudi5zaGFyZWQudmFvLCAnLnNldFZBTyhudWxsKTsnKVxuICAgICAgICB2YXIgYmF0Y2hDYWNoZSA9IGVudi5nbG9iYWwuZGVmKCd7fScpXG4gICAgICAgIHZhciBQUk9HX0lEID0gYmF0Y2guZGVmKFBST0dSQU0sICcuaWQnKVxuICAgICAgICB2YXIgQ0FDSEVEX1BST0MgPSBiYXRjaC5kZWYoYmF0Y2hDYWNoZSwgJ1snLCBQUk9HX0lELCAnXScpXG4gICAgICAgIGJhdGNoKFxuICAgICAgICAgIGVudi5jb25kKENBQ0hFRF9QUk9DKVxuICAgICAgICAgICAgLnRoZW4oQ0FDSEVEX1BST0MsICcuY2FsbCh0aGlzLGEwLGExKTsnKVxuICAgICAgICAgICAgLmVsc2UoXG4gICAgICAgICAgICAgIENBQ0hFRF9QUk9DLCAnPScsIGJhdGNoQ2FjaGUsICdbJywgUFJPR19JRCwgJ109JyxcbiAgICAgICAgICAgICAgZW52LmxpbmsoZnVuY3Rpb24gKHByb2dyYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQm9keShlbWl0QmF0Y2hCb2R5LCBlbnYsIGFyZ3MsIHByb2dyYW0sIDIpXG4gICAgICAgICAgICAgIH0pLCAnKCcsIFBST0dSQU0sICcpOycsXG4gICAgICAgICAgICAgIENBQ0hFRF9QUk9DLCAnLmNhbGwodGhpcyxhMCxhMSk7JykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGFyZ3Muc3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGJhdGNoKGVudi5zaGFyZWQuY3VycmVudCwgJy5kaXJ0eT10cnVlOycpXG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTQ09QRSBDT01NQU5EXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gZW1pdFNjb3BlUHJvYyAoZW52LCBhcmdzKSB7XG4gICAgdmFyIHNjb3BlID0gZW52LnByb2MoJ3Njb3BlJywgMylcbiAgICBlbnYuYmF0Y2hJZCA9ICdhMidcblxuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgdmFyIENVUlJFTlRfU1RBVEUgPSBzaGFyZWQuY3VycmVudFxuXG4gICAgZW1pdENvbnRleHQoZW52LCBzY29wZSwgYXJncy5jb250ZXh0KVxuXG4gICAgaWYgKGFyZ3MuZnJhbWVidWZmZXIpIHtcbiAgICAgIGFyZ3MuZnJhbWVidWZmZXIuYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgfVxuXG4gICAgc29ydFN0YXRlKE9iamVjdC5rZXlzKGFyZ3Muc3RhdGUpKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZGVmbiA9IGFyZ3Muc3RhdGVbbmFtZV1cbiAgICAgIHZhciB2YWx1ZSA9IGRlZm4uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgICAgICBzY29wZS5zZXQoZW52Lm5leHRbbmFtZV0sICdbJyArIGkgKyAnXScsIHYpXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY29wZS5zZXQoc2hhcmVkLm5leHQsICcuJyArIG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBlbWl0UHJvZmlsZShlbnYsIHNjb3BlLCBhcmdzLCB0cnVlLCB0cnVlKVxuXG4gICAgO1tTX0VMRU1FTlRTLCBTX09GRlNFVCwgU19DT1VOVCwgU19JTlNUQU5DRVMsIFNfUFJJTUlUSVZFXS5mb3JFYWNoKFxuICAgICAgZnVuY3Rpb24gKG9wdCkge1xuICAgICAgICB2YXIgdmFyaWFibGUgPSBhcmdzLmRyYXdbb3B0XVxuICAgICAgICBpZiAoIXZhcmlhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgc2NvcGUuc2V0KHNoYXJlZC5kcmF3LCAnLicgKyBvcHQsICcnICsgdmFyaWFibGUuYXBwZW5kKGVudiwgc2NvcGUpKVxuICAgICAgfSlcblxuICAgIE9iamVjdC5rZXlzKGFyZ3MudW5pZm9ybXMpLmZvckVhY2goZnVuY3Rpb24gKG9wdCkge1xuICAgICAgdmFyIHZhbHVlID0gYXJncy51bmlmb3Jtc1tvcHRdLmFwcGVuZChlbnYsIHNjb3BlKVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gJ1snICsgdmFsdWUuam9pbigpICsgJ10nXG4gICAgICB9XG4gICAgICBzY29wZS5zZXQoXG4gICAgICAgIHNoYXJlZC51bmlmb3JtcyxcbiAgICAgICAgJ1snICsgc3RyaW5nU3RvcmUuaWQob3B0KSArICddJyxcbiAgICAgICAgdmFsdWUpXG4gICAgfSlcblxuICAgIE9iamVjdC5rZXlzKGFyZ3MuYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHJlY29yZCA9IGFyZ3MuYXR0cmlidXRlc1tuYW1lXS5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIHZhciBzY29wZUF0dHJpYiA9IGVudi5zY29wZUF0dHJpYihuYW1lKVxuICAgICAgT2JqZWN0LmtleXMobmV3IEF0dHJpYnV0ZVJlY29yZCgpKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIHNjb3BlLnNldChzY29wZUF0dHJpYiwgJy4nICsgcHJvcCwgcmVjb3JkW3Byb3BdKVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgaWYgKGFyZ3Muc2NvcGVWQU8pIHtcbiAgICAgIHNjb3BlLnNldChzaGFyZWQudmFvLCAnLnRhcmdldFZBTycsIGFyZ3Muc2NvcGVWQU8uYXBwZW5kKGVudiwgc2NvcGUpKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmVTaGFkZXIgKG5hbWUpIHtcbiAgICAgIHZhciBzaGFkZXIgPSBhcmdzLnNoYWRlcltuYW1lXVxuICAgICAgaWYgKHNoYWRlcikge1xuICAgICAgICBzY29wZS5zZXQoc2hhcmVkLnNoYWRlciwgJy4nICsgbmFtZSwgc2hhZGVyLmFwcGVuZChlbnYsIHNjb3BlKSlcbiAgICAgIH1cbiAgICB9XG4gICAgc2F2ZVNoYWRlcihTX1ZFUlQpXG4gICAgc2F2ZVNoYWRlcihTX0ZSQUcpXG5cbiAgICBpZiAoT2JqZWN0LmtleXMoYXJncy5zdGF0ZSkubGVuZ3RoID4gMCkge1xuICAgICAgc2NvcGUoQ1VSUkVOVF9TVEFURSwgJy5kaXJ0eT10cnVlOycpXG4gICAgICBzY29wZS5leGl0KENVUlJFTlRfU1RBVEUsICcuZGlydHk9dHJ1ZTsnKVxuICAgIH1cblxuICAgIHNjb3BlKCdhMSgnLCBlbnYuc2hhcmVkLmNvbnRleHQsICcsYTAsJywgZW52LmJhdGNoSWQsICcpOycpXG4gIH1cblxuICBmdW5jdGlvbiBpc0R5bmFtaWNPYmplY3QgKG9iamVjdCkge1xuICAgIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBpc0FycmF5TGlrZShvYmplY3QpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHByb3BzID0gT2JqZWN0LmtleXMob2JqZWN0KVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChkeW5hbWljLmlzRHluYW1pYyhvYmplY3RbcHJvcHNbaV1dKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHNwbGF0T2JqZWN0IChlbnYsIG9wdGlvbnMsIG5hbWUpIHtcbiAgICB2YXIgb2JqZWN0ID0gb3B0aW9ucy5zdGF0aWNbbmFtZV1cbiAgICBpZiAoIW9iamVjdCB8fCAhaXNEeW5hbWljT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBnbG9iYWxzID0gZW52Lmdsb2JhbFxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KVxuICAgIHZhciB0aGlzRGVwID0gZmFsc2VcbiAgICB2YXIgY29udGV4dERlcCA9IGZhbHNlXG4gICAgdmFyIHByb3BEZXAgPSBmYWxzZVxuICAgIHZhciBvYmplY3RSZWYgPSBlbnYuZ2xvYmFsLmRlZigne30nKVxuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAgICAgaWYgKGR5bmFtaWMuaXNEeW5hbWljKHZhbHVlKSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XSA9IGR5bmFtaWMudW5ib3godmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlcHMgPSBjcmVhdGVEeW5hbWljRGVjbCh2YWx1ZSwgbnVsbClcbiAgICAgICAgdGhpc0RlcCA9IHRoaXNEZXAgfHwgZGVwcy50aGlzRGVwXG4gICAgICAgIHByb3BEZXAgPSBwcm9wRGVwIHx8IGRlcHMucHJvcERlcFxuICAgICAgICBjb250ZXh0RGVwID0gY29udGV4dERlcCB8fCBkZXBzLmNvbnRleHREZXBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdsb2JhbHMob2JqZWN0UmVmLCAnLicsIGtleSwgJz0nKVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICBnbG9iYWxzKHZhbHVlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgZ2xvYmFscygnXCInLCB2YWx1ZSwgJ1wiJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICBnbG9iYWxzKCdbJywgdmFsdWUuam9pbigpLCAnXScpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBnbG9iYWxzKGVudi5saW5rKHZhbHVlKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFscygnOycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGZ1bmN0aW9uIGFwcGVuZEJsb2NrIChlbnYsIGJsb2NrKSB7XG4gICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAgICAgICBpZiAoIWR5bmFtaWMuaXNEeW5hbWljKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHZhciByZWYgPSBlbnYuaW52b2tlKGJsb2NrLCB2YWx1ZSlcbiAgICAgICAgYmxvY2sob2JqZWN0UmVmLCAnLicsIGtleSwgJz0nLCByZWYsICc7JylcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgb3B0aW9ucy5keW5hbWljW25hbWVdID0gbmV3IGR5bmFtaWMuRHluYW1pY1ZhcmlhYmxlKERZTl9USFVOSywge1xuICAgICAgdGhpc0RlcDogdGhpc0RlcCxcbiAgICAgIGNvbnRleHREZXA6IGNvbnRleHREZXAsXG4gICAgICBwcm9wRGVwOiBwcm9wRGVwLFxuICAgICAgcmVmOiBvYmplY3RSZWYsXG4gICAgICBhcHBlbmQ6IGFwcGVuZEJsb2NrXG4gICAgfSlcbiAgICBkZWxldGUgb3B0aW9ucy5zdGF0aWNbbmFtZV1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUFJTiBEUkFXIENPTU1BTkRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiBjb21waWxlQ29tbWFuZCAob3B0aW9ucywgYXR0cmlidXRlcywgdW5pZm9ybXMsIGNvbnRleHQsIHN0YXRzKSB7XG4gICAgdmFyIGVudiA9IGNyZWF0ZVJFR0xFbnZpcm9ubWVudCgpXG5cbiAgICAvLyBsaW5rIHN0YXRzLCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgYWNjZXNzIGl0IGluIHRoZSBwcm9ncmFtLlxuICAgIGVudi5zdGF0cyA9IGVudi5saW5rKHN0YXRzKVxuXG4gICAgLy8gc3BsYXQgb3B0aW9ucyBhbmQgYXR0cmlidXRlcyB0byBhbGxvdyBmb3IgZHluYW1pYyBuZXN0ZWQgcHJvcGVydGllc1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMuc3RhdGljKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHNwbGF0T2JqZWN0KGVudiwgYXR0cmlidXRlcywga2V5KVxuICAgIH0pXG4gICAgTkVTVEVEX09QVElPTlMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgc3BsYXRPYmplY3QoZW52LCBvcHRpb25zLCBuYW1lKVxuICAgIH0pXG5cbiAgICB2YXIgYXJncyA9IHBhcnNlQXJndW1lbnRzKG9wdGlvbnMsIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLCBjb250ZXh0LCBlbnYpXG5cbiAgICBlbWl0RHJhd1Byb2MoZW52LCBhcmdzKVxuICAgIGVtaXRTY29wZVByb2MoZW52LCBhcmdzKVxuICAgIGVtaXRCYXRjaFByb2MoZW52LCBhcmdzKVxuXG4gICAgcmV0dXJuIGV4dGVuZChlbnYuY29tcGlsZSgpLCB7XG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFyZ3Muc2hhZGVyLnByb2dyYW0uZGVzdHJveSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUE9MTCAvIFJFRlJFU0hcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4ge1xuICAgIG5leHQ6IG5leHRTdGF0ZSxcbiAgICBjdXJyZW50OiBjdXJyZW50U3RhdGUsXG4gICAgcHJvY3M6IChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZW52ID0gY3JlYXRlUkVHTEVudmlyb25tZW50KClcbiAgICAgIHZhciBwb2xsID0gZW52LnByb2MoJ3BvbGwnKVxuICAgICAgdmFyIHJlZnJlc2ggPSBlbnYucHJvYygncmVmcmVzaCcpXG4gICAgICB2YXIgY29tbW9uID0gZW52LmJsb2NrKClcbiAgICAgIHBvbGwoY29tbW9uKVxuICAgICAgcmVmcmVzaChjb21tb24pXG5cbiAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgICB2YXIgR0wgPSBzaGFyZWQuZ2xcbiAgICAgIHZhciBORVhUX1NUQVRFID0gc2hhcmVkLm5leHRcbiAgICAgIHZhciBDVVJSRU5UX1NUQVRFID0gc2hhcmVkLmN1cnJlbnRcblxuICAgICAgY29tbW9uKENVUlJFTlRfU1RBVEUsICcuZGlydHk9ZmFsc2U7JylcblxuICAgICAgZW1pdFBvbGxGcmFtZWJ1ZmZlcihlbnYsIHBvbGwpXG4gICAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgcmVmcmVzaCwgbnVsbCwgdHJ1ZSlcblxuICAgICAgLy8gUmVmcmVzaCB1cGRhdGVzIGFsbCBhdHRyaWJ1dGUgc3RhdGUgY2hhbmdlc1xuICAgICAgdmFyIElOU1RBTkNJTkdcbiAgICAgIGlmIChleHRJbnN0YW5jaW5nKSB7XG4gICAgICAgIElOU1RBTkNJTkcgPSBlbnYubGluayhleHRJbnN0YW5jaW5nKVxuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgdmVydGV4IGFycmF5IGJpbmRpbmdzXG4gICAgICBpZiAoZXh0ZW5zaW9ucy5vZXNfdmVydGV4X2FycmF5X29iamVjdCkge1xuICAgICAgICByZWZyZXNoKGVudi5saW5rKGV4dGVuc2lvbnMub2VzX3ZlcnRleF9hcnJheV9vYmplY3QpLCAnLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsnKVxuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW1pdHMubWF4QXR0cmlidXRlczsgKytpKSB7XG4gICAgICAgIHZhciBCSU5ESU5HID0gcmVmcmVzaC5kZWYoc2hhcmVkLmF0dHJpYnV0ZXMsICdbJywgaSwgJ10nKVxuICAgICAgICB2YXIgaWZ0ZSA9IGVudi5jb25kKEJJTkRJTkcsICcuYnVmZmVyJylcbiAgICAgICAgaWZ0ZS50aGVuKFxuICAgICAgICAgIEdMLCAnLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KCcsIGksICcpOycsXG4gICAgICAgICAgR0wsICcuYmluZEJ1ZmZlcignLFxuICAgICAgICAgIEdMX0FSUkFZX0JVRkZFUiQyLCAnLCcsXG4gICAgICAgICAgQklORElORywgJy5idWZmZXIuYnVmZmVyKTsnLFxuICAgICAgICAgIEdMLCAnLnZlcnRleEF0dHJpYlBvaW50ZXIoJyxcbiAgICAgICAgICBpLCAnLCcsXG4gICAgICAgICAgQklORElORywgJy5zaXplLCcsXG4gICAgICAgICAgQklORElORywgJy50eXBlLCcsXG4gICAgICAgICAgQklORElORywgJy5ub3JtYWxpemVkLCcsXG4gICAgICAgICAgQklORElORywgJy5zdHJpZGUsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLm9mZnNldCk7J1xuICAgICAgICApLmVsc2UoXG4gICAgICAgICAgR0wsICcuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KCcsIGksICcpOycsXG4gICAgICAgICAgR0wsICcudmVydGV4QXR0cmliNGYoJyxcbiAgICAgICAgICBpLCAnLCcsXG4gICAgICAgICAgQklORElORywgJy54LCcsXG4gICAgICAgICAgQklORElORywgJy55LCcsXG4gICAgICAgICAgQklORElORywgJy56LCcsXG4gICAgICAgICAgQklORElORywgJy53KTsnLFxuICAgICAgICAgIEJJTkRJTkcsICcuYnVmZmVyPW51bGw7JylcbiAgICAgICAgcmVmcmVzaChpZnRlKVxuICAgICAgICBpZiAoZXh0SW5zdGFuY2luZykge1xuICAgICAgICAgIHJlZnJlc2goXG4gICAgICAgICAgICBJTlNUQU5DSU5HLCAnLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSgnLFxuICAgICAgICAgICAgaSwgJywnLFxuICAgICAgICAgICAgQklORElORywgJy5kaXZpc29yKTsnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZWZyZXNoKFxuICAgICAgICBlbnYuc2hhcmVkLnZhbywgJy5jdXJyZW50VkFPPW51bGw7JyxcbiAgICAgICAgZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKCcsIGVudi5zaGFyZWQudmFvLCAnLnRhcmdldFZBTyk7JylcblxuICAgICAgT2JqZWN0LmtleXMoR0xfRkxBR1MpLmZvckVhY2goZnVuY3Rpb24gKGZsYWcpIHtcbiAgICAgICAgdmFyIGNhcCA9IEdMX0ZMQUdTW2ZsYWddXG4gICAgICAgIHZhciBORVhUID0gY29tbW9uLmRlZihORVhUX1NUQVRFLCAnLicsIGZsYWcpXG4gICAgICAgIHZhciBibG9jayA9IGVudi5ibG9jaygpXG4gICAgICAgIGJsb2NrKCdpZignLCBORVhULCAnKXsnLFxuICAgICAgICAgIEdMLCAnLmVuYWJsZSgnLCBjYXAsICcpfWVsc2V7JyxcbiAgICAgICAgICBHTCwgJy5kaXNhYmxlKCcsIGNhcCwgJyl9JyxcbiAgICAgICAgICBDVVJSRU5UX1NUQVRFLCAnLicsIGZsYWcsICc9JywgTkVYVCwgJzsnKVxuICAgICAgICByZWZyZXNoKGJsb2NrKVxuICAgICAgICBwb2xsKFxuICAgICAgICAgICdpZignLCBORVhULCAnIT09JywgQ1VSUkVOVF9TVEFURSwgJy4nLCBmbGFnLCAnKXsnLFxuICAgICAgICAgIGJsb2NrLFxuICAgICAgICAgICd9JylcbiAgICAgIH0pXG5cbiAgICAgIE9iamVjdC5rZXlzKEdMX1ZBUklBQkxFUykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgZnVuYyA9IEdMX1ZBUklBQkxFU1tuYW1lXVxuICAgICAgICB2YXIgaW5pdCA9IGN1cnJlbnRTdGF0ZVtuYW1lXVxuICAgICAgICB2YXIgTkVYVCwgQ1VSUkVOVFxuICAgICAgICB2YXIgYmxvY2sgPSBlbnYuYmxvY2soKVxuICAgICAgICBibG9jayhHTCwgJy4nLCBmdW5jLCAnKCcpXG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbml0KSkge1xuICAgICAgICAgIHZhciBuID0gaW5pdC5sZW5ndGhcbiAgICAgICAgICBORVhUID0gZW52Lmdsb2JhbC5kZWYoTkVYVF9TVEFURSwgJy4nLCBuYW1lKVxuICAgICAgICAgIENVUlJFTlQgPSBlbnYuZ2xvYmFsLmRlZihDVVJSRU5UX1NUQVRFLCAnLicsIG5hbWUpXG4gICAgICAgICAgYmxvY2soXG4gICAgICAgICAgICBsb29wKG4sIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBORVhUICsgJ1snICsgaSArICddJ1xuICAgICAgICAgICAgfSksICcpOycsXG4gICAgICAgICAgICBsb29wKG4sIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBDVVJSRU5UICsgJ1snICsgaSArICddPScgKyBORVhUICsgJ1snICsgaSArICddOydcbiAgICAgICAgICAgIH0pLmpvaW4oJycpKVxuICAgICAgICAgIHBvbGwoXG4gICAgICAgICAgICAnaWYoJywgbG9vcChuLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICByZXR1cm4gTkVYVCArICdbJyArIGkgKyAnXSE9PScgKyBDVVJSRU5UICsgJ1snICsgaSArICddJ1xuICAgICAgICAgICAgfSkuam9pbignfHwnKSwgJyl7JyxcbiAgICAgICAgICAgIGJsb2NrLFxuICAgICAgICAgICAgJ30nKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE5FWFQgPSBjb21tb24uZGVmKE5FWFRfU1RBVEUsICcuJywgbmFtZSlcbiAgICAgICAgICBDVVJSRU5UID0gY29tbW9uLmRlZihDVVJSRU5UX1NUQVRFLCAnLicsIG5hbWUpXG4gICAgICAgICAgYmxvY2soXG4gICAgICAgICAgICBORVhULCAnKTsnLFxuICAgICAgICAgICAgQ1VSUkVOVF9TVEFURSwgJy4nLCBuYW1lLCAnPScsIE5FWFQsICc7JylcbiAgICAgICAgICBwb2xsKFxuICAgICAgICAgICAgJ2lmKCcsIE5FWFQsICchPT0nLCBDVVJSRU5ULCAnKXsnLFxuICAgICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgICAnfScpXG4gICAgICAgIH1cbiAgICAgICAgcmVmcmVzaChibG9jaylcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBlbnYuY29tcGlsZSgpXG4gICAgfSkoKSxcbiAgICBjb21waWxlOiBjb21waWxlQ29tbWFuZFxuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXRzICgpIHtcbiAgcmV0dXJuIHtcbiAgICB2YW9Db3VudDogMCxcbiAgICBidWZmZXJDb3VudDogMCxcbiAgICBlbGVtZW50c0NvdW50OiAwLFxuICAgIGZyYW1lYnVmZmVyQ291bnQ6IDAsXG4gICAgc2hhZGVyQ291bnQ6IDAsXG4gICAgdGV4dHVyZUNvdW50OiAwLFxuICAgIGN1YmVDb3VudDogMCxcbiAgICByZW5kZXJidWZmZXJDb3VudDogMCxcbiAgICBtYXhUZXh0dXJlVW5pdHM6IDBcbiAgfVxufVxuXG52YXIgR0xfUVVFUllfUkVTVUxUX0VYVCA9IDB4ODg2NlxudmFyIEdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEVfRVhUID0gMHg4ODY3XG52YXIgR0xfVElNRV9FTEFQU0VEX0VYVCA9IDB4ODhCRlxuXG52YXIgY3JlYXRlVGltZXIgPSBmdW5jdGlvbiAoZ2wsIGV4dGVuc2lvbnMpIHtcbiAgaWYgKCFleHRlbnNpb25zLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBRVUVSWSBQT09MIEJFR0lOXG4gIHZhciBxdWVyeVBvb2wgPSBbXVxuICBmdW5jdGlvbiBhbGxvY1F1ZXJ5ICgpIHtcbiAgICByZXR1cm4gcXVlcnlQb29sLnBvcCgpIHx8IGV4dGVuc2lvbnMuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmNyZWF0ZVF1ZXJ5RVhUKClcbiAgfVxuICBmdW5jdGlvbiBmcmVlUXVlcnkgKHF1ZXJ5KSB7XG4gICAgcXVlcnlQb29sLnB1c2gocXVlcnkpXG4gIH1cbiAgLy8gUVVFUlkgUE9PTCBFTkRcblxuICB2YXIgcGVuZGluZ1F1ZXJpZXMgPSBbXVxuICBmdW5jdGlvbiBiZWdpblF1ZXJ5IChzdGF0cykge1xuICAgIHZhciBxdWVyeSA9IGFsbG9jUXVlcnkoKVxuICAgIGV4dGVuc2lvbnMuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmJlZ2luUXVlcnlFWFQoR0xfVElNRV9FTEFQU0VEX0VYVCwgcXVlcnkpXG4gICAgcGVuZGluZ1F1ZXJpZXMucHVzaChxdWVyeSlcbiAgICBwdXNoU2NvcGVTdGF0cyhwZW5kaW5nUXVlcmllcy5sZW5ndGggLSAxLCBwZW5kaW5nUXVlcmllcy5sZW5ndGgsIHN0YXRzKVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kUXVlcnkgKCkge1xuICAgIGV4dGVuc2lvbnMuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmVuZFF1ZXJ5RVhUKEdMX1RJTUVfRUxBUFNFRF9FWFQpXG4gIH1cblxuICAvL1xuICAvLyBQZW5kaW5nIHN0YXRzIHBvb2wuXG4gIC8vXG4gIGZ1bmN0aW9uIFBlbmRpbmdTdGF0cyAoKSB7XG4gICAgdGhpcy5zdGFydFF1ZXJ5SW5kZXggPSAtMVxuICAgIHRoaXMuZW5kUXVlcnlJbmRleCA9IC0xXG4gICAgdGhpcy5zdW0gPSAwXG4gICAgdGhpcy5zdGF0cyA9IG51bGxcbiAgfVxuICB2YXIgcGVuZGluZ1N0YXRzUG9vbCA9IFtdXG4gIGZ1bmN0aW9uIGFsbG9jUGVuZGluZ1N0YXRzICgpIHtcbiAgICByZXR1cm4gcGVuZGluZ1N0YXRzUG9vbC5wb3AoKSB8fCBuZXcgUGVuZGluZ1N0YXRzKClcbiAgfVxuICBmdW5jdGlvbiBmcmVlUGVuZGluZ1N0YXRzIChwZW5kaW5nU3RhdHMpIHtcbiAgICBwZW5kaW5nU3RhdHNQb29sLnB1c2gocGVuZGluZ1N0YXRzKVxuICB9XG4gIC8vIFBlbmRpbmcgc3RhdHMgcG9vbCBlbmRcblxuICB2YXIgcGVuZGluZ1N0YXRzID0gW11cbiAgZnVuY3Rpb24gcHVzaFNjb3BlU3RhdHMgKHN0YXJ0LCBlbmQsIHN0YXRzKSB7XG4gICAgdmFyIHBzID0gYWxsb2NQZW5kaW5nU3RhdHMoKVxuICAgIHBzLnN0YXJ0UXVlcnlJbmRleCA9IHN0YXJ0XG4gICAgcHMuZW5kUXVlcnlJbmRleCA9IGVuZFxuICAgIHBzLnN1bSA9IDBcbiAgICBwcy5zdGF0cyA9IHN0YXRzXG4gICAgcGVuZGluZ1N0YXRzLnB1c2gocHMpXG4gIH1cblxuICAvLyB3ZSBzaG91bGQgY2FsbCB0aGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZyYW1lLFxuICAvLyBpbiBvcmRlciB0byB1cGRhdGUgZ3B1VGltZVxuICB2YXIgdGltZVN1bSA9IFtdXG4gIHZhciBxdWVyeVB0ciA9IFtdXG4gIGZ1bmN0aW9uIHVwZGF0ZSAoKSB7XG4gICAgdmFyIHB0ciwgaVxuXG4gICAgdmFyIG4gPSBwZW5kaW5nUXVlcmllcy5sZW5ndGhcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gUmVzZXJ2ZSBzcGFjZVxuICAgIHF1ZXJ5UHRyLmxlbmd0aCA9IE1hdGgubWF4KHF1ZXJ5UHRyLmxlbmd0aCwgbiArIDEpXG4gICAgdGltZVN1bS5sZW5ndGggPSBNYXRoLm1heCh0aW1lU3VtLmxlbmd0aCwgbiArIDEpXG4gICAgdGltZVN1bVswXSA9IDBcbiAgICBxdWVyeVB0clswXSA9IDBcblxuICAgIC8vIFVwZGF0ZSBhbGwgcGVuZGluZyB0aW1lciBxdWVyaWVzXG4gICAgdmFyIHF1ZXJ5VGltZSA9IDBcbiAgICBwdHIgPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdRdWVyaWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgcXVlcnkgPSBwZW5kaW5nUXVlcmllc1tpXVxuICAgICAgaWYgKGV4dGVuc2lvbnMuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHF1ZXJ5LCBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFX0VYVCkpIHtcbiAgICAgICAgcXVlcnlUaW1lICs9IGV4dGVuc2lvbnMuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHF1ZXJ5LCBHTF9RVUVSWV9SRVNVTFRfRVhUKVxuICAgICAgICBmcmVlUXVlcnkocXVlcnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZW5kaW5nUXVlcmllc1twdHIrK10gPSBxdWVyeVxuICAgICAgfVxuICAgICAgdGltZVN1bVtpICsgMV0gPSBxdWVyeVRpbWVcbiAgICAgIHF1ZXJ5UHRyW2kgKyAxXSA9IHB0clxuICAgIH1cbiAgICBwZW5kaW5nUXVlcmllcy5sZW5ndGggPSBwdHJcblxuICAgIC8vIFVwZGF0ZSBhbGwgcGVuZGluZyBzdGF0IHF1ZXJpZXNcbiAgICBwdHIgPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdTdGF0cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHN0YXRzID0gcGVuZGluZ1N0YXRzW2ldXG4gICAgICB2YXIgc3RhcnQgPSBzdGF0cy5zdGFydFF1ZXJ5SW5kZXhcbiAgICAgIHZhciBlbmQgPSBzdGF0cy5lbmRRdWVyeUluZGV4XG4gICAgICBzdGF0cy5zdW0gKz0gdGltZVN1bVtlbmRdIC0gdGltZVN1bVtzdGFydF1cbiAgICAgIHZhciBzdGFydFB0ciA9IHF1ZXJ5UHRyW3N0YXJ0XVxuICAgICAgdmFyIGVuZFB0ciA9IHF1ZXJ5UHRyW2VuZF1cbiAgICAgIGlmIChlbmRQdHIgPT09IHN0YXJ0UHRyKSB7XG4gICAgICAgIHN0YXRzLnN0YXRzLmdwdVRpbWUgKz0gc3RhdHMuc3VtIC8gMWU2XG4gICAgICAgIGZyZWVQZW5kaW5nU3RhdHMoc3RhdHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0cy5zdGFydFF1ZXJ5SW5kZXggPSBzdGFydFB0clxuICAgICAgICBzdGF0cy5lbmRRdWVyeUluZGV4ID0gZW5kUHRyXG4gICAgICAgIHBlbmRpbmdTdGF0c1twdHIrK10gPSBzdGF0c1xuICAgICAgfVxuICAgIH1cbiAgICBwZW5kaW5nU3RhdHMubGVuZ3RoID0gcHRyXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJlZ2luUXVlcnk6IGJlZ2luUXVlcnksXG4gICAgZW5kUXVlcnk6IGVuZFF1ZXJ5LFxuICAgIHB1c2hTY29wZVN0YXRzOiBwdXNoU2NvcGVTdGF0cyxcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICBnZXROdW1QZW5kaW5nUXVlcmllczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHBlbmRpbmdRdWVyaWVzLmxlbmd0aFxuICAgIH0sXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHF1ZXJ5UG9vbC5wdXNoLmFwcGx5KHF1ZXJ5UG9vbCwgcGVuZGluZ1F1ZXJpZXMpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXJ5UG9vbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBleHRlbnNpb25zLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5kZWxldGVRdWVyeUVYVChxdWVyeVBvb2xbaV0pXG4gICAgICB9XG4gICAgICBwZW5kaW5nUXVlcmllcy5sZW5ndGggPSAwXG4gICAgICBxdWVyeVBvb2wubGVuZ3RoID0gMFxuICAgIH0sXG4gICAgcmVzdG9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgcGVuZGluZ1F1ZXJpZXMubGVuZ3RoID0gMFxuICAgICAgcXVlcnlQb29sLmxlbmd0aCA9IDBcbiAgICB9XG4gIH1cbn1cblxudmFyIEdMX0NPTE9SX0JVRkZFUl9CSVQgPSAxNjM4NFxudmFyIEdMX0RFUFRIX0JVRkZFUl9CSVQgPSAyNTZcbnZhciBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQgPSAxMDI0XG5cbnZhciBHTF9BUlJBWV9CVUZGRVIgPSAzNDk2MlxuXG52YXIgQ09OVEVYVF9MT1NUX0VWRU5UID0gJ3dlYmdsY29udGV4dGxvc3QnXG52YXIgQ09OVEVYVF9SRVNUT1JFRF9FVkVOVCA9ICd3ZWJnbGNvbnRleHRyZXN0b3JlZCdcblxudmFyIERZTl9QUk9QID0gMVxudmFyIERZTl9DT05URVhUID0gMlxudmFyIERZTl9TVEFURSA9IDNcblxuZnVuY3Rpb24gZmluZCAoaGF5c3RhY2ssIG5lZWRsZSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhheXN0YWNrLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGhheXN0YWNrW2ldID09PSBuZWVkbGUpIHtcbiAgICAgIHJldHVybiBpXG4gICAgfVxuICB9XG4gIHJldHVybiAtMVxufVxuXG5mdW5jdGlvbiB3cmFwUkVHTCAoYXJncykge1xuICB2YXIgY29uZmlnID0gcGFyc2VBcmdzKGFyZ3MpXG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhciBnbCA9IGNvbmZpZy5nbFxuICB2YXIgZ2xBdHRyaWJ1dGVzID0gZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKVxuICB2YXIgY29udGV4dExvc3QgPSBnbC5pc0NvbnRleHRMb3N0KClcblxuICB2YXIgZXh0ZW5zaW9uU3RhdGUgPSBjcmVhdGVFeHRlbnNpb25DYWNoZShnbCwgY29uZmlnKVxuICBpZiAoIWV4dGVuc2lvblN0YXRlKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhciBzdHJpbmdTdG9yZSA9IGNyZWF0ZVN0cmluZ1N0b3JlKClcbiAgdmFyIHN0YXRzJCQxID0gc3RhdHMoKVxuICB2YXIgZXh0ZW5zaW9ucyA9IGV4dGVuc2lvblN0YXRlLmV4dGVuc2lvbnNcbiAgdmFyIHRpbWVyID0gY3JlYXRlVGltZXIoZ2wsIGV4dGVuc2lvbnMpXG5cbiAgdmFyIFNUQVJUX1RJTUUgPSBjbG9jaygpXG4gIHZhciBXSURUSCA9IGdsLmRyYXdpbmdCdWZmZXJXaWR0aFxuICB2YXIgSEVJR0hUID0gZ2wuZHJhd2luZ0J1ZmZlckhlaWdodFxuXG4gIHZhciBjb250ZXh0U3RhdGUgPSB7XG4gICAgdGljazogMCxcbiAgICB0aW1lOiAwLFxuICAgIHZpZXdwb3J0V2lkdGg6IFdJRFRILFxuICAgIHZpZXdwb3J0SGVpZ2h0OiBIRUlHSFQsXG4gICAgZnJhbWVidWZmZXJXaWR0aDogV0lEVEgsXG4gICAgZnJhbWVidWZmZXJIZWlnaHQ6IEhFSUdIVCxcbiAgICBkcmF3aW5nQnVmZmVyV2lkdGg6IFdJRFRILFxuICAgIGRyYXdpbmdCdWZmZXJIZWlnaHQ6IEhFSUdIVCxcbiAgICBwaXhlbFJhdGlvOiBjb25maWcucGl4ZWxSYXRpb1xuICB9XG4gIHZhciB1bmlmb3JtU3RhdGUgPSB7fVxuICB2YXIgZHJhd1N0YXRlID0ge1xuICAgIGVsZW1lbnRzOiBudWxsLFxuICAgIHByaW1pdGl2ZTogNCwgLy8gR0xfVFJJQU5HTEVTXG4gICAgY291bnQ6IC0xLFxuICAgIG9mZnNldDogMCxcbiAgICBpbnN0YW5jZXM6IC0xXG4gIH1cblxuICB2YXIgbGltaXRzID0gd3JhcExpbWl0cyhnbCwgZXh0ZW5zaW9ucylcbiAgdmFyIGJ1ZmZlclN0YXRlID0gd3JhcEJ1ZmZlclN0YXRlKFxuICAgIGdsLFxuICAgIHN0YXRzJCQxLFxuICAgIGNvbmZpZyxcbiAgICBkZXN0cm95QnVmZmVyKVxuICB2YXIgYXR0cmlidXRlU3RhdGUgPSB3cmFwQXR0cmlidXRlU3RhdGUoXG4gICAgZ2wsXG4gICAgZXh0ZW5zaW9ucyxcbiAgICBsaW1pdHMsXG4gICAgc3RhdHMkJDEsXG4gICAgYnVmZmVyU3RhdGUpXG4gIGZ1bmN0aW9uIGRlc3Ryb3lCdWZmZXIgKGJ1ZmZlcikge1xuICAgIHJldHVybiBhdHRyaWJ1dGVTdGF0ZS5kZXN0cm95QnVmZmVyKGJ1ZmZlcilcbiAgfVxuICB2YXIgZWxlbWVudFN0YXRlID0gd3JhcEVsZW1lbnRzU3RhdGUoZ2wsIGV4dGVuc2lvbnMsIGJ1ZmZlclN0YXRlLCBzdGF0cyQkMSlcbiAgdmFyIHNoYWRlclN0YXRlID0gd3JhcFNoYWRlclN0YXRlKGdsLCBzdHJpbmdTdG9yZSwgc3RhdHMkJDEsIGNvbmZpZylcbiAgdmFyIHRleHR1cmVTdGF0ZSA9IGNyZWF0ZVRleHR1cmVTZXQoXG4gICAgZ2wsXG4gICAgZXh0ZW5zaW9ucyxcbiAgICBsaW1pdHMsXG4gICAgZnVuY3Rpb24gKCkgeyBjb3JlLnByb2NzLnBvbGwoKSB9LFxuICAgIGNvbnRleHRTdGF0ZSxcbiAgICBzdGF0cyQkMSxcbiAgICBjb25maWcpXG4gIHZhciByZW5kZXJidWZmZXJTdGF0ZSA9IHdyYXBSZW5kZXJidWZmZXJzKGdsLCBleHRlbnNpb25zLCBsaW1pdHMsIHN0YXRzJCQxLCBjb25maWcpXG4gIHZhciBmcmFtZWJ1ZmZlclN0YXRlID0gd3JhcEZCT1N0YXRlKFxuICAgIGdsLFxuICAgIGV4dGVuc2lvbnMsXG4gICAgbGltaXRzLFxuICAgIHRleHR1cmVTdGF0ZSxcbiAgICByZW5kZXJidWZmZXJTdGF0ZSxcbiAgICBzdGF0cyQkMSlcbiAgdmFyIGNvcmUgPSByZWdsQ29yZShcbiAgICBnbCxcbiAgICBzdHJpbmdTdG9yZSxcbiAgICBleHRlbnNpb25zLFxuICAgIGxpbWl0cyxcbiAgICBidWZmZXJTdGF0ZSxcbiAgICBlbGVtZW50U3RhdGUsXG4gICAgdGV4dHVyZVN0YXRlLFxuICAgIGZyYW1lYnVmZmVyU3RhdGUsXG4gICAgdW5pZm9ybVN0YXRlLFxuICAgIGF0dHJpYnV0ZVN0YXRlLFxuICAgIHNoYWRlclN0YXRlLFxuICAgIGRyYXdTdGF0ZSxcbiAgICBjb250ZXh0U3RhdGUsXG4gICAgdGltZXIsXG4gICAgY29uZmlnKVxuICB2YXIgcmVhZFBpeGVscyA9IHdyYXBSZWFkUGl4ZWxzKFxuICAgIGdsLFxuICAgIGZyYW1lYnVmZmVyU3RhdGUsXG4gICAgY29yZS5wcm9jcy5wb2xsLFxuICAgIGNvbnRleHRTdGF0ZSxcbiAgICBnbEF0dHJpYnV0ZXMsIGV4dGVuc2lvbnMsIGxpbWl0cylcblxuICB2YXIgbmV4dFN0YXRlID0gY29yZS5uZXh0XG4gIHZhciBjYW52YXMgPSBnbC5jYW52YXNcblxuICB2YXIgcmFmQ2FsbGJhY2tzID0gW11cbiAgdmFyIGxvc3NDYWxsYmFja3MgPSBbXVxuICB2YXIgcmVzdG9yZUNhbGxiYWNrcyA9IFtdXG4gIHZhciBkZXN0cm95Q2FsbGJhY2tzID0gW2NvbmZpZy5vbkRlc3Ryb3ldXG5cbiAgdmFyIGFjdGl2ZVJBRiA9IG51bGxcbiAgZnVuY3Rpb24gaGFuZGxlUkFGICgpIHtcbiAgICBpZiAocmFmQ2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgIHRpbWVyLnVwZGF0ZSgpXG4gICAgICB9XG4gICAgICBhY3RpdmVSQUYgPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBzY2hlZHVsZSBuZXh0IGFuaW1hdGlvbiBmcmFtZVxuICAgIGFjdGl2ZVJBRiA9IHJhZi5uZXh0KGhhbmRsZVJBRilcblxuICAgIC8vIHBvbGwgZm9yIGNoYW5nZXNcbiAgICBwb2xsKClcblxuICAgIC8vIGZpcmUgYSBjYWxsYmFjayBmb3IgYWxsIHBlbmRpbmcgcmFmc1xuICAgIGZvciAodmFyIGkgPSByYWZDYWxsYmFja3MubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHZhciBjYiA9IHJhZkNhbGxiYWNrc1tpXVxuICAgICAgaWYgKGNiKSB7XG4gICAgICAgIGNiKGNvbnRleHRTdGF0ZSwgbnVsbCwgMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmbHVzaCBhbGwgcGVuZGluZyB3ZWJnbCBjYWxsc1xuICAgIGdsLmZsdXNoKClcblxuICAgIC8vIHBvbGwgR1BVIHRpbWVycyAqYWZ0ZXIqIGdsLmZsdXNoIHNvIHdlIGRvbid0IGRlbGF5IGNvbW1hbmQgZGlzcGF0Y2hcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIHRpbWVyLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRSQUYgKCkge1xuICAgIGlmICghYWN0aXZlUkFGICYmIHJhZkNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICBhY3RpdmVSQUYgPSByYWYubmV4dChoYW5kbGVSQUYpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcFJBRiAoKSB7XG4gICAgaWYgKGFjdGl2ZVJBRikge1xuICAgICAgcmFmLmNhbmNlbChoYW5kbGVSQUYpXG4gICAgICBhY3RpdmVSQUYgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ29udGV4dExvc3MgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gc2V0IGNvbnRleHQgbG9zdCBmbGFnXG4gICAgY29udGV4dExvc3QgPSB0cnVlXG5cbiAgICAvLyBwYXVzZSByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZVxuICAgIHN0b3BSQUYoKVxuXG4gICAgLy8gbG9zZSBjb250ZXh0XG4gICAgbG9zc0NhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgY2IoKVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDb250ZXh0UmVzdG9yZWQgKGV2ZW50KSB7XG4gICAgLy8gY2xlYXIgZXJyb3IgY29kZVxuICAgIGdsLmdldEVycm9yKClcblxuICAgIC8vIGNsZWFyIGNvbnRleHQgbG9zdCBmbGFnXG4gICAgY29udGV4dExvc3QgPSBmYWxzZVxuXG4gICAgLy8gcmVmcmVzaCBzdGF0ZVxuICAgIGV4dGVuc2lvblN0YXRlLnJlc3RvcmUoKVxuICAgIHNoYWRlclN0YXRlLnJlc3RvcmUoKVxuICAgIGJ1ZmZlclN0YXRlLnJlc3RvcmUoKVxuICAgIHRleHR1cmVTdGF0ZS5yZXN0b3JlKClcbiAgICByZW5kZXJidWZmZXJTdGF0ZS5yZXN0b3JlKClcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLnJlc3RvcmUoKVxuICAgIGF0dHJpYnV0ZVN0YXRlLnJlc3RvcmUoKVxuICAgIGlmICh0aW1lcikge1xuICAgICAgdGltZXIucmVzdG9yZSgpXG4gICAgfVxuXG4gICAgLy8gcmVmcmVzaCBzdGF0ZVxuICAgIGNvcmUucHJvY3MucmVmcmVzaCgpXG5cbiAgICAvLyByZXN0YXJ0IFJBRlxuICAgIHN0YXJ0UkFGKClcblxuICAgIC8vIHJlc3RvcmUgY29udGV4dFxuICAgIHJlc3RvcmVDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgIGNiKClcbiAgICB9KVxuICB9XG5cbiAgaWYgKGNhbnZhcykge1xuICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKENPTlRFWFRfTE9TVF9FVkVOVCwgaGFuZGxlQ29udGV4dExvc3MsIGZhbHNlKVxuICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKENPTlRFWFRfUkVTVE9SRURfRVZFTlQsIGhhbmRsZUNvbnRleHRSZXN0b3JlZCwgZmFsc2UpXG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95ICgpIHtcbiAgICByYWZDYWxsYmFja3MubGVuZ3RoID0gMFxuICAgIHN0b3BSQUYoKVxuXG4gICAgaWYgKGNhbnZhcykge1xuICAgICAgY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoQ09OVEVYVF9MT1NUX0VWRU5ULCBoYW5kbGVDb250ZXh0TG9zcylcbiAgICAgIGNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKENPTlRFWFRfUkVTVE9SRURfRVZFTlQsIGhhbmRsZUNvbnRleHRSZXN0b3JlZClcbiAgICB9XG5cbiAgICBzaGFkZXJTdGF0ZS5jbGVhcigpXG4gICAgZnJhbWVidWZmZXJTdGF0ZS5jbGVhcigpXG4gICAgcmVuZGVyYnVmZmVyU3RhdGUuY2xlYXIoKVxuICAgIHRleHR1cmVTdGF0ZS5jbGVhcigpXG4gICAgZWxlbWVudFN0YXRlLmNsZWFyKClcbiAgICBidWZmZXJTdGF0ZS5jbGVhcigpXG4gICAgYXR0cmlidXRlU3RhdGUuY2xlYXIoKVxuXG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICB0aW1lci5jbGVhcigpXG4gICAgfVxuXG4gICAgZGVzdHJveUNhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgY2IoKVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBjb21waWxlUHJvY2VkdXJlIChvcHRpb25zKSB7XG4gICAgY2hlY2skMSghIW9wdGlvbnMsICdpbnZhbGlkIGFyZ3MgdG8gcmVnbCh7Li4ufSknKVxuICAgIGNoZWNrJDEudHlwZShvcHRpb25zLCAnb2JqZWN0JywgJ2ludmFsaWQgYXJncyB0byByZWdsKHsuLi59KScpXG5cbiAgICBmdW5jdGlvbiBmbGF0dGVuTmVzdGVkT3B0aW9ucyAob3B0aW9ucykge1xuICAgICAgdmFyIHJlc3VsdCA9IGV4dGVuZCh7fSwgb3B0aW9ucylcbiAgICAgIGRlbGV0ZSByZXN1bHQudW5pZm9ybXNcbiAgICAgIGRlbGV0ZSByZXN1bHQuYXR0cmlidXRlc1xuICAgICAgZGVsZXRlIHJlc3VsdC5jb250ZXh0XG4gICAgICBkZWxldGUgcmVzdWx0LnZhb1xuXG4gICAgICBpZiAoJ3N0ZW5jaWwnIGluIHJlc3VsdCAmJiByZXN1bHQuc3RlbmNpbC5vcCkge1xuICAgICAgICByZXN1bHQuc3RlbmNpbC5vcEJhY2sgPSByZXN1bHQuc3RlbmNpbC5vcEZyb250ID0gcmVzdWx0LnN0ZW5jaWwub3BcbiAgICAgICAgZGVsZXRlIHJlc3VsdC5zdGVuY2lsLm9wXG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG1lcmdlIChuYW1lKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHJlc3VsdCkge1xuICAgICAgICAgIHZhciBjaGlsZCA9IHJlc3VsdFtuYW1lXVxuICAgICAgICAgIGRlbGV0ZSByZXN1bHRbbmFtZV1cbiAgICAgICAgICBPYmplY3Qua2V5cyhjaGlsZCkuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgcmVzdWx0W25hbWUgKyAnLicgKyBwcm9wXSA9IGNoaWxkW3Byb3BdXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWVyZ2UoJ2JsZW5kJylcbiAgICAgIG1lcmdlKCdkZXB0aCcpXG4gICAgICBtZXJnZSgnY3VsbCcpXG4gICAgICBtZXJnZSgnc3RlbmNpbCcpXG4gICAgICBtZXJnZSgncG9seWdvbk9mZnNldCcpXG4gICAgICBtZXJnZSgnc2Npc3NvcicpXG4gICAgICBtZXJnZSgnc2FtcGxlJylcblxuICAgICAgaWYgKCd2YW8nIGluIG9wdGlvbnMpIHtcbiAgICAgICAgcmVzdWx0LnZhbyA9IG9wdGlvbnMudmFvXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXBhcmF0ZUR5bmFtaWMgKG9iamVjdCwgdXNlQXJyYXlzKSB7XG4gICAgICB2YXIgc3RhdGljSXRlbXMgPSB7fVxuICAgICAgdmFyIGR5bmFtaWNJdGVtcyA9IHt9XG4gICAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3Rbb3B0aW9uXVxuICAgICAgICBpZiAoZHluYW1pYy5pc0R5bmFtaWModmFsdWUpKSB7XG4gICAgICAgICAgZHluYW1pY0l0ZW1zW29wdGlvbl0gPSBkeW5hbWljLnVuYm94KHZhbHVlLCBvcHRpb24pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodXNlQXJyYXlzICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKGR5bmFtaWMuaXNEeW5hbWljKHZhbHVlW2ldKSkge1xuICAgICAgICAgICAgICBkeW5hbWljSXRlbXNbb3B0aW9uXSA9IGR5bmFtaWMudW5ib3godmFsdWUsIG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRpY0l0ZW1zW29wdGlvbl0gPSB2YWx1ZVxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGR5bmFtaWM6IGR5bmFtaWNJdGVtcyxcbiAgICAgICAgc3RhdGljOiBzdGF0aWNJdGVtc1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyZWF0IGNvbnRleHQgdmFyaWFibGVzIHNlcGFyYXRlIGZyb20gb3RoZXIgZHluYW1pYyB2YXJpYWJsZXNcbiAgICB2YXIgY29udGV4dCA9IHNlcGFyYXRlRHluYW1pYyhvcHRpb25zLmNvbnRleHQgfHwge30sIHRydWUpXG4gICAgdmFyIHVuaWZvcm1zID0gc2VwYXJhdGVEeW5hbWljKG9wdGlvbnMudW5pZm9ybXMgfHwge30sIHRydWUpXG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzZXBhcmF0ZUR5bmFtaWMob3B0aW9ucy5hdHRyaWJ1dGVzIHx8IHt9LCBmYWxzZSlcbiAgICB2YXIgb3B0cyA9IHNlcGFyYXRlRHluYW1pYyhmbGF0dGVuTmVzdGVkT3B0aW9ucyhvcHRpb25zKSwgZmFsc2UpXG5cbiAgICB2YXIgc3RhdHMkJDEgPSB7XG4gICAgICBncHVUaW1lOiAwLjAsXG4gICAgICBjcHVUaW1lOiAwLjAsXG4gICAgICBjb3VudDogMFxuICAgIH1cblxuICAgIHZhciBjb21waWxlZCA9IGNvcmUuY29tcGlsZShvcHRzLCBhdHRyaWJ1dGVzLCB1bmlmb3JtcywgY29udGV4dCwgc3RhdHMkJDEpXG5cbiAgICB2YXIgZHJhdyA9IGNvbXBpbGVkLmRyYXdcbiAgICB2YXIgYmF0Y2ggPSBjb21waWxlZC5iYXRjaFxuICAgIHZhciBzY29wZSA9IGNvbXBpbGVkLnNjb3BlXG5cbiAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIG1vZGlmeSBjb2RlIGdlbmVyYXRpb24gZm9yIGJhdGNoIGNvbW1hbmRzIHNvIHRoaXNcbiAgICAvLyBpc24ndCBuZWNlc3NhcnlcbiAgICB2YXIgRU1QVFlfQVJSQVkgPSBbXVxuICAgIGZ1bmN0aW9uIHJlc2VydmUgKGNvdW50KSB7XG4gICAgICB3aGlsZSAoRU1QVFlfQVJSQVkubGVuZ3RoIDwgY291bnQpIHtcbiAgICAgICAgRU1QVFlfQVJSQVkucHVzaChudWxsKVxuICAgICAgfVxuICAgICAgcmV0dXJuIEVNUFRZX0FSUkFZXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gUkVHTENvbW1hbmQgKGFyZ3MsIGJvZHkpIHtcbiAgICAgIHZhciBpXG4gICAgICBpZiAoY29udGV4dExvc3QpIHtcbiAgICAgICAgY2hlY2skMS5yYWlzZSgnY29udGV4dCBsb3N0JylcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gc2NvcGUuY2FsbCh0aGlzLCBudWxsLCBhcmdzLCAwKVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ3M7ICsraSkge1xuICAgICAgICAgICAgc2NvcGUuY2FsbCh0aGlzLCBudWxsLCBib2R5LCBpKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHNjb3BlLmNhbGwodGhpcywgYXJnc1tpXSwgYm9keSwgaSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHNjb3BlLmNhbGwodGhpcywgYXJncywgYm9keSwgMClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGFyZ3MgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGJhdGNoLmNhbGwodGhpcywgcmVzZXJ2ZShhcmdzIHwgMCksIGFyZ3MgfCAwKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGJhdGNoLmNhbGwodGhpcywgYXJncywgYXJncy5sZW5ndGgpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkcmF3LmNhbGwodGhpcywgYXJncylcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXh0ZW5kKFJFR0xDb21tYW5kLCB7XG4gICAgICBzdGF0czogc3RhdHMkJDEsXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbXBpbGVkLmRlc3Ryb3koKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICB2YXIgc2V0RkJPID0gZnJhbWVidWZmZXJTdGF0ZS5zZXRGQk8gPSBjb21waWxlUHJvY2VkdXJlKHtcbiAgICBmcmFtZWJ1ZmZlcjogZHluYW1pYy5kZWZpbmUuY2FsbChudWxsLCBEWU5fUFJPUCwgJ2ZyYW1lYnVmZmVyJylcbiAgfSlcblxuICBmdW5jdGlvbiBjbGVhckltcGwgKF8sIG9wdGlvbnMpIHtcbiAgICB2YXIgY2xlYXJGbGFncyA9IDBcbiAgICBjb3JlLnByb2NzLnBvbGwoKVxuXG4gICAgdmFyIGMgPSBvcHRpb25zLmNvbG9yXG4gICAgaWYgKGMpIHtcbiAgICAgIGdsLmNsZWFyQ29sb3IoK2NbMF0gfHwgMCwgK2NbMV0gfHwgMCwgK2NbMl0gfHwgMCwgK2NbM10gfHwgMClcbiAgICAgIGNsZWFyRmxhZ3MgfD0gR0xfQ09MT1JfQlVGRkVSX0JJVFxuICAgIH1cbiAgICBpZiAoJ2RlcHRoJyBpbiBvcHRpb25zKSB7XG4gICAgICBnbC5jbGVhckRlcHRoKCtvcHRpb25zLmRlcHRoKVxuICAgICAgY2xlYXJGbGFncyB8PSBHTF9ERVBUSF9CVUZGRVJfQklUXG4gICAgfVxuICAgIGlmICgnc3RlbmNpbCcgaW4gb3B0aW9ucykge1xuICAgICAgZ2wuY2xlYXJTdGVuY2lsKG9wdGlvbnMuc3RlbmNpbCB8IDApXG4gICAgICBjbGVhckZsYWdzIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVFxuICAgIH1cblxuICAgIGNoZWNrJDEoISFjbGVhckZsYWdzLCAnY2FsbGVkIHJlZ2wuY2xlYXIgd2l0aCBubyBidWZmZXIgc3BlY2lmaWVkJylcbiAgICBnbC5jbGVhcihjbGVhckZsYWdzKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXIgKG9wdGlvbnMpIHtcbiAgICBjaGVjayQxKFxuICAgICAgdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMsXG4gICAgICAncmVnbC5jbGVhcigpIHRha2VzIGFuIG9iamVjdCBhcyBpbnB1dCcpXG4gICAgaWYgKCdmcmFtZWJ1ZmZlcicgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZnJhbWVidWZmZXIgJiZcbiAgICAgICAgICBvcHRpb25zLmZyYW1lYnVmZmVyX3JlZ2xUeXBlID09PSAnZnJhbWVidWZmZXJDdWJlJykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7ICsraSkge1xuICAgICAgICAgIHNldEZCTyhleHRlbmQoe1xuICAgICAgICAgICAgZnJhbWVidWZmZXI6IG9wdGlvbnMuZnJhbWVidWZmZXIuZmFjZXNbaV1cbiAgICAgICAgICB9LCBvcHRpb25zKSwgY2xlYXJJbXBsKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRGQk8ob3B0aW9ucywgY2xlYXJJbXBsKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhckltcGwobnVsbCwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmcmFtZSAoY2IpIHtcbiAgICBjaGVjayQxLnR5cGUoY2IsICdmdW5jdGlvbicsICdyZWdsLmZyYW1lKCkgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJylcbiAgICByYWZDYWxsYmFja3MucHVzaChjYilcblxuICAgIGZ1bmN0aW9uIGNhbmNlbCAoKSB7XG4gICAgICAvLyBGSVhNRTogIHNob3VsZCB3ZSBjaGVjayBzb21ldGhpbmcgb3RoZXIgdGhhbiBlcXVhbHMgY2IgaGVyZT9cbiAgICAgIC8vIHdoYXQgaWYgYSB1c2VyIGNhbGxzIGZyYW1lIHR3aWNlIHdpdGggdGhlIHNhbWUgY2FsbGJhY2suLi5cbiAgICAgIC8vXG4gICAgICB2YXIgaSA9IGZpbmQocmFmQ2FsbGJhY2tzLCBjYilcbiAgICAgIGNoZWNrJDEoaSA+PSAwLCAnY2Fubm90IGNhbmNlbCBhIGZyYW1lIHR3aWNlJylcbiAgICAgIGZ1bmN0aW9uIHBlbmRpbmdDYW5jZWwgKCkge1xuICAgICAgICB2YXIgaW5kZXggPSBmaW5kKHJhZkNhbGxiYWNrcywgcGVuZGluZ0NhbmNlbClcbiAgICAgICAgcmFmQ2FsbGJhY2tzW2luZGV4XSA9IHJhZkNhbGxiYWNrc1tyYWZDYWxsYmFja3MubGVuZ3RoIC0gMV1cbiAgICAgICAgcmFmQ2FsbGJhY2tzLmxlbmd0aCAtPSAxXG4gICAgICAgIGlmIChyYWZDYWxsYmFja3MubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICBzdG9wUkFGKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmFmQ2FsbGJhY2tzW2ldID0gcGVuZGluZ0NhbmNlbFxuICAgIH1cblxuICAgIHN0YXJ0UkFGKClcblxuICAgIHJldHVybiB7XG4gICAgICBjYW5jZWw6IGNhbmNlbFxuICAgIH1cbiAgfVxuXG4gIC8vIHBvbGwgdmlld3BvcnRcbiAgZnVuY3Rpb24gcG9sbFZpZXdwb3J0ICgpIHtcbiAgICB2YXIgdmlld3BvcnQgPSBuZXh0U3RhdGUudmlld3BvcnRcbiAgICB2YXIgc2Npc3NvckJveCA9IG5leHRTdGF0ZS5zY2lzc29yX2JveFxuICAgIHZpZXdwb3J0WzBdID0gdmlld3BvcnRbMV0gPSBzY2lzc29yQm94WzBdID0gc2Npc3NvckJveFsxXSA9IDBcbiAgICBjb250ZXh0U3RhdGUudmlld3BvcnRXaWR0aCA9XG4gICAgICBjb250ZXh0U3RhdGUuZnJhbWVidWZmZXJXaWR0aCA9XG4gICAgICBjb250ZXh0U3RhdGUuZHJhd2luZ0J1ZmZlcldpZHRoID1cbiAgICAgIHZpZXdwb3J0WzJdID1cbiAgICAgIHNjaXNzb3JCb3hbMl0gPSBnbC5kcmF3aW5nQnVmZmVyV2lkdGhcbiAgICBjb250ZXh0U3RhdGUudmlld3BvcnRIZWlnaHQgPVxuICAgICAgY29udGV4dFN0YXRlLmZyYW1lYnVmZmVySGVpZ2h0ID1cbiAgICAgIGNvbnRleHRTdGF0ZS5kcmF3aW5nQnVmZmVySGVpZ2h0ID1cbiAgICAgIHZpZXdwb3J0WzNdID1cbiAgICAgIHNjaXNzb3JCb3hbM10gPSBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XG4gIH1cblxuICBmdW5jdGlvbiBwb2xsICgpIHtcbiAgICBjb250ZXh0U3RhdGUudGljayArPSAxXG4gICAgY29udGV4dFN0YXRlLnRpbWUgPSBub3coKVxuICAgIHBvbGxWaWV3cG9ydCgpXG4gICAgY29yZS5wcm9jcy5wb2xsKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZnJlc2ggKCkge1xuICAgIHRleHR1cmVTdGF0ZS5yZWZyZXNoKClcbiAgICBwb2xsVmlld3BvcnQoKVxuICAgIGNvcmUucHJvY3MucmVmcmVzaCgpXG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICB0aW1lci51cGRhdGUoKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdyAoKSB7XG4gICAgcmV0dXJuIChjbG9jaygpIC0gU1RBUlRfVElNRSkgLyAxMDAwLjBcbiAgfVxuXG4gIHJlZnJlc2goKVxuXG4gIGZ1bmN0aW9uIGFkZExpc3RlbmVyIChldmVudCwgY2FsbGJhY2spIHtcbiAgICBjaGVjayQxLnR5cGUoY2FsbGJhY2ssICdmdW5jdGlvbicsICdsaXN0ZW5lciBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKVxuXG4gICAgdmFyIGNhbGxiYWNrc1xuICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgIGNhc2UgJ2ZyYW1lJzpcbiAgICAgICAgcmV0dXJuIGZyYW1lKGNhbGxiYWNrKVxuICAgICAgY2FzZSAnbG9zdCc6XG4gICAgICAgIGNhbGxiYWNrcyA9IGxvc3NDYWxsYmFja3NcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3Jlc3RvcmUnOlxuICAgICAgICBjYWxsYmFja3MgPSByZXN0b3JlQ2FsbGJhY2tzXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdkZXN0cm95JzpcbiAgICAgICAgY2FsbGJhY2tzID0gZGVzdHJveUNhbGxiYWNrc1xuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBldmVudCwgbXVzdCBiZSBvbmUgb2YgZnJhbWUsbG9zdCxyZXN0b3JlLGRlc3Ryb3knKVxuICAgIH1cblxuICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgIHJldHVybiB7XG4gICAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2tzW2ldID09PSBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2tzW2ldID0gY2FsbGJhY2tzW2NhbGxiYWNrcy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgY2FsbGJhY2tzLnBvcCgpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcmVnbCA9IGV4dGVuZChjb21waWxlUHJvY2VkdXJlLCB7XG4gICAgLy8gQ2xlYXIgY3VycmVudCBGQk9cbiAgICBjbGVhcjogY2xlYXIsXG5cbiAgICAvLyBTaG9ydCBjdXRzIGZvciBkeW5hbWljIHZhcmlhYmxlc1xuICAgIHByb3A6IGR5bmFtaWMuZGVmaW5lLmJpbmQobnVsbCwgRFlOX1BST1ApLFxuICAgIGNvbnRleHQ6IGR5bmFtaWMuZGVmaW5lLmJpbmQobnVsbCwgRFlOX0NPTlRFWFQpLFxuICAgIHRoaXM6IGR5bmFtaWMuZGVmaW5lLmJpbmQobnVsbCwgRFlOX1NUQVRFKSxcblxuICAgIC8vIGV4ZWN1dGVzIGFuIGVtcHR5IGRyYXcgY29tbWFuZFxuICAgIGRyYXc6IGNvbXBpbGVQcm9jZWR1cmUoe30pLFxuXG4gICAgLy8gUmVzb3VyY2VzXG4gICAgYnVmZmVyOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGJ1ZmZlclN0YXRlLmNyZWF0ZShvcHRpb25zLCBHTF9BUlJBWV9CVUZGRVIsIGZhbHNlLCBmYWxzZSlcbiAgICB9LFxuICAgIGVsZW1lbnRzOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGVsZW1lbnRTdGF0ZS5jcmVhdGUob3B0aW9ucywgZmFsc2UpXG4gICAgfSxcbiAgICB0ZXh0dXJlOiB0ZXh0dXJlU3RhdGUuY3JlYXRlMkQsXG4gICAgY3ViZTogdGV4dHVyZVN0YXRlLmNyZWF0ZUN1YmUsXG4gICAgcmVuZGVyYnVmZmVyOiByZW5kZXJidWZmZXJTdGF0ZS5jcmVhdGUsXG4gICAgZnJhbWVidWZmZXI6IGZyYW1lYnVmZmVyU3RhdGUuY3JlYXRlLFxuICAgIGZyYW1lYnVmZmVyQ3ViZTogZnJhbWVidWZmZXJTdGF0ZS5jcmVhdGVDdWJlLFxuICAgIHZhbzogYXR0cmlidXRlU3RhdGUuY3JlYXRlVkFPLFxuXG4gICAgLy8gRXhwb3NlIGNvbnRleHQgYXR0cmlidXRlc1xuICAgIGF0dHJpYnV0ZXM6IGdsQXR0cmlidXRlcyxcblxuICAgIC8vIEZyYW1lIHJlbmRlcmluZ1xuICAgIGZyYW1lOiBmcmFtZSxcbiAgICBvbjogYWRkTGlzdGVuZXIsXG5cbiAgICAvLyBTeXN0ZW0gbGltaXRzXG4gICAgbGltaXRzOiBsaW1pdHMsXG4gICAgaGFzRXh0ZW5zaW9uOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcmV0dXJuIGxpbWl0cy5leHRlbnNpb25zLmluZGV4T2YobmFtZS50b0xvd2VyQ2FzZSgpKSA+PSAwXG4gICAgfSxcblxuICAgIC8vIFJlYWQgcGl4ZWxzXG4gICAgcmVhZDogcmVhZFBpeGVscyxcblxuICAgIC8vIERlc3Ryb3kgcmVnbCBhbmQgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzXG4gICAgZGVzdHJveTogZGVzdHJveSxcblxuICAgIC8vIERpcmVjdCBHTCBzdGF0ZSBtYW5pcHVsYXRpb25cbiAgICBfZ2w6IGdsLFxuICAgIF9yZWZyZXNoOiByZWZyZXNoLFxuXG4gICAgcG9sbDogZnVuY3Rpb24gKCkge1xuICAgICAgcG9sbCgpXG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgdGltZXIudXBkYXRlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ3VycmVudCB0aW1lXG4gICAgbm93OiBub3csXG5cbiAgICAvLyByZWdsIFN0YXRpc3RpY3MgSW5mb3JtYXRpb25cbiAgICBzdGF0czogc3RhdHMkJDFcbiAgfSlcblxuICBjb25maWcub25Eb25lKG51bGwsIHJlZ2wpXG5cbiAgcmV0dXJuIHJlZ2xcbn1cblxucmV0dXJuIHdyYXBSRUdMO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVnbC5qcy5tYXBcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB3aWR0aCA9IDI1NjsvLyBlYWNoIFJDNCBvdXRwdXQgaXMgMCA8PSB4IDwgMjU2XHJcbnZhciBjaHVua3MgPSA2Oy8vIGF0IGxlYXN0IHNpeCBSQzQgb3V0cHV0cyBmb3IgZWFjaCBkb3VibGVcclxudmFyIGRpZ2l0cyA9IDUyOy8vIHRoZXJlIGFyZSA1MiBzaWduaWZpY2FudCBkaWdpdHMgaW4gYSBkb3VibGVcclxudmFyIHBvb2wgPSBbXTsvLyBwb29sOiBlbnRyb3B5IHBvb2wgc3RhcnRzIGVtcHR5XHJcbnZhciBHTE9CQUwgPSB0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcclxuXHJcbi8vXHJcbi8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWxhdGVkIHRvIElFRUUgNzU0IGxpbWl0cy5cclxuLy9cclxudmFyIHN0YXJ0ZGVub20gPSBNYXRoLnBvdyh3aWR0aCwgY2h1bmtzKSxcclxuICAgIHNpZ25pZmljYW5jZSA9IE1hdGgucG93KDIsIGRpZ2l0cyksXHJcbiAgICBvdmVyZmxvdyA9IHNpZ25pZmljYW5jZSAqIDIsXHJcbiAgICBtYXNrID0gd2lkdGggLSAxO1xyXG5cclxuXHJcbnZhciBvbGRSYW5kb20gPSBNYXRoLnJhbmRvbTtcclxuXHJcbi8vXHJcbi8vIHNlZWRyYW5kb20oKVxyXG4vLyBUaGlzIGlzIHRoZSBzZWVkcmFuZG9tIGZ1bmN0aW9uIGRlc2NyaWJlZCBhYm92ZS5cclxuLy9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzZWVkLCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nbG9iYWwgPT09IHRydWUpIHtcclxuICAgIG9wdGlvbnMuZ2xvYmFsID0gZmFsc2U7XHJcbiAgICBNYXRoLnJhbmRvbSA9IG1vZHVsZS5leHBvcnRzKHNlZWQsIG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSB0cnVlO1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tO1xyXG4gIH1cclxuICB2YXIgdXNlX2VudHJvcHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmVudHJvcHkpIHx8IGZhbHNlO1xyXG4gIHZhciBrZXkgPSBbXTtcclxuXHJcbiAgLy8gRmxhdHRlbiB0aGUgc2VlZCBzdHJpbmcgb3IgYnVpbGQgb25lIGZyb20gbG9jYWwgZW50cm9weSBpZiBuZWVkZWQuXHJcbiAgdmFyIHNob3J0c2VlZCA9IG1peGtleShmbGF0dGVuKFxyXG4gICAgdXNlX2VudHJvcHkgPyBbc2VlZCwgdG9zdHJpbmcocG9vbCldIDpcclxuICAgIDAgaW4gYXJndW1lbnRzID8gc2VlZCA6IGF1dG9zZWVkKCksIDMpLCBrZXkpO1xyXG5cclxuICAvLyBVc2UgdGhlIHNlZWQgdG8gaW5pdGlhbGl6ZSBhbiBBUkM0IGdlbmVyYXRvci5cclxuICB2YXIgYXJjNCA9IG5ldyBBUkM0KGtleSk7XHJcblxyXG4gIC8vIE1peCB0aGUgcmFuZG9tbmVzcyBpbnRvIGFjY3VtdWxhdGVkIGVudHJvcHkuXHJcbiAgbWl4a2V5KHRvc3RyaW5nKGFyYzQuUyksIHBvb2wpO1xyXG5cclxuICAvLyBPdmVycmlkZSBNYXRoLnJhbmRvbVxyXG5cclxuICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByYW5kb20gZG91YmxlIGluIFswLCAxKSB0aGF0IGNvbnRhaW5zXHJcbiAgLy8gcmFuZG9tbmVzcyBpbiBldmVyeSBiaXQgb2YgdGhlIG1hbnRpc3NhIG9mIHRoZSBJRUVFIDc1NCB2YWx1ZS5cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAgICAgICAgIC8vIENsb3N1cmUgdG8gcmV0dXJuIGEgcmFuZG9tIGRvdWJsZTpcclxuICAgIHZhciBuID0gYXJjNC5nKGNodW5rcyksICAgICAgICAgICAgIC8vIFN0YXJ0IHdpdGggYSBudW1lcmF0b3IgbiA8IDIgXiA0OFxyXG4gICAgICAgIGQgPSBzdGFydGRlbm9tLCAgICAgICAgICAgICAgICAgLy8gICBhbmQgZGVub21pbmF0b3IgZCA9IDIgXiA0OC5cclxuICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIG5vICdleHRyYSBsYXN0IGJ5dGUnLlxyXG4gICAgd2hpbGUgKG4gPCBzaWduaWZpY2FuY2UpIHsgICAgICAgICAgLy8gRmlsbCB1cCBhbGwgc2lnbmlmaWNhbnQgZGlnaXRzIGJ5XHJcbiAgICAgIG4gPSAobiArIHgpICogd2lkdGg7ICAgICAgICAgICAgICAvLyAgIHNoaWZ0aW5nIG51bWVyYXRvciBhbmRcclxuICAgICAgZCAqPSB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVub21pbmF0b3IgYW5kIGdlbmVyYXRpbmcgYVxyXG4gICAgICB4ID0gYXJjNC5nKDEpOyAgICAgICAgICAgICAgICAgICAgLy8gICBuZXcgbGVhc3Qtc2lnbmlmaWNhbnQtYnl0ZS5cclxuICAgIH1cclxuICAgIHdoaWxlIChuID49IG92ZXJmbG93KSB7ICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHJvdW5kaW5nIHVwLCBiZWZvcmUgYWRkaW5nXHJcbiAgICAgIG4gLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxhc3QgYnl0ZSwgc2hpZnQgZXZlcnl0aGluZ1xyXG4gICAgICBkIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICByaWdodCB1c2luZyBpbnRlZ2VyIE1hdGggdW50aWxcclxuICAgICAgeCA+Pj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2UgaGF2ZSBleGFjdGx5IHRoZSBkZXNpcmVkIGJpdHMuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG4gKyB4KSAvIGQ7ICAgICAgICAgICAgICAgICAvLyBGb3JtIHRoZSBudW1iZXIgd2l0aGluIFswLCAxKS5cclxuICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMucmVzZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgTWF0aC5yYW5kb20gPSBvbGRSYW5kb207XHJcbn07XHJcblxyXG4vL1xyXG4vLyBBUkM0XHJcbi8vXHJcbi8vIEFuIEFSQzQgaW1wbGVtZW50YXRpb24uICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBrZXkgaW4gdGhlIGZvcm0gb2ZcclxuLy8gYW4gYXJyYXkgb2YgYXQgbW9zdCAod2lkdGgpIGludGVnZXJzIHRoYXQgc2hvdWxkIGJlIDAgPD0geCA8ICh3aWR0aCkuXHJcbi8vXHJcbi8vIFRoZSBnKGNvdW50KSBtZXRob2QgcmV0dXJucyBhIHBzZXVkb3JhbmRvbSBpbnRlZ2VyIHRoYXQgY29uY2F0ZW5hdGVzXHJcbi8vIHRoZSBuZXh0IChjb3VudCkgb3V0cHV0cyBmcm9tIEFSQzQuICBJdHMgcmV0dXJuIHZhbHVlIGlzIGEgbnVtYmVyIHhcclxuLy8gdGhhdCBpcyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgKHdpZHRoIF4gY291bnQpLlxyXG4vL1xyXG4vKiogQGNvbnN0cnVjdG9yICovXHJcbmZ1bmN0aW9uIEFSQzQoa2V5KSB7XHJcbiAgdmFyIHQsIGtleWxlbiA9IGtleS5sZW5ndGgsXHJcbiAgICAgIG1lID0gdGhpcywgaSA9IDAsIGogPSBtZS5pID0gbWUuaiA9IDAsIHMgPSBtZS5TID0gW107XHJcblxyXG4gIC8vIFRoZSBlbXB0eSBrZXkgW10gaXMgdHJlYXRlZCBhcyBbMF0uXHJcbiAgaWYgKCFrZXlsZW4pIHsga2V5ID0gW2tleWxlbisrXTsgfVxyXG5cclxuICAvLyBTZXQgdXAgUyB1c2luZyB0aGUgc3RhbmRhcmQga2V5IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxyXG4gIHdoaWxlIChpIDwgd2lkdGgpIHtcclxuICAgIHNbaV0gPSBpKys7XHJcbiAgfVxyXG4gIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XHJcbiAgICBzW2ldID0gc1tqID0gbWFzayAmIChqICsga2V5W2kgJSBrZXlsZW5dICsgKHQgPSBzW2ldKSldO1xyXG4gICAgc1tqXSA9IHQ7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgXCJnXCIgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGFzIG9uZSBudW1iZXIuXHJcbiAgKG1lLmcgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgLy8gVXNpbmcgaW5zdGFuY2UgbWVtYmVycyBpbnN0ZWFkIG9mIGNsb3N1cmUgc3RhdGUgbmVhcmx5IGRvdWJsZXMgc3BlZWQuXHJcbiAgICB2YXIgdCwgciA9IDAsXHJcbiAgICAgICAgaSA9IG1lLmksIGogPSBtZS5qLCBzID0gbWUuUztcclxuICAgIHdoaWxlIChjb3VudC0tKSB7XHJcbiAgICAgIHQgPSBzW2kgPSBtYXNrICYgKGkgKyAxKV07XHJcbiAgICAgIHIgPSByICogd2lkdGggKyBzW21hc2sgJiAoKHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyB0KV0pICsgKHNbal0gPSB0KSldO1xyXG4gICAgfVxyXG4gICAgbWUuaSA9IGk7IG1lLmogPSBqO1xyXG4gICAgcmV0dXJuIHI7XHJcbiAgICAvLyBGb3Igcm9idXN0IHVucHJlZGljdGFiaWxpdHkgZGlzY2FyZCBhbiBpbml0aWFsIGJhdGNoIG9mIHZhbHVlcy5cclxuICAgIC8vIFNlZSBodHRwOi8vd3d3LnJzYS5jb20vcnNhbGFicy9ub2RlLmFzcD9pZD0yMDA5XHJcbiAgfSkod2lkdGgpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBmbGF0dGVuKClcclxuLy8gQ29udmVydHMgYW4gb2JqZWN0IHRyZWUgdG8gbmVzdGVkIGFycmF5cyBvZiBzdHJpbmdzLlxyXG4vL1xyXG5mdW5jdGlvbiBmbGF0dGVuKG9iaiwgZGVwdGgpIHtcclxuICB2YXIgcmVzdWx0ID0gW10sIHR5cCA9ICh0eXBlb2Ygb2JqKVswXSwgcHJvcDtcclxuICBpZiAoZGVwdGggJiYgdHlwID09ICdvJykge1xyXG4gICAgZm9yIChwcm9wIGluIG9iaikge1xyXG4gICAgICB0cnkgeyByZXN1bHQucHVzaChmbGF0dGVuKG9ialtwcm9wXSwgZGVwdGggLSAxKSk7IH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiAocmVzdWx0Lmxlbmd0aCA/IHJlc3VsdCA6IHR5cCA9PSAncycgPyBvYmogOiBvYmogKyAnXFwwJyk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIG1peGtleSgpXHJcbi8vIE1peGVzIGEgc3RyaW5nIHNlZWQgaW50byBhIGtleSB0aGF0IGlzIGFuIGFycmF5IG9mIGludGVnZXJzLCBhbmRcclxuLy8gcmV0dXJucyBhIHNob3J0ZW5lZCBzdHJpbmcgc2VlZCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHJlc3VsdCBrZXkuXHJcbi8vXHJcbmZ1bmN0aW9uIG1peGtleShzZWVkLCBrZXkpIHtcclxuICB2YXIgc3RyaW5nc2VlZCA9IHNlZWQgKyAnJywgc21lYXIsIGogPSAwO1xyXG4gIHdoaWxlIChqIDwgc3RyaW5nc2VlZC5sZW5ndGgpIHtcclxuICAgIGtleVttYXNrICYgal0gPVxyXG4gICAgICBtYXNrICYgKChzbWVhciBePSBrZXlbbWFzayAmIGpdICogMTkpICsgc3RyaW5nc2VlZC5jaGFyQ29kZUF0KGorKykpO1xyXG4gIH1cclxuICByZXR1cm4gdG9zdHJpbmcoa2V5KTtcclxufVxyXG5cclxuLy9cclxuLy8gYXV0b3NlZWQoKVxyXG4vLyBSZXR1cm5zIGFuIG9iamVjdCBmb3IgYXV0b3NlZWRpbmcsIHVzaW5nIHdpbmRvdy5jcnlwdG8gaWYgYXZhaWxhYmxlLlxyXG4vL1xyXG4vKiogQHBhcmFtIHtVaW50OEFycmF5PX0gc2VlZCAqL1xyXG5mdW5jdGlvbiBhdXRvc2VlZChzZWVkKSB7XHJcbiAgdHJ5IHtcclxuICAgIEdMT0JBTC5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHNlZWQgPSBuZXcgVWludDhBcnJheSh3aWR0aCkpO1xyXG4gICAgcmV0dXJuIHRvc3RyaW5nKHNlZWQpO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBbK25ldyBEYXRlLCBHTE9CQUwsIEdMT0JBTC5uYXZpZ2F0b3IgJiYgR0xPQkFMLm5hdmlnYXRvci5wbHVnaW5zLFxyXG4gICAgICAgICAgICBHTE9CQUwuc2NyZWVuLCB0b3N0cmluZyhwb29sKV07XHJcbiAgfVxyXG59XHJcblxyXG4vL1xyXG4vLyB0b3N0cmluZygpXHJcbi8vIENvbnZlcnRzIGFuIGFycmF5IG9mIGNoYXJjb2RlcyB0byBhIHN0cmluZ1xyXG4vL1xyXG5mdW5jdGlvbiB0b3N0cmluZyhhKSB7XHJcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoMCwgYSk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIFdoZW4gc2VlZHJhbmRvbS5qcyBpcyBsb2FkZWQsIHdlIGltbWVkaWF0ZWx5IG1peCBhIGZldyBiaXRzXHJcbi8vIGZyb20gdGhlIGJ1aWx0LWluIFJORyBpbnRvIHRoZSBlbnRyb3B5IHBvb2wuICBCZWNhdXNlIHdlIGRvXHJcbi8vIG5vdCB3YW50IHRvIGludGVmZXJlIHdpdGggZGV0ZXJtaW5zdGljIFBSTkcgc3RhdGUgbGF0ZXIsXHJcbi8vIHNlZWRyYW5kb20gd2lsbCBub3QgY2FsbCBNYXRoLnJhbmRvbSBvbiBpdHMgb3duIGFnYWluIGFmdGVyXHJcbi8vIGluaXRpYWxpemF0aW9uLlxyXG4vL1xyXG5taXhrZXkoTWF0aC5yYW5kb20oKSwgcG9vbCk7XHJcbiIsIi8qXG4gKiBBIGZhc3QgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiBzaW1wbGV4IG5vaXNlIGJ5IEpvbmFzIFdhZ25lclxuXG5CYXNlZCBvbiBhIHNwZWVkLWltcHJvdmVkIHNpbXBsZXggbm9pc2UgYWxnb3JpdGhtIGZvciAyRCwgM0QgYW5kIDREIGluIEphdmEuXG5XaGljaCBpcyBiYXNlZCBvbiBleGFtcGxlIGNvZGUgYnkgU3RlZmFuIEd1c3RhdnNvbiAoc3RlZ3VAaXRuLmxpdS5zZSkuXG5XaXRoIE9wdGltaXNhdGlvbnMgYnkgUGV0ZXIgRWFzdG1hbiAocGVhc3RtYW5AZHJpenpsZS5zdGFuZm9yZC5lZHUpLlxuQmV0dGVyIHJhbmsgb3JkZXJpbmcgbWV0aG9kIGJ5IFN0ZWZhbiBHdXN0YXZzb24gaW4gMjAxMi5cblxuXG4gQ29weXJpZ2h0IChjKSAyMDE4IEpvbmFzIFdhZ25lclxuXG4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cbihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBGMiA9IDAuNSAqIChNYXRoLnNxcnQoMy4wKSAtIDEuMCk7XG4gIHZhciBHMiA9ICgzLjAgLSBNYXRoLnNxcnQoMy4wKSkgLyA2LjA7XG4gIHZhciBGMyA9IDEuMCAvIDMuMDtcbiAgdmFyIEczID0gMS4wIC8gNi4wO1xuICB2YXIgRjQgPSAoTWF0aC5zcXJ0KDUuMCkgLSAxLjApIC8gNC4wO1xuICB2YXIgRzQgPSAoNS4wIC0gTWF0aC5zcXJ0KDUuMCkpIC8gMjAuMDtcblxuICBmdW5jdGlvbiBTaW1wbGV4Tm9pc2UocmFuZG9tT3JTZWVkKSB7XG4gICAgdmFyIHJhbmRvbTtcbiAgICBpZiAodHlwZW9mIHJhbmRvbU9yU2VlZCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByYW5kb20gPSByYW5kb21PclNlZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmRvbU9yU2VlZCkge1xuICAgICAgcmFuZG9tID0gYWxlYShyYW5kb21PclNlZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5kb20gPSBNYXRoLnJhbmRvbTtcbiAgICB9XG4gICAgdGhpcy5wID0gYnVpbGRQZXJtdXRhdGlvblRhYmxlKHJhbmRvbSk7XG4gICAgdGhpcy5wZXJtID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICB0aGlzLnBlcm1Nb2QxMiA9IG5ldyBVaW50OEFycmF5KDUxMik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MTI7IGkrKykge1xuICAgICAgdGhpcy5wZXJtW2ldID0gdGhpcy5wW2kgJiAyNTVdO1xuICAgICAgdGhpcy5wZXJtTW9kMTJbaV0gPSB0aGlzLnBlcm1baV0gJSAxMjtcbiAgICB9XG5cbiAgfVxuICBTaW1wbGV4Tm9pc2UucHJvdG90eXBlID0ge1xuICAgIGdyYWQzOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAxLCAwLFxuICAgICAgLTEsIDEsIDAsXG4gICAgICAxLCAtMSwgMCxcblxuICAgICAgLTEsIC0xLCAwLFxuICAgICAgMSwgMCwgMSxcbiAgICAgIC0xLCAwLCAxLFxuXG4gICAgICAxLCAwLCAtMSxcbiAgICAgIC0xLCAwLCAtMSxcbiAgICAgIDAsIDEsIDEsXG5cbiAgICAgIDAsIC0xLCAxLFxuICAgICAgMCwgMSwgLTEsXG4gICAgICAwLCAtMSwgLTFdKSxcbiAgICBncmFkNDogbmV3IEZsb2F0MzJBcnJheShbMCwgMSwgMSwgMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAxLCAwLCAxLCAtMSwgLTEsXG4gICAgICAwLCAtMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsXG4gICAgICAxLCAwLCAxLCAxLCAxLCAwLCAxLCAtMSwgMSwgMCwgLTEsIDEsIDEsIDAsIC0xLCAtMSxcbiAgICAgIC0xLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIC0xLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSxcbiAgICAgIDEsIDEsIDAsIDEsIDEsIDEsIDAsIC0xLCAxLCAtMSwgMCwgMSwgMSwgLTEsIDAsIC0xLFxuICAgICAgLTEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgLTEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLFxuICAgICAgMSwgMSwgMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAxLCAwLCAxLCAtMSwgLTEsIDAsXG4gICAgICAtMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsIDBdKSxcbiAgICBub2lzZTJEOiBmdW5jdGlvbih4aW4sIHlpbikge1xuICAgICAgdmFyIHBlcm1Nb2QxMiA9IHRoaXMucGVybU1vZDEyO1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDMgPSB0aGlzLmdyYWQzO1xuICAgICAgdmFyIG4wID0gMDsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICB2YXIgbjEgPSAwO1xuICAgICAgdmFyIG4yID0gMDtcbiAgICAgIC8vIFNrZXcgdGhlIGlucHV0IHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBzaW1wbGV4IGNlbGwgd2UncmUgaW5cbiAgICAgIHZhciBzID0gKHhpbiArIHlpbikgKiBGMjsgLy8gSGFpcnkgZmFjdG9yIGZvciAyRFxuICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKHhpbiArIHMpO1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKHlpbiArIHMpO1xuICAgICAgdmFyIHQgPSAoaSArIGopICogRzI7XG4gICAgICB2YXIgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkpIHNwYWNlXG4gICAgICB2YXIgWTAgPSBqIC0gdDtcbiAgICAgIHZhciB4MCA9IHhpbiAtIFgwOyAvLyBUaGUgeCx5IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geWluIC0gWTA7XG4gICAgICAvLyBGb3IgdGhlIDJEIGNhc2UsIHRoZSBzaW1wbGV4IHNoYXBlIGlzIGFuIGVxdWlsYXRlcmFsIHRyaWFuZ2xlLlxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggd2UgYXJlIGluLlxuICAgICAgdmFyIGkxLCBqMTsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIChtaWRkbGUpIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGopIGNvb3Jkc1xuICAgICAgaWYgKHgwID4geTApIHtcbiAgICAgICAgaTEgPSAxO1xuICAgICAgICBqMSA9IDA7XG4gICAgICB9IC8vIGxvd2VyIHRyaWFuZ2xlLCBYWSBvcmRlcjogKDAsMCktPigxLDApLT4oMSwxKVxuICAgICAgZWxzZSB7XG4gICAgICAgIGkxID0gMDtcbiAgICAgICAgajEgPSAxO1xuICAgICAgfSAvLyB1cHBlciB0cmlhbmdsZSwgWVggb3JkZXI6ICgwLDApLT4oMCwxKS0+KDEsMSlcbiAgICAgIC8vIEEgc3RlcCBvZiAoMSwwKSBpbiAoaSxqKSBtZWFucyBhIHN0ZXAgb2YgKDEtYywtYykgaW4gKHgseSksIGFuZFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDEpIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoLWMsMS1jKSBpbiAoeCx5KSwgd2hlcmVcbiAgICAgIC8vIGMgPSAoMy1zcXJ0KDMpKS82XG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzI7IC8vIE9mZnNldHMgZm9yIG1pZGRsZSBjb3JuZXIgaW4gKHgseSkgdW5za2V3ZWQgY29vcmRzXG4gICAgICB2YXIgeTEgPSB5MCAtIGoxICsgRzI7XG4gICAgICB2YXIgeDIgPSB4MCAtIDEuMCArIDIuMCAqIEcyOyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5KSB1bnNrZXdlZCBjb29yZHNcbiAgICAgIHZhciB5MiA9IHkwIC0gMS4wICsgMi4wICogRzI7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIHRocmVlIHNpbXBsZXggY29ybmVyc1xuICAgICAgdmFyIGlpID0gaSAmIDI1NTtcbiAgICAgIHZhciBqaiA9IGogJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjUgLSB4MCAqIHgwIC0geTAgKiB5MDtcbiAgICAgIGlmICh0MCA+PSAwKSB7XG4gICAgICAgIHZhciBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqXV0gKiAzO1xuICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQzW2dpMF0gKiB4MCArIGdyYWQzW2dpMCArIDFdICogeTApOyAvLyAoeCx5KSBvZiBncmFkMyB1c2VkIGZvciAyRCBncmFkaWVudFxuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC41IC0geDEgKiB4MSAtIHkxICogeTE7XG4gICAgICBpZiAodDEgPj0gMCkge1xuICAgICAgICB2YXIgZ2kxID0gcGVybU1vZDEyW2lpICsgaTEgKyBwZXJtW2pqICsgajFdXSAqIDM7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDNbZ2kxXSAqIHgxICsgZ3JhZDNbZ2kxICsgMV0gKiB5MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjUgLSB4MiAqIHgyIC0geTIgKiB5MjtcbiAgICAgIGlmICh0MiA+PSAwKSB7XG4gICAgICAgIHZhciBnaTIgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDFdXSAqIDM7XG4gICAgICAgIHQyICo9IHQyO1xuICAgICAgICBuMiA9IHQyICogdDIgKiAoZ3JhZDNbZ2kyXSAqIHgyICsgZ3JhZDNbZ2kyICsgMV0gKiB5Mik7XG4gICAgICB9XG4gICAgICAvLyBBZGQgY29udHJpYnV0aW9ucyBmcm9tIGVhY2ggY29ybmVyIHRvIGdldCB0aGUgZmluYWwgbm9pc2UgdmFsdWUuXG4gICAgICAvLyBUaGUgcmVzdWx0IGlzIHNjYWxlZCB0byByZXR1cm4gdmFsdWVzIGluIHRoZSBpbnRlcnZhbCBbLTEsMV0uXG4gICAgICByZXR1cm4gNzAuMCAqIChuMCArIG4xICsgbjIpO1xuICAgIH0sXG4gICAgLy8gM0Qgc2ltcGxleCBub2lzZVxuICAgIG5vaXNlM0Q6IGZ1bmN0aW9uKHhpbiwgeWluLCB6aW4pIHtcbiAgICAgIHZhciBwZXJtTW9kMTIgPSB0aGlzLnBlcm1Nb2QxMjtcbiAgICAgIHZhciBwZXJtID0gdGhpcy5wZXJtO1xuICAgICAgdmFyIGdyYWQzID0gdGhpcy5ncmFkMztcbiAgICAgIHZhciBuMCwgbjEsIG4yLCBuMzsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIC8vIFNrZXcgdGhlIGlucHV0IHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBzaW1wbGV4IGNlbGwgd2UncmUgaW5cbiAgICAgIHZhciBzID0gKHhpbiArIHlpbiArIHppbikgKiBGMzsgLy8gVmVyeSBuaWNlIGFuZCBzaW1wbGUgc2tldyBmYWN0b3IgZm9yIDNEXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeGluICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeWluICsgcyk7XG4gICAgICB2YXIgayA9IE1hdGguZmxvb3IoemluICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaiArIGspICogRzM7XG4gICAgICB2YXIgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkseikgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIFowID0gayAtIHQ7XG4gICAgICB2YXIgeDAgPSB4aW4gLSBYMDsgLy8gVGhlIHgseSx6IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geWluIC0gWTA7XG4gICAgICB2YXIgejAgPSB6aW4gLSBaMDtcbiAgICAgIC8vIEZvciB0aGUgM0QgY2FzZSwgdGhlIHNpbXBsZXggc2hhcGUgaXMgYSBzbGlnaHRseSBpcnJlZ3VsYXIgdGV0cmFoZWRyb24uXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW4uXG4gICAgICB2YXIgaTEsIGoxLCBrMTsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGosaykgY29vcmRzXG4gICAgICB2YXIgaTIsIGoyLCBrMjsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaixrKSBjb29yZHNcbiAgICAgIGlmICh4MCA+PSB5MCkge1xuICAgICAgICBpZiAoeTAgPj0gejApIHtcbiAgICAgICAgICBpMSA9IDE7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMDtcbiAgICAgICAgfSAvLyBYIFkgWiBvcmRlclxuICAgICAgICBlbHNlIGlmICh4MCA+PSB6MCkge1xuICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDA7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFggWiBZIG9yZGVyXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAxO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDA7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFogWCBZIG9yZGVyXG4gICAgICB9XG4gICAgICBlbHNlIHsgLy8geDA8eTBcbiAgICAgICAgaWYgKHkwIDwgejApIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMTtcbiAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBaIFkgWCBvcmRlclxuICAgICAgICBlbHNlIGlmICh4MCA8IHowKSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMTtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAwO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWSBaIFggb3JkZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMTtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDA7XG4gICAgICAgIH0gLy8gWSBYIFogb3JkZXJcbiAgICAgIH1cbiAgICAgIC8vIEEgc3RlcCBvZiAoMSwwLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgxLWMsLWMsLWMpIGluICh4LHkseiksXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMSwwKSBpbiAoaSxqLGspIG1lYW5zIGEgc3RlcCBvZiAoLWMsMS1jLC1jKSBpbiAoeCx5LHopLCBhbmRcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwwLDEpIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywtYywxLWMpIGluICh4LHkseiksIHdoZXJlXG4gICAgICAvLyBjID0gMS82LlxuICAgICAgdmFyIHgxID0geDAgLSBpMSArIEczOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTEgPSB5MCAtIGoxICsgRzM7XG4gICAgICB2YXIgejEgPSB6MCAtIGsxICsgRzM7XG4gICAgICB2YXIgeDIgPSB4MCAtIGkyICsgMi4wICogRzM7IC8vIE9mZnNldHMgZm9yIHRoaXJkIGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSBqMiArIDIuMCAqIEczO1xuICAgICAgdmFyIHoyID0gejAgLSBrMiArIDIuMCAqIEczO1xuICAgICAgdmFyIHgzID0geDAgLSAxLjAgKyAzLjAgKiBHMzsgLy8gT2Zmc2V0cyBmb3IgbGFzdCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MyA9IHkwIC0gMS4wICsgMy4wICogRzM7XG4gICAgICB2YXIgejMgPSB6MCAtIDEuMCArIDMuMCAqIEczO1xuICAgICAgLy8gV29yayBvdXQgdGhlIGhhc2hlZCBncmFkaWVudCBpbmRpY2VzIG9mIHRoZSBmb3VyIHNpbXBsZXggY29ybmVyc1xuICAgICAgdmFyIGlpID0gaSAmIDI1NTtcbiAgICAgIHZhciBqaiA9IGogJiAyNTU7XG4gICAgICB2YXIga2sgPSBrICYgMjU1O1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgZm91ciBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejA7XG4gICAgICBpZiAodDAgPCAwKSBuMCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kwID0gcGVybU1vZDEyW2lpICsgcGVybVtqaiArIHBlcm1ba2tdXV0gKiAzO1xuICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQzW2dpMF0gKiB4MCArIGdyYWQzW2dpMCArIDFdICogeTAgKyBncmFkM1tnaTAgKyAyXSAqIHowKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MSA9IDAuNiAtIHgxICogeDEgLSB5MSAqIHkxIC0gejEgKiB6MTtcbiAgICAgIGlmICh0MSA8IDApIG4xID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTEgPSBwZXJtTW9kMTJbaWkgKyBpMSArIHBlcm1bamogKyBqMSArIHBlcm1ba2sgKyBrMV1dXSAqIDM7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDNbZ2kxXSAqIHgxICsgZ3JhZDNbZ2kxICsgMV0gKiB5MSArIGdyYWQzW2dpMSArIDJdICogejEpO1xuICAgICAgfVxuICAgICAgdmFyIHQyID0gMC42IC0geDIgKiB4MiAtIHkyICogeTIgLSB6MiAqIHoyO1xuICAgICAgaWYgKHQyIDwgMCkgbjIgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMiA9IHBlcm1Nb2QxMltpaSArIGkyICsgcGVybVtqaiArIGoyICsgcGVybVtrayArIGsyXV1dICogMztcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkM1tnaTJdICogeDIgKyBncmFkM1tnaTIgKyAxXSAqIHkyICsgZ3JhZDNbZ2kyICsgMl0gKiB6Mik7XG4gICAgICB9XG4gICAgICB2YXIgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejM7XG4gICAgICBpZiAodDMgPCAwKSBuMyA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kzID0gcGVybU1vZDEyW2lpICsgMSArIHBlcm1bamogKyAxICsgcGVybVtrayArIDFdXV0gKiAzO1xuICAgICAgICB0MyAqPSB0MztcbiAgICAgICAgbjMgPSB0MyAqIHQzICogKGdyYWQzW2dpM10gKiB4MyArIGdyYWQzW2dpMyArIDFdICogeTMgKyBncmFkM1tnaTMgKyAyXSAqIHozKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgc2NhbGVkIHRvIHN0YXkganVzdCBpbnNpZGUgWy0xLDFdXG4gICAgICByZXR1cm4gMzIuMCAqIChuMCArIG4xICsgbjIgKyBuMyk7XG4gICAgfSxcbiAgICAvLyA0RCBzaW1wbGV4IG5vaXNlLCBiZXR0ZXIgc2ltcGxleCByYW5rIG9yZGVyaW5nIG1ldGhvZCAyMDEyLTAzLTA5XG4gICAgbm9pc2U0RDogZnVuY3Rpb24oeCwgeSwgeiwgdykge1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDQgPSB0aGlzLmdyYWQ0O1xuXG4gICAgICB2YXIgbjAsIG4xLCBuMiwgbjMsIG40OyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZpdmUgY29ybmVyc1xuICAgICAgLy8gU2tldyB0aGUgKHgseSx6LHcpIHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBjZWxsIG9mIDI0IHNpbXBsaWNlcyB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeCArIHkgKyB6ICsgdykgKiBGNDsgLy8gRmFjdG9yIGZvciA0RCBza2V3aW5nXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeCArIHMpO1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKHkgKyBzKTtcbiAgICAgIHZhciBrID0gTWF0aC5mbG9vcih6ICsgcyk7XG4gICAgICB2YXIgbCA9IE1hdGguZmxvb3IodyArIHMpO1xuICAgICAgdmFyIHQgPSAoaSArIGogKyBrICsgbCkgKiBHNDsgLy8gRmFjdG9yIGZvciA0RCB1bnNrZXdpbmdcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSx6LHcpIHNwYWNlXG4gICAgICB2YXIgWTAgPSBqIC0gdDtcbiAgICAgIHZhciBaMCA9IGsgLSB0O1xuICAgICAgdmFyIFcwID0gbCAtIHQ7XG4gICAgICB2YXIgeDAgPSB4IC0gWDA7IC8vIFRoZSB4LHkseix3IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geSAtIFkwO1xuICAgICAgdmFyIHowID0geiAtIFowO1xuICAgICAgdmFyIHcwID0gdyAtIFcwO1xuICAgICAgLy8gRm9yIHRoZSA0RCBjYXNlLCB0aGUgc2ltcGxleCBpcyBhIDREIHNoYXBlIEkgd29uJ3QgZXZlbiB0cnkgdG8gZGVzY3JpYmUuXG4gICAgICAvLyBUbyBmaW5kIG91dCB3aGljaCBvZiB0aGUgMjQgcG9zc2libGUgc2ltcGxpY2VzIHdlJ3JlIGluLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBkZXRlcm1pbmUgdGhlIG1hZ25pdHVkZSBvcmRlcmluZyBvZiB4MCwgeTAsIHowIGFuZCB3MC5cbiAgICAgIC8vIFNpeCBwYWlyLXdpc2UgY29tcGFyaXNvbnMgYXJlIHBlcmZvcm1lZCBiZXR3ZWVuIGVhY2ggcG9zc2libGUgcGFpclxuICAgICAgLy8gb2YgdGhlIGZvdXIgY29vcmRpbmF0ZXMsIGFuZCB0aGUgcmVzdWx0cyBhcmUgdXNlZCB0byByYW5rIHRoZSBudW1iZXJzLlxuICAgICAgdmFyIHJhbmt4ID0gMDtcbiAgICAgIHZhciByYW5reSA9IDA7XG4gICAgICB2YXIgcmFua3ogPSAwO1xuICAgICAgdmFyIHJhbmt3ID0gMDtcbiAgICAgIGlmICh4MCA+IHkwKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5reSsrO1xuICAgICAgaWYgKHgwID4gejApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt6Kys7XG4gICAgICBpZiAoeDAgPiB3MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIGlmICh5MCA+IHowKSByYW5reSsrO1xuICAgICAgZWxzZSByYW5reisrO1xuICAgICAgaWYgKHkwID4gdzApIHJhbmt5Kys7XG4gICAgICBlbHNlIHJhbmt3Kys7XG4gICAgICBpZiAoejAgPiB3MCkgcmFua3orKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIHZhciBpMSwgajEsIGsxLCBsMTsgLy8gVGhlIGludGVnZXIgb2Zmc2V0cyBmb3IgdGhlIHNlY29uZCBzaW1wbGV4IGNvcm5lclxuICAgICAgdmFyIGkyLCBqMiwgazIsIGwyOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgdGhpcmQgc2ltcGxleCBjb3JuZXJcbiAgICAgIHZhciBpMywgajMsIGszLCBsMzsgLy8gVGhlIGludGVnZXIgb2Zmc2V0cyBmb3IgdGhlIGZvdXJ0aCBzaW1wbGV4IGNvcm5lclxuICAgICAgLy8gc2ltcGxleFtjXSBpcyBhIDQtdmVjdG9yIHdpdGggdGhlIG51bWJlcnMgMCwgMSwgMiBhbmQgMyBpbiBzb21lIG9yZGVyLlxuICAgICAgLy8gTWFueSB2YWx1ZXMgb2YgYyB3aWxsIG5ldmVyIG9jY3VyLCBzaW5jZSBlLmcuIHg+eT56PncgbWFrZXMgeDx6LCB5PHcgYW5kIHg8d1xuICAgICAgLy8gaW1wb3NzaWJsZS4gT25seSB0aGUgMjQgaW5kaWNlcyB3aGljaCBoYXZlIG5vbi16ZXJvIGVudHJpZXMgbWFrZSBhbnkgc2Vuc2UuXG4gICAgICAvLyBXZSB1c2UgYSB0aHJlc2hvbGRpbmcgdG8gc2V0IHRoZSBjb29yZGluYXRlcyBpbiB0dXJuIGZyb20gdGhlIGxhcmdlc3QgbWFnbml0dWRlLlxuICAgICAgLy8gUmFuayAzIGRlbm90ZXMgdGhlIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkxID0gcmFua3ggPj0gMyA/IDEgOiAwO1xuICAgICAgajEgPSByYW5reSA+PSAzID8gMSA6IDA7XG4gICAgICBrMSA9IHJhbmt6ID49IDMgPyAxIDogMDtcbiAgICAgIGwxID0gcmFua3cgPj0gMyA/IDEgOiAwO1xuICAgICAgLy8gUmFuayAyIGRlbm90ZXMgdGhlIHNlY29uZCBsYXJnZXN0IGNvb3JkaW5hdGUuXG4gICAgICBpMiA9IHJhbmt4ID49IDIgPyAxIDogMDtcbiAgICAgIGoyID0gcmFua3kgPj0gMiA/IDEgOiAwO1xuICAgICAgazIgPSByYW5reiA+PSAyID8gMSA6IDA7XG4gICAgICBsMiA9IHJhbmt3ID49IDIgPyAxIDogMDtcbiAgICAgIC8vIFJhbmsgMSBkZW5vdGVzIHRoZSBzZWNvbmQgc21hbGxlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkzID0gcmFua3ggPj0gMSA/IDEgOiAwO1xuICAgICAgajMgPSByYW5reSA+PSAxID8gMSA6IDA7XG4gICAgICBrMyA9IHJhbmt6ID49IDEgPyAxIDogMDtcbiAgICAgIGwzID0gcmFua3cgPj0gMSA/IDEgOiAwO1xuICAgICAgLy8gVGhlIGZpZnRoIGNvcm5lciBoYXMgYWxsIGNvb3JkaW5hdGUgb2Zmc2V0cyA9IDEsIHNvIG5vIG5lZWQgdG8gY29tcHV0ZSB0aGF0LlxuICAgICAgdmFyIHgxID0geDAgLSBpMSArIEc0OyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHNDtcbiAgICAgIHZhciB6MSA9IHowIC0gazEgKyBHNDtcbiAgICAgIHZhciB3MSA9IHcwIC0gbDEgKyBHNDtcbiAgICAgIHZhciB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MiA9IHkwIC0gajIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB6MiA9IHowIC0gazIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB3MiA9IHcwIC0gbDIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB4MyA9IHgwIC0gaTMgKyAzLjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgZm91cnRoIGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTMgPSB5MCAtIGozICsgMy4wICogRzQ7XG4gICAgICB2YXIgejMgPSB6MCAtIGszICsgMy4wICogRzQ7XG4gICAgICB2YXIgdzMgPSB3MCAtIGwzICsgMy4wICogRzQ7XG4gICAgICB2YXIgeDQgPSB4MCAtIDEuMCArIDQuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTQgPSB5MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgdmFyIHo0ID0gejAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIHZhciB3NCA9IHcwIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZpdmUgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIHZhciBrayA9IGsgJiAyNTU7XG4gICAgICB2YXIgbGwgPSBsICYgMjU1O1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejAgLSB3MCAqIHcwO1xuICAgICAgaWYgKHQwIDwgMCkgbjAgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMCA9IChwZXJtW2lpICsgcGVybVtqaiArIHBlcm1ba2sgKyBwZXJtW2xsXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDRbZ2kwXSAqIHgwICsgZ3JhZDRbZ2kwICsgMV0gKiB5MCArIGdyYWQ0W2dpMCArIDJdICogejAgKyBncmFkNFtnaTAgKyAzXSAqIHcwKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MSA9IDAuNiAtIHgxICogeDEgLSB5MSAqIHkxIC0gejEgKiB6MSAtIHcxICogdzE7XG4gICAgICBpZiAodDEgPCAwKSBuMSA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kxID0gKHBlcm1baWkgKyBpMSArIHBlcm1bamogKyBqMSArIHBlcm1ba2sgKyBrMSArIHBlcm1bbGwgKyBsMV1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MSAqPSB0MTtcbiAgICAgICAgbjEgPSB0MSAqIHQxICogKGdyYWQ0W2dpMV0gKiB4MSArIGdyYWQ0W2dpMSArIDFdICogeTEgKyBncmFkNFtnaTEgKyAyXSAqIHoxICsgZ3JhZDRbZ2kxICsgM10gKiB3MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjYgLSB4MiAqIHgyIC0geTIgKiB5MiAtIHoyICogejIgLSB3MiAqIHcyO1xuICAgICAgaWYgKHQyIDwgMCkgbjIgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMiA9IChwZXJtW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazIgKyBwZXJtW2xsICsgbDJdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkNFtnaTJdICogeDIgKyBncmFkNFtnaTIgKyAxXSAqIHkyICsgZ3JhZDRbZ2kyICsgMl0gKiB6MiArIGdyYWQ0W2dpMiArIDNdICogdzIpO1xuICAgICAgfVxuICAgICAgdmFyIHQzID0gMC42IC0geDMgKiB4MyAtIHkzICogeTMgLSB6MyAqIHozIC0gdzMgKiB3MztcbiAgICAgIGlmICh0MyA8IDApIG4zID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTMgPSAocGVybVtpaSArIGkzICsgcGVybVtqaiArIGozICsgcGVybVtrayArIGszICsgcGVybVtsbCArIGwzXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQzICo9IHQzO1xuICAgICAgICBuMyA9IHQzICogdDMgKiAoZ3JhZDRbZ2kzXSAqIHgzICsgZ3JhZDRbZ2kzICsgMV0gKiB5MyArIGdyYWQ0W2dpMyArIDJdICogejMgKyBncmFkNFtnaTMgKyAzXSAqIHczKTtcbiAgICAgIH1cbiAgICAgIHZhciB0NCA9IDAuNiAtIHg0ICogeDQgLSB5NCAqIHk0IC0gejQgKiB6NCAtIHc0ICogdzQ7XG4gICAgICBpZiAodDQgPCAwKSBuNCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2k0ID0gKHBlcm1baWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMSArIHBlcm1bbGwgKyAxXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQ0ICo9IHQ0O1xuICAgICAgICBuNCA9IHQ0ICogdDQgKiAoZ3JhZDRbZ2k0XSAqIHg0ICsgZ3JhZDRbZ2k0ICsgMV0gKiB5NCArIGdyYWQ0W2dpNCArIDJdICogejQgKyBncmFkNFtnaTQgKyAzXSAqIHc0KTtcbiAgICAgIH1cbiAgICAgIC8vIFN1bSB1cCBhbmQgc2NhbGUgdGhlIHJlc3VsdCB0byBjb3ZlciB0aGUgcmFuZ2UgWy0xLDFdXG4gICAgICByZXR1cm4gMjcuMCAqIChuMCArIG4xICsgbjIgKyBuMyArIG40KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gYnVpbGRQZXJtdXRhdGlvblRhYmxlKHJhbmRvbSkge1xuICAgIHZhciBpO1xuICAgIHZhciBwID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgIHBbaV0gPSBpO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHtcbiAgICAgIHZhciByID0gaSArIH5+KHJhbmRvbSgpICogKDI1NiAtIGkpKTtcbiAgICAgIHZhciBhdXggPSBwW2ldO1xuICAgICAgcFtpXSA9IHBbcl07XG4gICAgICBwW3JdID0gYXV4O1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfVxuICBTaW1wbGV4Tm9pc2UuX2J1aWxkUGVybXV0YXRpb25UYWJsZSA9IGJ1aWxkUGVybXV0YXRpb25UYWJsZTtcblxuICBmdW5jdGlvbiBhbGVhKCkge1xuICAgIC8vIEpvaGFubmVzIEJhYWfDuGUgPGJhYWdvZUBiYWFnb2UuY29tPiwgMjAxMFxuICAgIHZhciBzMCA9IDA7XG4gICAgdmFyIHMxID0gMDtcbiAgICB2YXIgczIgPSAwO1xuICAgIHZhciBjID0gMTtcblxuICAgIHZhciBtYXNoID0gbWFzaGVyKCk7XG4gICAgczAgPSBtYXNoKCcgJyk7XG4gICAgczEgPSBtYXNoKCcgJyk7XG4gICAgczIgPSBtYXNoKCcgJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgczAgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMwIDwgMCkge1xuICAgICAgICBzMCArPSAxO1xuICAgICAgfVxuICAgICAgczEgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMxIDwgMCkge1xuICAgICAgICBzMSArPSAxO1xuICAgICAgfVxuICAgICAgczIgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMyIDwgMCkge1xuICAgICAgICBzMiArPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICBtYXNoID0gbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICAgICAgczAgPSBzMTtcbiAgICAgIHMxID0gczI7XG4gICAgICByZXR1cm4gczIgPSB0IC0gKGMgPSB0IHwgMCk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXNoZXIoKSB7XG4gICAgdmFyIG4gPSAweGVmYzgyNDlkO1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICBkYXRhID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG4gKz0gZGF0YS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB2YXIgaCA9IDAuMDI1MTk2MDMyODI0MTY5MzggKiBuO1xuICAgICAgICBuID0gaCA+Pj4gMDtcbiAgICAgICAgaCAtPSBuO1xuICAgICAgICBoICo9IG47XG4gICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICBoIC09IG47XG4gICAgICAgIG4gKz0gaCAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXG4gICAgICB9XG4gICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcbiAgICB9O1xuICB9XG5cbiAgLy8gYW1kXG4gIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZnVuY3Rpb24oKSB7cmV0dXJuIFNpbXBsZXhOb2lzZTt9KTtcbiAgLy8gY29tbW9uIGpzXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIGV4cG9ydHMuU2ltcGxleE5vaXNlID0gU2ltcGxleE5vaXNlO1xuICAvLyBicm93c2VyXG4gIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuU2ltcGxleE5vaXNlID0gU2ltcGxleE5vaXNlO1xuICAvLyBub2RlanNcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBTaW1wbGV4Tm9pc2U7XG4gIH1cblxufSkoKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3NsaWNlZFRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH0gcmV0dXJuIGZ1bmN0aW9uIChhcnIsIGkpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyByZXR1cm4gYXJyOyB9IGVsc2UgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkgeyByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpOyB9IGVsc2UgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTsgfSB9OyB9KCk7XG5cbnZhciBUQVUgPSBNYXRoLlBJICogMjtcblxudmFyIG1hcFRvRWxsaXBzZSA9IGZ1bmN0aW9uIG1hcFRvRWxsaXBzZShfcmVmLCByeCwgcnksIGNvc3BoaSwgc2lucGhpLCBjZW50ZXJ4LCBjZW50ZXJ5KSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcblxuICB4ICo9IHJ4O1xuICB5ICo9IHJ5O1xuXG4gIHZhciB4cCA9IGNvc3BoaSAqIHggLSBzaW5waGkgKiB5O1xuICB2YXIgeXAgPSBzaW5waGkgKiB4ICsgY29zcGhpICogeTtcblxuICByZXR1cm4ge1xuICAgIHg6IHhwICsgY2VudGVyeCxcbiAgICB5OiB5cCArIGNlbnRlcnlcbiAgfTtcbn07XG5cbnZhciBhcHByb3hVbml0QXJjID0gZnVuY3Rpb24gYXBwcm94VW5pdEFyYyhhbmcxLCBhbmcyKSB7XG4gIC8vIElmIDkwIGRlZ3JlZSBjaXJjdWxhciBhcmMsIHVzZSBhIGNvbnN0YW50XG4gIC8vIGFzIGRlcml2ZWQgZnJvbSBodHRwOi8vc3BlbmNlcm1vcnRlbnNlbi5jb20vYXJ0aWNsZXMvYmV6aWVyLWNpcmNsZVxuICB2YXIgYSA9IGFuZzIgPT09IDEuNTcwNzk2MzI2Nzk0ODk2NiA/IDAuNTUxOTE1MDI0NDk0IDogYW5nMiA9PT0gLTEuNTcwNzk2MzI2Nzk0ODk2NiA/IC0wLjU1MTkxNTAyNDQ5NCA6IDQgLyAzICogTWF0aC50YW4oYW5nMiAvIDQpO1xuXG4gIHZhciB4MSA9IE1hdGguY29zKGFuZzEpO1xuICB2YXIgeTEgPSBNYXRoLnNpbihhbmcxKTtcbiAgdmFyIHgyID0gTWF0aC5jb3MoYW5nMSArIGFuZzIpO1xuICB2YXIgeTIgPSBNYXRoLnNpbihhbmcxICsgYW5nMik7XG5cbiAgcmV0dXJuIFt7XG4gICAgeDogeDEgLSB5MSAqIGEsXG4gICAgeTogeTEgKyB4MSAqIGFcbiAgfSwge1xuICAgIHg6IHgyICsgeTIgKiBhLFxuICAgIHk6IHkyIC0geDIgKiBhXG4gIH0sIHtcbiAgICB4OiB4MixcbiAgICB5OiB5MlxuICB9XTtcbn07XG5cbnZhciB2ZWN0b3JBbmdsZSA9IGZ1bmN0aW9uIHZlY3RvckFuZ2xlKHV4LCB1eSwgdngsIHZ5KSB7XG4gIHZhciBzaWduID0gdXggKiB2eSAtIHV5ICogdnggPCAwID8gLTEgOiAxO1xuXG4gIHZhciBkb3QgPSB1eCAqIHZ4ICsgdXkgKiB2eTtcblxuICBpZiAoZG90ID4gMSkge1xuICAgIGRvdCA9IDE7XG4gIH1cblxuICBpZiAoZG90IDwgLTEpIHtcbiAgICBkb3QgPSAtMTtcbiAgfVxuXG4gIHJldHVybiBzaWduICogTWF0aC5hY29zKGRvdCk7XG59O1xuXG52YXIgZ2V0QXJjQ2VudGVyID0gZnVuY3Rpb24gZ2V0QXJjQ2VudGVyKHB4LCBweSwgY3gsIGN5LCByeCwgcnksIGxhcmdlQXJjRmxhZywgc3dlZXBGbGFnLCBzaW5waGksIGNvc3BoaSwgcHhwLCBweXApIHtcbiAgdmFyIHJ4c3EgPSBNYXRoLnBvdyhyeCwgMik7XG4gIHZhciByeXNxID0gTWF0aC5wb3cocnksIDIpO1xuICB2YXIgcHhwc3EgPSBNYXRoLnBvdyhweHAsIDIpO1xuICB2YXIgcHlwc3EgPSBNYXRoLnBvdyhweXAsIDIpO1xuXG4gIHZhciByYWRpY2FudCA9IHJ4c3EgKiByeXNxIC0gcnhzcSAqIHB5cHNxIC0gcnlzcSAqIHB4cHNxO1xuXG4gIGlmIChyYWRpY2FudCA8IDApIHtcbiAgICByYWRpY2FudCA9IDA7XG4gIH1cblxuICByYWRpY2FudCAvPSByeHNxICogcHlwc3EgKyByeXNxICogcHhwc3E7XG4gIHJhZGljYW50ID0gTWF0aC5zcXJ0KHJhZGljYW50KSAqIChsYXJnZUFyY0ZsYWcgPT09IHN3ZWVwRmxhZyA/IC0xIDogMSk7XG5cbiAgdmFyIGNlbnRlcnhwID0gcmFkaWNhbnQgKiByeCAvIHJ5ICogcHlwO1xuICB2YXIgY2VudGVyeXAgPSByYWRpY2FudCAqIC1yeSAvIHJ4ICogcHhwO1xuXG4gIHZhciBjZW50ZXJ4ID0gY29zcGhpICogY2VudGVyeHAgLSBzaW5waGkgKiBjZW50ZXJ5cCArIChweCArIGN4KSAvIDI7XG4gIHZhciBjZW50ZXJ5ID0gc2lucGhpICogY2VudGVyeHAgKyBjb3NwaGkgKiBjZW50ZXJ5cCArIChweSArIGN5KSAvIDI7XG5cbiAgdmFyIHZ4MSA9IChweHAgLSBjZW50ZXJ4cCkgLyByeDtcbiAgdmFyIHZ5MSA9IChweXAgLSBjZW50ZXJ5cCkgLyByeTtcbiAgdmFyIHZ4MiA9ICgtcHhwIC0gY2VudGVyeHApIC8gcng7XG4gIHZhciB2eTIgPSAoLXB5cCAtIGNlbnRlcnlwKSAvIHJ5O1xuXG4gIHZhciBhbmcxID0gdmVjdG9yQW5nbGUoMSwgMCwgdngxLCB2eTEpO1xuICB2YXIgYW5nMiA9IHZlY3RvckFuZ2xlKHZ4MSwgdnkxLCB2eDIsIHZ5Mik7XG5cbiAgaWYgKHN3ZWVwRmxhZyA9PT0gMCAmJiBhbmcyID4gMCkge1xuICAgIGFuZzIgLT0gVEFVO1xuICB9XG5cbiAgaWYgKHN3ZWVwRmxhZyA9PT0gMSAmJiBhbmcyIDwgMCkge1xuICAgIGFuZzIgKz0gVEFVO1xuICB9XG5cbiAgcmV0dXJuIFtjZW50ZXJ4LCBjZW50ZXJ5LCBhbmcxLCBhbmcyXTtcbn07XG5cbnZhciBhcmNUb0JlemllciA9IGZ1bmN0aW9uIGFyY1RvQmV6aWVyKF9yZWYyKSB7XG4gIHZhciBweCA9IF9yZWYyLnB4LFxuICAgICAgcHkgPSBfcmVmMi5weSxcbiAgICAgIGN4ID0gX3JlZjIuY3gsXG4gICAgICBjeSA9IF9yZWYyLmN5LFxuICAgICAgcnggPSBfcmVmMi5yeCxcbiAgICAgIHJ5ID0gX3JlZjIucnksXG4gICAgICBfcmVmMiR4QXhpc1JvdGF0aW9uID0gX3JlZjIueEF4aXNSb3RhdGlvbixcbiAgICAgIHhBeGlzUm90YXRpb24gPSBfcmVmMiR4QXhpc1JvdGF0aW9uID09PSB1bmRlZmluZWQgPyAwIDogX3JlZjIkeEF4aXNSb3RhdGlvbixcbiAgICAgIF9yZWYyJGxhcmdlQXJjRmxhZyA9IF9yZWYyLmxhcmdlQXJjRmxhZyxcbiAgICAgIGxhcmdlQXJjRmxhZyA9IF9yZWYyJGxhcmdlQXJjRmxhZyA9PT0gdW5kZWZpbmVkID8gMCA6IF9yZWYyJGxhcmdlQXJjRmxhZyxcbiAgICAgIF9yZWYyJHN3ZWVwRmxhZyA9IF9yZWYyLnN3ZWVwRmxhZyxcbiAgICAgIHN3ZWVwRmxhZyA9IF9yZWYyJHN3ZWVwRmxhZyA9PT0gdW5kZWZpbmVkID8gMCA6IF9yZWYyJHN3ZWVwRmxhZztcblxuICB2YXIgY3VydmVzID0gW107XG5cbiAgaWYgKHJ4ID09PSAwIHx8IHJ5ID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIHNpbnBoaSA9IE1hdGguc2luKHhBeGlzUm90YXRpb24gKiBUQVUgLyAzNjApO1xuICB2YXIgY29zcGhpID0gTWF0aC5jb3MoeEF4aXNSb3RhdGlvbiAqIFRBVSAvIDM2MCk7XG5cbiAgdmFyIHB4cCA9IGNvc3BoaSAqIChweCAtIGN4KSAvIDIgKyBzaW5waGkgKiAocHkgLSBjeSkgLyAyO1xuICB2YXIgcHlwID0gLXNpbnBoaSAqIChweCAtIGN4KSAvIDIgKyBjb3NwaGkgKiAocHkgLSBjeSkgLyAyO1xuXG4gIGlmIChweHAgPT09IDAgJiYgcHlwID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcnggPSBNYXRoLmFicyhyeCk7XG4gIHJ5ID0gTWF0aC5hYnMocnkpO1xuXG4gIHZhciBsYW1iZGEgPSBNYXRoLnBvdyhweHAsIDIpIC8gTWF0aC5wb3cocngsIDIpICsgTWF0aC5wb3cocHlwLCAyKSAvIE1hdGgucG93KHJ5LCAyKTtcblxuICBpZiAobGFtYmRhID4gMSkge1xuICAgIHJ4ICo9IE1hdGguc3FydChsYW1iZGEpO1xuICAgIHJ5ICo9IE1hdGguc3FydChsYW1iZGEpO1xuICB9XG5cbiAgdmFyIF9nZXRBcmNDZW50ZXIgPSBnZXRBcmNDZW50ZXIocHgsIHB5LCBjeCwgY3ksIHJ4LCByeSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcsIHNpbnBoaSwgY29zcGhpLCBweHAsIHB5cCksXG4gICAgICBfZ2V0QXJjQ2VudGVyMiA9IF9zbGljZWRUb0FycmF5KF9nZXRBcmNDZW50ZXIsIDQpLFxuICAgICAgY2VudGVyeCA9IF9nZXRBcmNDZW50ZXIyWzBdLFxuICAgICAgY2VudGVyeSA9IF9nZXRBcmNDZW50ZXIyWzFdLFxuICAgICAgYW5nMSA9IF9nZXRBcmNDZW50ZXIyWzJdLFxuICAgICAgYW5nMiA9IF9nZXRBcmNDZW50ZXIyWzNdO1xuXG4gIC8vIElmICdhbmcyJyA9PSA5MC4wMDAwMDAwMDAxLCB0aGVuIGByYXRpb2Agd2lsbCBldmFsdWF0ZSB0b1xuICAvLyAxLjAwMDAwMDAwMDEuIFRoaXMgY2F1c2VzIGBzZWdtZW50c2AgdG8gYmUgZ3JlYXRlciB0aGFuIG9uZSwgd2hpY2ggaXMgYW5cbiAgLy8gdW5lY2Vzc2FyeSBzcGxpdCwgYW5kIGFkZHMgZXh0cmEgcG9pbnRzIHRvIHRoZSBiZXppZXIgY3VydmUuIFRvIGFsbGV2aWF0ZVxuICAvLyB0aGlzIGlzc3VlLCB3ZSByb3VuZCB0byAxLjAgd2hlbiB0aGUgcmF0aW8gaXMgY2xvc2UgdG8gMS4wLlxuXG5cbiAgdmFyIHJhdGlvID0gTWF0aC5hYnMoYW5nMikgLyAoVEFVIC8gNCk7XG4gIGlmIChNYXRoLmFicygxLjAgLSByYXRpbykgPCAwLjAwMDAwMDEpIHtcbiAgICByYXRpbyA9IDEuMDtcbiAgfVxuXG4gIHZhciBzZWdtZW50cyA9IE1hdGgubWF4KE1hdGguY2VpbChyYXRpbyksIDEpO1xuXG4gIGFuZzIgLz0gc2VnbWVudHM7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50czsgaSsrKSB7XG4gICAgY3VydmVzLnB1c2goYXBwcm94VW5pdEFyYyhhbmcxLCBhbmcyKSk7XG4gICAgYW5nMSArPSBhbmcyO1xuICB9XG5cbiAgcmV0dXJuIGN1cnZlcy5tYXAoZnVuY3Rpb24gKGN1cnZlKSB7XG4gICAgdmFyIF9tYXBUb0VsbGlwc2UgPSBtYXBUb0VsbGlwc2UoY3VydmVbMF0sIHJ4LCByeSwgY29zcGhpLCBzaW5waGksIGNlbnRlcngsIGNlbnRlcnkpLFxuICAgICAgICB4MSA9IF9tYXBUb0VsbGlwc2UueCxcbiAgICAgICAgeTEgPSBfbWFwVG9FbGxpcHNlLnk7XG5cbiAgICB2YXIgX21hcFRvRWxsaXBzZTIgPSBtYXBUb0VsbGlwc2UoY3VydmVbMV0sIHJ4LCByeSwgY29zcGhpLCBzaW5waGksIGNlbnRlcngsIGNlbnRlcnkpLFxuICAgICAgICB4MiA9IF9tYXBUb0VsbGlwc2UyLngsXG4gICAgICAgIHkyID0gX21hcFRvRWxsaXBzZTIueTtcblxuICAgIHZhciBfbWFwVG9FbGxpcHNlMyA9IG1hcFRvRWxsaXBzZShjdXJ2ZVsyXSwgcngsIHJ5LCBjb3NwaGksIHNpbnBoaSwgY2VudGVyeCwgY2VudGVyeSksXG4gICAgICAgIHggPSBfbWFwVG9FbGxpcHNlMy54LFxuICAgICAgICB5ID0gX21hcFRvRWxsaXBzZTMueTtcblxuICAgIHJldHVybiB7IHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MiwgeDogeCwgeTogeSB9O1xuICB9KTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGFyY1RvQmV6aWVyO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7IiwidmFyIGJlemllciA9IHJlcXVpcmUoJ2FkYXB0aXZlLWJlemllci1jdXJ2ZScpXG52YXIgYWJzID0gcmVxdWlyZSgnYWJzLXN2Zy1wYXRoJylcbnZhciBub3JtID0gcmVxdWlyZSgnbm9ybWFsaXplLXN2Zy1wYXRoJylcbnZhciBjb3B5ID0gcmVxdWlyZSgndmVjMi1jb3B5JylcblxuZnVuY3Rpb24gc2V0KG91dCwgeCwgeSkge1xuICAgIG91dFswXSA9IHhcbiAgICBvdXRbMV0gPSB5XG4gICAgcmV0dXJuIG91dFxufVxuXG52YXIgdG1wMSA9IFswLDBdLFxuICAgIHRtcDIgPSBbMCwwXSxcbiAgICB0bXAzID0gWzAsMF1cblxuZnVuY3Rpb24gYmV6aWVyVG8ocG9pbnRzLCBzY2FsZSwgc3RhcnQsIHNlZykge1xuICAgIGJlemllcihzdGFydCwgXG4gICAgICAgIHNldCh0bXAxLCBzZWdbMV0sIHNlZ1syXSksIFxuICAgICAgICBzZXQodG1wMiwgc2VnWzNdLCBzZWdbNF0pLFxuICAgICAgICBzZXQodG1wMywgc2VnWzVdLCBzZWdbNl0pLCBzY2FsZSwgcG9pbnRzKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbnRvdXJzKHN2Zywgc2NhbGUpIHtcbiAgICB2YXIgcGF0aHMgPSBbXVxuXG4gICAgdmFyIHBvaW50cyA9IFtdXG4gICAgdmFyIHBlbiA9IFswLCAwXVxuICAgIG5vcm0oYWJzKHN2ZykpLmZvckVhY2goZnVuY3Rpb24oc2VnbWVudCwgaSwgc2VsZikge1xuICAgICAgICBpZiAoc2VnbWVudFswXSA9PT0gJ00nKSB7XG4gICAgICAgICAgICBjb3B5KHBlbiwgc2VnbWVudC5zbGljZSgxKSlcbiAgICAgICAgICAgIGlmIChwb2ludHMubGVuZ3RoPjApIHtcbiAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHBvaW50cylcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBbXVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNlZ21lbnRbMF0gPT09ICdDJykge1xuICAgICAgICAgICAgYmV6aWVyVG8ocG9pbnRzLCBzY2FsZSwgcGVuLCBzZWdtZW50KVxuICAgICAgICAgICAgc2V0KHBlbiwgc2VnbWVudFs1XSwgc2VnbWVudFs2XSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaWxsZWdhbCB0eXBlIGluIFNWRzogJytzZWdtZW50WzBdKVxuICAgICAgICB9XG4gICAgfSlcbiAgICBpZiAocG9pbnRzLmxlbmd0aD4wKVxuICAgICAgICBwYXRocy5wdXNoKHBvaW50cylcbiAgICByZXR1cm4gcGF0aHNcbn0iLCJcbnZhciDPgCA9IE1hdGguUElcbnZhciBfMTIwID0gcmFkaWFucygxMjApXG5cbm1vZHVsZS5leHBvcnRzID0gbm9ybWFsaXplXG5cbi8qKlxuICogZGVzY3JpYmUgYHBhdGhgIGluIHRlcm1zIG9mIGN1YmljIGLDqXppZXIgXG4gKiBjdXJ2ZXMgYW5kIG1vdmUgY29tbWFuZHNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemUocGF0aCl7XG5cdC8vIGluaXQgc3RhdGVcblx0dmFyIHByZXZcblx0dmFyIHJlc3VsdCA9IFtdXG5cdHZhciBiZXppZXJYID0gMFxuXHR2YXIgYmV6aWVyWSA9IDBcblx0dmFyIHN0YXJ0WCA9IDBcblx0dmFyIHN0YXJ0WSA9IDBcblx0dmFyIHF1YWRYID0gbnVsbFxuXHR2YXIgcXVhZFkgPSBudWxsXG5cdHZhciB4ID0gMFxuXHR2YXIgeSA9IDBcblxuXHRmb3IgKHZhciBpID0gMCwgbGVuID0gcGF0aC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdHZhciBzZWcgPSBwYXRoW2ldXG5cdFx0dmFyIGNvbW1hbmQgPSBzZWdbMF1cblx0XHRzd2l0Y2ggKGNvbW1hbmQpIHtcblx0XHRcdGNhc2UgJ00nOlxuXHRcdFx0XHRzdGFydFggPSBzZWdbMV1cblx0XHRcdFx0c3RhcnRZID0gc2VnWzJdXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdBJzpcblx0XHRcdFx0c2VnID0gYXJjKHgsIHksc2VnWzFdLHNlZ1syXSxyYWRpYW5zKHNlZ1szXSksc2VnWzRdLHNlZ1s1XSxzZWdbNl0sc2VnWzddKVxuXHRcdFx0XHQvLyBzcGxpdCBtdWx0aSBwYXJ0XG5cdFx0XHRcdHNlZy51bnNoaWZ0KCdDJylcblx0XHRcdFx0aWYgKHNlZy5sZW5ndGggPiA3KSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goc2VnLnNwbGljZSgwLCA3KSlcblx0XHRcdFx0XHRzZWcudW5zaGlmdCgnQycpXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1MnOlxuXHRcdFx0XHQvLyBkZWZhdWx0IGNvbnRyb2wgcG9pbnRcblx0XHRcdFx0dmFyIGN4ID0geFxuXHRcdFx0XHR2YXIgY3kgPSB5XG5cdFx0XHRcdGlmIChwcmV2ID09ICdDJyB8fCBwcmV2ID09ICdTJykge1xuXHRcdFx0XHRcdGN4ICs9IGN4IC0gYmV6aWVyWCAvLyByZWZsZWN0IHRoZSBwcmV2aW91cyBjb21tYW5kJ3MgY29udHJvbFxuXHRcdFx0XHRcdGN5ICs9IGN5IC0gYmV6aWVyWSAvLyBwb2ludCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb2ludFxuXHRcdFx0XHR9XG5cdFx0XHRcdHNlZyA9IFsnQycsIGN4LCBjeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdXVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnVCc6XG5cdFx0XHRcdGlmIChwcmV2ID09ICdRJyB8fCBwcmV2ID09ICdUJykge1xuXHRcdFx0XHRcdHF1YWRYID0geCAqIDIgLSBxdWFkWCAvLyBhcyB3aXRoICdTJyByZWZsZWN0IHByZXZpb3VzIGNvbnRyb2wgcG9pbnRcblx0XHRcdFx0XHRxdWFkWSA9IHkgKiAyIC0gcXVhZFlcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWFkWCA9IHhcblx0XHRcdFx0XHRxdWFkWSA9IHlcblx0XHRcdFx0fVxuXHRcdFx0XHRzZWcgPSBxdWFkcmF0aWMoeCwgeSwgcXVhZFgsIHF1YWRZLCBzZWdbMV0sIHNlZ1syXSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1EnOlxuXHRcdFx0XHRxdWFkWCA9IHNlZ1sxXVxuXHRcdFx0XHRxdWFkWSA9IHNlZ1syXVxuXHRcdFx0XHRzZWcgPSBxdWFkcmF0aWMoeCwgeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnTCc6XG5cdFx0XHRcdHNlZyA9IGxpbmUoeCwgeSwgc2VnWzFdLCBzZWdbMl0pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdIJzpcblx0XHRcdFx0c2VnID0gbGluZSh4LCB5LCBzZWdbMV0sIHkpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdWJzpcblx0XHRcdFx0c2VnID0gbGluZSh4LCB5LCB4LCBzZWdbMV0pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdaJzpcblx0XHRcdFx0c2VnID0gbGluZSh4LCB5LCBzdGFydFgsIHN0YXJ0WSlcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHQvLyB1cGRhdGUgc3RhdGVcblx0XHRwcmV2ID0gY29tbWFuZFxuXHRcdHggPSBzZWdbc2VnLmxlbmd0aCAtIDJdXG5cdFx0eSA9IHNlZ1tzZWcubGVuZ3RoIC0gMV1cblx0XHRpZiAoc2VnLmxlbmd0aCA+IDQpIHtcblx0XHRcdGJlemllclggPSBzZWdbc2VnLmxlbmd0aCAtIDRdXG5cdFx0XHRiZXppZXJZID0gc2VnW3NlZy5sZW5ndGggLSAzXVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRiZXppZXJYID0geFxuXHRcdFx0YmV6aWVyWSA9IHlcblx0XHR9XG5cdFx0cmVzdWx0LnB1c2goc2VnKVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBsaW5lKHgxLCB5MSwgeDIsIHkyKXtcblx0cmV0dXJuIFsnQycsIHgxLCB5MSwgeDIsIHkyLCB4MiwgeTJdXG59XG5cbmZ1bmN0aW9uIHF1YWRyYXRpYyh4MSwgeTEsIGN4LCBjeSwgeDIsIHkyKXtcblx0cmV0dXJuIFtcblx0XHQnQycsXG5cdFx0eDEvMyArICgyLzMpICogY3gsXG5cdFx0eTEvMyArICgyLzMpICogY3ksXG5cdFx0eDIvMyArICgyLzMpICogY3gsXG5cdFx0eTIvMyArICgyLzMpICogY3ksXG5cdFx0eDIsXG5cdFx0eTJcblx0XVxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHJpcHBlZCBmcm9tIFxuLy8gZ2l0aHViLmNvbS9EbWl0cnlCYXJhbm92c2tpeS9yYXBoYWVsL2Jsb2IvNGQ5N2Q0L3JhcGhhZWwuanMjTDIyMTYtTDIzMDQgXG4vLyB3aGljaCByZWZlcmVuY2VzIHczLm9yZy9UUi9TVkcxMS9pbXBsbm90ZS5odG1sI0FyY0ltcGxlbWVudGF0aW9uTm90ZXNcbi8vIFRPRE86IG1ha2UgaXQgaHVtYW4gcmVhZGFibGVcblxuZnVuY3Rpb24gYXJjKHgxLCB5MSwgcngsIHJ5LCBhbmdsZSwgbGFyZ2VfYXJjX2ZsYWcsIHN3ZWVwX2ZsYWcsIHgyLCB5MiwgcmVjdXJzaXZlKSB7XG5cdGlmICghcmVjdXJzaXZlKSB7XG5cdFx0dmFyIHh5ID0gcm90YXRlKHgxLCB5MSwgLWFuZ2xlKVxuXHRcdHgxID0geHkueFxuXHRcdHkxID0geHkueVxuXHRcdHh5ID0gcm90YXRlKHgyLCB5MiwgLWFuZ2xlKVxuXHRcdHgyID0geHkueFxuXHRcdHkyID0geHkueVxuXHRcdHZhciB4ID0gKHgxIC0geDIpIC8gMlxuXHRcdHZhciB5ID0gKHkxIC0geTIpIC8gMlxuXHRcdHZhciBoID0gKHggKiB4KSAvIChyeCAqIHJ4KSArICh5ICogeSkgLyAocnkgKiByeSlcblx0XHRpZiAoaCA+IDEpIHtcblx0XHRcdGggPSBNYXRoLnNxcnQoaClcblx0XHRcdHJ4ID0gaCAqIHJ4XG5cdFx0XHRyeSA9IGggKiByeVxuXHRcdH1cblx0XHR2YXIgcngyID0gcnggKiByeFxuXHRcdHZhciByeTIgPSByeSAqIHJ5XG5cdFx0dmFyIGsgPSAobGFyZ2VfYXJjX2ZsYWcgPT0gc3dlZXBfZmxhZyA/IC0xIDogMSlcblx0XHRcdCogTWF0aC5zcXJ0KE1hdGguYWJzKChyeDIgKiByeTIgLSByeDIgKiB5ICogeSAtIHJ5MiAqIHggKiB4KSAvIChyeDIgKiB5ICogeSArIHJ5MiAqIHggKiB4KSkpXG5cdFx0aWYgKGsgPT0gSW5maW5pdHkpIGsgPSAxIC8vIG5ldXRyYWxpemVcblx0XHR2YXIgY3ggPSBrICogcnggKiB5IC8gcnkgKyAoeDEgKyB4MikgLyAyXG5cdFx0dmFyIGN5ID0gayAqIC1yeSAqIHggLyByeCArICh5MSArIHkyKSAvIDJcblx0XHR2YXIgZjEgPSBNYXRoLmFzaW4oKCh5MSAtIGN5KSAvIHJ5KS50b0ZpeGVkKDkpKVxuXHRcdHZhciBmMiA9IE1hdGguYXNpbigoKHkyIC0gY3kpIC8gcnkpLnRvRml4ZWQoOSkpXG5cblx0XHRmMSA9IHgxIDwgY3ggPyDPgCAtIGYxIDogZjFcblx0XHRmMiA9IHgyIDwgY3ggPyDPgCAtIGYyIDogZjJcblx0XHRpZiAoZjEgPCAwKSBmMSA9IM+AICogMiArIGYxXG5cdFx0aWYgKGYyIDwgMCkgZjIgPSDPgCAqIDIgKyBmMlxuXHRcdGlmIChzd2VlcF9mbGFnICYmIGYxID4gZjIpIGYxID0gZjEgLSDPgCAqIDJcblx0XHRpZiAoIXN3ZWVwX2ZsYWcgJiYgZjIgPiBmMSkgZjIgPSBmMiAtIM+AICogMlxuXHR9IGVsc2Uge1xuXHRcdGYxID0gcmVjdXJzaXZlWzBdXG5cdFx0ZjIgPSByZWN1cnNpdmVbMV1cblx0XHRjeCA9IHJlY3Vyc2l2ZVsyXVxuXHRcdGN5ID0gcmVjdXJzaXZlWzNdXG5cdH1cblx0Ly8gZ3JlYXRlciB0aGFuIDEyMCBkZWdyZWVzIHJlcXVpcmVzIG11bHRpcGxlIHNlZ21lbnRzXG5cdGlmIChNYXRoLmFicyhmMiAtIGYxKSA+IF8xMjApIHtcblx0XHR2YXIgZjJvbGQgPSBmMlxuXHRcdHZhciB4Mm9sZCA9IHgyXG5cdFx0dmFyIHkyb2xkID0geTJcblx0XHRmMiA9IGYxICsgXzEyMCAqIChzd2VlcF9mbGFnICYmIGYyID4gZjEgPyAxIDogLTEpXG5cdFx0eDIgPSBjeCArIHJ4ICogTWF0aC5jb3MoZjIpXG5cdFx0eTIgPSBjeSArIHJ5ICogTWF0aC5zaW4oZjIpXG5cdFx0dmFyIHJlcyA9IGFyYyh4MiwgeTIsIHJ4LCByeSwgYW5nbGUsIDAsIHN3ZWVwX2ZsYWcsIHgyb2xkLCB5Mm9sZCwgW2YyLCBmMm9sZCwgY3gsIGN5XSlcblx0fVxuXHR2YXIgdCA9IE1hdGgudGFuKChmMiAtIGYxKSAvIDQpXG5cdHZhciBoeCA9IDQgLyAzICogcnggKiB0XG5cdHZhciBoeSA9IDQgLyAzICogcnkgKiB0XG5cdHZhciBjdXJ2ZSA9IFtcblx0XHQyICogeDEgLSAoeDEgKyBoeCAqIE1hdGguc2luKGYxKSksXG5cdFx0MiAqIHkxIC0gKHkxIC0gaHkgKiBNYXRoLmNvcyhmMSkpLFxuXHRcdHgyICsgaHggKiBNYXRoLnNpbihmMiksXG5cdFx0eTIgLSBoeSAqIE1hdGguY29zKGYyKSxcblx0XHR4Mixcblx0XHR5MlxuXHRdXG5cdGlmIChyZWN1cnNpdmUpIHJldHVybiBjdXJ2ZVxuXHRpZiAocmVzKSBjdXJ2ZSA9IGN1cnZlLmNvbmNhdChyZXMpXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY3VydmUubGVuZ3RoOykge1xuXHRcdHZhciByb3QgPSByb3RhdGUoY3VydmVbaV0sIGN1cnZlW2krMV0sIGFuZ2xlKVxuXHRcdGN1cnZlW2krK10gPSByb3QueFxuXHRcdGN1cnZlW2krK10gPSByb3QueVxuXHR9XG5cdHJldHVybiBjdXJ2ZVxufVxuXG5mdW5jdGlvbiByb3RhdGUoeCwgeSwgcmFkKXtcblx0cmV0dXJuIHtcblx0XHR4OiB4ICogTWF0aC5jb3MocmFkKSAtIHkgKiBNYXRoLnNpbihyYWQpLFxuXHRcdHk6IHggKiBNYXRoLnNpbihyYWQpICsgeSAqIE1hdGguY29zKHJhZClcblx0fVxufVxuXG5mdW5jdGlvbiByYWRpYW5zKGRlZ3Jlc3Mpe1xuXHRyZXR1cm4gZGVncmVzcyAqICjPgCAvIDE4MClcbn1cbiIsIi8qISBUd2Vha3BhbmUgMy4xLjQgKGMpIDIwMTYgY29jb3BvbiwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLiAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5Ud2Vha3BhbmUgPSB7fSkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKipcbiAgICAgKiBBIHNpbXBsZSBzZW1hbnRpYyB2ZXJzaW9uaW5nIHBlcnNlci5cbiAgICAgKi9cbiAgICBjbGFzcyBTZW12ZXIge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3RydWN0b3IodGV4dCkge1xuICAgICAgICAgICAgY29uc3QgW2NvcmUsIHByZXJlbGVhc2VdID0gdGV4dC5zcGxpdCgnLScpO1xuICAgICAgICAgICAgY29uc3QgY29yZUNvbXBzID0gY29yZS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgdGhpcy5tYWpvciA9IHBhcnNlSW50KGNvcmVDb21wc1swXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5taW5vciA9IHBhcnNlSW50KGNvcmVDb21wc1sxXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5wYXRjaCA9IHBhcnNlSW50KGNvcmVDb21wc1syXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gcHJlcmVsZWFzZSAhPT0gbnVsbCAmJiBwcmVyZWxlYXNlICE9PSB2b2lkIDAgPyBwcmVyZWxlYXNlIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSBbdGhpcy5tYWpvciwgdGhpcy5taW5vciwgdGhpcy5wYXRjaF0uam9pbignLicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlcmVsZWFzZSAhPT0gbnVsbCA/IFtjb3JlLCB0aGlzLnByZXJlbGVhc2VdLmpvaW4oJy0nKSA6IGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8gPSBjb250cm9sbGVyO1xuICAgICAgICB9XG4gICAgICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5nZXQoJ2Rpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGRpc2FibGVkKGRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2Rpc2FibGVkJywgZGlzYWJsZWQpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBoaWRkZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52aWV3UHJvcHMuZ2V0KCdoaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgaGlkZGVuKGhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52aWV3UHJvcHMuc2V0KCdoaWRkZW4nLCBoaWRkZW4pO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2Rpc3Bvc2VkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBUcENoYW5nZUV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgdmFsdWUsIHByZXNldEtleSwgbGFzdCkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0S2V5ID0gcHJlc2V0S2V5O1xuICAgICAgICAgICAgdGhpcy5sYXN0ID0gbGFzdCAhPT0gbnVsbCAmJiBsYXN0ICE9PSB2b2lkIDAgPyBsYXN0IDogdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBUcFVwZGF0ZUV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgdmFsdWUsIHByZXNldEtleSkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0S2V5ID0gcHJlc2V0S2V5O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwRm9sZEV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHN1cGVyKHRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgVHBUYWJTZWxlY3RFdmVudCBleHRlbmRzIFRwRXZlbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0YXJnZXQsIGluZGV4KSB7XG4gICAgICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9yY2VDYXN0KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZXBFcXVhbHNBcnJheShhMSwgYTIpIHtcbiAgICAgICAgaWYgKGExLmxlbmd0aCAhPT0gYTIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGExW2ldICE9PSBhMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNQcm9wZXJ0eVdyaXRhYmxlKG9iaiwga2V5KSB7XG4gICAgICAgIGxldCB0YXJnZXQgPSBvYmo7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgICAgICAgIGlmIChkICYmIChkLnNldCAhPT0gdW5kZWZpbmVkIHx8IGQud3JpdGFibGUgPT09IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICAgICAgfSB3aGlsZSAodGFyZ2V0ICE9PSBudWxsKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IENSRUFURV9NRVNTQUdFX01BUCA9IHtcbiAgICAgICAgYWxyZWFkeWRpc3Bvc2VkOiAoKSA9PiAnVmlldyBoYXMgYmVlbiBhbHJlYWR5IGRpc3Bvc2VkJyxcbiAgICAgICAgaW52YWxpZHBhcmFtczogKGNvbnRleHQpID0+IGBJbnZhbGlkIHBhcmFtZXRlcnMgZm9yICcke2NvbnRleHQubmFtZX0nYCxcbiAgICAgICAgbm9tYXRjaGluZ2NvbnRyb2xsZXI6IChjb250ZXh0KSA9PiBgTm8gbWF0Y2hpbmcgY29udHJvbGxlciBmb3IgJyR7Y29udGV4dC5rZXl9J2AsXG4gICAgICAgIG5vbWF0Y2hpbmd2aWV3OiAoY29udGV4dCkgPT4gYE5vIG1hdGNoaW5nIHZpZXcgZm9yICcke0pTT04uc3RyaW5naWZ5KGNvbnRleHQucGFyYW1zKX0nYCxcbiAgICAgICAgbm90YmluZGFibGU6ICgpID0+IGBWYWx1ZSBpcyBub3QgYmluZGFibGVgLFxuICAgICAgICBwcm9wZXJ0eW5vdGZvdW5kOiAoY29udGV4dCkgPT4gYFByb3BlcnR5ICcke2NvbnRleHQubmFtZX0nIG5vdCBmb3VuZGAsXG4gICAgICAgIHNob3VsZG5ldmVyaGFwcGVuOiAoKSA9PiAnVGhpcyBlcnJvciBzaG91bGQgbmV2ZXIgaGFwcGVuJyxcbiAgICB9O1xuICAgIGNsYXNzIFRwRXJyb3Ige1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgKF9hID0gQ1JFQVRFX01FU1NBR0VfTUFQW2NvbmZpZy50eXBlXShmb3JjZUNhc3QoY29uZmlnLmNvbnRleHQpKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ1VuZXhwZWN0ZWQgZXJyb3InO1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICAgICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpLnN0YWNrO1xuICAgICAgICAgICAgdGhpcy50eXBlID0gY29uZmlnLnR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGFscmVhZHlEaXNwb3NlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHBFcnJvcih7IHR5cGU6ICdhbHJlYWR5ZGlzcG9zZWQnIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBub3RCaW5kYWJsZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgdHlwZTogJ25vdGJpbmRhYmxlJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBwcm9wZXJ0eU5vdEZvdW5kKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3Byb3BlcnR5bm90Zm91bmQnLFxuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHNob3VsZE5ldmVySGFwcGVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHsgdHlwZTogJ3Nob3VsZG5ldmVyaGFwcGVuJyB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJpbmRpbmdUYXJnZXQge1xuICAgICAgICBjb25zdHJ1Y3RvcihvYmosIGtleSwgb3B0X2lkKSB7XG4gICAgICAgICAgICB0aGlzLm9ial8gPSBvYmo7XG4gICAgICAgICAgICB0aGlzLmtleV8gPSBrZXk7XG4gICAgICAgICAgICB0aGlzLnByZXNldEtleV8gPSBvcHRfaWQgIT09IG51bGwgJiYgb3B0X2lkICE9PSB2b2lkIDAgPyBvcHRfaWQgOiBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzQmluZGFibGUob2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGtleSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmtleV87XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHByZXNldEtleSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXNldEtleV87XG4gICAgICAgIH1cbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9ial9bdGhpcy5rZXlfXTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5vYmpfW3RoaXMua2V5X10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZVByb3BlcnR5KG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZU9iaiA9IHRoaXMucmVhZCgpO1xuICAgICAgICAgICAgaWYgKCFCaW5kaW5nVGFyZ2V0LmlzQmluZGFibGUodmFsdWVPYmopKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5ub3RCaW5kYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEobmFtZSBpbiB2YWx1ZU9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnByb3BlcnR5Tm90Rm91bmQobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZU9ialtuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQnV0dG9uQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLmdldCgndGl0bGUnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHRpdGxlKHRpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5zZXQoJ3RpdGxlJywgdGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIuZW1pdHRlcjtcbiAgICAgICAgICAgIGVtaXR0ZXIub24oZXZlbnROYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYmgobmV3IFRwRXZlbnQodGhpcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEVtaXR0ZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzXyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFvYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JzZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIG9mZihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKG9ic2VydmVycykge1xuICAgICAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdID0gb2JzZXJ2ZXJzLmZpbHRlcigob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmhhbmRsZXIgIT09IGhhbmRsZXI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBlbWl0KGV2ZW50TmFtZSwgZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFvYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYnNlcnZlcnMuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5oYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgUFJFRklYID0gJ3RwJztcbiAgICBmdW5jdGlvbiBDbGFzc05hbWUodmlld05hbWUpIHtcbiAgICAgICAgY29uc3QgZm4gPSAob3B0X2VsZW1lbnROYW1lLCBvcHRfbW9kaWZpZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgUFJFRklYLFxuICAgICAgICAgICAgICAgICctJyxcbiAgICAgICAgICAgICAgICB2aWV3TmFtZSxcbiAgICAgICAgICAgICAgICAndicsXG4gICAgICAgICAgICAgICAgb3B0X2VsZW1lbnROYW1lID8gYF8ke29wdF9lbGVtZW50TmFtZX1gIDogJycsXG4gICAgICAgICAgICAgICAgb3B0X21vZGlmaWVyID8gYC0ke29wdF9tb2RpZmllcn1gIDogJycsXG4gICAgICAgICAgICBdLmpvaW4oJycpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcG9zZShoMSwgaDIpIHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCkgPT4gaDIoaDEoaW5wdXQpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0cmFjdFZhbHVlKGV2KSB7XG4gICAgICAgIHJldHVybiBldi5yYXdWYWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZFZhbHVlKHZhbHVlLCBhcHBseVZhbHVlKSB7XG4gICAgICAgIHZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIGNvbXBvc2UoZXh0cmFjdFZhbHVlLCBhcHBseVZhbHVlKSk7XG4gICAgICAgIGFwcGx5VmFsdWUodmFsdWUucmF3VmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kVmFsdWVNYXAodmFsdWVNYXAsIGtleSwgYXBwbHlWYWx1ZSkge1xuICAgICAgICBiaW5kVmFsdWUodmFsdWVNYXAudmFsdWUoa2V5KSwgYXBwbHlWYWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwbHlDbGFzcyhlbGVtLCBjbGFzc05hbWUsIGFjdGl2ZSkge1xuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbHVlVG9DbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGFwcGx5Q2xhc3MoZWxlbSwgY2xhc3NOYW1lLCB2YWx1ZSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQodmFsdWUsIGVsZW0pIHtcbiAgICAgICAgYmluZFZhbHVlKHZhbHVlLCAodGV4dCkgPT4ge1xuICAgICAgICAgICAgZWxlbS50ZXh0Q29udGVudCA9IHRleHQgIT09IG51bGwgJiYgdGV4dCAhPT0gdm9pZCAwID8gdGV4dCA6ICcnO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkcSA9IENsYXNzTmFtZSgnYnRuJyk7XG4gICAgY2xhc3MgQnV0dG9uVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkcSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRxKCdiJykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGl0bGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJHEoJ3QnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVUb1RleHRDb250ZW50KGNvbmZpZy5wcm9wcy52YWx1ZSgndGl0bGUnKSwgdGl0bGVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQnV0dG9uQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrXyA9IHRoaXMub25DbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQnV0dG9uVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGlja18pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NsaWNrJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQm91bmRWYWx1ZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGluaXRpYWxWYWx1ZSwgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRfID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICB0aGlzLmVxdWFsc18gPSAoX2EgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuZXF1YWxzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoKHYxLCB2MikgPT4gdjEgPT09IHYyKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnJhd1ZhbHVlXyA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY29uc3RyYWludCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cmFpbnRfO1xuICAgICAgICB9XG4gICAgICAgIGdldCByYXdWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhd1ZhbHVlXztcbiAgICAgICAgfVxuICAgICAgICBzZXQgcmF3VmFsdWUocmF3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UmF3VmFsdWUocmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRSYXdWYWx1ZShyYXdWYWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY29uc3RyYWluZWRWYWx1ZSA9IHRoaXMuY29uc3RyYWludF9cbiAgICAgICAgICAgICAgICA/IHRoaXMuY29uc3RyYWludF8uY29uc3RyYWluKHJhd1ZhbHVlKVxuICAgICAgICAgICAgICAgIDogcmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwcmV2VmFsdWUgPSB0aGlzLnJhd1ZhbHVlXztcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSAhdGhpcy5lcXVhbHNfKHByZXZWYWx1ZSwgY29uc3RyYWluZWRWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZWQgJiYgIW9wdHMuZm9yY2VFbWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2JlZm9yZWNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmF3VmFsdWVfID0gY29uc3RyYWluZWRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0cyxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1Jhd1ZhbHVlOiBwcmV2VmFsdWUsXG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IGNvbnN0cmFpbmVkVmFsdWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQcmltaXRpdmVWYWx1ZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGdldCByYXdWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlXztcbiAgICAgICAgfVxuICAgICAgICBzZXQgcmF3VmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UmF3VmFsdWUodmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRSYXdWYWx1ZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcHJldlZhbHVlID0gdGhpcy52YWx1ZV87XG4gICAgICAgICAgICBpZiAocHJldlZhbHVlID09PSB2YWx1ZSAmJiAhb3B0cy5mb3JjZUVtaXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYmVmb3JlY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZV8gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0cyxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1Jhd1ZhbHVlOiBwcmV2VmFsdWUsXG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IHRoaXMudmFsdWVfLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVmFsdWUoaW5pdGlhbFZhbHVlLCBjb25maWcpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludCA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5jb25zdHJhaW50O1xuICAgICAgICBjb25zdCBlcXVhbHMgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuZXF1YWxzO1xuICAgICAgICBpZiAoIWNvbnN0cmFpbnQgJiYgIWVxdWFscykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmltaXRpdmVWYWx1ZShpbml0aWFsVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQm91bmRWYWx1ZShpbml0aWFsVmFsdWUsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgY2xhc3MgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmFsTWFwXyA9IHZhbHVlTWFwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy52YWxNYXBfKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMudmFsTWFwX1trZXldO1xuICAgICAgICAgICAgICAgIHYuZW1pdHRlci5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGVDb3JlKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKG8sIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG8sIHtcbiAgICAgICAgICAgICAgICAgICAgW2tleV06IGNyZWF0ZVZhbHVlKGluaXRpYWxWYWx1ZVtrZXldKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSB0aGlzLmNyZWF0ZUNvcmUoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsdWVNYXAoY29yZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0KGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsTWFwX1trZXldLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbE1hcF9ba2V5XS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsTWFwX1trZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VPYmplY3QodmFsdWUsIGtleVRvUGFyc2VyTWFwKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhrZXlUb1BhcnNlck1hcCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGtleXMucmVkdWNlKCh0bXAsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRtcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlciA9IGtleVRvUGFyc2VyTWFwW2tleV07XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZXIodmFsdWVba2V5XSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnN1Y2NlZWRlZFxuICAgICAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0bXApLCB7IFtrZXldOiByZXN1bHQudmFsdWUgfSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgcmV0dXJuIGZvcmNlQ2FzdChyZXN1bHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUFycmF5KHZhbHVlLCBwYXJzZUl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlZHVjZSgodG1wLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAodG1wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2VlZGVkIHx8IHJlc3VsdC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbLi4udG1wLCByZXN1bHQudmFsdWVdO1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKHBhcnNlKSB7XG4gICAgICAgIHJldHVybiAob3B0aW9uYWwpID0+ICh2KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbmFsICYmIHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25hbCAmJiB2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlKHYpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcnMob3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1c3RvbTogKHBhcnNlKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKHBhcnNlKShvcHRpb25hbCksXG4gICAgICAgICAgICBib29sZWFuOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nID8gdiA6IHVuZGVmaW5lZCkob3B0aW9uYWwpLFxuICAgICAgICAgICAgbnVtYmVyOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBzdHJpbmc6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiB1bmRlZmluZWQpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PlxuICAgICAgICAgICAgdHlwZW9mIHYgPT09ICdmdW5jdGlvbicgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBjb25zdGFudDogKHZhbHVlKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiAodiA9PT0gdmFsdWUgPyB2YWx1ZSA6IHVuZGVmaW5lZCkpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIHJhdzogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gdikob3B0aW9uYWwpLFxuICAgICAgICAgICAgb2JqZWN0OiAoa2V5VG9QYXJzZXJNYXApID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU9iamVjdCh2LCBrZXlUb1BhcnNlck1hcCk7XG4gICAgICAgICAgICB9KShvcHRpb25hbCksXG4gICAgICAgICAgICBhcnJheTogKGl0ZW1QYXJzZXIpID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXkodiwgaXRlbVBhcnNlcik7XG4gICAgICAgICAgICB9KShvcHRpb25hbCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IFBhcmFtc1BhcnNlcnMgPSB7XG4gICAgICAgIG9wdGlvbmFsOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVycyh0cnVlKSxcbiAgICAgICAgcmVxdWlyZWQ6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXJzKGZhbHNlKSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1zKHZhbHVlLCBrZXlUb1BhcnNlck1hcCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBQYXJhbXNQYXJzZXJzLnJlcXVpcmVkLm9iamVjdChrZXlUb1BhcnNlck1hcCkodmFsdWUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN1Y2NlZWRlZCA/IHJlc3VsdC52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuTWlzc2luZyhpbmZvKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihbXG4gICAgICAgICAgICBgTWlzc2luZyAnJHtpbmZvLmtleX0nIG9mICR7aW5mby50YXJnZXR9IGluICR7aW5mby5wbGFjZX0uYCxcbiAgICAgICAgICAgICdQbGVhc2UgcmVidWlsZCBwbHVnaW5zIHdpdGggdGhlIGxhdGVzdCBjb3JlIHBhY2thZ2UuJyxcbiAgICAgICAgXS5qb2luKCcgJykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc3Bvc2VFbGVtZW50KGVsZW0pIHtcbiAgICAgICAgaWYgKGVsZW0gJiYgZWxlbS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY2xhc3MgUmVhZG9ubHlWYWx1ZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlXyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbmV3IFJlYWRvbmx5VmFsdWUodmFsdWUpLFxuICAgICAgICAgICAgICAgIChyYXdWYWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zZXRSYXdWYWx1ZShyYXdWYWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGVtaXR0ZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV8uZW1pdHRlcjtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcmF3VmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV8ucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkcCA9IENsYXNzTmFtZSgnJyk7XG4gICAgZnVuY3Rpb24gdmFsdWVUb01vZGlmaWVyKGVsZW0sIG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVRvQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZSRwKHVuZGVmaW5lZCwgbW9kaWZpZXIpKTtcbiAgICB9XG4gICAgY2xhc3MgVmlld1Byb3BzIGV4dGVuZHMgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgc3VwZXIodmFsdWVNYXApO1xuICAgICAgICAgICAgdGhpcy5vbkRpc2FibGVkQ2hhbmdlXyA9IHRoaXMub25EaXNhYmxlZENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYXJlbnRDaGFuZ2VfID0gdGhpcy5vblBhcmVudENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYXJlbnRHbG9iYWxEaXNhYmxlZENoYW5nZV8gPVxuICAgICAgICAgICAgICAgIHRoaXMub25QYXJlbnRHbG9iYWxEaXNhYmxlZENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIFt0aGlzLmdsb2JhbERpc2FibGVkXywgdGhpcy5zZXRHbG9iYWxEaXNhYmxlZF9dID0gUmVhZG9ubHlWYWx1ZS5jcmVhdGUoY3JlYXRlVmFsdWUodGhpcy5nZXRHbG9iYWxEaXNhYmxlZF8oKSkpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSgnZGlzYWJsZWQnKS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uRGlzYWJsZWRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUoJ3BhcmVudCcpLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25QYXJlbnRDaGFuZ2VfKTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMuZ2V0KCdwYXJlbnQnKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdsb2JhbERpc2FibGVkLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25QYXJlbnRHbG9iYWxEaXNhYmxlZENoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGUob3B0X2luaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSBvcHRfaW5pdGlhbFZhbHVlICE9PSBudWxsICYmIG9wdF9pbml0aWFsVmFsdWUgIT09IHZvaWQgMCA/IG9wdF9pbml0aWFsVmFsdWUgOiB7fTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmlld1Byb3BzKFZhbHVlTWFwLmNyZWF0ZUNvcmUoe1xuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAoX2EgPSBpbml0aWFsVmFsdWUuZGlzYWJsZWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRpc3Bvc2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoaWRkZW46IChfYiA9IGluaXRpYWxWYWx1ZS5oaWRkZW4pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBhcmVudDogKF9jID0gaW5pdGlhbFZhbHVlLnBhcmVudCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogbnVsbCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZ2xvYmFsRGlzYWJsZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxEaXNhYmxlZF87XG4gICAgICAgIH1cbiAgICAgICAgYmluZENsYXNzTW9kaWZpZXJzKGVsZW0pIHtcbiAgICAgICAgICAgIGJpbmRWYWx1ZSh0aGlzLmdsb2JhbERpc2FibGVkXywgdmFsdWVUb01vZGlmaWVyKGVsZW0sICdkaXNhYmxlZCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnaGlkZGVuJywgdmFsdWVUb01vZGlmaWVyKGVsZW0sICdoaWRkZW4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgYmluZERpc2FibGVkKHRhcmdldCkge1xuICAgICAgICAgICAgYmluZFZhbHVlKHRoaXMuZ2xvYmFsRGlzYWJsZWRfLCAoZGlzYWJsZWQpID0+IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJpbmRUYWJJbmRleChlbGVtKSB7XG4gICAgICAgICAgICBiaW5kVmFsdWUodGhpcy5nbG9iYWxEaXNhYmxlZF8sIChkaXNhYmxlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW0udGFiSW5kZXggPSBkaXNhYmxlZCA/IC0xIDogMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZURpc3Bvc2UoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUoJ2Rpc3Bvc2VkJykuZW1pdHRlci5vbignY2hhbmdlJywgKGRpc3Bvc2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0R2xvYmFsRGlzYWJsZWRfKCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5nZXQoJ3BhcmVudCcpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50RGlzYWJsZWQgPSBwYXJlbnQgPyBwYXJlbnQuZ2xvYmFsRGlzYWJsZWQucmF3VmFsdWUgOiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnREaXNhYmxlZCB8fCB0aGlzLmdldCgnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVHbG9iYWxEaXNhYmxlZF8oKSB7XG4gICAgICAgICAgICB0aGlzLnNldEdsb2JhbERpc2FibGVkXyh0aGlzLmdldEdsb2JhbERpc2FibGVkXygpKTtcbiAgICAgICAgfVxuICAgICAgICBvbkRpc2FibGVkQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlR2xvYmFsRGlzYWJsZWRfKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25QYXJlbnRHbG9iYWxEaXNhYmxlZENoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUdsb2JhbERpc2FibGVkXygpO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFyZW50Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcHJldlBhcmVudCA9IGV2LnByZXZpb3VzUmF3VmFsdWU7XG4gICAgICAgICAgICBwcmV2UGFyZW50ID09PSBudWxsIHx8IHByZXZQYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByZXZQYXJlbnQuZ2xvYmFsRGlzYWJsZWQuZW1pdHRlci5vZmYoJ2NoYW5nZScsIHRoaXMub25QYXJlbnRHbG9iYWxEaXNhYmxlZENoYW5nZV8pO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5nZXQoJ3BhcmVudCcpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2xvYmFsRGlzYWJsZWQuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblBhcmVudEdsb2JhbERpc2FibGVkQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUdsb2JhbERpc2FibGVkXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QWxsQmxhZGVQb3NpdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBbJ3ZlcnlmaXJzdCcsICdmaXJzdCcsICdsYXN0JywgJ3ZlcnlsYXN0J107XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJG8gPSBDbGFzc05hbWUoJycpO1xuICAgIGNvbnN0IFBPU19UT19DTEFTU19OQU1FX01BUCA9IHtcbiAgICAgICAgdmVyeWZpcnN0OiAndmZzdCcsXG4gICAgICAgIGZpcnN0OiAnZnN0JyxcbiAgICAgICAgbGFzdDogJ2xzdCcsXG4gICAgICAgIHZlcnlsYXN0OiAndmxzdCcsXG4gICAgfTtcbiAgICBjbGFzcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50XyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmJsYWRlID0gY29uZmlnLmJsYWRlO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gY29uZmlnLnZpZXc7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmJsYWRlLnZhbHVlKCdwb3NpdGlvbnMnKS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2V0QWxsQmxhZGVQb3NpdGlvbnMoKS5mb3JFYWNoKChwb3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSRvKHVuZGVmaW5lZCwgUE9TX1RPX0NMQVNTX05BTUVfTUFQW3Bvc10pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmJsYWRlLmdldCgncG9zaXRpb25zJykuZm9yRWFjaCgocG9zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbyh1bmRlZmluZWQsIFBPU19UT19DTEFTU19OQU1FX01BUFtwb3NdKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRpc3Bvc2VFbGVtZW50KGVsZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBhcmVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudF87XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHBhcmVudChwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50XyA9IHBhcmVudDtcbiAgICAgICAgICAgIGlmICghKCdwYXJlbnQnIGluIHRoaXMudmlld1Byb3BzLnZhbE1hcF8pKSB7XG4gICAgICAgICAgICAgICAgd2Fybk1pc3Npbmcoe1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFZpZXdQcm9wcy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBwbGFjZTogJ0JsYWRlQ29udHJvbGxlci5wYXJlbnQnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLnNldCgncGFyZW50JywgdGhpcy5wYXJlbnRfID8gdGhpcy5wYXJlbnRfLnZpZXdQcm9wcyA6IG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgU1ZHX05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbiAgICBmdW5jdGlvbiBmb3JjZVJlZmxvdyhlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNhYmxlVHJhbnNpdGlvblRlbXBvcmFyaWx5KGVsZW1lbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHQgPSBlbGVtZW50LnN0eWxlLnRyYW5zaXRpb247XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3VwcG9ydHNUb3VjaChkb2MpIHtcbiAgICAgICAgcmV0dXJuIGRvYy5vbnRvdWNoc3RhcnQgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0R2xvYmFsT2JqZWN0KCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsVGhpcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0V2luZG93RG9jdW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbE9iaiA9IGZvcmNlQ2FzdChnZXRHbG9iYWxPYmplY3QoKSk7XG4gICAgICAgIHJldHVybiBnbG9iYWxPYmouZG9jdW1lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENhbnZhc0NvbnRleHQoY2FudmFzRWxlbWVudCkge1xuICAgICAgICBjb25zdCB3aW4gPSBjYW52YXNFbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgICAgIGlmICghd2luKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0Jyb3dzZXIgPSAnZG9jdW1lbnQnIGluIHdpbjtcbiAgICAgICAgcmV0dXJuIGlzQnJvd3NlclxuICAgICAgICAgICAgPyBjYW52YXNFbGVtZW50LmdldENvbnRleHQoJzJkJywge1xuICAgICAgICAgICAgICAgIHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IElDT05fSURfVE9fSU5ORVJfSFRNTF9NQVAgPSB7XG4gICAgICAgIGNoZWNrOiAnPHBhdGggZD1cIk0yIDhsNCA0bDggLThcIi8+JyxcbiAgICAgICAgZHJvcGRvd246ICc8cGF0aCBkPVwiTTUgN2g2bC0zIDMgelwiLz4nLFxuICAgICAgICBwMmRwYWQ6ICc8cGF0aCBkPVwiTTggNHY4XCIvPjxwYXRoIGQ9XCJNNCA4aDhcIi8+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxLjJcIi8+JyxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvY3VtZW50LCBpY29uSWQpIHtcbiAgICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICAgICAgZWxlbS5pbm5lckhUTUwgPSBJQ09OX0lEX1RPX0lOTkVSX0hUTUxfTUFQW2ljb25JZF07XG4gICAgICAgIHJldHVybiBlbGVtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRFbGVtZW50QXQocGFyZW50RWxlbWVudCwgZWxlbWVudCwgaW5kZXgpIHtcbiAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgcGFyZW50RWxlbWVudC5jaGlsZHJlbltpbmRleF0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkRWxlbWVudHMoZWxlbWVudCkge1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuY2hpbGRyZW5bMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkTm9kZXMoZWxlbWVudCkge1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5jaGlsZE5vZGVzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kTmV4dFRhcmdldChldikge1xuICAgICAgICBpZiAoZXYucmVsYXRlZFRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcmNlQ2FzdChldi5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2V4cGxpY2l0T3JpZ2luYWxUYXJnZXQnIGluIGV2KSB7XG4gICAgICAgICAgICByZXR1cm4gZXYuZXhwbGljaXRPcmlnaW5hbFRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkbiA9IENsYXNzTmFtZSgnbGJsJyk7XG4gICAgZnVuY3Rpb24gY3JlYXRlTGFiZWxOb2RlKGRvYywgbGFiZWwpIHtcbiAgICAgICAgY29uc3QgZnJhZyA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIGNvbnN0IGxpbmVOb2RlcyA9IGxhYmVsLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkb2MuY3JlYXRlVGV4dE5vZGUobGluZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsaW5lTm9kZXMuZm9yRWFjaCgobGluZU5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudCgnYnInKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGxpbmVOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmcmFnO1xuICAgIH1cbiAgICBjbGFzcyBMYWJlbFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG4oKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbGFiZWxFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbGFiZWxFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG4oJ2wnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAoY29uZmlnLnByb3BzLCAnbGFiZWwnLCAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG4odW5kZWZpbmVkLCAnbm9sJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lJG4odW5kZWZpbmVkLCAnbm9sJykpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDaGlsZE5vZGVzKGxhYmVsRWxlbSk7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVMYWJlbE5vZGUoZG9jLCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmxhYmVsRWxlbWVudCA9IGxhYmVsRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHZhbHVlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRuKCd2JykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHZhbHVlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlRWxlbWVudCA9IHZhbHVlRWxlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIExhYmVsQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3UHJvcHMgPSBjb25maWcudmFsdWVDb250cm9sbGVyLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyB2aWV3OiBuZXcgTGFiZWxWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSwgdmlld1Byb3BzOiB2aWV3UHJvcHMgfSkpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmFsdWVDb250cm9sbGVyID0gY29uZmlnLnZhbHVlQ29udHJvbGxlcjtcbiAgICAgICAgICAgIHRoaXMudmlldy52YWx1ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy52YWx1ZUNvbnRyb2xsZXIudmlldy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IEJ1dHRvbkJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ2J1dHRvbicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHAucmVxdWlyZWQuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ2J1dHRvbicpLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBwLm9wdGlvbmFsLnN0cmluZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMYWJlbENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGFyZ3MucGFyYW1zLmxhYmVsLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogbmV3IEJ1dHRvbkNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYXJncy5wYXJhbXMudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMYWJlbENvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIudmFsdWVDb250cm9sbGVyIGluc3RhbmNlb2YgQnV0dG9uQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgQnV0dG9uQXBpKGFyZ3MuY29udHJvbGxlcik7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIFZhbHVlQmxhZGVDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihjb25maWcpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJsYWRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFZhbHVlTWFwKHtcbiAgICAgICAgICAgIHBvc2l0aW9uczogY3JlYXRlVmFsdWUoW10sIHtcbiAgICAgICAgICAgICAgICBlcXVhbHM6IGRlZXBFcXVhbHNBcnJheSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBGb2xkYWJsZSBleHRlbmRzIFZhbHVlTWFwIHtcbiAgICAgICAgY29uc3RydWN0b3IodmFsdWVNYXApIHtcbiAgICAgICAgICAgIHN1cGVyKHZhbHVlTWFwKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgY3JlYXRlKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICBjb25zdCBjb3JlT2JqID0ge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWRIZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgc2hvdWxkRml4SGVpZ2h0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0ZW1wb3JhcnlFeHBhbmRlZDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjb3JlID0gVmFsdWVNYXAuY3JlYXRlQ29yZShjb3JlT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9sZGFibGUoY29yZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHN0eWxlRXhwYW5kZWQoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5nZXQoJ3RlbXBvcmFyeUV4cGFuZGVkJykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMuZ2V0KCdleHBhbmRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzdHlsZUhlaWdodCgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zdHlsZUV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGV4SGVpZ2h0ID0gdGhpcy5nZXQoJ2V4cGFuZGVkSGVpZ2h0Jyk7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQoJ3Nob3VsZEZpeEhlaWdodCcpICYmICFpc0VtcHR5KGV4SGVpZ2h0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtleEhlaWdodH1weGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ2F1dG8nO1xuICAgICAgICB9XG4gICAgICAgIGJpbmRFeHBhbmRlZENsYXNzKGVsZW0sIGV4cGFuZGVkQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBvbkV4cGFuZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuc3R5bGVFeHBhbmRlZDtcbiAgICAgICAgICAgICAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKGV4cGFuZGVkQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShleHBhbmRlZENsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnZXhwYW5kZWQnLCBvbkV4cGFuZCk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcywgJ3RlbXBvcmFyeUV4cGFuZGVkJywgb25FeHBhbmQpO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFuVXBUcmFuc2l0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5zZXQoJ3Nob3VsZEZpeEhlaWdodCcsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdleHBhbmRlZEhlaWdodCcsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5zZXQoJ2NvbXBsZXRlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFeHBhbmRlZEZvbGRlckhlaWdodChmb2xkZXIsIGNvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgICAgbGV0IGhlaWdodCA9IDA7XG4gICAgICAgIGRpc2FibGVUcmFuc2l0aW9uVGVtcG9yYXJpbHkoY29udGFpbmVyRWxlbWVudCwgKCkgPT4ge1xuICAgICAgICAgICAgZm9sZGVyLnNldCgnZXhwYW5kZWRIZWlnaHQnLCBudWxsKTtcbiAgICAgICAgICAgIGZvbGRlci5zZXQoJ3RlbXBvcmFyeUV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICBmb3JjZVJlZmxvdyhjb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgICAgIGhlaWdodCA9IGNvbnRhaW5lckVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgZm9sZGVyLnNldCgndGVtcG9yYXJ5RXhwYW5kZWQnLCBudWxsKTtcbiAgICAgICAgICAgIGZvcmNlUmVmbG93KGNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGhlaWdodDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXBwbHlIZWlnaHQoZm9sZGFibGUsIGVsZW0pIHtcbiAgICAgICAgZWxlbS5zdHlsZS5oZWlnaHQgPSBmb2xkYWJsZS5zdHlsZUhlaWdodDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZEZvbGRhYmxlKGZvbGRhYmxlLCBlbGVtKSB7XG4gICAgICAgIGZvbGRhYmxlLnZhbHVlKCdleHBhbmRlZCcpLmVtaXR0ZXIub24oJ2JlZm9yZWNoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIGZvbGRhYmxlLnNldCgnY29tcGxldGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkoZm9sZGFibGUuZ2V0KCdleHBhbmRlZEhlaWdodCcpKSkge1xuICAgICAgICAgICAgICAgIGZvbGRhYmxlLnNldCgnZXhwYW5kZWRIZWlnaHQnLCBjb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQoZm9sZGFibGUsIGVsZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvbGRhYmxlLnNldCgnc2hvdWxkRml4SGVpZ2h0JywgdHJ1ZSk7XG4gICAgICAgICAgICBmb3JjZVJlZmxvdyhlbGVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvbGRhYmxlLmVtaXR0ZXIub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIGFwcGx5SGVpZ2h0KGZvbGRhYmxlLCBlbGVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwcGx5SGVpZ2h0KGZvbGRhYmxlLCBlbGVtKTtcbiAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgKGV2KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXYucHJvcGVydHlOYW1lICE9PSAnaGVpZ2h0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvbGRhYmxlLmNsZWFuVXBUcmFuc2l0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIFJhY2tMaWtlQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCByYWNrQXBpKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8gPSByYWNrQXBpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkQnV0dG9uQXNCbGFkZShhcGksIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gYXBpLmFkZEJsYWRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyB2aWV3OiAnYnV0dG9uJyB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZEZvbGRlckFzQmxhZGUoYXBpLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGFwaS5hZGRCbGFkZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlldzogJ2ZvbGRlcicgfSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRTZXBhcmF0b3JBc0JsYWRlKGFwaSwgb3B0X3BhcmFtcykge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBvcHRfcGFyYW1zICE9PSBudWxsICYmIG9wdF9wYXJhbXMgIT09IHZvaWQgMCA/IG9wdF9wYXJhbXMgOiB7fTtcbiAgICAgICAgcmV0dXJuIGFwaS5hZGRCbGFkZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlldzogJ3NlcGFyYXRvcicgfSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUYWJBc0JsYWRlKGFwaSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICd0YWInIH0pKTtcbiAgICB9XG5cbiAgICBjbGFzcyBOZXN0ZWRPcmRlcmVkU2V0IHtcbiAgICAgICAgY29uc3RydWN0b3IoZXh0cmFjdCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNfID0gW107XG4gICAgICAgICAgICB0aGlzLmNhY2hlXyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHRoaXMub25TdWJMaXN0QWRkXyA9IHRoaXMub25TdWJMaXN0QWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblN1Ykxpc3RSZW1vdmVfID0gdGhpcy5vblN1Ykxpc3RSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmV4dHJhY3RfID0gZXh0cmFjdDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtc187XG4gICAgICAgIH1cbiAgICAgICAgYWxsSXRlbXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNhY2hlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZmluZChjYWxsYmFjaykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuYWxsSXRlbXMoKSkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdWRlcyhpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZV8uaGFzKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGFkZChpdGVtLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBvcHRfaW5kZXggIT09IHVuZGVmaW5lZCA/IG9wdF9pbmRleCA6IHRoaXMuaXRlbXNfLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNfLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBzdWJMaXN0ID0gdGhpcy5leHRyYWN0XyhpdGVtKTtcbiAgICAgICAgICAgIGlmIChzdWJMaXN0KSB7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uU3ViTGlzdEFkZF8pO1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblN1Ykxpc3RSZW1vdmVfKTtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmFsbEl0ZW1zKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYWRkJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtc18uaW5kZXhPZihpdGVtKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1zXy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8uZGVsZXRlKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3Qgc3ViTGlzdCA9IHRoaXMuZXh0cmFjdF8oaXRlbSk7XG4gICAgICAgICAgICBpZiAoc3ViTGlzdCkge1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vZmYoJ2FkZCcsIHRoaXMub25TdWJMaXN0QWRkXyk7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9mZigncmVtb3ZlJywgdGhpcy5vblN1Ykxpc3RSZW1vdmVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdyZW1vdmUnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgcm9vdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblN1Ykxpc3RBZGRfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoZXYuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYWRkJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBldi5pbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBldi50YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblN1Ykxpc3RSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5kZWxldGUoZXYuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgncmVtb3ZlJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBldi5pbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBldi50YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIElucHV0QmluZGluZ0FwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLm9uQmluZGluZ0NoYW5nZV8gPSB0aGlzLm9uQmluZGluZ0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25CaW5kaW5nQ2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBvbkJpbmRpbmdDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV2LnNlbmRlci50YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KHRoaXMsIGZvcmNlQ2FzdCh2YWx1ZSksIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy50YXJnZXQucHJlc2V0S2V5LCBldi5vcHRpb25zLmxhc3QpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbnB1dEJpbmRpbmdDb250cm9sbGVyIGV4dGVuZHMgTGFiZWxDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGRvYywgY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuYmluZGluZyA9IGNvbmZpZy5iaW5kaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTW9uaXRvckJpbmRpbmdBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5vbkJpbmRpbmdVcGRhdGVfID0gdGhpcy5vbkJpbmRpbmdVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5lbWl0dGVyLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmluZGluZ1VwZGF0ZV8pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25CaW5kaW5nVXBkYXRlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldi5zZW5kZXIudGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBVcGRhdGVFdmVudCh0aGlzLCBmb3JjZUNhc3QodmFsdWUpLCB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcudGFyZ2V0LnByZXNldEtleSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciBleHRlbmRzIExhYmVsQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihkb2MsIGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmcgPSBjb25maWcuYmluZGluZztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmJpbmREaXNhYmxlZCh0aGlzLmJpbmRpbmcudGlja2VyKTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGluZy5kaXNwb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRTdWJCbGFkZUFwaVNldChhcGkpIHtcbiAgICAgICAgaWYgKGFwaSBpbnN0YW5jZW9mIFJhY2tBcGkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGlbJ2FwaVNldF8nXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBpIGluc3RhbmNlb2YgUmFja0xpa2VBcGkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGlbJ3JhY2tBcGlfJ11bJ2FwaVNldF8nXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QXBpQnlDb250cm9sbGVyKGFwaVNldCwgY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCBhcGkgPSBhcGlTZXQuZmluZCgoYXBpKSA9PiBhcGkuY29udHJvbGxlcl8gPT09IGNvbnRyb2xsZXIpO1xuICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcGk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmdUYXJnZXQob2JqLCBrZXksIG9wdF9pZCkge1xuICAgICAgICBpZiAoIUJpbmRpbmdUYXJnZXQuaXNCaW5kYWJsZShvYmopKSB7XG4gICAgICAgICAgICB0aHJvdyBUcEVycm9yLm5vdEJpbmRhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nVGFyZ2V0KG9iaiwga2V5LCBvcHRfaWQpO1xuICAgIH1cbiAgICBjbGFzcyBSYWNrQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrQWRkXyA9IHRoaXMub25SYWNrQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tSZW1vdmVfID0gdGhpcy5vblJhY2tSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja0lucHV0Q2hhbmdlXyA9IHRoaXMub25SYWNrSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja01vbml0b3JVcGRhdGVfID0gdGhpcy5vblJhY2tNb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmFwaVNldF8gPSBuZXcgTmVzdGVkT3JkZXJlZFNldChmaW5kU3ViQmxhZGVBcGlTZXQpO1xuICAgICAgICAgICAgdGhpcy5wb29sXyA9IHBvb2w7XG4gICAgICAgICAgICBjb25zdCByYWNrID0gdGhpcy5jb250cm9sbGVyXy5yYWNrO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uUmFja0FkZF8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uUmFja1JlbW92ZV8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdpbnB1dGNoYW5nZScsIHRoaXMub25SYWNrSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignbW9uaXRvcnVwZGF0ZScsIHRoaXMub25SYWNrTW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgcmFjay5jaGlsZHJlbi5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VXBBcGlfKGJjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnJhY2suY2hpbGRyZW4ubWFwKChiYykgPT4gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgYmMpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gb3B0X3BhcmFtcyAhPT0gbnVsbCAmJiBvcHRfcGFyYW1zICE9PSB2b2lkIDAgPyBvcHRfcGFyYW1zIDoge307XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBvb2xfLmNyZWF0ZUlucHV0KGRvYywgY3JlYXRlQmluZGluZ1RhcmdldChvYmplY3QsIGtleSwgcGFyYW1zLnByZXNldEtleSksIHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSBuZXcgSW5wdXRCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChhcGksIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gb3B0X3BhcmFtcyAhPT0gbnVsbCAmJiBvcHRfcGFyYW1zICE9PSB2b2lkIDAgPyBvcHRfcGFyYW1zIDoge307XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBvb2xfLmNyZWF0ZU1vbml0b3IoZG9jLCBjcmVhdGVCaW5kaW5nVGFyZ2V0KG9iamVjdCwga2V5KSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IG5ldyBNb25pdG9yQmluZGluZ0FwaShiYyk7XG4gICAgICAgICAgICByZXR1cm4gZm9yY2VDYXN0KHRoaXMuYWRkKGFwaSwgcGFyYW1zLmluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRm9sZGVyKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGFkZEZvbGRlckFzQmxhZGUodGhpcywgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCdXR0b24ocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkQnV0dG9uQXNCbGFkZSh0aGlzLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkU2VwYXJhdG9yQXNCbGFkZSh0aGlzLCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUYWIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkVGFiQXNCbGFkZSh0aGlzLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZChhcGksIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrLmFkZChhcGkuY29udHJvbGxlcl8sIG9wdF9pbmRleCk7XG4gICAgICAgICAgICBjb25zdCBnYXBpID0gdGhpcy5hcGlTZXRfLmZpbmQoKGEpID0+IGEuY29udHJvbGxlcl8gPT09IGFwaS5jb250cm9sbGVyXyk7XG4gICAgICAgICAgICBpZiAoZ2FwaSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5yZW1vdmUoZ2FwaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFwaVNldF8uYWRkKGFwaSk7XG4gICAgICAgICAgICByZXR1cm4gYXBpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShhcGkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmFjay5yZW1vdmUoYXBpLmNvbnRyb2xsZXJfKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCbGFkZShwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucG9vbF8uY3JlYXRlQmxhZGUoZG9jLCBwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wb29sXy5jcmVhdGVCbGFkZUFwaShiYyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoYXBpLCBwYXJhbXMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBzZXRVcEFwaV8oYmMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMuYXBpU2V0Xy5maW5kKChhcGkpID0+IGFwaS5jb250cm9sbGVyXyA9PT0gYmMpO1xuICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwaVNldF8uYWRkKHRoaXMucG9vbF8uY3JlYXRlQmxhZGVBcGkoYmMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblJhY2tBZGRfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLnNldFVwQXBpXyhldi5ibGFkZUNvbnRyb2xsZXIpO1xuICAgICAgICB9XG4gICAgICAgIG9uUmFja1JlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGlmIChldi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcGkgPSBnZXRBcGlCeUNvbnRyb2xsZXIodGhpcy5hcGlTZXRfLCBldi5ibGFkZUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5yZW1vdmUoYXBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblJhY2tJbnB1dENoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gZXYuYmxhZGVDb250cm9sbGVyO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGJjKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gYmMuYmluZGluZztcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KGFwaSwgZm9yY2VDYXN0KGJpbmRpbmcudGFyZ2V0LnJlYWQoKSksIGJpbmRpbmcudGFyZ2V0LnByZXNldEtleSwgZXYub3B0aW9ucy5sYXN0KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcGkgPSBnZXRBcGlCeUNvbnRyb2xsZXIodGhpcy5hcGlTZXRfLCBiYyk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudChhcGksIGJjLnZhbHVlLnJhd1ZhbHVlLCB1bmRlZmluZWQsIGV2Lm9wdGlvbnMubGFzdCksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrTW9uaXRvclVwZGF0ZV8oZXYpIHtcbiAgICAgICAgICAgIGlmICghKGV2LmJsYWRlQ29udHJvbGxlciBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhcGkgPSBnZXRBcGlCeUNvbnRyb2xsZXIodGhpcy5hcGlTZXRfLCBldi5ibGFkZUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGV2LmJsYWRlQ29udHJvbGxlci5iaW5kaW5nO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCd1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcFVwZGF0ZUV2ZW50KGFwaSwgZm9yY2VDYXN0KGJpbmRpbmcudGFyZ2V0LnJlYWQoKSksIGJpbmRpbmcudGFyZ2V0LnByZXNldEtleSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEZvbGRlckFwaSBleHRlbmRzIFJhY2tMaWtlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlciwgcG9vbCkge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlciwgbmV3IFJhY2tBcGkoY29udHJvbGxlci5yYWNrQ29udHJvbGxlciwgcG9vbCkpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmZvbGRhYmxlXG4gICAgICAgICAgICAgICAgLnZhbHVlKCdleHBhbmRlZCcpXG4gICAgICAgICAgICAgICAgLmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnZm9sZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcEZvbGRFdmVudCh0aGlzLCBldi5zZW5kZXIucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLm9uKCd1cGRhdGUnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGV4cGFuZGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8uZm9sZGFibGUuZ2V0KCdleHBhbmRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBleHBhbmRlZChleHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5mb2xkYWJsZS5zZXQoJ2V4cGFuZGVkJywgZXhwYW5kZWQpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB0aXRsZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgndGl0bGUnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgdGl0bGUodGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCd0aXRsZScsIHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICBhZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkSW5wdXQob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZE1vbml0b3Iob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZE1vbml0b3Iob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEZvbGRlcihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEZvbGRlcihwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJ1dHRvbihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEJ1dHRvbihwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRTZXBhcmF0b3Iob3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkVGFiKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkVGFiKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGFwaSwgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGQoYXBpLCBvcHRfaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShhcGkpIHtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ucmVtb3ZlKGFwaSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQmxhZGUocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRCbGFkZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFJhY2tMaWtlQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgICAgIGJsYWRlOiBjb25maWcuYmxhZGUsXG4gICAgICAgICAgICAgICAgdmlldzogY29uZmlnLnZpZXcsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcucmFja0NvbnRyb2xsZXIudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhY2tDb250cm9sbGVyID0gY29uZmlnLnJhY2tDb250cm9sbGVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUGxhaW5WaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IENsYXNzTmFtZShjb25maWcudmlld05hbWUpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRJbnB1dEJpbmRpbmdDb250cm9sbGVyKGJjcywgYikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJjcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBiY3NbaV07XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyICYmIGJjLmJpbmRpbmcgPT09IGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIoYmNzLCBiKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGJjc1tpXTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciAmJiBiYy5iaW5kaW5nID09PSBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kVmFsdWVCbGFkZUNvbnRyb2xsZXIoYmNzLCB2KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGJjc1tpXTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIFZhbHVlQmxhZGVDb250cm9sbGVyICYmIGJjLnZhbHVlID09PSB2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kU3ViUmFjayhiYykge1xuICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBSYWNrQ29udHJvbGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIGJjLnJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgUmFja0xpa2VDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYmMucmFja0NvbnRyb2xsZXIucmFjaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZFN1YkJsYWRlQ29udHJvbGxlclNldChiYykge1xuICAgICAgICBjb25zdCByYWNrID0gZmluZFN1YlJhY2soYmMpO1xuICAgICAgICByZXR1cm4gcmFjayA/IHJhY2tbJ2JjU2V0XyddIDogbnVsbDtcbiAgICB9XG4gICAgY2xhc3MgQmxhZGVSYWNrIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdGhpcy5vbkJsYWRlUG9zaXRpb25zQ2hhbmdlXyA9IHRoaXMub25CbGFkZVBvc2l0aW9uc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TZXRBZGRfID0gdGhpcy5vblNldEFkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TZXRSZW1vdmVfID0gdGhpcy5vblNldFJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZERpc3Bvc2VfID0gdGhpcy5vbkNoaWxkRGlzcG9zZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZFBvc2l0aW9uc0NoYW5nZV8gPSB0aGlzLm9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8gPSB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfID0gdGhpcy5vbkNoaWxkTW9uaXRvclVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXyA9IHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkVmlld1Byb3BzQ2hhbmdlXyA9IHRoaXMub25DaGlsZFZpZXdQcm9wc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25EZXNjZW5kYW50TGF5b3V0XyA9IHRoaXMub25EZXNjZW5kYW50TGF5b3V0Xy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8gPSB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyA9XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYmxhZGVfID0gKF9hID0gY29uZmlnLmJsYWRlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xuICAgICAgICAgICAgKF9iID0gdGhpcy5ibGFkZV8pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi52YWx1ZSgncG9zaXRpb25zJykuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkJsYWRlUG9zaXRpb25zQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmJjU2V0XyA9IG5ldyBOZXN0ZWRPcmRlcmVkU2V0KGZpbmRTdWJCbGFkZUNvbnRyb2xsZXJTZXQpO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uZW1pdHRlci5vbignYWRkJywgdGhpcy5vblNldEFkZF8pO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblNldFJlbW92ZV8pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJjU2V0Xy5pdGVtcztcbiAgICAgICAgfVxuICAgICAgICBhZGQoYmMsIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgKF9hID0gYmMucGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVtb3ZlKGJjKTtcbiAgICAgICAgICAgIGlmIChpc1Byb3BlcnR5V3JpdGFibGUoYmMsICdwYXJlbnQnKSkge1xuICAgICAgICAgICAgICAgIGJjLnBhcmVudCA9IHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBiY1sncGFyZW50XyddID0gdGhpcztcbiAgICAgICAgICAgICAgICB3YXJuTWlzc2luZyh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogJ3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogJ0JsYWRlQ29udHJvbGxlcicsXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlOiAnQmxhZGVSYWNrLmFkZCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5hZGQoYmMsIG9wdF9pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGJjKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eVdyaXRhYmxlKGJjLCAncGFyZW50JykpIHtcbiAgICAgICAgICAgICAgICBiYy5wYXJlbnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYmNbJ3BhcmVudF8nXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgd2Fybk1pc3Npbmcoe1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6ICdCbGFkZUNvbnRyb2xsZXInLFxuICAgICAgICAgICAgICAgICAgICBwbGFjZTogJ0JsYWRlUmFjay5yZW1vdmUnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5iY1NldF8ucmVtb3ZlKGJjKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5kKGNvbnRyb2xsZXJDbGFzcykge1xuICAgICAgICAgICAgcmV0dXJuIGZvcmNlQ2FzdCh0aGlzLmJjU2V0Xy5hbGxJdGVtcygpLmZpbHRlcigoYmMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmMgaW5zdGFuY2VvZiBjb250cm9sbGVyQ2xhc3M7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgb25TZXRBZGRfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgICAgIGNvbnN0IGlzUm9vdCA9IGV2LnRhcmdldCA9PT0gZXYucm9vdDtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdhZGQnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIGluZGV4OiBldi5pbmRleCxcbiAgICAgICAgICAgICAgICBpc1Jvb3Q6IGlzUm9vdCxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaXNSb290KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmMgPSBldi5pdGVtO1xuICAgICAgICAgICAgYmMudmlld1Byb3BzLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGlsZFZpZXdQcm9wc0NoYW5nZV8pO1xuICAgICAgICAgICAgYmMuYmxhZGVcbiAgICAgICAgICAgICAgICAudmFsdWUoJ3Bvc2l0aW9ucycpXG4gICAgICAgICAgICAgICAgLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGlsZFBvc2l0aW9uc0NoYW5nZV8pO1xuICAgICAgICAgICAgYmMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UodGhpcy5vbkNoaWxkRGlzcG9zZV8pO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLmJpbmRpbmcuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMuYmluZGluZy5lbWl0dGVyLm9uKCd1cGRhdGUnLCB0aGlzLm9uQ2hpbGRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIFZhbHVlQmxhZGVDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhY2sgPSBmaW5kU3ViUmFjayhiYyk7XG4gICAgICAgICAgICAgICAgaWYgKHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1pdHRlciA9IHJhY2suZW1pdHRlcjtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vbignbGF5b3V0JywgdGhpcy5vbkRlc2NlbmRhbnRMYXlvdXRfKTtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vbignaW5wdXRjaGFuZ2UnLCB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub24oJ21vbml0b3J1cGRhdGUnLCB0aGlzLm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25TZXRSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgICAgIGNvbnN0IGlzUm9vdCA9IGV2LnRhcmdldCA9PT0gZXYucm9vdDtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdyZW1vdmUnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIGlzUm9vdDogaXNSb290LFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYyA9IGV2Lml0ZW07XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMuYmluZGluZy5lbWl0dGVyLm9mZignY2hhbmdlJywgdGhpcy5vbkNoaWxkSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMuYmluZGluZy5lbWl0dGVyLm9mZigndXBkYXRlJywgdGhpcy5vbkNoaWxkTW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBWYWx1ZUJsYWRlQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLnZhbHVlLmVtaXR0ZXIub2ZmKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRWYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFjayA9IGZpbmRTdWJSYWNrKGJjKTtcbiAgICAgICAgICAgICAgICBpZiAocmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gcmFjay5lbWl0dGVyO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9mZignbGF5b3V0JywgdGhpcy5vbkRlc2NlbmRhbnRMYXlvdXRfKTtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vZmYoJ2lucHV0Y2hhbmdlJywgdGhpcy5vbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9mZignbW9uaXRvcnVwZGF0ZScsIHRoaXMub25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVQb3NpdGlvbnNfKCkge1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZUl0ZW1zID0gdGhpcy5iY1NldF8uaXRlbXMuZmlsdGVyKChiYykgPT4gIWJjLnZpZXdQcm9wcy5nZXQoJ2hpZGRlbicpKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0VmlzaWJsZUl0ZW0gPSB2aXNpYmxlSXRlbXNbMF07XG4gICAgICAgICAgICBjb25zdCBsYXN0VmlzaWJsZUl0ZW0gPSB2aXNpYmxlSXRlbXNbdmlzaWJsZUl0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uaXRlbXMuZm9yRWFjaCgoYmMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChiYyA9PT0gZmlyc3RWaXNpYmxlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCdmaXJzdCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYmxhZGVfIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJsYWRlXy5nZXQoJ3Bvc2l0aW9ucycpLmluY2x1ZGVzKCd2ZXJ5Zmlyc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHMucHVzaCgndmVyeWZpcnN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJjID09PSBsYXN0VmlzaWJsZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcHMucHVzaCgnbGFzdCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYmxhZGVfIHx8IHRoaXMuYmxhZGVfLmdldCgncG9zaXRpb25zJykuaW5jbHVkZXMoJ3ZlcnlsYXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzLnB1c2goJ3ZlcnlsYXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYmMuYmxhZGUuc2V0KCdwb3NpdGlvbnMnLCBwcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkUG9zaXRpb25zQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2xheW91dCcsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkVmlld1Byb3BzQ2hhbmdlXyhfZXYpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2xheW91dCcsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkRGlzcG9zZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNwb3NlZFVjcyA9IHRoaXMuYmNTZXRfLml0ZW1zLmZpbHRlcigoYmMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmMudmlld1Byb3BzLmdldCgnZGlzcG9zZWQnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlzcG9zZWRVY3MuZm9yRWFjaCgoYmMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJjU2V0Xy5yZW1vdmUoYmMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZElucHV0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBmaW5kSW5wdXRCaW5kaW5nQ29udHJvbGxlcih0aGlzLmZpbmQoSW5wdXRCaW5kaW5nQ29udHJvbGxlciksIGV2LnNlbmRlcik7XG4gICAgICAgICAgICBpZiAoIWJjKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdpbnB1dGNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGJjLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZE1vbml0b3JVcGRhdGVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGZpbmRNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIodGhpcy5maW5kKE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciksIGV2LnNlbmRlcik7XG4gICAgICAgICAgICBpZiAoIWJjKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb25pdG9ydXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogYmMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZFZhbHVlQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBmaW5kVmFsdWVCbGFkZUNvbnRyb2xsZXIodGhpcy5maW5kKFZhbHVlQmxhZGVDb250cm9sbGVyKSwgZXYuc2VuZGVyKTtcbiAgICAgICAgICAgIGlmICghYmMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2lucHV0Y2hhbmdlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogYmMsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXYub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkRlc2NlbmRhbnRMYXlvdXRfKF8pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2xheW91dCcsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdpbnB1dGNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2LmJsYWRlQ29udHJvbGxlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBldi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbW9uaXRvcnVwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2LmJsYWRlQ29udHJvbGxlcixcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkJsYWRlUG9zaXRpb25zQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUmFja0NvbnRyb2xsZXIgZXh0ZW5kcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHZpZXc6IG5ldyBQbGFpblZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiAnYnJrJyxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pIH0pKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrQWRkXyA9IHRoaXMub25SYWNrQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tSZW1vdmVfID0gdGhpcy5vblJhY2tSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCByYWNrID0gbmV3IEJsYWRlUmFjayh7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5yb290ID8gdW5kZWZpbmVkIDogY29uZmlnLmJsYWRlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uUmFja0FkZF8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uUmFja1JlbW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5yYWNrID0gcmFjaztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnJhY2suY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnJhY2suY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgIGJjLnZpZXdQcm9wcy5zZXQoJ2Rpc3Bvc2VkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrQWRkXyhldikge1xuICAgICAgICAgICAgaWYgKCFldi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnNlcnRFbGVtZW50QXQodGhpcy52aWV3LmVsZW1lbnQsIGV2LmJsYWRlQ29udHJvbGxlci52aWV3LmVsZW1lbnQsIGV2LmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBvblJhY2tSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICBpZiAoIWV2LmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbW92ZUVsZW1lbnQoZXYuYmxhZGVDb250cm9sbGVyLnZpZXcuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBibGFkZUNvbnRhaW5lckNsYXNzTmFtZSA9IENsYXNzTmFtZSgnY250Jyk7XG5cbiAgICBjbGFzcyBGb2xkZXJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lXyA9IENsYXNzTmFtZSgoX2EgPSBjb25maWcudmlld05hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdmbGQnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygpLCBibGFkZUNvbnRhaW5lckNsYXNzTmFtZSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXyA9IGNvbmZpZy5mb2xkYWJsZTtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfLmJpbmRFeHBhbmRlZENsYXNzKHRoaXMuZWxlbWVudCwgdGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ2V4cGFuZGVkJykpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMuZm9sZGFibGVfLCAnY29tcGxldGVkJywgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIHRoaXMuY2xhc3NOYW1lXyh1bmRlZmluZWQsICdjcGwnKSkpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oJ2InKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAoY29uZmlnLnByb3BzLCAndGl0bGUnLCAodGl0bGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSh0aXRsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ25vdCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuY2xhc3NOYW1lXyh1bmRlZmluZWQsICdub3QnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICBjb25zdCBpbmRlbnRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaW5kZW50RWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygnaScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbmRlbnRFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRpdGxlRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygndCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQoY29uZmlnLnByb3BzLnZhbHVlKCd0aXRsZScpLCB0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya0VsZW0uY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oJ20nKSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya0VsZW0pO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbSA9IGNvbmZpZy5jb250YWluZXJFbGVtZW50O1xuICAgICAgICAgICAgY29udGFpbmVyRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygnYycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lckVsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBGb2xkZXJDb250cm9sbGVyIGV4dGVuZHMgUmFja0xpa2VDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGZvbGRhYmxlID0gRm9sZGFibGUuY3JlYXRlKChfYSA9IGNvbmZpZy5leHBhbmRlZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCByYyA9IG5ldyBSYWNrQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogY29uZmlnLmJsYWRlLFxuICAgICAgICAgICAgICAgIHJvb3Q6IGNvbmZpZy5yb290LFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHJhY2tDb250cm9sbGVyOiByYywgdmlldzogbmV3IEZvbGRlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQ6IHJjLnZpZXcuZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZm9sZGFibGU6IGZvbGRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICB2aWV3TmFtZTogY29uZmlnLnJvb3QgPyAncm90JyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pIH0pKTtcbiAgICAgICAgICAgIHRoaXMub25UaXRsZUNsaWNrXyA9IHRoaXMub25UaXRsZUNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGUgPSBmb2xkYWJsZTtcbiAgICAgICAgICAgIGJpbmRGb2xkYWJsZSh0aGlzLmZvbGRhYmxlLCB0aGlzLnZpZXcuY29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnJhY2tDb250cm9sbGVyLnJhY2suZW1pdHRlci5vbignYWRkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9sZGFibGUuY2xlYW5VcFRyYW5zaXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlci5yYWNrLmVtaXR0ZXIub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRhYmxlLmNsZWFuVXBUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vblRpdGxlQ2xpY2tfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZG9jdW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBvblRpdGxlQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZS5zZXQoJ2V4cGFuZGVkJywgIXRoaXMuZm9sZGFibGUuZ2V0KCdleHBhbmRlZCcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IEZvbGRlckJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ2ZvbGRlcicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHAucmVxdWlyZWQuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ2ZvbGRlcicpLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9sZGVyQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGFyZ3MucGFyYW1zLmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGFyZ3MucGFyYW1zLnRpdGxlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIEZvbGRlckNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRlckFwaShhcmdzLmNvbnRyb2xsZXIsIGFyZ3MucG9vbCk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIgZXh0ZW5kcyBWYWx1ZUJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3UHJvcHMgPSBjb25maWcudmFsdWVDb250cm9sbGVyLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyB2YWx1ZTogY29uZmlnLnZhbHVlQ29udHJvbGxlci52YWx1ZSwgdmlldzogbmV3IExhYmVsVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB2aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksIHZpZXdQcm9wczogdmlld1Byb3BzIH0pKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ29udHJvbGxlciA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICB0aGlzLnZpZXcudmFsdWVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudmFsdWVDb250cm9sbGVyLnZpZXcuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTZXBhcmF0b3JBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJG0gPSBDbGFzc05hbWUoJ3NwcicpO1xuICAgIGNsYXNzIFNlcGFyYXRvclZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG0oKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaHJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2hyJyk7XG4gICAgICAgICAgICBockVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbSgncicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChockVsZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2VwYXJhdG9yQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgdmlldzogbmV3IFNlcGFyYXRvclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBTZXBhcmF0b3JCbGFkZVBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdzZXBhcmF0b3InLFxuICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ3NlcGFyYXRvcicpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8geyBwYXJhbXM6IHJlc3VsdCB9IDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlcGFyYXRvckNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIFNlcGFyYXRvckNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlcGFyYXRvckFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkbCA9IENsYXNzTmFtZSgndGJpJyk7XG4gICAgY2xhc3MgVGFiSXRlbVZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGwoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKGNvbmZpZy5wcm9wcywgJ3NlbGVjdGVkJywgKHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRsKHVuZGVmaW5lZCwgJ3NlbCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSRsKHVuZGVmaW5lZCwgJ3NlbCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGwoJ2InKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICBjb25zdCB0aXRsZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aXRsZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbCgndCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQoY29uZmlnLnByb3BzLnZhbHVlKCd0aXRsZScpLCB0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYkl0ZW1Db250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tfID0gdGhpcy5vbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBUYWJJdGVtVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tfKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjbGljaycsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYlBhZ2VDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25JdGVtQ2xpY2tfID0gdGhpcy5vbkl0ZW1DbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaWNfID0gbmV3IFRhYkl0ZW1Db250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcuaXRlbVByb3BzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmljXy5lbWl0dGVyLm9uKCdjbGljaycsIHRoaXMub25JdGVtQ2xpY2tfKTtcbiAgICAgICAgICAgIHRoaXMuY2NfID0gbmV3IFJhY2tDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBjcmVhdGVCbGFkZSgpLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMucHJvcHMsICdzZWxlY3RlZCcsIChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNvbnRyb2xsZXIucHJvcHMuc2V0KCdzZWxlY3RlZCcsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDb250cm9sbGVyLnZpZXdQcm9wcy5zZXQoJ2hpZGRlbicsICFzZWxlY3RlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXRlbUNvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pY187XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNvbnRlbnRDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2NfO1xuICAgICAgICB9XG4gICAgICAgIG9uSXRlbUNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0KCdzZWxlY3RlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgVGFiUGFnZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIGNvbnRlbnRSYWNrQXBpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfID0gY29udHJvbGxlcjtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8gPSBjb250ZW50UmFja0FwaTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGl0bGUoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5jb250cm9sbGVyXy5pdGVtQ29udHJvbGxlci5wcm9wcy5nZXQoJ3RpdGxlJykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgICAgICB9XG4gICAgICAgIHNldCB0aXRsZSh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5pdGVtQ29udHJvbGxlci5wcm9wcy5zZXQoJ3RpdGxlJywgdGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzZWxlY3RlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgc2VsZWN0ZWQoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdzZWxlY3RlZCcsIHNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICBhZGRCdXR0b24ocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRCdXR0b24ocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRGb2xkZXIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRGb2xkZXIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRTZXBhcmF0b3Iob3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRhYihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFRhYihwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZChhcGksIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5hZGQoYXBpLCBvcHRfaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShhcGkpIHtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ucmVtb3ZlKGFwaSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkSW5wdXQob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCbGFkZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEJsYWRlKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJBcGkgZXh0ZW5kcyBSYWNrTGlrZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHBvb2wpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIG5ldyBSYWNrQXBpKGNvbnRyb2xsZXIucmFja0NvbnRyb2xsZXIsIHBvb2wpKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlQWRkXyA9IHRoaXMub25QYWdlQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VSZW1vdmVfID0gdGhpcy5vblBhZ2VSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0XyA9IHRoaXMub25TZWxlY3RfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMucGFnZUFwaU1hcF8gPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLm9uKCd1cGRhdGUnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnRhYi5zZWxlY3RlZEluZGV4LmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25TZWxlY3RfKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucGFnZVNldC5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uUGFnZUFkZF8pO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wYWdlU2V0LmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25QYWdlUmVtb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnBhZ2VTZXQuaXRlbXMuZm9yRWFjaCgocGMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVwUGFnZUFwaV8ocGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBhZ2VzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucGFnZVNldC5pdGVtcy5tYXAoKHBjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wYWdlQXBpTWFwXy5nZXQocGMpO1xuICAgICAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFkZFBhZ2UocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgcGMgPSBuZXcgVGFiUGFnZUNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgaXRlbVByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFyYW1zLnRpdGxlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmFkZChwYywgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucGFnZUFwaU1hcF8uZ2V0KHBjKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVQYWdlKGluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJlbW92ZShpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHNldFVwUGFnZUFwaV8ocGMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhY2tBcGkgPSB0aGlzLnJhY2tBcGlfWydhcGlTZXRfJ10uZmluZCgoYXBpKSA9PiBhcGkuY29udHJvbGxlcl8gPT09IHBjLmNvbnRlbnRDb250cm9sbGVyKTtcbiAgICAgICAgICAgIGlmICghcmFja0FwaSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IG5ldyBUYWJQYWdlQXBpKHBjLCByYWNrQXBpKTtcbiAgICAgICAgICAgIHRoaXMucGFnZUFwaU1hcF8uc2V0KHBjLCBhcGkpO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFnZUFkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBQYWdlQXBpXyhldi5pdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZ2VSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLnBhZ2VBcGlNYXBfLmdldChldi5pdGVtKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWdlQXBpTWFwXy5kZWxldGUoZXYuaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgb25TZWxlY3RfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3NlbGVjdCcsIHtcbiAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwVGFiU2VsZWN0RXZlbnQodGhpcywgZXYucmF3VmFsdWUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBJTkRFWF9OT1RfU0VMRUNURUQgPSAtMTtcbiAgICBjbGFzcyBUYWIge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMub25JdGVtU2VsZWN0ZWRDaGFuZ2VfID0gdGhpcy5vbkl0ZW1TZWxlY3RlZENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHkgPSBjcmVhdGVWYWx1ZSh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGNyZWF0ZVZhbHVlKElOREVYX05PVF9TRUxFQ1RFRCk7XG4gICAgICAgICAgICB0aGlzLml0ZW1zXyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGFkZChpdGVtLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3B0X2luZGV4ICE9PSBudWxsICYmIG9wdF9pbmRleCAhPT0gdm9pZCAwID8gb3B0X2luZGV4IDogdGhpcy5pdGVtc18ubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5pdGVtc18uc3BsaWNlKGluZGV4LCAwLCBpdGVtKTtcbiAgICAgICAgICAgIGl0ZW0uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkl0ZW1TZWxlY3RlZENoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5rZWVwU2VsZWN0aW9uXygpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShpdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbXNfLmluZGV4T2YoaXRlbSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pdGVtc18uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGl0ZW0uZW1pdHRlci5vZmYoJ2NoYW5nZScsIHRoaXMub25JdGVtU2VsZWN0ZWRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMua2VlcFNlbGVjdGlvbl8oKTtcbiAgICAgICAgfVxuICAgICAgICBrZWVwU2VsZWN0aW9uXygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zXy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXgucmF3VmFsdWUgPSBJTkRFWF9OT1RfU0VMRUNURUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5lbXB0eS5yYXdWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlyc3RTZWxJbmRleCA9IHRoaXMuaXRlbXNfLmZpbmRJbmRleCgocykgPT4gcy5yYXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoZmlyc3RTZWxJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXy5mb3JFYWNoKChzLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHMucmF3VmFsdWUgPSBpID09PSAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5yYXdWYWx1ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXy5mb3JFYWNoKChzLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHMucmF3VmFsdWUgPSBpID09PSBmaXJzdFNlbEluZGV4O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5yYXdWYWx1ZSA9IGZpcnN0U2VsSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtcHR5LnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb25JdGVtU2VsZWN0ZWRDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYucmF3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbXNfLmZpbmRJbmRleCgocykgPT4gcyA9PT0gZXYuc2VuZGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXy5mb3JFYWNoKChzLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHMucmF3VmFsdWUgPSBpID09PSBpbmRleDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXgucmF3VmFsdWUgPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMua2VlcFNlbGVjdGlvbl8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRrID0gQ2xhc3NOYW1lKCd0YWInKTtcbiAgICBjbGFzcyBUYWJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRrKCksIGJsYWRlQ29udGFpbmVyQ2xhc3NOYW1lKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZShjb25maWcuZW1wdHksIHZhbHVlVG9DbGFzc05hbWUodGhpcy5lbGVtZW50LCBjbGFzc05hbWUkayh1bmRlZmluZWQsICdub3AnKSkpO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGl0bGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGsoJ3QnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGl0bGVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNFbGVtZW50ID0gdGl0bGVFbGVtO1xuICAgICAgICAgICAgY29uc3QgaW5kZW50RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGluZGVudEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaygnaScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbmRlbnRFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzRWxlbSA9IGNvbmZpZy5jb250ZW50c0VsZW1lbnQ7XG4gICAgICAgICAgICBjb250ZW50c0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaygnYycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250ZW50c0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50c0VsZW1lbnQgPSBjb250ZW50c0VsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJDb250cm9sbGVyIGV4dGVuZHMgUmFja0xpa2VDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNyID0gbmV3IFJhY2tDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBjb25maWcuYmxhZGUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB0YWIgPSBuZXcgVGFiKCk7XG4gICAgICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICByYWNrQ29udHJvbGxlcjogY3IsXG4gICAgICAgICAgICAgICAgdmlldzogbmV3IFRhYlZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzRWxlbWVudDogY3Iudmlldy5lbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBlbXB0eTogdGFiLmVtcHR5LFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlQWRkXyA9IHRoaXMub25QYWdlQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VSZW1vdmVfID0gdGhpcy5vblBhZ2VSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfID0gbmV3IE5lc3RlZE9yZGVyZWRTZXQoKCkgPT4gbnVsbCk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25QYWdlQWRkXyk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25QYWdlUmVtb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnRhYiA9IHRhYjtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcGFnZVNldCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VTZXRfO1xuICAgICAgICB9XG4gICAgICAgIGFkZChwYywgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLmFkZChwYywgb3B0X2luZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8ucmVtb3ZlKHRoaXMucGFnZVNldF8uaXRlbXNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZ2VBZGRfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBwYyA9IGV2Lml0ZW07XG4gICAgICAgICAgICBpbnNlcnRFbGVtZW50QXQodGhpcy52aWV3Lml0ZW1zRWxlbWVudCwgcGMuaXRlbUNvbnRyb2xsZXIudmlldy5lbGVtZW50LCBldi5pbmRleCk7XG4gICAgICAgICAgICBwYy5pdGVtQ29udHJvbGxlci52aWV3UHJvcHMuc2V0KCdwYXJlbnQnLCB0aGlzLnZpZXdQcm9wcyk7XG4gICAgICAgICAgICB0aGlzLnJhY2tDb250cm9sbGVyLnJhY2suYWRkKHBjLmNvbnRlbnRDb250cm9sbGVyLCBldi5pbmRleCk7XG4gICAgICAgICAgICB0aGlzLnRhYi5hZGQocGMucHJvcHMudmFsdWUoJ3NlbGVjdGVkJykpO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFnZVJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHBjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIHJlbW92ZUVsZW1lbnQocGMuaXRlbUNvbnRyb2xsZXIudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHBjLml0ZW1Db250cm9sbGVyLnZpZXdQcm9wcy5zZXQoJ3BhcmVudCcsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlci5yYWNrLnJlbW92ZShwYy5jb250ZW50Q29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLnRhYi5yZW1vdmUocGMucHJvcHMudmFsdWUoJ3NlbGVjdGVkJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgVGFiQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAndGFiJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBwYWdlczogcC5yZXF1aXJlZC5hcnJheShwLnJlcXVpcmVkLm9iamVjdCh7IHRpdGxlOiBwLnJlcXVpcmVkLnN0cmluZyB9KSksXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgndGFiJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5wYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHBhcmFtczogcmVzdWx0IH07XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBUYWJDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcmdzLnBhcmFtcy5wYWdlcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGMgPSBuZXcgVGFiUGFnZUNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBpdGVtUHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHAudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGMuYWRkKHBjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH0sXG4gICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBUYWJDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJBcGkoYXJncy5jb250cm9sbGVyLCBhcmdzLnBvb2wpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVCbGFkZUNvbnRyb2xsZXIocGx1Z2luLCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IGFjID0gcGx1Z2luLmFjY2VwdChhcmdzLnBhcmFtcyk7XG4gICAgICAgIGlmICghYWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gUGFyYW1zUGFyc2Vycy5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zWydkaXNhYmxlZCddKS52YWx1ZTtcbiAgICAgICAgY29uc3QgaGlkZGVuID0gUGFyYW1zUGFyc2Vycy5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zWydoaWRkZW4nXSkudmFsdWU7XG4gICAgICAgIHJldHVybiBwbHVnaW4uY29udHJvbGxlcih7XG4gICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgIGRvY3VtZW50OiBhcmdzLmRvY3VtZW50LFxuICAgICAgICAgICAgcGFyYW1zOiBmb3JjZUNhc3QoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhYy5wYXJhbXMpLCB7IGRpc2FibGVkOiBkaXNhYmxlZCwgaGlkZGVuOiBoaWRkZW4gfSkpLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBoaWRkZW4sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgTWFudWFsVGlja2VyIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7IH1cbiAgICAgICAgdGljaygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3RpY2snLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbnRlcnZhbFRpY2tlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRfID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRpbWVySWRfID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMub25UaWNrXyA9IHRoaXMub25UaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kb2NfID0gZG9jO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxfID0gaW50ZXJ2YWw7XG4gICAgICAgICAgICB0aGlzLnNldFRpbWVyXygpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkXztcbiAgICAgICAgfVxuICAgICAgICBzZXQgZGlzYWJsZWQoaW5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRfID0gaW5hY3RpdmU7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZF8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJfKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVyXygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJfKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJUaW1lcl8oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lcklkXyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdpbiA9IHRoaXMuZG9jXy5kZWZhdWx0VmlldztcbiAgICAgICAgICAgIGlmICh3aW4pIHtcbiAgICAgICAgICAgICAgICB3aW4uY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVySWRfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZXJJZF8gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVyXygpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lcl8oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVydmFsXyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2luID0gdGhpcy5kb2NfLmRlZmF1bHRWaWV3O1xuICAgICAgICAgICAgaWYgKHdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXJJZF8gPSB3aW4uc2V0SW50ZXJ2YWwodGhpcy5vblRpY2tfLCB0aGlzLmludGVydmFsXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25UaWNrXygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCd0aWNrJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ29tcG9zaXRlQ29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnN0cmFpbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gY29uc3RyYWludHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJhaW50cy5yZWR1Y2UoKHJlc3VsdCwgYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLmNvbnN0cmFpbihyZXN1bHQpO1xuICAgICAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRDb25zdHJhaW50KGMsIGNvbnN0cmFpbnRDbGFzcykge1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvbnN0cmFpbnRDbGFzcykge1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBDb21wb3NpdGVDb25zdHJhaW50KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjLmNvbnN0cmFpbnRzLnJlZHVjZSgodG1wUmVzdWx0LCBzYykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0bXBSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcFJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjIGluc3RhbmNlb2YgY29uc3RyYWludENsYXNzID8gc2MgOiBudWxsO1xuICAgICAgICAgICAgfSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjbGFzcyBEZWZpbml0ZVJhbmdlQ29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBtYXg6IGNvbmZpZy5tYXgsXG4gICAgICAgICAgICAgICAgbWluOiBjb25maWcubWluLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLnZhbHVlcy5nZXQoJ21heCcpO1xuICAgICAgICAgICAgY29uc3QgbWluID0gdGhpcy52YWx1ZXMuZ2V0KCdtaW4nKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgbWluKSwgbWF4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIExpc3RDb25zdHJhaW50IHtcbiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMuZ2V0KCdvcHRpb25zJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gdGhpcy52YWx1ZXMuZ2V0KCdvcHRpb25zJyk7XG4gICAgICAgICAgICBpZiAob3B0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gb3B0cy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgICAgICB9KS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWQgPyB2YWx1ZSA6IG9wdHNbMF0udmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBSYW5nZUNvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgbWF4OiBjb25maWcubWF4LFxuICAgICAgICAgICAgICAgIG1pbjogY29uZmlnLm1pbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5nZXQoJ21heCcpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5nZXQoJ21pbicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy52YWx1ZXMuZ2V0KCdtYXgnKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMudmFsdWVzLmdldCgnbWluJyk7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkobWluKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IE1hdGgubWF4KHJlc3VsdCwgbWluKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNFbXB0eShtYXgpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gTWF0aC5taW4ocmVzdWx0LCBtYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFN0ZXBDb25zdHJhaW50IHtcbiAgICAgICAgY29uc3RydWN0b3Ioc3RlcCwgb3JpZ2luID0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwID0gc3RlcDtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luID0gb3JpZ2luO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgbyA9IHRoaXMub3JpZ2luICUgdGhpcy5zdGVwO1xuICAgICAgICAgICAgY29uc3QgciA9IE1hdGgucm91bmQoKHZhbHVlIC0gbykgLyB0aGlzLnN0ZXApO1xuICAgICAgICAgICAgcmV0dXJuIG8gKyByICogdGhpcy5zdGVwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGogPSBDbGFzc05hbWUoJ2xzdCcpO1xuICAgIGNsYXNzIExpc3RWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzXyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRqKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgICAgICBzZWxlY3RFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGooJ3MnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcy5wcm9wc18sICdvcHRpb25zJywgKG9wdHMpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVDaGlsZEVsZW1lbnRzKHNlbGVjdEVsZW0pO1xuICAgICAgICAgICAgICAgIG9wdHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbS5kYXRhc2V0LmluZGV4ID0gU3RyaW5nKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbS50ZXh0Q29udGVudCA9IGl0ZW0udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbS52YWx1ZSA9IFN0cmluZyhpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbS5hcHBlbmRDaGlsZChvcHRpb25FbGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoc2VsZWN0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VsZWN0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnQgPSBzZWxlY3RFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRqKCdtJykpO1xuICAgICAgICAgICAgbWFya0VsZW0uYXBwZW5kQ2hpbGQoY3JlYXRlU3ZnSWNvbkVsZW1lbnQoZG9jLCAnZHJvcGRvd24nKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya0VsZW0pO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZV8gPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFbGVtZW50LnZhbHVlID0gU3RyaW5nKHRoaXMudmFsdWVfLnJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTGlzdENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdENoYW5nZV8gPSB0aGlzLm9uU2VsZWN0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgTGlzdFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vblNlbGVjdENoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlXyhlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RFbGVtID0gZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCBvcHRFbGVtID0gc2VsZWN0RWxlbS5zZWxlY3RlZE9wdGlvbnMuaXRlbSgwKTtcbiAgICAgICAgICAgIGlmICghb3B0RWxlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IE51bWJlcihvcHRFbGVtLmRhdGFzZXQuaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHRoaXMucHJvcHMuZ2V0KCdvcHRpb25zJylbaXRlbUluZGV4XS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRpID0gQ2xhc3NOYW1lKCdwb3AnKTtcbiAgICBjbGFzcyBQb3B1cFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGkoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgYmluZFZhbHVlKGNvbmZpZy5zaG93cywgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSRpKHVuZGVmaW5lZCwgJ3YnKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUG9wdXBDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd3MgPSBjcmVhdGVWYWx1ZShmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUG9wdXBWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHNob3dzOiB0aGlzLnNob3dzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRoID0gQ2xhc3NOYW1lKCd0eHQnKTtcbiAgICBjbGFzcyBUZXh0VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlXyA9IHRoaXMub25DaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnByb3BzXyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMucHJvcHNfLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGgoJ2knKSk7XG4gICAgICAgICAgICBpbnB1dEVsZW0udHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMucHJvcHNfLmdldCgnZm9ybWF0dGVyJyk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC52YWx1ZSA9IGZvcm1hdHRlcih0aGlzLnZhbHVlXy5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2VfID0gdGhpcy5vbklucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wYXJzZXJfID0gY29uZmlnLnBhcnNlcjtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFRleHRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcucHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgfVxuICAgICAgICBvbklucHV0Q2hhbmdlXyhlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBmb3JjZUNhc3QoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRFbGVtLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnBhcnNlcl8odmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHBhcnNlZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSBwYXJzZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlldy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBib29sVG9TdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJvb2xGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISF2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gQm9vbGVhbkZvcm1hdHRlcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYm9vbFRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICBjbGFzcyBOdW1iZXJMaXRlcmFsTm9kZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZXZhbHVhdGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IEJJTkFSWV9PUEVSQVRJT05fTUFQID0ge1xuICAgICAgICAnKionOiAodjEsIHYyKSA9PiBNYXRoLnBvdyh2MSwgdjIpLFxuICAgICAgICAnKic6ICh2MSwgdjIpID0+IHYxICogdjIsXG4gICAgICAgICcvJzogKHYxLCB2MikgPT4gdjEgLyB2MixcbiAgICAgICAgJyUnOiAodjEsIHYyKSA9PiB2MSAlIHYyLFxuICAgICAgICAnKyc6ICh2MSwgdjIpID0+IHYxICsgdjIsXG4gICAgICAgICctJzogKHYxLCB2MikgPT4gdjEgLSB2MixcbiAgICAgICAgJzw8JzogKHYxLCB2MikgPT4gdjEgPDwgdjIsXG4gICAgICAgICc+Pic6ICh2MSwgdjIpID0+IHYxID4+IHYyLFxuICAgICAgICAnPj4+JzogKHYxLCB2MikgPT4gdjEgPj4+IHYyLFxuICAgICAgICAnJic6ICh2MSwgdjIpID0+IHYxICYgdjIsXG4gICAgICAgICdeJzogKHYxLCB2MikgPT4gdjEgXiB2MixcbiAgICAgICAgJ3wnOiAodjEsIHYyKSA9PiB2MSB8IHYyLFxuICAgIH07XG4gICAgY2xhc3MgQmluYXJ5T3BlcmF0aW9uTm9kZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICAgICAgfVxuICAgICAgICBldmFsdWF0ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wID0gQklOQVJZX09QRVJBVElPTl9NQVBbdGhpcy5vcGVyYXRvcl07XG4gICAgICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGJpbmFyeSBvcGVyYXRvcjogJyR7dGhpcy5vcGVyYXRvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcCh0aGlzLmxlZnQuZXZhbHVhdGUoKSwgdGhpcy5yaWdodC5ldmFsdWF0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgJ2IoJyxcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAnKScsXG4gICAgICAgICAgICBdLmpvaW4oJyAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBVTkFSWV9PUEVSQVRJT05fTUFQID0ge1xuICAgICAgICAnKyc6ICh2KSA9PiB2LFxuICAgICAgICAnLSc6ICh2KSA9PiAtdixcbiAgICAgICAgJ34nOiAodikgPT4gfnYsXG4gICAgfTtcbiAgICBjbGFzcyBVbmFyeU9wZXJhdGlvbk5vZGUge1xuICAgICAgICBjb25zdHJ1Y3RvcihvcGVyYXRvciwgZXhwcikge1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcjtcbiAgICAgICAgfVxuICAgICAgICBldmFsdWF0ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wID0gVU5BUllfT1BFUkFUSU9OX01BUFt0aGlzLm9wZXJhdG9yXTtcbiAgICAgICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgdW5hcnkgb3BlcmF0b3I6ICcke3RoaXMub3BlcmF0b3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3AodGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIFsndSgnLCB0aGlzLm9wZXJhdG9yLCB0aGlzLmV4cHJlc3Npb24udG9TdHJpbmcoKSwgJyknXS5qb2luKCcgJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21iaW5lUmVhZGVyKHBhcnNlcnMpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyc2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlcnNbaV0odGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbSA9IHRleHQuc3Vic3RyKGN1cnNvcikubWF0Y2goL15cXHMrLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWROb25aZXJvRGlnaXQodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGNoID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgcmV0dXJuIGNoLm1hdGNoKC9eWzEtOV0kLykgPyBjaCA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlswLTldKy8pO1xuICAgICAgICByZXR1cm4gKF9hID0gKG0gJiYgbVswXSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkU2lnbmVkSW50ZWdlcih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZHMgPSByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoZHMgIT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbiA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSAxO1xuICAgICAgICBpZiAoc2lnbiAhPT0gJy0nICYmIHNpZ24gIT09ICcrJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNkcyA9IHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChzZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNpZ24gKyBzZHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRFeHBvbmVudFBhcnQodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGUgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgaWYgKGUudG9Mb3dlckNhc2UoKSAhPT0gJ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2kgPSByZWFkU2lnbmVkSW50ZWdlcih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoc2kgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGUgKyBzaTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgY2ggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBpZiAoY2ggPT09ICcwJykge1xuICAgICAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG56ZCA9IHJlYWROb25aZXJvRGlnaXQodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IG56ZC5sZW5ndGg7XG4gICAgICAgIGlmIChuemQgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG56ZCArIHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWREZWNpbWFsTGl0ZXJhbDEodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGRpbCA9IHJlYWREZWNpbWFsSW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IGRpbC5sZW5ndGg7XG4gICAgICAgIGlmIChkaWwgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG90ID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IGRvdC5sZW5ndGg7XG4gICAgICAgIGlmIChkb3QgIT09ICcuJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRkcyA9IHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBkZHMubGVuZ3RoO1xuICAgICAgICByZXR1cm4gZGlsICsgZG90ICsgZGRzICsgcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbExpdGVyYWwyKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBkb3QgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gZG90Lmxlbmd0aDtcbiAgICAgICAgaWYgKGRvdCAhPT0gJy4nKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGRzID0gcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IGRkcy5sZW5ndGg7XG4gICAgICAgIGlmIChkZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvdCArIGRkcyArIHJlYWRFeHBvbmVudFBhcnQodGV4dCwgY3Vyc29yKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZERlY2ltYWxMaXRlcmFsMyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZGlsID0gcmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gZGlsLmxlbmd0aDtcbiAgICAgICAgaWYgKGRpbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlsICsgcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBjb25zdCByZWFkRGVjaW1hbExpdGVyYWwgPSBjb21iaW5lUmVhZGVyKFtcbiAgICAgICAgcmVhZERlY2ltYWxMaXRlcmFsMSxcbiAgICAgICAgcmVhZERlY2ltYWxMaXRlcmFsMixcbiAgICAgICAgcmVhZERlY2ltYWxMaXRlcmFsMyxcbiAgICBdKTtcbiAgICBmdW5jdGlvbiBwYXJzZUJpbmFyeURpZ2l0cyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlswMV0rLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRCaW5hcnlJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAyKTtcbiAgICAgICAgY3Vyc29yICs9IHByZWZpeC5sZW5ndGg7XG4gICAgICAgIGlmIChwcmVmaXgudG9Mb3dlckNhc2UoKSAhPT0gJzBiJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJkcyA9IHBhcnNlQmluYXJ5RGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChiZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGJkcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZE9jdGFsRGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAtN10rLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRPY3RhbEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDIpO1xuICAgICAgICBjdXJzb3IgKz0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgaWYgKHByZWZpeC50b0xvd2VyQ2FzZSgpICE9PSAnMG8nKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2RzID0gcmVhZE9jdGFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChvZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWZpeCArIG9kcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEhleERpZ2l0cyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlswLTlhLWZdKy9pKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEhleEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDIpO1xuICAgICAgICBjdXJzb3IgKz0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgaWYgKHByZWZpeC50b0xvd2VyQ2FzZSgpICE9PSAnMHgnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGRzID0gcmVhZEhleERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoaGRzID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBoZHM7XG4gICAgfVxuICAgIGNvbnN0IHJlYWROb25EZWNpbWFsSW50ZWdlckxpdGVyYWwgPSBjb21iaW5lUmVhZGVyKFtcbiAgICAgICAgcmVhZEJpbmFyeUludGVnZXJMaXRlcmFsLFxuICAgICAgICByZWFkT2N0YWxJbnRlZ2VyTGl0ZXJhbCxcbiAgICAgICAgcmVhZEhleEludGVnZXJMaXRlcmFsLFxuICAgIF0pO1xuICAgIGNvbnN0IHJlYWROdW1lcmljTGl0ZXJhbCA9IGNvbWJpbmVSZWFkZXIoW1xuICAgICAgICByZWFkTm9uRGVjaW1hbEludGVnZXJMaXRlcmFsLFxuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwsXG4gICAgXSk7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUxpdGVyYWwodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IHJlYWROdW1lcmljTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gbnVtLmxlbmd0aDtcbiAgICAgICAgaWYgKG51bSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmFsdWFibGU6IG5ldyBOdW1iZXJMaXRlcmFsTm9kZShudW0pLFxuICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IG9wID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IG9wLmxlbmd0aDtcbiAgICAgICAgaWYgKG9wICE9PSAnKCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4cHIgPSBwYXJzZUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKCFleHByKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjdXJzb3IgPSBleHByLmN1cnNvcjtcbiAgICAgICAgY3Vyc29yICs9IHJlYWRXaGl0ZXNwYWNlKHRleHQsIGN1cnNvcikubGVuZ3RoO1xuICAgICAgICBjb25zdCBjbCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSBjbC5sZW5ndGg7XG4gICAgICAgIGlmIChjbCAhPT0gJyknKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZhbHVhYmxlOiBleHByLmV2YWx1YWJsZSxcbiAgICAgICAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gcGFyc2VMaXRlcmFsKHRleHQsIGN1cnNvcikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlVW5hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBleHByID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoZXhwcikge1xuICAgICAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3AgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gb3AubGVuZ3RoO1xuICAgICAgICBpZiAob3AgIT09ICcrJyAmJiBvcCAhPT0gJy0nICYmIG9wICE9PSAnficpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG51bSA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmICghbnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjdXJzb3IgPSBudW0uY3Vyc29yO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgICAgICBldmFsdWFibGU6IG5ldyBVbmFyeU9wZXJhdGlvbk5vZGUob3AsIG51bS5ldmFsdWFibGUpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQmluYXJ5T3BlcmF0b3Iob3BzLCB0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY3Vyc29yICs9IHJlYWRXaGl0ZXNwYWNlKHRleHQsIGN1cnNvcikubGVuZ3RoO1xuICAgICAgICBjb25zdCBvcCA9IG9wcy5maWx0ZXIoKG9wKSA9PiB0ZXh0LnN0YXJ0c1dpdGgob3AsIGN1cnNvcikpWzBdO1xuICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjdXJzb3IgKz0gb3AubGVuZ3RoO1xuICAgICAgICBjdXJzb3IgKz0gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgICAgICAgIG9wZXJhdG9yOiBvcCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvblBhcnNlcihleHByUGFyc2VyLCBvcHMpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0RXhwciA9IGV4cHJQYXJzZXIodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgIGlmICghZmlyc3RFeHByKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJzb3IgPSBmaXJzdEV4cHIuY3Vyc29yO1xuICAgICAgICAgICAgbGV0IGV4cHIgPSBmaXJzdEV4cHIuZXZhbHVhYmxlO1xuICAgICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gcmVhZEJpbmFyeU9wZXJhdG9yKG9wcywgdGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBvcC5jdXJzb3I7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEV4cHIgPSBleHByUGFyc2VyKHRleHQsIGN1cnNvcik7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0RXhwcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3Vyc29yID0gbmV4dEV4cHIuY3Vyc29yO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgQmluYXJ5T3BlcmF0aW9uTm9kZShvcC5vcGVyYXRvciwgZXhwciwgbmV4dEV4cHIuZXZhbHVhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBleHByXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgICAgICAgICAgICAgICBldmFsdWFibGU6IGV4cHIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uID0gW1xuICAgICAgICBbJyoqJ10sXG4gICAgICAgIFsnKicsICcvJywgJyUnXSxcbiAgICAgICAgWycrJywgJy0nXSxcbiAgICAgICAgWyc8PCcsICc+Pj4nLCAnPj4nXSxcbiAgICAgICAgWycmJ10sXG4gICAgICAgIFsnXiddLFxuICAgICAgICBbJ3wnXSxcbiAgICBdLnJlZHVjZSgocGFyc2VyLCBvcHMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb25QYXJzZXIocGFyc2VyLCBvcHMpO1xuICAgIH0sIHBhcnNlVW5hcnlFeHByZXNzaW9uKTtcbiAgICBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGN1cnNvciArPSByZWFkV2hpdGVzcGFjZSh0ZXh0LCBjdXJzb3IpLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHBhcnNlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUVjbWFOdW1iZXJFeHByZXNzaW9uKHRleHQpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IHBhcnNlRXhwcmVzc2lvbih0ZXh0LCAwKTtcbiAgICAgICAgaWYgKCFleHByKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJzb3IgPSBleHByLmN1cnNvciArIHJlYWRXaGl0ZXNwYWNlKHRleHQsIGV4cHIuY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIGlmIChjdXJzb3IgIT09IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwci5ldmFsdWFibGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VOdW1iZXIodGV4dCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHIgPSBwYXJzZUVjbWFOdW1iZXJFeHByZXNzaW9uKHRleHQpO1xuICAgICAgICByZXR1cm4gKF9hID0gciA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmV2YWx1YXRlKCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG51bWJlckZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHB2ID0gcGFyc2VOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHB2KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU51bWJlckZvcm1hdHRlcihkaWdpdHMpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoTWF0aC5tYXgoTWF0aC5taW4oZGlnaXRzLCAyMCksIDApKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpbm5lckZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcigwKTtcbiAgICBmdW5jdGlvbiBmb3JtYXRQZXJjZW50YWdlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbm5lckZvcm1hdHRlcih2YWx1ZSkgKyAnJSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyaW5nRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1hdFN0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsbEJ1ZmZlcihidWZmZXIsIGJ1ZmZlclNpemUpIHtcbiAgICAgICAgd2hpbGUgKGJ1ZmZlci5sZW5ndGggPCBidWZmZXJTaXplKSB7XG4gICAgICAgICAgICBidWZmZXIucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVCdWZmZXIoYnVmZmVyU2l6ZSkge1xuICAgICAgICBjb25zdCBidWZmZXIgPSBbXTtcbiAgICAgICAgZmlsbEJ1ZmZlcihidWZmZXIsIGJ1ZmZlclNpemUpO1xuICAgICAgICByZXR1cm4gY3JlYXRlVmFsdWUoYnVmZmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlVHJpbW1lZEJ1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBidWZmZXIuaW5kZXhPZih1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gZm9yY2VDYXN0KGluZGV4IDwgMCA/IGJ1ZmZlciA6IGJ1ZmZlci5zbGljZSgwLCBpbmRleCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQdXNoZWRCdWZmZXIoYnVmZmVyLCBuZXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBuZXdCdWZmZXIgPSBbLi4uY3JlYXRlVHJpbW1lZEJ1ZmZlcihidWZmZXIpLCBuZXdWYWx1ZV07XG4gICAgICAgIGlmIChuZXdCdWZmZXIubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV3QnVmZmVyLnNwbGljZSgwLCBuZXdCdWZmZXIubGVuZ3RoIC0gYnVmZmVyLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmaWxsQnVmZmVyKG5ld0J1ZmZlciwgYnVmZmVyLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0J1ZmZlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25uZWN0VmFsdWVzKHsgcHJpbWFyeSwgc2Vjb25kYXJ5LCBmb3J3YXJkLCBiYWNrd2FyZCwgfSkge1xuICAgICAgICBsZXQgY2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gcHJldmVudEZlZWRiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgY2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBwcmltYXJ5LmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgcHJldmVudEZlZWRiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZWNvbmRhcnkuc2V0UmF3VmFsdWUoZm9yd2FyZChwcmltYXJ5LCBzZWNvbmRhcnkpLCBldi5vcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc2Vjb25kYXJ5LmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgcHJldmVudEZlZWRiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwcmltYXJ5LnNldFJhd1ZhbHVlKGJhY2t3YXJkKHByaW1hcnksIHNlY29uZGFyeSksIGV2Lm9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlY29uZGFyeS5zZXRSYXdWYWx1ZShmb3J3YXJkKHByaW1hcnksIHNlY29uZGFyeSksIGV2Lm9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgc2Vjb25kYXJ5LnNldFJhd1ZhbHVlKGZvcndhcmQocHJpbWFyeSwgc2Vjb25kYXJ5KSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBrZXlzKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBiYXNlU3RlcCAqIChrZXlzLmFsdEtleSA/IDAuMSA6IDEpICogKGtleXMuc2hpZnRLZXkgPyAxMCA6IDEpO1xuICAgICAgICBpZiAoa2V5cy51cEtleSkge1xuICAgICAgICAgICAgcmV0dXJuICtzdGVwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleXMuZG93bktleSkge1xuICAgICAgICAgICAgcmV0dXJuIC1zdGVwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgIGRvd25LZXk6IGV2LmtleSA9PT0gJ0Fycm93RG93bicsXG4gICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB1cEtleTogZXYua2V5ID09PSAnQXJyb3dVcCcsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhvcml6b250YWxTdGVwS2V5cyhldikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICBkb3duS2V5OiBldi5rZXkgPT09ICdBcnJvd0xlZnQnLFxuICAgICAgICAgICAgc2hpZnRLZXk6IGV2LnNoaWZ0S2V5LFxuICAgICAgICAgICAgdXBLZXk6IGV2LmtleSA9PT0gJ0Fycm93UmlnaHQnLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1ZlcnRpY2FsQXJyb3dLZXkoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPT09ICdBcnJvd1VwJyB8fCBrZXkgPT09ICdBcnJvd0Rvd24nO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0Fycm93S2V5KGtleSkge1xuICAgICAgICByZXR1cm4gaXNWZXJ0aWNhbEFycm93S2V5KGtleSkgfHwga2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBrZXkgPT09ICdBcnJvd1JpZ2h0JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0JDEoZXYsIGVsZW0pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3Qgd2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgICAgICBjb25zdCByZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGV2LnBhZ2VYIC0gKCgoX2EgPSAod2luICYmIHdpbi5zY3JvbGxYKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMCkgKyByZWN0LmxlZnQpLFxuICAgICAgICAgICAgeTogZXYucGFnZVkgLSAoKChfYiA9ICh3aW4gJiYgd2luLnNjcm9sbFkpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwKSArIHJlY3QudG9wKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2xhc3MgUG9pbnRlckhhbmRsZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RUb3VjaF8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5vbkRvY3VtZW50TW91c2VNb3ZlXyA9IHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Eb2N1bWVudE1vdXNlVXBfID0gdGhpcy5vbkRvY3VtZW50TW91c2VVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Nb3VzZURvd25fID0gdGhpcy5vbk1vdXNlRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaEVuZF8gPSB0aGlzLm9uVG91Y2hFbmRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlXyA9IHRoaXMub25Ub3VjaE1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hTdGFydF8gPSB0aGlzLm9uVG91Y2hTdGFydF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbV8gPSBlbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0Xywge1xuICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmVfLCB7XG4gICAgICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25Ub3VjaEVuZF8pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duXyk7XG4gICAgICAgIH1cbiAgICAgICAgY29tcHV0ZVBvc2l0aW9uXyhvZmZzZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsZW1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3VuZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwb2ludDogb2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogb2Zmc2V0LngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBvZmZzZXQueSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIG9uTW91c2VEb3duXyhldikge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIChfYSA9IGV2LmN1cnJlbnRUYXJnZXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtXy5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnZG93bicsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8oY29tcHV0ZU9mZnNldCQxKGV2LCB0aGlzLmVsZW1fKSksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRG9jdW1lbnRNb3VzZU1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbW92ZScsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8oY29tcHV0ZU9mZnNldCQxKGV2LCB0aGlzLmVsZW1fKSksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRG9jdW1lbnRNb3VzZVVwXyhldikge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtXy5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXAnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKGNvbXB1dGVPZmZzZXQkMShldiwgdGhpcy5lbGVtXykpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblRvdWNoU3RhcnRfKGV2KSB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldi50YXJnZXRUb3VjaGVzLml0ZW0oMCk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdkb3duJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyh0b3VjaFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IHRvdWNoO1xuICAgICAgICB9XG4gICAgICAgIG9uVG91Y2hNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldi50YXJnZXRUb3VjaGVzLml0ZW0oMCk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb3ZlJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyh0b3VjaFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IHRvdWNoO1xuICAgICAgICB9XG4gICAgICAgIG9uVG91Y2hFbmRfKGV2KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB0b3VjaCA9IChfYSA9IGV2LnRhcmdldFRvdWNoZXMuaXRlbSgwKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5sYXN0VG91Y2hfO1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXAnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKHRvdWNoXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogdG91Y2guY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRvdWNoLmNsaWVudFkgLSByZWN0LnRvcCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwUmFuZ2UodmFsdWUsIHN0YXJ0MSwgZW5kMSwgc3RhcnQyLCBlbmQyKSB7XG4gICAgICAgIGNvbnN0IHAgPSAodmFsdWUgLSBzdGFydDEpIC8gKGVuZDEgLSBzdGFydDEpO1xuICAgICAgICByZXR1cm4gc3RhcnQyICsgcCAqIChlbmQyIC0gc3RhcnQyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGVjaW1hbERpZ2l0cyh2YWx1ZSkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKHZhbHVlLnRvRml4ZWQoMTApKTtcbiAgICAgICAgY29uc3QgZnJhYyA9IHRleHQuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgcmV0dXJuIGZyYWMucmVwbGFjZSgvMCskLywgJycpLmxlbmd0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29uc3RyYWluUmFuZ2UodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgbWluKSwgbWF4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbG9vcFJhbmdlKHZhbHVlLCBtYXgpIHtcbiAgICAgICAgcmV0dXJuICgodmFsdWUgJSBtYXgpICsgbWF4KSAlIG1heDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZyA9IENsYXNzTmFtZSgndHh0Jyk7XG4gICAgY2xhc3MgTnVtYmVyVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZV8gPSB0aGlzLm9uQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnByb3BzXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygpLCBjbGFzc05hbWUkZyh1bmRlZmluZWQsICdudW0nKSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmFycmF5UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZyh1bmRlZmluZWQsIGNvbmZpZy5hcnJheVBvc2l0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ2dpbmdDaGFuZ2VfID0gdGhpcy5vbkRyYWdnaW5nQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18gPSBjb25maWcuZHJhZ2dpbmc7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uRHJhZ2dpbmdDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCkpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaScpKTtcbiAgICAgICAgICAgIGNvbnN0IGtub2JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAga25vYkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChrbm9iRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50ID0ga25vYkVsZW07XG4gICAgICAgICAgICBjb25zdCBndWlkZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICAgICAgZ3VpZGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2cnKSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LmFwcGVuZENoaWxkKGd1aWRlRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBib2R5RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAncGF0aCcpO1xuICAgICAgICAgICAgYm9keUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnZ2InKSk7XG4gICAgICAgICAgICBndWlkZUVsZW0uYXBwZW5kQ2hpbGQoYm9keUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUJvZHlFbGVtXyA9IGJvZHlFbGVtO1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3BhdGgnKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2doJykpO1xuICAgICAgICAgICAgZ3VpZGVFbGVtLmFwcGVuZENoaWxkKGhlYWRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVIZWFkRWxlbV8gPSBoZWFkRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWUoJ3R0JykoKSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LmFwcGVuZENoaWxkKHRvb2x0aXBFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fID0gdG9vbHRpcEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uRHJhZ2dpbmdDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYucmF3VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkZyh1bmRlZmluZWQsICdkcmcnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcodW5kZWZpbmVkLCAnZHJnJykpO1xuICAgICAgICAgICAgY29uc3QgeCA9IGV2LnJhd1ZhbHVlIC8gdGhpcy5wcm9wc18uZ2V0KCdkcmFnZ2luZ1NjYWxlJyk7XG4gICAgICAgICAgICBjb25zdCBhb3ggPSB4ICsgKHggPiAwID8gLTEgOiB4IDwgMCA/ICsxIDogMCk7XG4gICAgICAgICAgICBjb25zdCBhZHggPSBjb25zdHJhaW5SYW5nZSgtYW94LCAtNCwgKzQpO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUhlYWRFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZCcsIFtgTSAke2FveCArIGFkeH0sMCBMJHthb3h9LDQgTCR7YW94ICsgYWR4fSw4YCwgYE0gJHt4fSwtMSBMJHt4fSw5YF0uam9pbignICcpKTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVCb2R5RWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCBgTSAwLDQgTCR7eH0sNGApO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5wcm9wc18uZ2V0KCdmb3JtYXR0ZXInKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fLnRleHRDb250ZW50ID0gZm9ybWF0dGVyKHRoaXMudmFsdWUucmF3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwRWxlbV8uc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLnByb3BzXy5nZXQoJ2Zvcm1hdHRlcicpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSBmb3JtYXR0ZXIodGhpcy52YWx1ZS5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBOdW1iZXJUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblJhd1ZhbHVlXyA9IDA7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2VfID0gdGhpcy5vbklucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0S2V5RG93bl8gPSB0aGlzLm9uSW5wdXRLZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0S2V5VXBfID0gdGhpcy5vbklucHV0S2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0ZXBfID0gY29uZmlnLmJhc2VTdGVwO1xuICAgICAgICAgICAgdGhpcy5wYXJzZXJfID0gY29uZmlnLnBhcnNlcjtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnNsaWRlclByb3BzXyA9IChfYSA9IGNvbmZpZy5zbGlkZXJQcm9wcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXyA9IGNyZWF0ZVZhbHVlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IE51bWJlclRleHRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGFycmF5UG9zaXRpb246IGNvbmZpZy5hcnJheVBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIGRyYWdnaW5nOiB0aGlzLmRyYWdnaW5nXyxcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25JbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbklucHV0S2V5RG93bl8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25JbnB1dEtleVVwXyk7XG4gICAgICAgICAgICBjb25zdCBwaCA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcua25vYkVsZW1lbnQpO1xuICAgICAgICAgICAgcGguZW1pdHRlci5vbignZG93bicsIHRoaXMub25Qb2ludGVyRG93bl8pO1xuICAgICAgICAgICAgcGguZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgcGguZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluVmFsdWVfKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgY29uc3QgbWluID0gKF9hID0gdGhpcy5zbGlkZXJQcm9wc18pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXQoJ21pblZhbHVlJyk7XG4gICAgICAgICAgICBjb25zdCBtYXggPSAoX2IgPSB0aGlzLnNsaWRlclByb3BzXykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmdldCgnbWF4VmFsdWUnKTtcbiAgICAgICAgICAgIGxldCB2ID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAobWluICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2ID0gTWF0aC5tYXgodiwgbWluKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHYgPSBNYXRoLm1pbih2LCBtYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dENoYW5nZV8oZSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlucHV0RWxlbS52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy5wYXJzZXJfKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICghaXNFbXB0eShwYXJzZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gdGhpcy5jb25zdHJhaW5WYWx1ZV8ocGFyc2VkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aWV3LnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBvbklucHV0S2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy5jb25zdHJhaW5WYWx1ZV8odGhpcy52YWx1ZS5yYXdWYWx1ZSArIHN0ZXApLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRLZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblJhd1ZhbHVlXyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5yYXdWYWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY29tcHV0ZURyYWdnaW5nVmFsdWVfKGRhdGEpIHtcbiAgICAgICAgICAgIGlmICghZGF0YS5wb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZHggPSBkYXRhLnBvaW50LnggLSBkYXRhLmJvdW5kcy53aWR0aCAvIDI7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJhaW5WYWx1ZV8odGhpcy5vcmlnaW5SYXdWYWx1ZV8gKyBkeCAqIHRoaXMucHJvcHMuZ2V0KCdkcmFnZ2luZ1NjYWxlJykpO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy5jb21wdXRlRHJhZ2dpbmdWYWx1ZV8oZXYuZGF0YSk7XG4gICAgICAgICAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodiwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfLnJhd1ZhbHVlID0gdGhpcy52YWx1ZS5yYXdWYWx1ZSAtIHRoaXMub3JpZ2luUmF3VmFsdWVfO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuY29tcHV0ZURyYWdnaW5nVmFsdWVfKGV2LmRhdGEpO1xuICAgICAgICAgICAgaWYgKHYgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHYsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18ucmF3VmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGYgPSBDbGFzc05hbWUoJ3NsZCcpO1xuICAgIGNsYXNzIFNsaWRlclZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZV8gPSB0aGlzLm9uQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnByb3BzXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCB0cmFja0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0cmFja0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZigndCcpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZFRhYkluZGV4KHRyYWNrRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodHJhY2tFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudHJhY2tFbGVtZW50ID0gdHJhY2tFbGVtO1xuICAgICAgICAgICAgY29uc3Qga25vYkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBrbm9iRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRmKCdrJykpO1xuICAgICAgICAgICAgdGhpcy50cmFja0VsZW1lbnQuYXBwZW5kQ2hpbGQoa25vYkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5rbm9iRWxlbWVudCA9IGtub2JFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgcCA9IGNvbnN0cmFpblJhbmdlKG1hcFJhbmdlKHRoaXMudmFsdWUucmF3VmFsdWUsIHRoaXMucHJvcHNfLmdldCgnbWluVmFsdWUnKSwgdGhpcy5wcm9wc18uZ2V0KCdtYXhWYWx1ZScpLCAwLCAxMDApLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5rbm9iRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3B9JWA7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTbGlkZXJDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbktleVVwXyA9IHRoaXMub25LZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bk9yTW92ZV8gPSB0aGlzLm9uUG9pbnRlckRvd25Pck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmJhc2VTdGVwXyA9IGNvbmZpZy5iYXNlU3RlcDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFNsaWRlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy50cmFja0VsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25Pck1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJEb3duT3JNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcudHJhY2tFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93bl8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRyYWNrRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25LZXlVcF8pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVBvaW50ZXJFdmVudF8oZCwgb3B0cykge1xuICAgICAgICAgICAgaWYgKCFkLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShtYXBSYW5nZShjb25zdHJhaW5SYW5nZShkLnBvaW50LngsIDAsIGQuYm91bmRzLndpZHRoKSwgMCwgZC5ib3VuZHMud2lkdGgsIHRoaXMucHJvcHMuZ2V0KCdtaW5WYWx1ZScpLCB0aGlzLnByb3BzLmdldCgnbWF4VmFsdWUnKSksIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd25Pck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd25fKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleSh0aGlzLmJhc2VTdGVwXywgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSArIHN0ZXAsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRlID0gQ2xhc3NOYW1lKCdzbGR0eHQnKTtcbiAgICBjbGFzcyBTbGlkZXJUZXh0VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZSgpKTtcbiAgICAgICAgICAgIGNvbnN0IHNsaWRlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzbGlkZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGUoJ3MnKSk7XG4gICAgICAgICAgICB0aGlzLnNsaWRlclZpZXdfID0gY29uZmlnLnNsaWRlclZpZXc7XG4gICAgICAgICAgICBzbGlkZXJFbGVtLmFwcGVuZENoaWxkKHRoaXMuc2xpZGVyVmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc2xpZGVyRWxlbSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRleHRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGUoJ3QnKSk7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3XyA9IGNvbmZpZy50ZXh0VmlldztcbiAgICAgICAgICAgIHRleHRFbGVtLmFwcGVuZENoaWxkKHRoaXMudGV4dFZpZXdfLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRleHRFbGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNsaWRlclRleHRDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnNsaWRlckNfID0gbmV3IFNsaWRlckNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXA6IGNvbmZpZy5iYXNlU3RlcCxcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnNsaWRlclByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb25maWcudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0Q18gPSBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXA6IGNvbmZpZy5iYXNlU3RlcCxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy50ZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgc2xpZGVyUHJvcHM6IGNvbmZpZy5zbGlkZXJQcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY29uZmlnLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFNsaWRlclRleHRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHNsaWRlclZpZXc6IHRoaXMuc2xpZGVyQ18udmlldyxcbiAgICAgICAgICAgICAgICB0ZXh0VmlldzogdGhpcy50ZXh0Q18udmlldyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzbGlkZXJDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVyQ187XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dENfO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd3JpdGVQcmltaXRpdmUodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXQud3JpdGUodmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTGlzdE9wdGlvbnModmFsdWUpIHtcbiAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHAucmVxdWlyZWQuYXJyYXkocC5yZXF1aXJlZC5vYmplY3Qoe1xuICAgICAgICAgICAgICAgIHRleHQ6IHAucmVxdWlyZWQuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwLnJlcXVpcmVkLnJhdyxcbiAgICAgICAgICAgIH0pKSh2YWx1ZSkudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBwLnJlcXVpcmVkLnJhdyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VQaWNrZXJMYXlvdXQodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnaW5saW5lJyB8fCB2YWx1ZSA9PT0gJ3BvcHVwJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXModmFsdWUpIHtcbiAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIHJldHVybiBwLnJlcXVpcmVkLm9iamVjdCh7XG4gICAgICAgICAgICBtYXg6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgbWluOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgIHN0ZXA6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICB9KSh2YWx1ZSkudmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxpc3RPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKHRleHQpID0+IHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goeyB0ZXh0OiB0ZXh0LCB2YWx1ZTogb3B0aW9uc1t0ZXh0XSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTGlzdENvbnN0cmFpbnQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gIWlzRW1wdHkob3B0aW9ucylcbiAgICAgICAgICAgID8gbmV3IExpc3RDb25zdHJhaW50KG5vcm1hbGl6ZUxpc3RPcHRpb25zKGZvcmNlQ2FzdChvcHRpb25zKSkpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRTdGVwKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IGNvbnN0cmFpbnQgPyBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBTdGVwQ29uc3RyYWludCkgOiBudWxsO1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjLnN0ZXA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCByYXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBzYyA9IGNvbnN0cmFpbnQgJiYgZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgU3RlcENvbnN0cmFpbnQpO1xuICAgICAgICBpZiAoc2MpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXREZWNpbWFsRGlnaXRzKHNjLnN0ZXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLm1heChnZXREZWNpbWFsRGlnaXRzKHJhd1ZhbHVlKSwgMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IGZpbmRTdGVwKGNvbnN0cmFpbnQpO1xuICAgICAgICByZXR1cm4gc3RlcCAhPT0gbnVsbCAmJiBzdGVwICE9PSB2b2lkIDAgPyBzdGVwIDogMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIHJhd1ZhbHVlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc2MgPSBjb25zdHJhaW50ICYmIGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIFN0ZXBDb25zdHJhaW50KTtcbiAgICAgICAgY29uc3QgYmFzZSA9IE1hdGguYWJzKChfYSA9IHNjID09PSBudWxsIHx8IHNjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzYy5zdGVwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByYXdWYWx1ZSk7XG4gICAgICAgIHJldHVybiBiYXNlID09PSAwID8gMC4xIDogTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMChiYXNlKSkgLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZCA9IENsYXNzTmFtZSgnY2tiJyk7XG4gICAgY2xhc3MgQ2hlY2tib3hWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRkKCdsJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRkKCdpJykpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLnR5cGUgPSAnY2hlY2tib3gnO1xuICAgICAgICAgICAgbGFiZWxFbGVtLmFwcGVuZENoaWxkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudCA9IGlucHV0RWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKHRoaXMuaW5wdXRFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgd3JhcHBlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgndycpKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5hcHBlbmRDaGlsZCh3cmFwcGVyRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrRWxlbSA9IGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvYywgJ2NoZWNrJyk7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbS5hcHBlbmRDaGlsZChtYXJrRWxlbSk7XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmNoZWNrZWQgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBDaGVja2JveENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlXyA9IHRoaXMub25JbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ2hlY2tib3hWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbklucHV0Q2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dENoYW5nZV8oZSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gaW5wdXRFbGVtLmNoZWNrZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDYocGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG4gICAgICAgIGNvbnN0IGxjID0gY3JlYXRlTGlzdENvbnN0cmFpbnQocGFyYW1zLm9wdGlvbnMpO1xuICAgICAgICBpZiAobGMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGNvbnN0IEJvb2xlYW5JbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1ib29sJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBib29sRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludCQ2KGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVByaW1pdGl2ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGFyZ3MuZG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgY29uc3QgbGMgPSBjICYmIGZpbmRDb25zdHJhaW50KGMsIExpc3RDb25zdHJhaW50KTtcbiAgICAgICAgICAgIGlmIChsYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBuZXcgVmFsdWVNYXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbGMudmFsdWVzLnZhbHVlKCdvcHRpb25zJyksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrYm94Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkYyA9IENsYXNzTmFtZSgnY29sJyk7XG4gICAgY2xhc3MgQ29sb3JWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCkpO1xuICAgICAgICAgICAgY29uZmlnLmZvbGRhYmxlLmJpbmRFeHBhbmRlZENsYXNzKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJGModW5kZWZpbmVkLCAnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAoY29uZmlnLmZvbGRhYmxlLCAnY29tcGxldGVkJywgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSRjKHVuZGVmaW5lZCwgJ2NwbCcpKSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGMoJ2gnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaGVhZEVsZW0pO1xuICAgICAgICAgICAgY29uc3Qgc3dhdGNoRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHN3YXRjaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygncycpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHN3YXRjaEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hFbGVtZW50ID0gc3dhdGNoRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGV4dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygndCcpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHRleHRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGV4dEVsZW1lbnQgPSB0ZXh0RWxlbTtcbiAgICAgICAgICAgIGlmIChjb25maWcucGlja2VyTGF5b3V0ID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpY2tlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgcGlja2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCdwJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChwaWNrZXJFbGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckVsZW1lbnQgPSBwaWNrZXJFbGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJnYlRvSHNsSW50KHIsIGcsIGIpIHtcbiAgICAgICAgY29uc3QgcnAgPSBjb25zdHJhaW5SYW5nZShyIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgZ3AgPSBjb25zdHJhaW5SYW5nZShnIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgYnAgPSBjb25zdHJhaW5SYW5nZShiIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgY21heCA9IE1hdGgubWF4KHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBjbWluID0gTWF0aC5taW4ocnAsIGdwLCBicCk7XG4gICAgICAgIGNvbnN0IGMgPSBjbWF4IC0gY21pbjtcbiAgICAgICAgbGV0IGggPSAwO1xuICAgICAgICBsZXQgcyA9IDA7XG4gICAgICAgIGNvbnN0IGwgPSAoY21pbiArIGNtYXgpIC8gMjtcbiAgICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgICAgIHMgPSBjIC8gKDEgLSBNYXRoLmFicyhjbWF4ICsgY21pbiAtIDEpKTtcbiAgICAgICAgICAgIGlmIChycCA9PT0gY21heCkge1xuICAgICAgICAgICAgICAgIGggPSAoZ3AgLSBicCkgLyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZ3AgPT09IGNtYXgpIHtcbiAgICAgICAgICAgICAgICBoID0gMiArIChicCAtIHJwKSAvIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoID0gNCArIChycCAtIGdwKSAvIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoID0gaCAvIDYgKyAoaCA8IDAgPyAxIDogMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoICogMzYwLCBzICogMTAwLCBsICogMTAwXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHNsVG9SZ2JJbnQoaCwgcywgbCkge1xuICAgICAgICBjb25zdCBocCA9ICgoaCAlIDM2MCkgKyAzNjApICUgMzYwO1xuICAgICAgICBjb25zdCBzcCA9IGNvbnN0cmFpblJhbmdlKHMgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBscCA9IGNvbnN0cmFpblJhbmdlKGwgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBjID0gKDEgLSBNYXRoLmFicygyICogbHAgLSAxKSkgKiBzcDtcbiAgICAgICAgY29uc3QgeCA9IGMgKiAoMSAtIE1hdGguYWJzKCgoaHAgLyA2MCkgJSAyKSAtIDEpKTtcbiAgICAgICAgY29uc3QgbSA9IGxwIC0gYyAvIDI7XG4gICAgICAgIGxldCBycCwgZ3AsIGJwO1xuICAgICAgICBpZiAoaHAgPj0gMCAmJiBocCA8IDYwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgeCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gNjAgJiYgaHAgPCAxMjApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFt4LCBjLCAwXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAxMjAgJiYgaHAgPCAxODApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFswLCBjLCB4XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAxODAgJiYgaHAgPCAyNDApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFswLCB4LCBjXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAyNDAgJiYgaHAgPCAzMDApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFt4LCAwLCBjXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFtjLCAwLCB4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWyhycCArIG0pICogMjU1LCAoZ3AgKyBtKSAqIDI1NSwgKGJwICsgbSkgKiAyNTVdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZ2JUb0hzdkludChyLCBnLCBiKSB7XG4gICAgICAgIGNvbnN0IHJwID0gY29uc3RyYWluUmFuZ2UociAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGdwID0gY29uc3RyYWluUmFuZ2UoZyAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGJwID0gY29uc3RyYWluUmFuZ2UoYiAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGNtYXggPSBNYXRoLm1heChycCwgZ3AsIGJwKTtcbiAgICAgICAgY29uc3QgY21pbiA9IE1hdGgubWluKHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBkID0gY21heCAtIGNtaW47XG4gICAgICAgIGxldCBoO1xuICAgICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY21heCA9PT0gcnApIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgoKCgoZ3AgLSBicCkgLyBkKSAlIDYpICsgNikgJSA2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjbWF4ID09PSBncCkge1xuICAgICAgICAgICAgaCA9IDYwICogKChicCAtIHJwKSAvIGQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgocnAgLSBncCkgLyBkICsgNCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcyA9IGNtYXggPT09IDAgPyAwIDogZCAvIGNtYXg7XG4gICAgICAgIGNvbnN0IHYgPSBjbWF4O1xuICAgICAgICByZXR1cm4gW2gsIHMgKiAxMDAsIHYgKiAxMDBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoc3ZUb1JnYkludChoLCBzLCB2KSB7XG4gICAgICAgIGNvbnN0IGhwID0gbG9vcFJhbmdlKGgsIDM2MCk7XG4gICAgICAgIGNvbnN0IHNwID0gY29uc3RyYWluUmFuZ2UocyAvIDEwMCwgMCwgMSk7XG4gICAgICAgIGNvbnN0IHZwID0gY29uc3RyYWluUmFuZ2UodiAvIDEwMCwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGMgPSB2cCAqIHNwO1xuICAgICAgICBjb25zdCB4ID0gYyAqICgxIC0gTWF0aC5hYnMoKChocCAvIDYwKSAlIDIpIC0gMSkpO1xuICAgICAgICBjb25zdCBtID0gdnAgLSBjO1xuICAgICAgICBsZXQgcnAsIGdwLCBicDtcbiAgICAgICAgaWYgKGhwID49IDAgJiYgaHAgPCA2MCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW2MsIHgsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDYwICYmIGhwIDwgMTIwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgYywgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTIwICYmIGhwIDwgMTgwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgYywgeF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTgwICYmIGhwIDwgMjQwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgeCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMjQwICYmIGhwIDwgMzAwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgMCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgMCwgeF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsocnAgKyBtKSAqIDI1NSwgKGdwICsgbSkgKiAyNTUsIChicCArIG0pICogMjU1XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHNsVG9Ic3ZJbnQoaCwgcywgbCkge1xuICAgICAgICBjb25zdCBzZCA9IGwgKyAocyAqICgxMDAgLSBNYXRoLmFicygyICogbCAtIDEwMCkpKSAvICgyICogMTAwKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGgsXG4gICAgICAgICAgICBzZCAhPT0gMCA/IChzICogKDEwMCAtIE1hdGguYWJzKDIgKiBsIC0gMTAwKSkpIC8gc2QgOiAwLFxuICAgICAgICAgICAgbCArIChzICogKDEwMCAtIE1hdGguYWJzKDIgKiBsIC0gMTAwKSkpIC8gKDIgKiAxMDApLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoc3ZUb0hzbEludChoLCBzLCB2KSB7XG4gICAgICAgIGNvbnN0IHNkID0gMTAwIC0gTWF0aC5hYnMoKHYgKiAoMjAwIC0gcykpIC8gMTAwIC0gMTAwKTtcbiAgICAgICAgcmV0dXJuIFtoLCBzZCAhPT0gMCA/IChzICogdikgLyBzZCA6IDAsICh2ICogKDIwMCAtIHMpKSAvICgyICogMTAwKV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFscGhhQ29tcG9uZW50KGNvbXBzKSB7XG4gICAgICAgIHJldHVybiBbY29tcHNbMF0sIGNvbXBzWzFdLCBjb21wc1syXV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGVuZEFscGhhQ29tcG9uZW50KGNvbXBzLCBhbHBoYSkge1xuICAgICAgICByZXR1cm4gW2NvbXBzWzBdLCBjb21wc1sxXSwgY29tcHNbMl0sIGFscGhhXTtcbiAgICB9XG4gICAgY29uc3QgTU9ERV9DT05WRVJURVJfTUFQID0ge1xuICAgICAgICBoc2w6IHtcbiAgICAgICAgICAgIGhzbDogKGgsIHMsIGwpID0+IFtoLCBzLCBsXSxcbiAgICAgICAgICAgIGhzdjogaHNsVG9Ic3ZJbnQsXG4gICAgICAgICAgICByZ2I6IGhzbFRvUmdiSW50LFxuICAgICAgICB9LFxuICAgICAgICBoc3Y6IHtcbiAgICAgICAgICAgIGhzbDogaHN2VG9Ic2xJbnQsXG4gICAgICAgICAgICBoc3Y6IChoLCBzLCB2KSA9PiBbaCwgcywgdl0sXG4gICAgICAgICAgICByZ2I6IGhzdlRvUmdiSW50LFxuICAgICAgICB9LFxuICAgICAgICByZ2I6IHtcbiAgICAgICAgICAgIGhzbDogcmdiVG9Ic2xJbnQsXG4gICAgICAgICAgICBoc3Y6IHJnYlRvSHN2SW50LFxuICAgICAgICAgICAgcmdiOiAociwgZywgYikgPT4gW3IsIGcsIGJdLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0Q29sb3JNYXhDb21wb25lbnRzKG1vZGUsIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHR5cGUgPT09ICdmbG9hdCcgPyAxIDogbW9kZSA9PT0gJ3JnYicgPyAyNTUgOiAzNjAsXG4gICAgICAgICAgICB0eXBlID09PSAnZmxvYXQnID8gMSA6IG1vZGUgPT09ICdyZ2InID8gMjU1IDogMTAwLFxuICAgICAgICAgICAgdHlwZSA9PT0gJ2Zsb2F0JyA/IDEgOiBtb2RlID09PSAncmdiJyA/IDI1NSA6IDEwMCxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbG9vcEh1ZVJhbmdlKGh1ZSwgbWF4KSB7XG4gICAgICAgIHJldHVybiBodWUgPT09IG1heCA/IG1heCA6IGxvb3BSYW5nZShodWUsIG1heCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnN0cmFpbkNvbG9yQ29tcG9uZW50cyhjb21wb25lbnRzLCBtb2RlLCB0eXBlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbXMgPSBnZXRDb2xvck1heENvbXBvbmVudHMobW9kZSwgdHlwZSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBtb2RlID09PSAncmdiJ1xuICAgICAgICAgICAgICAgID8gY29uc3RyYWluUmFuZ2UoY29tcG9uZW50c1swXSwgMCwgbXNbMF0pXG4gICAgICAgICAgICAgICAgOiBsb29wSHVlUmFuZ2UoY29tcG9uZW50c1swXSwgbXNbMF0pLFxuICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcG9uZW50c1sxXSwgMCwgbXNbMV0pLFxuICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcG9uZW50c1syXSwgMCwgbXNbMl0pLFxuICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoKF9hID0gY29tcG9uZW50c1szXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMSwgMCwgMSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnZlcnRDb2xvclR5cGUoY29tcHMsIG1vZGUsIGZyb20sIHRvKSB7XG4gICAgICAgIGNvbnN0IGZtcyA9IGdldENvbG9yTWF4Q29tcG9uZW50cyhtb2RlLCBmcm9tKTtcbiAgICAgICAgY29uc3QgdG1zID0gZ2V0Q29sb3JNYXhDb21wb25lbnRzKG1vZGUsIHRvKTtcbiAgICAgICAgcmV0dXJuIGNvbXBzLm1hcCgoYywgaW5kZXgpID0+IChjIC8gZm1zW2luZGV4XSkgKiB0bXNbaW5kZXhdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29udmVydENvbG9yKGNvbXBvbmVudHMsIGZyb20sIHRvKSB7XG4gICAgICAgIGNvbnN0IGludENvbXBzID0gY29udmVydENvbG9yVHlwZShjb21wb25lbnRzLCBmcm9tLm1vZGUsIGZyb20udHlwZSwgJ2ludCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBNT0RFX0NPTlZFUlRFUl9NQVBbZnJvbS5tb2RlXVt0by5tb2RlXSguLi5pbnRDb21wcyk7XG4gICAgICAgIHJldHVybiBjb252ZXJ0Q29sb3JUeXBlKHJlc3VsdCwgdG8ubW9kZSwgJ2ludCcsIHRvLnR5cGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXkgaW4gb2JqICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ251bWJlcic7XG4gICAgfVxuICAgIGNsYXNzIENvbG9yIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29tcHMsIG1vZGUsIHR5cGUgPSAnaW50Jykge1xuICAgICAgICAgICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICB0aGlzLmNvbXBzXyA9IGNvbnN0cmFpbkNvbG9yQ29tcG9uZW50cyhjb21wcywgbW9kZSwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGJsYWNrKHR5cGUgPSAnaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbMCwgMCwgMF0sICdyZ2InLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChvYmosIHR5cGUgPSAnaW50Jykge1xuICAgICAgICAgICAgY29uc3QgY29tcHMgPSAnYScgaW4gb2JqID8gW29iai5yLCBvYmouZywgb2JqLmIsIG9iai5hXSA6IFtvYmouciwgb2JqLmcsIG9iai5iXTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoY29tcHMsICdyZ2InLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgdG9SZ2JhT2JqZWN0KGNvbG9yLCB0eXBlID0gJ2ludCcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvci50b1JnYmFPYmplY3QodHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzUmdiQ29sb3JPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gKGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCAncicpICYmXG4gICAgICAgICAgICAgICAgaXNSZ2JDb2xvckNvbXBvbmVudChvYmosICdnJykgJiZcbiAgICAgICAgICAgICAgICBpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ2InKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzUmdiYUNvbG9yT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNSZ2JDb2xvck9iamVjdChvYmopICYmIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCAnYScpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc0NvbG9yT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNSZ2JDb2xvck9iamVjdChvYmopO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICBpZiAodjEubW9kZSAhPT0gdjIubW9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBzMSA9IHYxLmNvbXBzXztcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzMiA9IHYyLmNvbXBzXztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcHMxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBzMVtpXSAhPT0gY29tcHMyW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXRDb21wb25lbnRzKG9wdF9tb2RlLCB0eXBlID0gJ2ludCcpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBlbmRBbHBoYUNvbXBvbmVudChjb252ZXJ0Q29sb3IocmVtb3ZlQWxwaGFDb21wb25lbnQodGhpcy5jb21wc18pLCB7IG1vZGU6IHRoaXMubW9kZSwgdHlwZTogdGhpcy50eXBlIH0sIHsgbW9kZTogb3B0X21vZGUgIT09IG51bGwgJiYgb3B0X21vZGUgIT09IHZvaWQgMCA/IG9wdF9tb2RlIDogdGhpcy5tb2RlLCB0eXBlIH0pLCB0aGlzLmNvbXBzX1szXSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9SZ2JhT2JqZWN0KHR5cGUgPSAnaW50Jykge1xuICAgICAgICAgICAgY29uc3QgcmdiQ29tcHMgPSB0aGlzLmdldENvbXBvbmVudHMoJ3JnYicsIHR5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByOiByZ2JDb21wc1swXSxcbiAgICAgICAgICAgICAgICBnOiByZ2JDb21wc1sxXSxcbiAgICAgICAgICAgICAgICBiOiByZ2JDb21wc1syXSxcbiAgICAgICAgICAgICAgICBhOiByZ2JDb21wc1szXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkYiA9IENsYXNzTmFtZSgnY29scCcpO1xuICAgIGNsYXNzIENvbG9yUGlja2VyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmFscGhhVmlld3NfID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGhzdkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBoc3ZFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ2hzdicpKTtcbiAgICAgICAgICAgIGNvbnN0IHN2RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHN2RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdzdicpKTtcbiAgICAgICAgICAgIHRoaXMuc3ZQYWxldHRlVmlld18gPSBjb25maWcuc3ZQYWxldHRlVmlldztcbiAgICAgICAgICAgIHN2RWxlbS5hcHBlbmRDaGlsZCh0aGlzLnN2UGFsZXR0ZVZpZXdfLmVsZW1lbnQpO1xuICAgICAgICAgICAgaHN2RWxlbS5hcHBlbmRDaGlsZChzdkVsZW0pO1xuICAgICAgICAgICAgY29uc3QgaEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBoRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdoJykpO1xuICAgICAgICAgICAgdGhpcy5oUGFsZXR0ZVZpZXdfID0gY29uZmlnLmhQYWxldHRlVmlldztcbiAgICAgICAgICAgIGhFbGVtLmFwcGVuZENoaWxkKHRoaXMuaFBhbGV0dGVWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIGhzdkVsZW0uYXBwZW5kQ2hpbGQoaEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGhzdkVsZW0pO1xuICAgICAgICAgICAgY29uc3QgcmdiRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHJnYkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYigncmdiJykpO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld18gPSBjb25maWcudGV4dFZpZXc7XG4gICAgICAgICAgICByZ2JFbGVtLmFwcGVuZENoaWxkKHRoaXMudGV4dFZpZXdfLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHJnYkVsZW0pO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5hbHBoYVZpZXdzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbHBoYVZpZXdzXyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZTogY29uZmlnLmFscGhhVmlld3MucGFsZXR0ZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY29uZmlnLmFscGhhVmlld3MudGV4dCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGFFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGFFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ2EnKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGFwRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdhcCcpKTtcbiAgICAgICAgICAgICAgICBhcEVsZW0uYXBwZW5kQ2hpbGQodGhpcy5hbHBoYVZpZXdzXy5wYWxldHRlLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGFFbGVtLmFwcGVuZENoaWxkKGFwRWxlbSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGF0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdhdCcpKTtcbiAgICAgICAgICAgICAgICBhdEVsZW0uYXBwZW5kQ2hpbGQodGhpcy5hbHBoYVZpZXdzXy50ZXh0LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGFFbGVtLmFwcGVuZENoaWxkKGF0RWxlbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGFFbGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgYWxsRm9jdXNhYmxlRWxlbWVudHMoKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtcyA9IFtcbiAgICAgICAgICAgICAgICB0aGlzLnN2UGFsZXR0ZVZpZXdfLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdGhpcy5oUGFsZXR0ZVZpZXdfLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0Vmlld18ubW9kZVNlbGVjdEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy50ZXh0Vmlld18udGV4dFZpZXdzLm1hcCgodikgPT4gdi5pbnB1dEVsZW1lbnQpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFscGhhVmlld3NfKSB7XG4gICAgICAgICAgICAgICAgZWxlbXMucHVzaCh0aGlzLmFscGhhVmlld3NfLnBhbGV0dGUuZWxlbWVudCwgdGhpcy5hbHBoYVZpZXdzXy50ZXh0LmlucHV0RWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZWxlbXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUNvbG9yVHlwZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09ICdpbnQnID8gJ2ludCcgOiB2YWx1ZSA9PT0gJ2Zsb2F0JyA/ICdmbG9hdCcgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlQ29sb3JJbnB1dFBhcmFtcyhwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIHJldHVybiBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgIGFscGhhOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICBjb2xvcjogcC5vcHRpb25hbC5vYmplY3Qoe1xuICAgICAgICAgICAgICAgIGFscGhhOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICAgICAgdHlwZTogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VDb2xvclR5cGUpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBleHBhbmRlZDogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgcGlja2VyOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBpY2tlckxheW91dCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRCYXNlU3RlcEZvckNvbG9yKGZvckFscGhhKSB7XG4gICAgICAgIHJldHVybiBmb3JBbHBoYSA/IDAuMSA6IDE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4dHJhY3RDb2xvclR5cGUocGFyYW1zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHBhcmFtcy5jb2xvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnR5cGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXF1YWxzU3RyaW5nQ29sb3JGb3JtYXQoZjEsIGYyKSB7XG4gICAgICAgIHJldHVybiAoZjEuYWxwaGEgPT09IGYyLmFscGhhICYmXG4gICAgICAgICAgICBmMS5tb2RlID09PSBmMi5tb2RlICYmXG4gICAgICAgICAgICBmMS5ub3RhdGlvbiA9PT0gZjIubm90YXRpb24gJiZcbiAgICAgICAgICAgIGYxLnR5cGUgPT09IGYyLnR5cGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZSh0ZXh0LCBtYXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXiguKyklJC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihwYXJzZUZsb2F0KHRleHQpLCBtYXhWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHBhcnNlRmxvYXQobVsxXSkgKiAwLjAxICogbWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgQU5HTEVfVE9fREVHX01BUCA9IHtcbiAgICAgICAgZGVnOiAoYW5nbGUpID0+IGFuZ2xlLFxuICAgICAgICBncmFkOiAoYW5nbGUpID0+IChhbmdsZSAqIDM2MCkgLyA0MDAsXG4gICAgICAgIHJhZDogKGFuZ2xlKSA9PiAoYW5nbGUgKiAzNjApIC8gKDIgKiBNYXRoLlBJKSxcbiAgICAgICAgdHVybjogKGFuZ2xlKSA9PiBhbmdsZSAqIDM2MCxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBhcnNlQ3NzTnVtYmVyT3JBbmdsZSh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eKFswLTkuXSs/KShkZWd8Z3JhZHxyYWR8dHVybikkLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW5nbGUgPSBwYXJzZUZsb2F0KG1bMV0pO1xuICAgICAgICBjb25zdCB1bml0ID0gbVsyXTtcbiAgICAgICAgcmV0dXJuIEFOR0xFX1RPX0RFR19NQVBbdW5pdF0oYW5nbGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uYWxSZ2JDb2xvckNvbXBvbmVudHModGV4dCkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXnJnYlxcKFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqXFwpJC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBzID0gW1xuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsxXSwgMjU1KSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMl0sIDI1NSksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzNdLCAyNTUpLFxuICAgICAgICBdO1xuICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8IGlzTmFOKGNvbXBzWzFdKSB8fCBpc05hTihjb21wc1syXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbFJnYkNvbG9yUGFyc2VyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IHBhcnNlRnVuY3Rpb25hbFJnYkNvbG9yQ29tcG9uZW50cyh0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBjb21wcyA/IG5ldyBDb2xvcihjb21wcywgJ3JnYicsIHR5cGUpIDogbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbmFsUmdiYUNvbG9yQ29tcG9uZW50cyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9ecmdiYVxcKFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccypcXCkkLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzFdLCAyNTUpLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsyXSwgMjU1KSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDI1NSksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzRdLCAxKSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fFxuICAgICAgICAgICAgaXNOYU4oY29tcHNbMV0pIHx8XG4gICAgICAgICAgICBpc05hTihjb21wc1syXSkgfHxcbiAgICAgICAgICAgIGlzTmFOKGNvbXBzWzNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbmFsUmdiYUNvbG9yUGFyc2VyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IHBhcnNlRnVuY3Rpb25hbFJnYmFDb2xvckNvbXBvbmVudHModGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gY29tcHMgPyBuZXcgQ29sb3IoY29tcHMsICdyZ2InLCB0eXBlKSA6IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlSHNsQ29sb3JDb21wb25lbnRzKHRleHQpIHtcbiAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15oc2xcXChcXHMqKFswLTlBLUZhLWYuXSsoPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqXFwpJC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBzID0gW1xuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPckFuZ2xlKG1bMV0pLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsyXSwgMTAwKSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDEwMCksXG4gICAgICAgIF07XG4gICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHwgaXNOYU4oY29tcHNbMV0pIHx8IGlzTmFOKGNvbXBzWzJdKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVIc2xDb2xvclBhcnNlcih0eXBlKSB7XG4gICAgICAgIHJldHVybiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwYXJzZUhzbENvbG9yQ29tcG9uZW50cyh0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBjb21wcyA/IG5ldyBDb2xvcihjb21wcywgJ2hzbCcsIHR5cGUpIDogbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VIc2xhQ29sb3JDb21wb25lbnRzKHRleHQpIHtcbiAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15oc2xhXFwoXFxzKihbMC05QS1GYS1mLl0rKD86ZGVnfGdyYWR8cmFkfHR1cm4pPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqXFwpJC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBzID0gW1xuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPckFuZ2xlKG1bMV0pLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsyXSwgMTAwKSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDEwMCksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzRdLCAxKSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fFxuICAgICAgICAgICAgaXNOYU4oY29tcHNbMV0pIHx8XG4gICAgICAgICAgICBpc05hTihjb21wc1syXSkgfHxcbiAgICAgICAgICAgIGlzTmFOKGNvbXBzWzNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVIc2xhQ29sb3JQYXJzZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gcGFyc2VIc2xhQ29sb3JDb21wb25lbnRzKHRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBzID8gbmV3IENvbG9yKGNvbXBzLCAnaHNsJywgdHlwZSkgOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUhleFJnYkNvbG9yQ29tcG9uZW50cyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG1SZ2IgPSB0ZXh0Lm1hdGNoKC9eIyhbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKSQvKTtcbiAgICAgICAgaWYgKG1SZ2IpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJnYlsxXSArIG1SZ2JbMV0sIDE2KSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzJdICsgbVJnYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbM10gKyBtUmdiWzNdLCAxNiksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ScmdnYmIgPSB0ZXh0Lm1hdGNoKC9eKD86I3wweCkoWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KShbMC05QS1GYS1mXXsyfSkkLyk7XG4gICAgICAgIGlmIChtUnJnZ2JiKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbMV0sIDE2KSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlszXSwgMTYpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VIZXhSZ2JDb2xvcih0ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNvbXBzID0gcGFyc2VIZXhSZ2JDb2xvckNvbXBvbmVudHModGV4dCk7XG4gICAgICAgIHJldHVybiBjb21wcyA/IG5ldyBDb2xvcihjb21wcywgJ3JnYicsICdpbnQnKSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlSGV4UmdiYUNvbG9yQ29tcG9uZW50cyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG1SZ2IgPSB0ZXh0Lm1hdGNoKC9eIz8oWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKShbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pJC8pO1xuICAgICAgICBpZiAobVJnYikge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzFdICsgbVJnYlsxXSwgMTYpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMl0gKyBtUmdiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJnYlszXSArIG1SZ2JbM10sIDE2KSxcbiAgICAgICAgICAgICAgICBtYXBSYW5nZShwYXJzZUludChtUmdiWzRdICsgbVJnYls0XSwgMTYpLCAwLCAyNTUsIDAsIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtUnJnZ2JiID0gdGV4dC5tYXRjaCgvXig/OiN8MHgpPyhbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KShbMC05QS1GYS1mXXsyfSkkLyk7XG4gICAgICAgIGlmIChtUnJnZ2JiKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbMV0sIDE2KSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlszXSwgMTYpLFxuICAgICAgICAgICAgICAgIG1hcFJhbmdlKHBhcnNlSW50KG1ScmdnYmJbNF0sIDE2KSwgMCwgMjU1LCAwLCAxKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlSGV4UmdiYUNvbG9yKHRleHQpIHtcbiAgICAgICAgY29uc3QgY29tcHMgPSBwYXJzZUhleFJnYmFDb2xvckNvbXBvbmVudHModGV4dCk7XG4gICAgICAgIHJldHVybiBjb21wcyA/IG5ldyBDb2xvcihjb21wcywgJ3JnYicsICdpbnQnKSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0UmdiQ29sb3JDb21wb25lbnRzKHRleHQpIHtcbiAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15cXHtcXHMqclxccyo6XFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqZ1xccyo6XFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqYlxccyo6XFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcfSQvKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wcyA9IFtcbiAgICAgICAgICAgIHBhcnNlRmxvYXQobVsxXSksXG4gICAgICAgICAgICBwYXJzZUZsb2F0KG1bMl0pLFxuICAgICAgICAgICAgcGFyc2VGbG9hdChtWzNdKSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fCBpc05hTihjb21wc1sxXSkgfHwgaXNOYU4oY29tcHNbMl0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFJnYkNvbG9yUGFyc2VyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IHBhcnNlT2JqZWN0UmdiQ29sb3JDb21wb25lbnRzKHRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBzID8gbmV3IENvbG9yKGNvbXBzLCAncmdiJywgdHlwZSkgOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFJnYmFDb2xvckNvbXBvbmVudHModGV4dCkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXlxce1xccypyXFxzKjpcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccypnXFxzKjpcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccypiXFxzKjpcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyphXFxzKjpcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqXFx9JC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBzID0gW1xuICAgICAgICAgICAgcGFyc2VGbG9hdChtWzFdKSxcbiAgICAgICAgICAgIHBhcnNlRmxvYXQobVsyXSksXG4gICAgICAgICAgICBwYXJzZUZsb2F0KG1bM10pLFxuICAgICAgICAgICAgcGFyc2VGbG9hdChtWzRdKSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fFxuICAgICAgICAgICAgaXNOYU4oY29tcHNbMV0pIHx8XG4gICAgICAgICAgICBpc05hTihjb21wc1syXSkgfHxcbiAgICAgICAgICAgIGlzTmFOKGNvbXBzWzNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVPYmplY3RSZ2JhQ29sb3JQYXJzZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gcGFyc2VPYmplY3RSZ2JhQ29sb3JDb21wb25lbnRzKHRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBzID8gbmV3IENvbG9yKGNvbXBzLCAncmdiJywgdHlwZSkgOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBQQVJTRVJfQU5EX1JFU1VMVCA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcGFyc2VyOiBwYXJzZUhleFJnYkNvbG9yQ29tcG9uZW50cyxcbiAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2hleCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwYXJzZXI6IHBhcnNlSGV4UmdiYUNvbG9yQ29tcG9uZW50cyxcbiAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnaGV4JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBhcnNlcjogcGFyc2VGdW5jdGlvbmFsUmdiQ29sb3JDb21wb25lbnRzLFxuICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnZnVuYycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwYXJzZXI6IHBhcnNlRnVuY3Rpb25hbFJnYmFDb2xvckNvbXBvbmVudHMsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2Z1bmMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcGFyc2VyOiBwYXJzZUhzbENvbG9yQ29tcG9uZW50cyxcbiAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAnaHNsJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2Z1bmMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcGFyc2VyOiBwYXJzZUhzbGFDb2xvckNvbXBvbmVudHMsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAnaHNsJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2Z1bmMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU9iamVjdFJnYkNvbG9yQ29tcG9uZW50cyxcbiAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ29iamVjdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwYXJzZXI6IHBhcnNlT2JqZWN0UmdiYUNvbG9yQ29tcG9uZW50cyxcbiAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnb2JqZWN0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgXTtcbiAgICBmdW5jdGlvbiBkZXRlY3RTdHJpbmdDb2xvcih0ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVJTRVJfQU5EX1JFU1VMVC5yZWR1Y2UoKHByZXYsIHsgcGFyc2VyLCByZXN1bHQ6IGRldGVjdGlvbiB9KSA9PiB7XG4gICAgICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlcih0ZXh0KSA/IGRldGVjdGlvbiA6IG51bGw7XG4gICAgICAgIH0sIG51bGwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXRlY3RTdHJpbmdDb2xvckZvcm1hdCh0ZXh0LCB0eXBlID0gJ2ludCcpIHtcbiAgICAgICAgY29uc3QgciA9IGRldGVjdFN0cmluZ0NvbG9yKHRleHQpO1xuICAgICAgICBpZiAoIXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyLm5vdGF0aW9uID09PSAnaGV4JyAmJiB0eXBlICE9PSAnZmxvYXQnKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByKSwgeyB0eXBlOiAnaW50JyB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoci5ub3RhdGlvbiA9PT0gJ2Z1bmMnKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByKSwgeyB0eXBlOiB0eXBlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBUWVBFX1RPX1BBUlNFUlMgPSB7XG4gICAgICAgIGludDogW1xuICAgICAgICAgICAgcGFyc2VIZXhSZ2JDb2xvcixcbiAgICAgICAgICAgIHBhcnNlSGV4UmdiYUNvbG9yLFxuICAgICAgICAgICAgY3JlYXRlRnVuY3Rpb25hbFJnYkNvbG9yUGFyc2VyKCdpbnQnKSxcbiAgICAgICAgICAgIGNyZWF0ZUZ1bmN0aW9uYWxSZ2JhQ29sb3JQYXJzZXIoJ2ludCcpLFxuICAgICAgICAgICAgY3JlYXRlSHNsQ29sb3JQYXJzZXIoJ2ludCcpLFxuICAgICAgICAgICAgY3JlYXRlSHNsYUNvbG9yUGFyc2VyKCdpbnQnKSxcbiAgICAgICAgICAgIGNyZWF0ZU9iamVjdFJnYkNvbG9yUGFyc2VyKCdpbnQnKSxcbiAgICAgICAgICAgIGNyZWF0ZU9iamVjdFJnYmFDb2xvclBhcnNlcignaW50JyksXG4gICAgICAgIF0sXG4gICAgICAgIGZsb2F0OiBbXG4gICAgICAgICAgICBjcmVhdGVGdW5jdGlvbmFsUmdiQ29sb3JQYXJzZXIoJ2Zsb2F0JyksXG4gICAgICAgICAgICBjcmVhdGVGdW5jdGlvbmFsUmdiYUNvbG9yUGFyc2VyKCdmbG9hdCcpLFxuICAgICAgICAgICAgY3JlYXRlSHNsQ29sb3JQYXJzZXIoJ2Zsb2F0JyksXG4gICAgICAgICAgICBjcmVhdGVIc2xhQ29sb3JQYXJzZXIoJ2Zsb2F0JyksXG4gICAgICAgICAgICBjcmVhdGVPYmplY3RSZ2JDb2xvclBhcnNlcignZmxvYXQnKSxcbiAgICAgICAgICAgIGNyZWF0ZU9iamVjdFJnYmFDb2xvclBhcnNlcignZmxvYXQnKSxcbiAgICAgICAgXSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yU3RyaW5nQmluZGluZ1JlYWRlcih0eXBlKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlcnMgPSBUWVBFX1RPX1BBUlNFUlNbdHlwZV07XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIENvbG9yLmJsYWNrKHR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2Vycy5yZWR1Y2UoKHByZXYsIHBhcnNlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyKHZhbHVlKTtcbiAgICAgICAgICAgIH0sIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHZvaWQgMCA/IHJlc3VsdCA6IENvbG9yLmJsYWNrKHR5cGUpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb2xvclN0cmluZ1BhcnNlcih0eXBlKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlcnMgPSBUWVBFX1RPX1BBUlNFUlNbdHlwZV07XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXJzLnJlZHVjZSgocHJldiwgcGFyc2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXIodmFsdWUpO1xuICAgICAgICAgICAgfSwgbnVsbCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHplcm9maWxsKGNvbXApIHtcbiAgICAgICAgY29uc3QgaGV4ID0gY29uc3RyYWluUmFuZ2UoTWF0aC5mbG9vcihjb21wKSwgMCwgMjU1KS50b1N0cmluZygxNik7XG4gICAgICAgIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gYDAke2hleH1gIDogaGV4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvSGV4UmdiU3RyaW5nKHZhbHVlLCBwcmVmaXggPSAnIycpIHtcbiAgICAgICAgY29uc3QgaGV4ZXMgPSByZW1vdmVBbHBoYUNvbXBvbmVudCh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKSlcbiAgICAgICAgICAgIC5tYXAoemVyb2ZpbGwpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtoZXhlc31gO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvSGV4UmdiYVN0cmluZyh2YWx1ZSwgcHJlZml4ID0gJyMnKSB7XG4gICAgICAgIGNvbnN0IHJnYmFDb21wcyA9IHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicpO1xuICAgICAgICBjb25zdCBoZXhlcyA9IFtyZ2JhQ29tcHNbMF0sIHJnYmFDb21wc1sxXSwgcmdiYUNvbXBzWzJdLCByZ2JhQ29tcHNbM10gKiAyNTVdXG4gICAgICAgICAgICAubWFwKHplcm9maWxsKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7aGV4ZXN9YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0Z1bmN0aW9uYWxSZ2JTdHJpbmcodmFsdWUsIG9wdF90eXBlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcihvcHRfdHlwZSA9PT0gJ2Zsb2F0JyA/IDIgOiAwKTtcbiAgICAgICAgY29uc3QgY29tcHMgPSByZW1vdmVBbHBoYUNvbXBvbmVudCh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InLCBvcHRfdHlwZSkpLm1hcCgoY29tcCkgPT4gZm9ybWF0dGVyKGNvbXApKTtcbiAgICAgICAgcmV0dXJuIGByZ2IoJHtjb21wcy5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbmFsUmdiQ29sb3JGb3JtYXR0ZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sb3JUb0Z1bmN0aW9uYWxSZ2JTdHJpbmcodmFsdWUsIHR5cGUpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcodmFsdWUsIG9wdF90eXBlKSB7XG4gICAgICAgIGNvbnN0IGFGb3JtYXR0ZXIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMik7XG4gICAgICAgIGNvbnN0IHJnYkZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcihvcHRfdHlwZSA9PT0gJ2Zsb2F0JyA/IDIgOiAwKTtcbiAgICAgICAgY29uc3QgY29tcHMgPSB2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InLCBvcHRfdHlwZSkubWFwKChjb21wLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gaW5kZXggPT09IDMgPyBhRm9ybWF0dGVyIDogcmdiRm9ybWF0dGVyO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlcihjb21wKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgcmdiYSgke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxSZ2JhQ29sb3JGb3JtYXR0ZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sb3JUb0Z1bmN0aW9uYWxSZ2JhU3RyaW5nKHZhbHVlLCB0eXBlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0Z1bmN0aW9uYWxIc2xTdHJpbmcodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVycyA9IFtcbiAgICAgICAgICAgIGNyZWF0ZU51bWJlckZvcm1hdHRlcigwKSxcbiAgICAgICAgICAgIGZvcm1hdFBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBmb3JtYXRQZXJjZW50YWdlLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBjb21wcyA9IHJlbW92ZUFscGhhQ29tcG9uZW50KHZhbHVlLmdldENvbXBvbmVudHMoJ2hzbCcpKS5tYXAoKGNvbXAsIGluZGV4KSA9PiBmb3JtYXR0ZXJzW2luZGV4XShjb21wKSk7XG4gICAgICAgIHJldHVybiBgaHNsKCR7Y29tcHMuam9pbignLCAnKX0pYDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0Z1bmN0aW9uYWxIc2xhU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlcnMgPSBbXG4gICAgICAgICAgICBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCksXG4gICAgICAgICAgICBmb3JtYXRQZXJjZW50YWdlLFxuICAgICAgICAgICAgZm9ybWF0UGVyY2VudGFnZSxcbiAgICAgICAgICAgIGNyZWF0ZU51bWJlckZvcm1hdHRlcigyKSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgY29tcHMgPSB2YWx1ZVxuICAgICAgICAgICAgLmdldENvbXBvbmVudHMoJ2hzbCcpXG4gICAgICAgICAgICAubWFwKChjb21wLCBpbmRleCkgPT4gZm9ybWF0dGVyc1tpbmRleF0oY29tcCkpO1xuICAgICAgICByZXR1cm4gYGhzbGEoJHtjb21wcy5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvT2JqZWN0UmdiU3RyaW5nKHZhbHVlLCB0eXBlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcih0eXBlID09PSAnZmxvYXQnID8gMiA6IDApO1xuICAgICAgICBjb25zdCBuYW1lcyA9IFsncicsICdnJywgJ2InXTtcbiAgICAgICAgY29uc3QgY29tcHMgPSByZW1vdmVBbHBoYUNvbXBvbmVudCh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InLCB0eXBlKSkubWFwKChjb21wLCBpbmRleCkgPT4gYCR7bmFtZXNbaW5kZXhdfTogJHtmb3JtYXR0ZXIoY29tcCl9YCk7XG4gICAgICAgIHJldHVybiBgeyR7Y29tcHMuam9pbignLCAnKX19YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0UmdiQ29sb3JGb3JtYXR0ZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiBjb2xvclRvT2JqZWN0UmdiU3RyaW5nKHZhbHVlLCB0eXBlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb09iamVjdFJnYmFTdHJpbmcodmFsdWUsIHR5cGUpIHtcbiAgICAgICAgY29uc3QgYUZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcigyKTtcbiAgICAgICAgY29uc3QgcmdiRm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKHR5cGUgPT09ICdmbG9hdCcgPyAyIDogMCk7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gWydyJywgJ2cnLCAnYicsICdhJ107XG4gICAgICAgIGNvbnN0IGNvbXBzID0gdmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJywgdHlwZSkubWFwKChjb21wLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gaW5kZXggPT09IDMgPyBhRm9ybWF0dGVyIDogcmdiRm9ybWF0dGVyO1xuICAgICAgICAgICAgcmV0dXJuIGAke25hbWVzW2luZGV4XX06ICR7Zm9ybWF0dGVyKGNvbXApfWA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYHske2NvbXBzLmpvaW4oJywgJyl9fWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFJnYmFDb2xvckZvcm1hdHRlcih0eXBlKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IGNvbG9yVG9PYmplY3RSZ2JhU3RyaW5nKHZhbHVlLCB0eXBlKTtcbiAgICB9XG4gICAgY29uc3QgRk9STUFUX0FORF9TVFJJTkdJRklFUlMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2hleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2ludCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyaW5naWZpZXI6IGNvbG9yVG9IZXhSZ2JTdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnaGV4JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJpbmdpZmllcjogY29sb3JUb0hleFJnYmFTdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAnaHNsJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2Z1bmMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cmluZ2lmaWVyOiBjb2xvclRvRnVuY3Rpb25hbEhzbFN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IHRydWUsXG4gICAgICAgICAgICAgICAgbW9kZTogJ2hzbCcsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdmdW5jJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJpbmdpZmllcjogY29sb3JUb0Z1bmN0aW9uYWxIc2xhU3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICAuLi5bJ2ludCcsICdmbG9hdCddLnJlZHVjZSgocHJldiwgdHlwZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbHBoYTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnZnVuYycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmdpZmllcjogY3JlYXRlRnVuY3Rpb25hbFJnYkNvbG9yRm9ybWF0dGVyKHR5cGUpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2Z1bmMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5naWZpZXI6IGNyZWF0ZUZ1bmN0aW9uYWxSZ2JhQ29sb3JGb3JtYXR0ZXIodHlwZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RhdGlvbjogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmdpZmllcjogY3JlYXRlT2JqZWN0UmdiQ29sb3JGb3JtYXR0ZXIodHlwZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGE6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ2lmaWVyOiBjcmVhdGVPYmplY3RSZ2JhQ29sb3JGb3JtYXR0ZXIodHlwZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0sIFtdKSxcbiAgICBdO1xuICAgIGZ1bmN0aW9uIGZpbmRDb2xvclN0cmluZ2lmaWVyKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gRk9STUFUX0FORF9TVFJJTkdJRklFUlMucmVkdWNlKChwcmV2LCBmYXMpID0+IHtcbiAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXF1YWxzU3RyaW5nQ29sb3JGb3JtYXQoZmFzLmZvcm1hdCwgZm9ybWF0KVxuICAgICAgICAgICAgICAgID8gZmFzLnN0cmluZ2lmaWVyXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LCBudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkYSA9IENsYXNzTmFtZSgnYXBsJyk7XG4gICAgY2xhc3MgQVBhbGV0dGVWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZFRhYkluZGV4KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBiYXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgYmFyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdiJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJhckVsZW0pO1xuICAgICAgICAgICAgY29uc3QgY29sb3JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29sb3JFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGEoJ2MnKSk7XG4gICAgICAgICAgICBiYXJFbGVtLmFwcGVuZENoaWxkKGNvbG9yRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmNvbG9yRWxlbV8gPSBjb2xvckVsZW07XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdtJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1hcmtlckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXyA9IG1hcmtlckVsZW07XG4gICAgICAgICAgICBjb25zdCBwcmV2aWV3RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHByZXZpZXdFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGEoJ3AnKSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLmFwcGVuZENoaWxkKHByZXZpZXdFbGVtKTtcbiAgICAgICAgICAgIHRoaXMucHJldmlld0VsZW1fID0gcHJldmlld0VsZW07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCByZ2JhQ29tcHMgPSBjLmdldENvbXBvbmVudHMoJ3JnYicpO1xuICAgICAgICAgICAgY29uc3QgbGVmdENvbG9yID0gbmV3IENvbG9yKFtyZ2JhQ29tcHNbMF0sIHJnYmFDb21wc1sxXSwgcmdiYUNvbXBzWzJdLCAwXSwgJ3JnYicpO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRDb2xvciA9IG5ldyBDb2xvcihbcmdiYUNvbXBzWzBdLCByZ2JhQ29tcHNbMV0sIHJnYmFDb21wc1syXSwgMjU1XSwgJ3JnYicpO1xuICAgICAgICAgICAgY29uc3QgZ3JhZGllbnRDb21wcyA9IFtcbiAgICAgICAgICAgICAgICAndG8gcmlnaHQnLFxuICAgICAgICAgICAgICAgIGNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyhsZWZ0Q29sb3IpLFxuICAgICAgICAgICAgICAgIGNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyhyaWdodENvbG9yKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlzLmNvbG9yRWxlbV8uc3R5bGUuYmFja2dyb3VuZCA9IGBsaW5lYXItZ3JhZGllbnQoJHtncmFkaWVudENvbXBzLmpvaW4oJywnKX0pYDtcbiAgICAgICAgICAgIHRoaXMucHJldmlld0VsZW1fLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyhjKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBtYXBSYW5nZShyZ2JhQ29tcHNbM10sIDAsIDEsIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBBUGFsZXR0ZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbktleURvd25fID0gdGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uS2V5VXBfID0gdGhpcy5vbktleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEFQYWxldHRlVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbHBoYSA9IGQucG9pbnQueCAvIGQuYm91bmRzLndpZHRoO1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaCwgcywgdl0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHMsIHYsIGFscGhhXSwgJ2hzdicpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KGdldEJhc2VTdGVwRm9yQ29sb3IodHJ1ZSksIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IFtoLCBzLCB2LCBhXSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaCwgcywgdiwgYSArIHN0ZXBdLCAnaHN2JyksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KGdldEJhc2VTdGVwRm9yQ29sb3IodHJ1ZSksIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDkgPSBDbGFzc05hbWUoJ2NvbHR4dCcpO1xuICAgIGZ1bmN0aW9uIGNyZWF0ZU1vZGVTZWxlY3RFbGVtZW50KGRvYykge1xuICAgICAgICBjb25zdCBzZWxlY3RFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuICAgICAgICBjb25zdCBpdGVtcyA9IFtcbiAgICAgICAgICAgIHsgdGV4dDogJ1JHQicsIHZhbHVlOiAncmdiJyB9LFxuICAgICAgICAgICAgeyB0ZXh0OiAnSFNMJywgdmFsdWU6ICdoc2wnIH0sXG4gICAgICAgICAgICB7IHRleHQ6ICdIU1YnLCB2YWx1ZTogJ2hzdicgfSxcbiAgICAgICAgXTtcbiAgICAgICAgc2VsZWN0RWxlbS5hcHBlbmRDaGlsZChpdGVtcy5yZWR1Y2UoKGZyYWcsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICBvcHRFbGVtLnRleHRDb250ZW50ID0gaXRlbS50ZXh0O1xuICAgICAgICAgICAgb3B0RWxlbS52YWx1ZSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKG9wdEVsZW0pO1xuICAgICAgICAgICAgcmV0dXJuIGZyYWc7XG4gICAgICAgIH0sIGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdEVsZW07XG4gICAgfVxuICAgIGNsYXNzIENvbG9yVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDkoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbW9kZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtb2RlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCdtJykpO1xuICAgICAgICAgICAgdGhpcy5tb2RlRWxlbV8gPSBjcmVhdGVNb2RlU2VsZWN0RWxlbWVudChkb2MpO1xuICAgICAgICAgICAgdGhpcy5tb2RlRWxlbV8uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnbXMnKSk7XG4gICAgICAgICAgICBtb2RlRWxlbS5hcHBlbmRDaGlsZCh0aGlzLm1vZGVTZWxlY3RFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKHRoaXMubW9kZUVsZW1fKTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVNYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbW9kZU1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnbW0nKSk7XG4gICAgICAgICAgICBtb2RlTWFya2VyRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdkcm9wZG93bicpKTtcbiAgICAgICAgICAgIG1vZGVFbGVtLmFwcGVuZENoaWxkKG1vZGVNYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtb2RlRWxlbSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0c0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0c0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgndycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0c0VsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0c0VsZW1fID0gdGV4dHNFbGVtO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld3NfID0gY29uZmlnLnRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUZXh0Vmlld3NfKCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLmNvbG9yTW9kZSwgKG1vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVFbGVtXy52YWx1ZSA9IG1vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbW9kZVNlbGVjdEVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlRWxlbV87XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRWaWV3cygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRWaWV3c187XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHRleHRWaWV3cyh0ZXh0Vmlld3MpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzXyA9IHRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUZXh0Vmlld3NfKCk7XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlUZXh0Vmlld3NfKCkge1xuICAgICAgICAgICAgcmVtb3ZlQ2hpbGRFbGVtZW50cyh0aGlzLnRleHRzRWxlbV8pO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3c18uZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGNvbXBFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDkoJ2MnKSk7XG4gICAgICAgICAgICAgICAgY29tcEVsZW0uYXBwZW5kQ2hpbGQodi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRzRWxlbV8uYXBwZW5kQ2hpbGQoY29tcEVsZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGb3JtYXR0ZXIkMih0eXBlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIodHlwZSA9PT0gJ2Zsb2F0JyA/IDIgOiAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludCQ1KG1vZGUsIHR5cGUsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1heCA9IGdldENvbG9yTWF4Q29tcG9uZW50cyhtb2RlLCB0eXBlKVtpbmRleF07XG4gICAgICAgIHJldHVybiBuZXcgRGVmaW5pdGVSYW5nZUNvbnN0cmFpbnQoe1xuICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgbWF4OiBtYXgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyKGRvYywgY29uZmlnLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbmV3IE51bWJlclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgYXJyYXlQb3NpdGlvbjogaW5kZXggPT09IDAgPyAnZnN0JyA6IGluZGV4ID09PSAzIC0gMSA/ICdsc3QnIDogJ21pZCcsXG4gICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSksXG4gICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogY29uZmlnLmNvbG9yVHlwZSA9PT0gJ2Zsb2F0JyA/IDAuMDEgOiAxLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlRm9ybWF0dGVyJDIoY29uZmlnLmNvbG9yVHlwZSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZSgwLCB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludDogY3JlYXRlQ29uc3RyYWludCQ1KGNvbmZpZy5jb2xvck1vZGUsIGNvbmZpZy5jb2xvclR5cGUsIGluZGV4KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xhc3MgQ29sb3JUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uTW9kZVNlbGVjdENoYW5nZV8gPSB0aGlzLm9uTW9kZVNlbGVjdENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuY29sb3JUeXBlXyA9IGNvbmZpZy5jb2xvclR5cGU7XG4gICAgICAgICAgICB0aGlzLnBhcnNlcl8gPSBjb25maWcucGFyc2VyO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuY29sb3JNb2RlID0gY3JlYXRlVmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZS5tb2RlKTtcbiAgICAgICAgICAgIHRoaXMuY2NzXyA9IHRoaXMuY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfKGRvYyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JUZXh0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBjb2xvck1vZGU6IHRoaXMuY29sb3JNb2RlLFxuICAgICAgICAgICAgICAgIHRleHRWaWV3czogW3RoaXMuY2NzX1swXS52aWV3LCB0aGlzLmNjc19bMV0udmlldywgdGhpcy5jY3NfWzJdLnZpZXddLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5tb2RlU2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uTW9kZVNlbGVjdENoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXJzXyhkb2MpIHtcbiAgICAgICAgICAgIGNvbnN0IGNjID0ge1xuICAgICAgICAgICAgICAgIGNvbG9yTW9kZTogdGhpcy5jb2xvck1vZGUucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgY29sb3JUeXBlOiB0aGlzLmNvbG9yVHlwZV8sXG4gICAgICAgICAgICAgICAgcGFyc2VyOiB0aGlzLnBhcnNlcl8sXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjY3MgPSBbXG4gICAgICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcihkb2MsIGNjLCAwKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyKGRvYywgY2MsIDEpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXIoZG9jLCBjYywgMiksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY2NzLmZvckVhY2goKGNzLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IGNzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3J3YXJkOiAocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAucmF3VmFsdWUuZ2V0Q29tcG9uZW50cyh0aGlzLmNvbG9yTW9kZS5yYXdWYWx1ZSwgdGhpcy5jb2xvclR5cGVfKVtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAocCwgcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGlja2VkTW9kZSA9IHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwLnJhd1ZhbHVlLmdldENvbXBvbmVudHMocGlja2VkTW9kZSwgdGhpcy5jb2xvclR5cGVfKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBzW2luZGV4XSA9IHMucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGFwcGVuZEFscGhhQ29tcG9uZW50KHJlbW92ZUFscGhhQ29tcG9uZW50KGNvbXBzKSwgY29tcHNbM10pLCBwaWNrZWRNb2RlLCB0aGlzLmNvbG9yVHlwZV8pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gY2NzO1xuICAgICAgICB9XG4gICAgICAgIG9uTW9kZVNlbGVjdENoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEVsZW0gPSBldi5jdXJyZW50VGFyZ2V0O1xuICAgICAgICAgICAgdGhpcy5jb2xvck1vZGUucmF3VmFsdWUgPSBzZWxlY3RFbGVtLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jY3NfID0gdGhpcy5jcmVhdGVDb21wb25lbnRDb250cm9sbGVyc18odGhpcy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcudGV4dFZpZXdzID0gW1xuICAgICAgICAgICAgICAgIHRoaXMuY2NzX1swXS52aWV3LFxuICAgICAgICAgICAgICAgIHRoaXMuY2NzX1sxXS52aWV3LFxuICAgICAgICAgICAgICAgIHRoaXMuY2NzX1syXS52aWV3LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ4ID0gQ2xhc3NOYW1lKCdocGwnKTtcbiAgICBjbGFzcyBIUGFsZXR0ZVZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDgoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbG9yRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbG9yRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCdtJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1hcmtlckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXyA9IG1hcmtlckVsZW07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaF0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvRnVuY3Rpb25hbFJnYlN0cmluZyhuZXcgQ29sb3IoW2gsIDEwMCwgMTAwXSwgJ2hzdicpKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBtYXBSYW5nZShoLCAwLCAzNjAsIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBIUGFsZXR0ZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbktleURvd25fID0gdGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uS2V5VXBfID0gdGhpcy5vbktleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEhQYWxldHRlVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBodWUgPSBtYXBSYW5nZShjb25zdHJhaW5SYW5nZShkLnBvaW50LngsIDAsIGQuYm91bmRzLndpZHRoKSwgMCwgZC5ib3VuZHMud2lkdGgsIDAsIDM2MCk7XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IFssIHMsIHYsIGFdID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtodWUsIHMsIHYsIGFdLCAnaHN2JyksIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd25fKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJNb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyVXBfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlEb3duXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkoZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSksIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IFtoLCBzLCB2LCBhXSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaCArIHN0ZXAsIHMsIHYsIGFdLCAnaHN2JyksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ3ID0gQ2xhc3NOYW1lKCdzdnAnKTtcbiAgICBjb25zdCBDQU5WQVNfUkVTT0wgPSA2NDtcbiAgICBjbGFzcyBTdlBhbGV0dGVWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ3KCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZFRhYkluZGV4KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjYW52YXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgY2FudmFzRWxlbS5oZWlnaHQgPSBDQU5WQVNfUkVTT0w7XG4gICAgICAgICAgICBjYW52YXNFbGVtLndpZHRoID0gQ0FOVkFTX1JFU09MO1xuICAgICAgICAgICAgY2FudmFzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ3KCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNhbnZhc0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5jYW52YXNFbGVtZW50ID0gY2FudmFzRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDcoJ20nKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya2VyRWxlbSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fID0gbWFya2VyRWxlbTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSBnZXRDYW52YXNDb250ZXh0KHRoaXMuY2FudmFzRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaHN2Q29tcHMgPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNhbnZhc0VsZW1lbnQud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmNhbnZhc0VsZW1lbnQuaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgaW1nRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gaW1nRGF0YS5kYXRhO1xuICAgICAgICAgICAgZm9yIChsZXQgaXkgPSAwOyBpeSA8IGhlaWdodDsgaXkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl4ID0gMDsgaXggPCB3aWR0aDsgaXgrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gbWFwUmFuZ2UoaXgsIDAsIHdpZHRoLCAwLCAxMDApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gbWFwUmFuZ2UoaXksIDAsIGhlaWdodCwgMTAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmdiQ29tcHMgPSBoc3ZUb1JnYkludChoc3ZDb21wc1swXSwgcywgdik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGkgPSAoaXkgKiB3aWR0aCArIGl4KSAqIDQ7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSByZ2JDb21wc1swXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMV0gPSByZ2JDb21wc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMl0gPSByZ2JDb21wc1syXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgM10gPSAyNTU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWdEYXRhLCAwLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBtYXBSYW5nZShoc3ZDb21wc1sxXSwgMCwgMTAwLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7bGVmdH0lYDtcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IG1hcFJhbmdlKGhzdkNvbXBzWzJdLCAwLCAxMDAsIDEwMCwgMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLnRvcCA9IGAke3RvcH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU3ZQYWxldHRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93bl8gPSB0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25LZXlVcF8gPSB0aGlzLm9uS2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgU3ZQYWxldHRlVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzYXR1cmF0aW9uID0gbWFwUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCwgMCwgMTAwKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWFwUmFuZ2UoZC5wb2ludC55LCAwLCBkLmJvdW5kcy5oZWlnaHQsIDEwMCwgMCk7XG4gICAgICAgICAgICBjb25zdCBbaCwgLCAsIGFdID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtoLCBzYXR1cmF0aW9uLCB2YWx1ZSwgYV0sICdoc3YnKSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd25fKGV2KSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJvd0tleShldi5rZXkpKSB7XG4gICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtoLCBzLCB2LCBhXSA9IHRoaXMudmFsdWUucmF3VmFsdWUuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICBjb25zdCBiYXNlU3RlcCA9IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgZHMgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGNvbnN0IGR2ID0gZ2V0U3RlcEZvcktleShiYXNlU3RlcCwgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKGRzID09PSAwICYmIGR2ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHMgKyBkcywgdiArIGR2LCBhXSwgJ2hzdicpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlU3RlcCA9IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgZHMgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGNvbnN0IGR2ID0gZ2V0U3RlcEZvcktleShiYXNlU3RlcCwgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKGRzID09PSAwICYmIGR2ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbG9yUGlja2VyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5oUGFsZXR0ZUNfID0gbmV3IEhQYWxldHRlQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnN2UGFsZXR0ZUNfID0gbmV3IFN2UGFsZXR0ZUNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hbHBoYUljc18gPSBjb25maWcuc3VwcG9ydHNBbHBoYVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBwYWxldHRlOiBuZXcgQVBhbGV0dGVDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogbmV3IE51bWJlclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTdGVwOiAwLjEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogMC4wMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZU51bWJlckZvcm1hdHRlcigyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNyZWF0ZVZhbHVlKDAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50OiBuZXcgRGVmaW5pdGVSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmFscGhhSWNzXykge1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IHRoaXMuYWxwaGFJY3NfLnRleHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKClbM107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAocCwgcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBzWzNdID0gcy5yYXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoY29tcHMsIHAucmF3VmFsdWUubW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBDb2xvclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGNvbG9yVHlwZTogY29uZmlnLmNvbG9yVHlwZSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBDb2xvclBpY2tlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgYWxwaGFWaWV3czogdGhpcy5hbHBoYUljc19cbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlOiB0aGlzLmFscGhhSWNzXy5wYWxldHRlLnZpZXcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmFscGhhSWNzXy50ZXh0LnZpZXcsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIGhQYWxldHRlVmlldzogdGhpcy5oUGFsZXR0ZUNfLnZpZXcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogY29uZmlnLnN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgc3ZQYWxldHRlVmlldzogdGhpcy5zdlBhbGV0dGVDXy52aWV3LFxuICAgICAgICAgICAgICAgIHRleHRWaWV3OiB0aGlzLnRleHRDXy52aWV3LFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGV4dENvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q187XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkNiA9IENsYXNzTmFtZSgnY29sc3cnKTtcbiAgICBjbGFzcyBDb2xvclN3YXRjaFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBzd2F0Y2hFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc3dhdGNoRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ2KCdzdycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzd2F0Y2hFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc3dhdGNoRWxlbV8gPSBzd2F0Y2hFbGVtO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNignYicpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLnN3YXRjaEVsZW1fLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yVG9IZXhSZ2JhU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ29sb3JTd2F0Y2hDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JTd2F0Y2hWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbG9yQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uQnV0dG9uQmx1cl8gPSB0aGlzLm9uQnV0dG9uQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25CdXR0b25DbGlja18gPSB0aGlzLm9uQnV0dG9uQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfID0gdGhpcy5vblBvcHVwQ2hpbGRCbHVyXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXyA9IHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXyA9IEZvbGRhYmxlLmNyZWF0ZShjb25maWcuZXhwYW5kZWQpO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hDXyA9IG5ldyBDb2xvclN3YXRjaENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IHRoaXMuc3dhdGNoQ18udmlldy5idXR0b25FbGVtZW50O1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbkJ1dHRvbkJsdXJfKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQnV0dG9uQ2xpY2tfKTtcbiAgICAgICAgICAgIHRoaXMudGV4dENfID0gbmV3IFRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHBhcnNlcjogY29uZmlnLnBhcnNlcixcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGZvbGRhYmxlOiB0aGlzLmZvbGRhYmxlXyxcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IGNvbmZpZy5waWNrZXJMYXlvdXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5zd2F0Y2hFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc3dhdGNoQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMudmlldy50ZXh0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRleHRDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wb3BDXyA9XG4gICAgICAgICAgICAgICAgY29uZmlnLnBpY2tlckxheW91dCA9PT0gJ3BvcHVwJ1xuICAgICAgICAgICAgICAgICAgICA/IG5ldyBQb3B1cENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBwaWNrZXJDID0gbmV3IENvbG9yUGlja2VyQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBjb2xvclR5cGU6IGNvbmZpZy5jb2xvclR5cGUsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogY29uZmlnLnN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGlja2VyQy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfKTtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5waWNrZXJDXyA9IHBpY2tlckM7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucG9wQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZChwaWNrZXJDLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29ubmVjdFZhbHVlcyh7XG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnk6IHRoaXMuZm9sZGFibGVfLnZhbHVlKCdleHBhbmRlZCcpLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IHRoaXMucG9wQ18uc2hvd3MsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiBwLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZDogKF8sIHMpID0+IHMucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZpZXcucGlja2VyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5waWNrZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGlja2VyQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBiaW5kRm9sZGFibGUodGhpcy5mb2xkYWJsZV8sIHRoaXMudmlldy5waWNrZXJFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgdGV4dENvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q187XG4gICAgICAgIH1cbiAgICAgICAgb25CdXR0b25CbHVyXyhlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0ID0gZm9yY2VDYXN0KGUucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgICBpZiAoIW5leHRUYXJnZXQgfHwgIWVsZW0uY29udGFpbnMobmV4dFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25CdXR0b25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXy5zZXQoJ2V4cGFuZGVkJywgIXRoaXMuZm9sZGFibGVfLmdldCgnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2xkYWJsZV8uZ2V0KCdleHBhbmRlZCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJDXy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkQmx1cl8oZXYpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnBvcENfLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSBmaW5kTmV4dFRhcmdldChldik7XG4gICAgICAgICAgICBpZiAobmV4dFRhcmdldCAmJiBlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHRUYXJnZXQgJiZcbiAgICAgICAgICAgICAgICBuZXh0VGFyZ2V0ID09PSB0aGlzLnN3YXRjaENfLnZpZXcuYnV0dG9uRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICFzdXBwb3J0c1RvdWNoKGVsZW0ub3duZXJEb2N1bWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkS2V5ZG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2F0Y2hDXy52aWV3LmJ1dHRvbkVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb2xvckZyb21PYmplY3QodmFsdWUsIG9wdF90eXBlKSB7XG4gICAgICAgIGlmIChDb2xvci5pc0NvbG9yT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIENvbG9yLmZyb21PYmplY3QodmFsdWUsIG9wdF90eXBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQ29sb3IuYmxhY2sob3B0X3R5cGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvUmdiTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiByZW1vdmVBbHBoYUNvbXBvbmVudCh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKSkucmVkdWNlKChyZXN1bHQsIGNvbXApID0+IHtcbiAgICAgICAgICAgIHJldHVybiAocmVzdWx0IDw8IDgpIHwgKE1hdGguZmxvb3IoY29tcCkgJiAweGZmKTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9SZ2JhTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykucmVkdWNlKChyZXN1bHQsIGNvbXAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoZXggPSBNYXRoLmZsb29yKGluZGV4ID09PSAzID8gY29tcCAqIDI1NSA6IGNvbXApICYgMHhmZjtcbiAgICAgICAgICAgIHJldHVybiAocmVzdWx0IDw8IDgpIHwgaGV4O1xuICAgICAgICB9LCAwKSA+Pj4gMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG51bWJlclRvUmdiQ29sb3IobnVtKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IoWyhudW0gPj4gMTYpICYgMHhmZiwgKG51bSA+PiA4KSAmIDB4ZmYsIG51bSAmIDB4ZmZdLCAncmdiJyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG51bWJlclRvUmdiYUNvbG9yKG51bSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFtcbiAgICAgICAgICAgIChudW0gPj4gMjQpICYgMHhmZixcbiAgICAgICAgICAgIChudW0gPj4gMTYpICYgMHhmZixcbiAgICAgICAgICAgIChudW0gPj4gOCkgJiAweGZmLFxuICAgICAgICAgICAgbWFwUmFuZ2UobnVtICYgMHhmZiwgMCwgMjU1LCAwLCAxKSxcbiAgICAgICAgXSwgJ3JnYicpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvckZyb21SZ2JOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xvci5ibGFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXJUb1JnYkNvbG9yKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JGcm9tUmdiYU51bWJlcih2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIENvbG9yLmJsYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlclRvUmdiYUNvbG9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb2xvclN0cmluZ1dyaXRlcihmb3JtYXQpIHtcbiAgICAgICAgY29uc3Qgc3RyaW5naWZ5ID0gZmluZENvbG9yU3RyaW5naWZpZXIoZm9ybWF0KTtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeVxuICAgICAgICAgICAgPyAodGFyZ2V0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHdyaXRlUHJpbWl0aXZlKHRhcmdldCwgc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yTnVtYmVyV3JpdGVyKHN1cHBvcnRzQWxwaGEpIHtcbiAgICAgICAgY29uc3QgY29sb3JUb051bWJlciA9IHN1cHBvcnRzQWxwaGEgPyBjb2xvclRvUmdiYU51bWJlciA6IGNvbG9yVG9SZ2JOdW1iZXI7XG4gICAgICAgIHJldHVybiAodGFyZ2V0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgd3JpdGVQcmltaXRpdmUodGFyZ2V0LCBjb2xvclRvTnVtYmVyKHZhbHVlKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUmdiYUNvbG9yT2JqZWN0KHRhcmdldCwgdmFsdWUsIG9wdF90eXBlKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHZhbHVlLnRvUmdiYU9iamVjdChvcHRfdHlwZSk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdyJywgb2JqLnIpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnZycsIG9iai5nKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ2InLCBvYmouYik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdhJywgb2JqLmEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZVJnYkNvbG9yT2JqZWN0KHRhcmdldCwgdmFsdWUsIG9wdF90eXBlKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHZhbHVlLnRvUmdiYU9iamVjdChvcHRfdHlwZSk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdyJywgb2JqLnIpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnZycsIG9iai5nKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ2InLCBvYmouYik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yT2JqZWN0V3JpdGVyKHN1cHBvcnRzQWxwaGEsIG9wdF90eXBlKSB7XG4gICAgICAgIHJldHVybiAodGFyZ2V0LCBpblZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydHNBbHBoYSkge1xuICAgICAgICAgICAgICAgIHdyaXRlUmdiYUNvbG9yT2JqZWN0KHRhcmdldCwgaW5WYWx1ZSwgb3B0X3R5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd3JpdGVSZ2JDb2xvck9iamVjdCh0YXJnZXQsIGluVmFsdWUsIG9wdF90eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaG91bGRTdXBwb3J0QWxwaGEkMShpbnB1dFBhcmFtcykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICgoaW5wdXRQYXJhbXMgPT09IG51bGwgfHwgaW5wdXRQYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0UGFyYW1zLmFscGhhKSB8fCAoKF9hID0gaW5wdXRQYXJhbXMgPT09IG51bGwgfHwgaW5wdXRQYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0UGFyYW1zLmNvbG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWxwaGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZvcm1hdHRlciQxKHN1cHBvcnRzQWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzQWxwaGFcbiAgICAgICAgICAgID8gKHYpID0+IGNvbG9yVG9IZXhSZ2JhU3RyaW5nKHYsICcweCcpXG4gICAgICAgICAgICA6ICh2KSA9PiBjb2xvclRvSGV4UmdiU3RyaW5nKHYsICcweCcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0ZvckNvbG9yKHBhcmFtcykge1xuICAgICAgICBpZiAoJ2NvbG9yJyBpbiBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgndmlldycgaW4gcGFyYW1zICYmIHBhcmFtcy52aWV3ID09PSAnY29sb3InKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IE51bWJlckNvbG9ySW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtY29sb3ItbnVtYmVyJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNGb3JDb2xvcihwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbG9ySW5wdXRQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG91bGRTdXBwb3J0QWxwaGEkMShhcmdzLnBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgPyBjb2xvckZyb21SZ2JhTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIDogY29sb3JGcm9tUmdiTnVtYmVyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVxdWFsczogQ29sb3IuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb2xvck51bWJlcldyaXRlcihzaG91bGRTdXBwb3J0QWxwaGEkMShhcmdzLnBhcmFtcykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRzQWxwaGEgPSBzaG91bGRTdXBwb3J0QWxwaGEkMShhcmdzLnBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9ICdleHBhbmRlZCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5leHBhbmRlZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlciA9ICdwaWNrZXInIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMucGlja2VyIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvckNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGNvbG9yVHlwZTogJ2ludCcsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlRm9ybWF0dGVyJDEoc3VwcG9ydHNBbHBoYSksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBjcmVhdGVDb2xvclN0cmluZ1BhcnNlcignaW50JyksXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBwaWNrZXIgIT09IG51bGwgJiYgcGlja2VyICE9PSB2b2lkIDAgPyBwaWNrZXIgOiAncG9wdXAnLFxuICAgICAgICAgICAgICAgIHN1cHBvcnRzQWxwaGE6IHN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBzaG91bGRTdXBwb3J0QWxwaGEoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBDb2xvci5pc1JnYmFDb2xvck9iamVjdChpbml0aWFsVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb2xvck9iamVjdFJlYWRlcihvcHRfdHlwZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sb3JGcm9tT2JqZWN0KHZhbHVlLCBvcHRfdHlwZSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yT2JqZWN0Rm9ybWF0dGVyKHN1cHBvcnRzQWxwaGEsIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRzQWxwaGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sb3JUb09iamVjdFJnYmFTdHJpbmcodmFsdWUsIHR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yVG9PYmplY3RSZ2JTdHJpbmcodmFsdWUsIHR5cGUpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBPYmplY3RDb2xvcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LWNvbG9yLW9iamVjdCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICghQ29sb3IuaXNDb2xvck9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQ29sb3JJbnB1dFBhcmFtcyhwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChhcmdzKSA9PiBjcmVhdGVDb2xvck9iamVjdFJlYWRlcihleHRyYWN0Q29sb3JUeXBlKGFyZ3MucGFyYW1zKSksXG4gICAgICAgICAgICBlcXVhbHM6IENvbG9yLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKGFyZ3MpID0+IGNyZWF0ZUNvbG9yT2JqZWN0V3JpdGVyKHNob3VsZFN1cHBvcnRBbHBoYShhcmdzLmluaXRpYWxWYWx1ZSksIGV4dHJhY3RDb2xvclR5cGUoYXJncy5wYXJhbXMpKSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRzQWxwaGEgPSBDb2xvci5pc1JnYmFDb2xvck9iamVjdChhcmdzLmluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9ICdleHBhbmRlZCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5leHBhbmRlZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlciA9ICdwaWNrZXInIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMucGlja2VyIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IChfYSA9IGV4dHJhY3RDb2xvclR5cGUoYXJncy5wYXJhbXMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnaW50JztcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3JDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBjb2xvclR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlQ29sb3JPYmplY3RGb3JtYXR0ZXIoc3VwcG9ydHNBbHBoYSwgdHlwZSksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBjcmVhdGVDb2xvclN0cmluZ1BhcnNlcih0eXBlKSxcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IFN0cmluZ0NvbG9ySW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtY29sb3Itc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgndmlldycgaW4gcGFyYW1zICYmIHBhcmFtcy52aWV3ID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGRldGVjdFN0cmluZ0NvbG9yRm9ybWF0KHZhbHVlLCBleHRyYWN0Q29sb3JUeXBlKHBhcmFtcykpO1xuICAgICAgICAgICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ2lmaWVyID0gZmluZENvbG9yU3RyaW5naWZpZXIoZm9ybWF0KTtcbiAgICAgICAgICAgIGlmICghc3RyaW5naWZpZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQ29sb3JJbnB1dFBhcmFtcyhwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChhcmdzKSA9PiB7IHZhciBfYTsgcmV0dXJuIGNyZWF0ZUNvbG9yU3RyaW5nQmluZGluZ1JlYWRlcigoX2EgPSBleHRyYWN0Q29sb3JUeXBlKGFyZ3MucGFyYW1zKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ2ludCcpOyB9LFxuICAgICAgICAgICAgZXF1YWxzOiBDb2xvci5lcXVhbHMsXG4gICAgICAgICAgICB3cml0ZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZGV0ZWN0U3RyaW5nQ29sb3JGb3JtYXQoYXJncy5pbml0aWFsVmFsdWUsIGV4dHJhY3RDb2xvclR5cGUoYXJncy5wYXJhbXMpKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHdyaXRlciA9IGNyZWF0ZUNvbG9yU3RyaW5nV3JpdGVyKGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5ub3RCaW5kYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGRldGVjdFN0cmluZ0NvbG9yRm9ybWF0KGFyZ3MuaW5pdGlhbFZhbHVlLCBleHRyYWN0Q29sb3JUeXBlKGFyZ3MucGFyYW1zKSk7XG4gICAgICAgICAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ2lmaWVyID0gZmluZENvbG9yU3RyaW5naWZpZXIoZm9ybWF0KTtcbiAgICAgICAgICAgIGlmICghc3RyaW5naWZpZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9ICdleHBhbmRlZCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5leHBhbmRlZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlciA9ICdwaWNrZXInIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMucGlja2VyIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvckNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGNvbG9yVHlwZTogZm9ybWF0LnR5cGUsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogc3RyaW5naWZpZXIsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBjcmVhdGVDb2xvclN0cmluZ1BhcnNlcihmb3JtYXQudHlwZSksXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBwaWNrZXIgIT09IG51bGwgJiYgcGlja2VyICE9PSB2b2lkIDAgPyBwaWNrZXIgOiAncG9wdXAnLFxuICAgICAgICAgICAgICAgIHN1cHBvcnRzQWxwaGE6IGZvcm1hdC5hbHBoYSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIFBvaW50TmRDb25zdHJhaW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudHMgPSBjb25maWcuY29tcG9uZW50cztcbiAgICAgICAgICAgIHRoaXMuYXNtXyA9IGNvbmZpZy5hc3NlbWJseTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJhaW4odmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gdGhpcy5hc21fXG4gICAgICAgICAgICAgICAgLnRvQ29tcG9uZW50cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAubWFwKChjb21wLCBpbmRleCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5jb21wb25lbnRzW2luZGV4XSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbnN0cmFpbihjb21wKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY29tcDsgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hc21fLmZyb21Db21wb25lbnRzKGNvbXBzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ1ID0gQ2xhc3NOYW1lKCdwbmR0eHQnKTtcbiAgICBjbGFzcyBQb2ludE5kVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld3MgPSBjb25maWcudGV4dFZpZXdzO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDUoKSk7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3cy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXhpc0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgYXhpc0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNSgnYScpKTtcbiAgICAgICAgICAgICAgICBheGlzRWxlbS5hcHBlbmRDaGlsZCh2LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChheGlzRWxlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUF4aXNDb250cm9sbGVyKGRvYywgY29uZmlnLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbmV3IE51bWJlclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgYXJyYXlQb3NpdGlvbjogaW5kZXggPT09IDAgPyAnZnN0JyA6IGluZGV4ID09PSBjb25maWcuYXhlcy5sZW5ndGggLSAxID8gJ2xzdCcgOiAnbWlkJyxcbiAgICAgICAgICAgIGJhc2VTdGVwOiBjb25maWcuYXhlc1tpbmRleF0uYmFzZVN0ZXAsXG4gICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICBwcm9wczogY29uZmlnLmF4ZXNbaW5kZXhdLnRleHRQcm9wcyxcbiAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZSgwLCB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludDogY29uZmlnLmF4ZXNbaW5kZXhdLmNvbnN0cmFpbnQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsYXNzIFBvaW50TmRUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5hY3NfID0gY29uZmlnLmF4ZXMubWFwKChfLCBpbmRleCkgPT4gY3JlYXRlQXhpc0NvbnRyb2xsZXIoZG9jLCBjb25maWcsIGluZGV4KSk7XG4gICAgICAgICAgICB0aGlzLmFjc18uZm9yRWFjaCgoYywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiBjLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3J3YXJkOiAocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5hc3NlbWJseS50b0NvbXBvbmVudHMocC5yYXdWYWx1ZSlbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZDogKHAsIHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gY29uZmlnLmFzc2VtYmx5LnRvQ29tcG9uZW50cyhwLnJhd1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBzW2luZGV4XSA9IHMucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmFzc2VtYmx5LmZyb21Db21wb25lbnRzKGNvbXBzKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFBvaW50TmRUZXh0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB0ZXh0Vmlld3M6IHRoaXMuYWNzXy5tYXAoKGFjKSA9PiBhYy52aWV3KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlU3RlcENvbnN0cmFpbnQocGFyYW1zLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgaWYgKCdzdGVwJyBpbiBwYXJhbXMgJiYgIWlzRW1wdHkocGFyYW1zLnN0ZXApKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0ZXBDb25zdHJhaW50KHBhcmFtcy5zdGVwLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVSYW5nZUNvbnN0cmFpbnQocGFyYW1zKSB7XG4gICAgICAgIGlmICghaXNFbXB0eShwYXJhbXMubWF4KSAmJiAhaXNFbXB0eShwYXJhbXMubWluKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEZWZpbml0ZVJhbmdlQ29uc3RyYWludCh7XG4gICAgICAgICAgICAgICAgbWF4OiBwYXJhbXMubWF4LFxuICAgICAgICAgICAgICAgIG1pbjogcGFyYW1zLm1pbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eShwYXJhbXMubWF4KSB8fCAhaXNFbXB0eShwYXJhbXMubWluKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZUNvbnN0cmFpbnQoe1xuICAgICAgICAgICAgICAgIG1heDogcGFyYW1zLm1heCxcbiAgICAgICAgICAgICAgICBtaW46IHBhcmFtcy5taW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZE51bWJlclJhbmdlKGMpIHtcbiAgICAgICAgY29uc3QgZHJjID0gZmluZENvbnN0cmFpbnQoYywgRGVmaW5pdGVSYW5nZUNvbnN0cmFpbnQpO1xuICAgICAgICBpZiAoZHJjKSB7XG4gICAgICAgICAgICByZXR1cm4gW2RyYy52YWx1ZXMuZ2V0KCdtaW4nKSwgZHJjLnZhbHVlcy5nZXQoJ21heCcpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYyA9IGZpbmRDb25zdHJhaW50KGMsIFJhbmdlQ29uc3RyYWludCk7XG4gICAgICAgIGlmIChyYykge1xuICAgICAgICAgICAgcmV0dXJuIFtyYy5taW5WYWx1ZSwgcmMubWF4VmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDQocGFyYW1zLFxuICAgIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBjb25zdCBzYyA9IGNyZWF0ZVN0ZXBDb25zdHJhaW50KHBhcmFtcywgaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgaWYgKHNjKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHNjKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYyA9IGNyZWF0ZVJhbmdlQ29uc3RyYWludChwYXJhbXMpO1xuICAgICAgICBpZiAocmMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gocmMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxjID0gY3JlYXRlTGlzdENvbnN0cmFpbnQocGFyYW1zLm9wdGlvbnMpO1xuICAgICAgICBpZiAobGMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGNvbnN0IE51bWJlcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LW51bWJlcicsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogcC5vcHRpb25hbC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICBtYXg6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG1pbjogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VMaXN0T3B0aW9ucyksXG4gICAgICAgICAgICAgICAgc3RlcDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IG51bWJlckZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkNChhcmdzLnBhcmFtcywgYXJncy5pbml0aWFsVmFsdWUpLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUHJpbWl0aXZlLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGNvbnN0IGxjID0gYyAmJiBmaW5kQ29uc3RyYWludChjLCBMaXN0Q29uc3RyYWludCk7XG4gICAgICAgICAgICBpZiAobGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpc3RDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IG5ldyBWYWx1ZU1hcCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBsYy52YWx1ZXMudmFsdWUoJ29wdGlvbnMnKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IChfYSA9ICgnZm9ybWF0JyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmZvcm1hdCA6IHVuZGVmaW5lZCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNyZWF0ZU51bWJlckZvcm1hdHRlcihnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMoYywgdmFsdWUucmF3VmFsdWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGRyYyA9IGMgJiYgZmluZENvbnN0cmFpbnQoYywgRGVmaW5pdGVSYW5nZUNvbnN0cmFpbnQpO1xuICAgICAgICAgICAgaWYgKGRyYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2xpZGVyVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXAoYyksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlclByb3BzOiBuZXcgVmFsdWVNYXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWU6IGRyYy52YWx1ZXMudmFsdWUoJ21heCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluVmFsdWU6IGRyYy52YWx1ZXMudmFsdWUoJ21pbicpLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjLCB2YWx1ZS5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjKSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGMsIHZhbHVlLnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnQyZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCkge1xuICAgICAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q29tcG9uZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnldO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc09iamVjdChvYmopIHtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB4ID0gb2JqLng7XG4gICAgICAgICAgICBjb25zdCB5ID0gb2JqLnk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggIT09ICdudW1iZXInIHx8IHR5cGVvZiB5ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gdjEueCA9PT0gdjIueCAmJiB2MS55ID09PSB2Mi55O1xuICAgICAgICB9XG4gICAgICAgIHRvT2JqZWN0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICAgICAgeTogdGhpcy55LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBQb2ludDJkQXNzZW1ibHkgPSB7XG4gICAgICAgIHRvQ29tcG9uZW50czogKHApID0+IHAuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBmcm9tQ29tcG9uZW50czogKGNvbXBzKSA9PiBuZXcgUG9pbnQyZCguLi5jb21wcyksXG4gICAgfTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ0ID0gQ2xhc3NOYW1lKCdwMmQnKTtcbiAgICBjbGFzcyBQb2ludDJkVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLmV4cGFuZGVkLCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJDQodW5kZWZpbmVkLCAnZXhwYW5kZWQnKSkpO1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBoZWFkRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCdoJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGhlYWRFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoJ2InKSk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmFwcGVuZENoaWxkKGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvYywgJ3AyZHBhZCcpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgaGVhZEVsZW0uYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgY29uc3QgdGV4dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCd0JykpO1xuICAgICAgICAgICAgaGVhZEVsZW0uYXBwZW5kQ2hpbGQodGV4dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0RWxlbWVudCA9IHRleHRFbGVtO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5waWNrZXJMYXlvdXQgPT09ICdpbmxpbmUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlja2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBwaWNrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoJ3AnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHBpY2tlckVsZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyRWxlbWVudCA9IHBpY2tlckVsZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDMgPSBDbGFzc05hbWUoJ3AyZHAnKTtcbiAgICBjbGFzcyBQb2ludDJkUGlja2VyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRm9sZGFibGVDaGFuZ2VfID0gdGhpcy5vbkZvbGRhYmxlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaW52ZXJ0c1lfID0gY29uZmlnLmludmVydHNZO1xuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZV8gPSBjb25maWcubWF4VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygpKTtcbiAgICAgICAgICAgIGlmIChjb25maWcubGF5b3V0ID09PSAncG9wdXAnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDModW5kZWZpbmVkLCAncCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBwYWRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgcGFkRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdwJykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgocGFkRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocGFkRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnBhZEVsZW1lbnQgPSBwYWRFbGVtO1xuICAgICAgICAgICAgY29uc3Qgc3ZnRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnc3ZnJyk7XG4gICAgICAgICAgICBzdmdFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ2cnKSk7XG4gICAgICAgICAgICB0aGlzLnBhZEVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fID0gc3ZnRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHhBeGlzRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnbGluZScpO1xuICAgICAgICAgICAgeEF4aXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ2F4JykpO1xuICAgICAgICAgICAgeEF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MScsICcwJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kxJywgJzUwJScpO1xuICAgICAgICAgICAgeEF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MicsICcxMDAlJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kyJywgJzUwJScpO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZCh4QXhpc0VsZW0pO1xuICAgICAgICAgICAgY29uc3QgeUF4aXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdsaW5lJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnYXgnKSk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gxJywgJzUwJScpO1xuICAgICAgICAgICAgeUF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MScsICcwJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gyJywgJzUwJScpO1xuICAgICAgICAgICAgeUF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MicsICcxMDAlJyk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fLmFwcGVuZENoaWxkKHlBeGlzRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBsaW5lRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnbGluZScpO1xuICAgICAgICAgICAgbGluZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnbCcpKTtcbiAgICAgICAgICAgIGxpbmVFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MScsICc1MCUnKTtcbiAgICAgICAgICAgIGxpbmVFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MScsICc1MCUnKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8uYXBwZW5kQ2hpbGQobGluZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5saW5lRWxlbV8gPSBsaW5lRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ20nKSk7XG4gICAgICAgICAgICB0aGlzLnBhZEVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya2VyRWxlbSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fID0gbWFya2VyRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgYWxsRm9jdXNhYmxlRWxlbWVudHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMucGFkRWxlbWVudF07XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IHRoaXMudmFsdWUucmF3VmFsdWUuZ2V0Q29tcG9uZW50cygpO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZV87XG4gICAgICAgICAgICBjb25zdCBweCA9IG1hcFJhbmdlKHgsIC1tYXgsICttYXgsIDAsIDEwMCk7XG4gICAgICAgICAgICBjb25zdCBweSA9IG1hcFJhbmdlKHksIC1tYXgsICttYXgsIDAsIDEwMCk7XG4gICAgICAgICAgICBjb25zdCBpcHkgPSB0aGlzLmludmVydHNZXyA/IDEwMCAtIHB5IDogcHk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDInLCBgJHtweH0lYCk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTInLCBgJHtpcHl9JWApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7cHh9JWA7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLnRvcCA9IGAke2lweX0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIG9uRm9sZGFibGVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0KGV2LCBiYXNlU3RlcHMsIGludmVydHNZKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwc1swXSwgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSksXG4gICAgICAgICAgICBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwc1sxXSwgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpICogKGludmVydHNZID8gMSA6IC0xKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgY2xhc3MgUG9pbnQyZFBpY2tlckNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblBhZEtleURvd25fID0gdGhpcy5vblBhZEtleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFkS2V5VXBfID0gdGhpcy5vblBhZEtleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5iYXNlU3RlcHNfID0gY29uZmlnLmJhc2VTdGVwcztcbiAgICAgICAgICAgIHRoaXMubWF4VmFsdWVfID0gY29uZmlnLm1heFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pbnZlcnRzWV8gPSBjb25maWcuaW52ZXJ0c1k7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUG9pbnQyZFBpY2tlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgaW52ZXJ0c1k6IHRoaXMuaW52ZXJ0c1lfLFxuICAgICAgICAgICAgICAgIGxheW91dDogY29uZmlnLmxheW91dCxcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZTogdGhpcy5tYXhWYWx1ZV8sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5wYWRFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnBhZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25QYWRLZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcucGFkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25QYWRLZXlVcF8pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVBvaW50ZXJFdmVudF8oZCwgb3B0cykge1xuICAgICAgICAgICAgaWYgKCFkLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZV87XG4gICAgICAgICAgICBjb25zdCBweCA9IG1hcFJhbmdlKGQucG9pbnQueCwgMCwgZC5ib3VuZHMud2lkdGgsIC1tYXgsICttYXgpO1xuICAgICAgICAgICAgY29uc3QgcHkgPSBtYXBSYW5nZSh0aGlzLmludmVydHNZXyA/IGQuYm91bmRzLmhlaWdodCAtIGQucG9pbnQueSA6IGQucG9pbnQueSwgMCwgZC5ib3VuZHMuaGVpZ2h0LCAtbWF4LCArbWF4KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IFBvaW50MmQocHgsIHB5KSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZEtleURvd25fKGV2KSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJvd0tleShldi5rZXkpKSB7XG4gICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtkeCwgZHldID0gY29tcHV0ZU9mZnNldChldiwgdGhpcy5iYXNlU3RlcHNfLCB0aGlzLmludmVydHNZXyk7XG4gICAgICAgICAgICBpZiAoZHggPT09IDAgJiYgZHkgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBQb2ludDJkKHRoaXMudmFsdWUucmF3VmFsdWUueCArIGR4LCB0aGlzLnZhbHVlLnJhd1ZhbHVlLnkgKyBkeSksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWRLZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IFtkeCwgZHldID0gY29tcHV0ZU9mZnNldChldiwgdGhpcy5iYXNlU3RlcHNfLCB0aGlzLmludmVydHNZXyk7XG4gICAgICAgICAgICBpZiAoZHggPT09IDAgJiYgZHkgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUG9pbnQyZENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRoaXMub25Qb3B1cENoaWxkQmx1cl8gPSB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fID0gdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZEJ1dHRvbkJsdXJfID0gdGhpcy5vblBhZEJ1dHRvbkJsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFkQnV0dG9uQ2xpY2tfID0gdGhpcy5vblBhZEJ1dHRvbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfID0gRm9sZGFibGUuY3JlYXRlKGNvbmZpZy5leHBhbmRlZCk7XG4gICAgICAgICAgICB0aGlzLnBvcENfID1cbiAgICAgICAgICAgICAgICBjb25maWcucGlja2VyTGF5b3V0ID09PSAncG9wdXAnXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IFBvcHVwQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHBhZEMgPSBuZXcgUG9pbnQyZFBpY2tlckNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXBzOiBbY29uZmlnLmF4ZXNbMF0uYmFzZVN0ZXAsIGNvbmZpZy5heGVzWzFdLmJhc2VTdGVwXSxcbiAgICAgICAgICAgICAgICBpbnZlcnRzWTogY29uZmlnLmludmVydHNZLFxuICAgICAgICAgICAgICAgIGxheW91dDogY29uZmlnLnBpY2tlckxheW91dCxcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZTogY29uZmlnLm1heFZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhZEMudmlldy5hbGxGb2N1c2FibGVFbGVtZW50cy5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vblBvcHVwQ2hpbGRCbHVyXyk7XG4gICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ18gPSBwYWRDO1xuICAgICAgICAgICAgdGhpcy50ZXh0Q18gPSBuZXcgUG9pbnROZFRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDJkQXNzZW1ibHksXG4gICAgICAgICAgICAgICAgYXhlczogY29uZmlnLmF4ZXMsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb2ludDJkVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogdGhpcy5mb2xkYWJsZV8udmFsdWUoJ2V4cGFuZGVkJyksXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBjb25maWcucGlja2VyTGF5b3V0LFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy50ZXh0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRleHRDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgKF9hID0gdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vblBhZEJ1dHRvbkJsdXJfKTtcbiAgICAgICAgICAgIChfYiA9IHRoaXMudmlldy5idXR0b25FbGVtZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uUGFkQnV0dG9uQ2xpY2tfKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wb3BDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9wQ18udmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGlja2VyQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy5mb2xkYWJsZV8udmFsdWUoJ2V4cGFuZGVkJyksXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeTogdGhpcy5wb3BDXy5zaG93cyxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHAucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAoXywgcykgPT4gcy5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5waWNrZXJDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJpbmRGb2xkYWJsZSh0aGlzLmZvbGRhYmxlXywgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUGFkQnV0dG9uQmx1cl8oZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMudmlldy5lbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbmV4dFRhcmdldCA9IGZvcmNlQ2FzdChlLnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgICAgaWYgKCFuZXh0VGFyZ2V0IHx8ICFlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUGFkQnV0dG9uQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8uc2V0KCdleHBhbmRlZCcsICF0aGlzLmZvbGRhYmxlXy5nZXQoJ2V4cGFuZGVkJykpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9sZGFibGVfLmdldCgnZXhwYW5kZWQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyQ18udmlldy5hbGxGb2N1c2FibGVFbGVtZW50c1swXS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUG9wdXBDaGlsZEJsdXJfKGV2KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy5wb3BDXy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0ID0gZmluZE5leHRUYXJnZXQoZXYpO1xuICAgICAgICAgICAgaWYgKG5leHRUYXJnZXQgJiYgZWxlbS5jb250YWlucyhuZXh0VGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0VGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgbmV4dFRhcmdldCA9PT0gdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAhc3VwcG9ydHNUb3VjaChlbGVtLm93bmVyRG9jdW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9wdXBDaGlsZEtleWRvd25fKGV2KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIGlmIChldi5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZpZXcucGlja2VyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChldi5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUG9pbnQzZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgeiA9IDApIHtcbiAgICAgICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICAgICAgdGhpcy56ID0gejtcbiAgICAgICAgfVxuICAgICAgICBnZXRDb21wb25lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLngsIHRoaXMueSwgdGhpcy56XTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShvYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeCA9IG9iai54O1xuICAgICAgICAgICAgY29uc3QgeSA9IG9iai55O1xuICAgICAgICAgICAgY29uc3QgeiA9IG9iai56O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB5ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB6ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gdjEueCA9PT0gdjIueCAmJiB2MS55ID09PSB2Mi55ICYmIHYxLnogPT09IHYyLno7XG4gICAgICAgIH1cbiAgICAgICAgdG9PYmplY3QoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMueCxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICAgICAgejogdGhpcy56LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBQb2ludDNkQXNzZW1ibHkgPSB7XG4gICAgICAgIHRvQ29tcG9uZW50czogKHApID0+IHAuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBmcm9tQ29tcG9uZW50czogKGNvbXBzKSA9PiBuZXcgUG9pbnQzZCguLi5jb21wcyksXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvaW50M2RGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gUG9pbnQzZC5pc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgID8gbmV3IFBvaW50M2QodmFsdWUueCwgdmFsdWUueSwgdmFsdWUueilcbiAgICAgICAgICAgIDogbmV3IFBvaW50M2QoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd3JpdGVQb2ludDNkKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3gnLCB2YWx1ZS54KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3knLCB2YWx1ZS55KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3onLCB2YWx1ZS56KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDMocGFyYW1zLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kQ29uc3RyYWludCh7XG4gICAgICAgICAgICBhc3NlbWJseTogUG9pbnQzZEFzc2VtYmx5LFxuICAgICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3gnIGluIHBhcmFtcyA/IHBhcmFtcy54IDogdW5kZWZpbmVkLCBpbml0aWFsVmFsdWUueCksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneScgaW4gcGFyYW1zID8gcGFyYW1zLnkgOiB1bmRlZmluZWQsIGluaXRpYWxWYWx1ZS55KSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd6JyBpbiBwYXJhbXMgPyBwYXJhbXMueiA6IHVuZGVmaW5lZCwgaW5pdGlhbFZhbHVlLnopLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUF4aXMkMihpbml0aWFsVmFsdWUsIGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjb25zdHJhaW50KSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnQsXG4gICAgICAgICAgICB0ZXh0UHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBQb2ludDNkSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtcG9pbnQzZCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICghUG9pbnQzZC5pc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgeDogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgeTogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgejogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHBvaW50M2RGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDMoYXJncy5wYXJhbXMsIGFyZ3MuaW5pdGlhbFZhbHVlKSxcbiAgICAgICAgICAgIGVxdWFsczogUG9pbnQzZC5lcXVhbHMsXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQb2ludDNkLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmICghKGMgaW5zdGFuY2VvZiBQb2ludE5kQ29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50TmRUZXh0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50M2RBc3NlbWJseSxcbiAgICAgICAgICAgICAgICBheGVzOiBbXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMih2YWx1ZS5yYXdWYWx1ZS54LCBjLmNvbXBvbmVudHNbMF0pLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVBeGlzJDIodmFsdWUucmF3VmFsdWUueSwgYy5jb21wb25lbnRzWzFdKSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXhpcyQyKHZhbHVlLnJhd1ZhbHVlLnosIGMuY29tcG9uZW50c1syXSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIFBvaW50NGQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwLCB3ID0gMCkge1xuICAgICAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgICAgICB0aGlzLnogPSB6O1xuICAgICAgICAgICAgdGhpcy53ID0gdztcbiAgICAgICAgfVxuICAgICAgICBnZXRDb21wb25lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLnddO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc09iamVjdChvYmopIHtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB4ID0gb2JqLng7XG4gICAgICAgICAgICBjb25zdCB5ID0gb2JqLnk7XG4gICAgICAgICAgICBjb25zdCB6ID0gb2JqLno7XG4gICAgICAgICAgICBjb25zdCB3ID0gb2JqLnc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHkgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHogIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHcgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGVxdWFscyh2MSwgdjIpIHtcbiAgICAgICAgICAgIHJldHVybiB2MS54ID09PSB2Mi54ICYmIHYxLnkgPT09IHYyLnkgJiYgdjEueiA9PT0gdjIueiAmJiB2MS53ID09PSB2Mi53O1xuICAgICAgICB9XG4gICAgICAgIHRvT2JqZWN0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICAgICAgeTogdGhpcy55LFxuICAgICAgICAgICAgICAgIHo6IHRoaXMueixcbiAgICAgICAgICAgICAgICB3OiB0aGlzLncsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IFBvaW50NGRBc3NlbWJseSA9IHtcbiAgICAgICAgdG9Db21wb25lbnRzOiAocCkgPT4gcC5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIGZyb21Db21wb25lbnRzOiAoY29tcHMpID0+IG5ldyBQb2ludDRkKC4uLmNvbXBzKSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcG9pbnQ0ZEZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBQb2ludDRkLmlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgICAgPyBuZXcgUG9pbnQ0ZCh2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KVxuICAgICAgICAgICAgOiBuZXcgUG9pbnQ0ZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZVBvaW50NGQodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneCcsIHZhbHVlLngpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneScsIHZhbHVlLnkpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneicsIHZhbHVlLnopO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgndycsIHZhbHVlLncpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkMihwYXJhbXMsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50TmRDb25zdHJhaW50KHtcbiAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDRkQXNzZW1ibHksXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneCcgaW4gcGFyYW1zID8gcGFyYW1zLnggOiB1bmRlZmluZWQsIGluaXRpYWxWYWx1ZS54KSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd5JyBpbiBwYXJhbXMgPyBwYXJhbXMueSA6IHVuZGVmaW5lZCwgaW5pdGlhbFZhbHVlLnkpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3onIGluIHBhcmFtcyA/IHBhcmFtcy56IDogdW5kZWZpbmVkLCBpbml0aWFsVmFsdWUueiksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgndycgaW4gcGFyYW1zID8gcGFyYW1zLncgOiB1bmRlZmluZWQsIGluaXRpYWxWYWx1ZS53KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVBeGlzJDEoaW5pdGlhbFZhbHVlLCBjb25zdHJhaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXAoY29uc3RyYWludCksXG4gICAgICAgICAgICBjb25zdHJhaW50OiBjb25zdHJhaW50LFxuICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiBnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUoY29uc3RyYWludCwgaW5pdGlhbFZhbHVlKSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZU51bWJlckZvcm1hdHRlcihnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMoY29uc3RyYWludCwgaW5pdGlhbFZhbHVlKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgUG9pbnQ0ZElucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LXBvaW50NGQnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVBvaW50NGQuaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIHg6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMpLFxuICAgICAgICAgICAgICAgIHk6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMpLFxuICAgICAgICAgICAgICAgIHo6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMpLFxuICAgICAgICAgICAgICAgIHc6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBwb2ludDRkRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludCQyKGFyZ3MucGFyYW1zLCBhcmdzLmluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICBlcXVhbHM6IFBvaW50NGQuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUG9pbnQ0ZCxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoIShjIGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDRkQXNzZW1ibHksXG4gICAgICAgICAgICAgICAgYXhlczogdmFsdWUucmF3VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLmdldENvbXBvbmVudHMoKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjb21wLCBpbmRleCkgPT4gY3JlYXRlQXhpcyQxKGNvbXAsIGMuY29tcG9uZW50c1tpbmRleF0pKSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkMShwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgY29uc3QgbGMgPSBjcmVhdGVMaXN0Q29uc3RyYWludChwYXJhbXMub3B0aW9ucyk7XG4gICAgICAgIGlmIChsYykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChsYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb3NpdGVDb25zdHJhaW50KGNvbnN0cmFpbnRzKTtcbiAgICB9XG4gICAgY29uc3QgU3RyaW5nSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VMaXN0T3B0aW9ucyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHN0cmluZ0Zyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkMShhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQcmltaXRpdmUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhcmdzLmRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGNvbnN0IGxjID0gYyAmJiBmaW5kQ29uc3RyYWludChjLCBMaXN0Q29uc3RyYWludCk7XG4gICAgICAgICAgICBpZiAobGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpc3RDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogbmV3IFZhbHVlTWFwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxjLnZhbHVlcy52YWx1ZSgnb3B0aW9ucycpLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwYXJzZXI6ICh2KSA9PiB2LFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXRTdHJpbmcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgQ29uc3RhbnRzID0ge1xuICAgICAgICBtb25pdG9yOiB7XG4gICAgICAgICAgICBkZWZhdWx0SW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgICAgIGRlZmF1bHRMaW5lQ291bnQ6IDMsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSQyID0gQ2xhc3NOYW1lKCdtbGwnKTtcbiAgICBjbGFzcyBNdWx0aUxvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVyXyA9IGNvbmZpZy5mb3JtYXR0ZXI7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0YXJlYUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgICAgIHRleHRhcmVhRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQyKCdpJykpO1xuICAgICAgICAgICAgdGV4dGFyZWFFbGVtLnN0eWxlLmhlaWdodCA9IGBjYWxjKHZhcigtLWJsZC11cykgKiAke2NvbmZpZy5saW5lQ291bnR9KWA7XG4gICAgICAgICAgICB0ZXh0YXJlYUVsZW0ucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQodGV4dGFyZWFFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0YXJlYUVsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0YXJlYUVsZW1fID0gdGV4dGFyZWFFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZVVwZGF0ZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy50ZXh0YXJlYUVsZW1fO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2Nyb2xsID0gZWxlbS5zY3JvbGxUb3AgPT09IGVsZW0uc2Nyb2xsSGVpZ2h0IC0gZWxlbS5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2godGhpcy5mb3JtYXR0ZXJfKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbGVtLnRleHRDb250ZW50ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5zY3JvbGxUb3AgPSBlbGVtLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlVXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTXVsdGlMb2dDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgTXVsdGlMb2dWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IGNvbmZpZy5saW5lQ291bnQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDEgPSBDbGFzc05hbWUoJ3NnbCcpO1xuICAgIGNsYXNzIFNpbmdsZUxvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVyXyA9IGNvbmZpZy5mb3JtYXR0ZXI7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQxKCdpJykpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlVXBkYXRlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBsYXN0VmFsdWUgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPVxuICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5mb3JtYXR0ZXJfKGxhc3RWYWx1ZSkgOiAnJztcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlVXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2luZ2xlTG9nQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFNpbmdsZUxvZ1ZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjb25maWcuZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IEJvb2xlYW5Nb25pdG9yUGx1Z2luID0ge1xuICAgICAgICBpZDogJ21vbml0b3ItYm9vbCcsXG4gICAgICAgIHR5cGU6ICdtb25pdG9yJyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IGJvb2xGcm9tVW5rbm93bixcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmIChhcmdzLnZhbHVlLnJhd1ZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogQm9vbGVhbkZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBCb29sZWFuRm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogKF9hID0gYXJncy5wYXJhbXMubGluZUNvdW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBDb25zdGFudHMubW9uaXRvci5kZWZhdWx0TGluZUNvdW50LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NOYW1lKCdncmwnKTtcbiAgICBjbGFzcyBHcmFwaExvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkN1cnNvckNoYW5nZV8gPSB0aGlzLm9uQ3Vyc29yQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8gPSBjb25maWcuY3Vyc29yO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DdXJzb3JDaGFuZ2VfKTtcbiAgICAgICAgICAgIGNvbnN0IHN2Z0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICAgICAgc3ZnRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnZycpKTtcbiAgICAgICAgICAgIHN2Z0VsZW0uc3R5bGUuaGVpZ2h0ID0gYGNhbGModmFyKC0tYmxkLXVzKSAqICR7Y29uZmlnLmxpbmVDb3VudH0pYDtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzdmdFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8gPSBzdmdFbGVtO1xuICAgICAgICAgICAgY29uc3QgbGluZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3BvbHlsaW5lJyk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fLmFwcGVuZENoaWxkKGxpbmVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubGluZUVsZW1fID0gbGluZUVsZW07XG4gICAgICAgICAgICBjb25zdCB0b29sdGlwRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCd0JyksIENsYXNzTmFtZSgndHQnKSgpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0b29sdGlwRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBFbGVtXyA9IHRvb2x0aXBFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZVVwZGF0ZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBncmFwaEVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdmdFbGVtXztcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5zdmdFbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgY29uc3QgbWluID0gdGhpcy5wcm9wc18uZ2V0KCdtaW5WYWx1ZScpO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5wcm9wc18uZ2V0KCdtYXhWYWx1ZScpO1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlLmZvckVhY2goKHYsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBtYXBSYW5nZShpbmRleCwgMCwgbWF4SW5kZXgsIDAsIGJvdW5kcy53aWR0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IG1hcFJhbmdlKHYsIG1pbiwgbWF4LCBib3VuZHMuaGVpZ2h0LCAwKTtcbiAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbeCwgeV0uam9pbignLCcpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5saW5lRWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3BvaW50cycsIHBvaW50cy5qb2luKCcgJykpO1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcEVsZW0gPSB0aGlzLnRvb2x0aXBFbGVtXztcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZS5yYXdWYWx1ZVt0aGlzLmN1cnNvcl8ucmF3VmFsdWVdO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSgndCcsICdhJykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHR4ID0gbWFwUmFuZ2UodGhpcy5jdXJzb3JfLnJhd1ZhbHVlLCAwLCBtYXhJbmRleCwgMCwgYm91bmRzLndpZHRoKTtcbiAgICAgICAgICAgIGNvbnN0IHR5ID0gbWFwUmFuZ2UodmFsdWUsIG1pbiwgbWF4LCBib3VuZHMuaGVpZ2h0LCAwKTtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtLnN0eWxlLmxlZnQgPSBgJHt0eH1weGA7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS5zdHlsZS50b3AgPSBgJHt0eX1weGA7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS50ZXh0Q29udGVudCA9IGAke3RoaXMuZm9ybWF0dGVyXyh2YWx1ZSl9YDtcbiAgICAgICAgICAgIGlmICghdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSgndCcsICdhJykpKSB7XG4gICAgICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3QnLCAnYScpLCBjbGFzc05hbWUoJ3QnLCAnaW4nKSk7XG4gICAgICAgICAgICAgICAgZm9yY2VSZWZsb3codG9vbHRpcEVsZW0pO1xuICAgICAgICAgICAgICAgIHRvb2x0aXBFbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKCd0JywgJ2luJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVVcGRhdGVfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25DdXJzb3JDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBHcmFwaExvZ0NvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoTW91c2VNb3ZlXyA9IHRoaXMub25HcmFwaE1vdXNlTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaE1vdXNlTGVhdmVfID0gdGhpcy5vbkdyYXBoTW91c2VMZWF2ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaFBvaW50ZXJEb3duXyA9IHRoaXMub25HcmFwaFBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoUG9pbnRlck1vdmVfID0gdGhpcy5vbkdyYXBoUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhQb2ludGVyVXBfID0gdGhpcy5vbkdyYXBoUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfID0gY3JlYXRlVmFsdWUoLTEpO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEdyYXBoTG9nVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuY3Vyc29yXyxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbmZpZy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgbGluZUNvdW50OiBjb25maWcubGluZUNvdW50LFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzXyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXN1cHBvcnRzVG91Y2goZG9jKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25HcmFwaE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLm9uR3JhcGhNb3VzZUxlYXZlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaCA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbignZG93bicsIHRoaXMub25HcmFwaFBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbignbW92ZScsIHRoaXMub25HcmFwaFBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbigndXAnLCB0aGlzLm9uR3JhcGhQb2ludGVyVXBfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoTW91c2VMZWF2ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8ucmF3VmFsdWUgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoTW91c2VNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy52aWV3LmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8ucmF3VmFsdWUgPSBNYXRoLmZsb29yKG1hcFJhbmdlKGV2Lm9mZnNldFgsIDAsIGJvdW5kcy53aWR0aCwgMCwgdGhpcy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoUG9pbnRlckRvd25fKGV2KSB7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhQb2ludGVyTW92ZV8oZXYpO1xuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhQb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGlmICghZXYuZGF0YS5wb2ludCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5yYXdWYWx1ZSA9IC0xO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5yYXdWYWx1ZSA9IE1hdGguZmxvb3IobWFwUmFuZ2UoZXYuZGF0YS5wb2ludC54LCAwLCBldi5kYXRhLmJvdW5kcy53aWR0aCwgMCwgdGhpcy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoUG9pbnRlclVwXygpIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5yYXdWYWx1ZSA9IC0xO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVyKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gJ2Zvcm1hdCcgaW4gcGFyYW1zICYmICFpc0VtcHR5KHBhcmFtcy5mb3JtYXQpXG4gICAgICAgICAgICA/IHBhcmFtcy5mb3JtYXRcbiAgICAgICAgICAgIDogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVUZXh0TW9uaXRvcihhcmdzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGFyZ3MudmFsdWUucmF3VmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlRm9ybWF0dGVyKGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgbGluZUNvdW50OiAoX2EgPSBhcmdzLnBhcmFtcy5saW5lQ291bnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRMaW5lQ291bnQsXG4gICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVHcmFwaE1vbml0b3IoYXJncykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgcmV0dXJuIG5ldyBHcmFwaExvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgbGluZUNvdW50OiAoX2EgPSBhcmdzLnBhcmFtcy5saW5lQ291bnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRMaW5lQ291bnQsXG4gICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IChfYiA9ICgnbWF4JyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLm1heCA6IG51bGwpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxMDAsXG4gICAgICAgICAgICAgICAgbWluVmFsdWU6IChfYyA9ICgnbWluJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLm1pbiA6IG51bGwpKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRTaG93R3JhcGgocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiAndmlldycgaW4gcGFyYW1zICYmIHBhcmFtcy52aWV3ID09PSAnZ3JhcGgnO1xuICAgIH1cbiAgICBjb25zdCBOdW1iZXJNb25pdG9yUGx1Z2luID0ge1xuICAgICAgICBpZDogJ21vbml0b3ItbnVtYmVyJyxcbiAgICAgICAgdHlwZTogJ21vbml0b3InLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHAub3B0aW9uYWwuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgbGluZUNvdW50OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICBtYXg6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG1pbjogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgdmlldzogcC5vcHRpb25hbC5zdHJpbmcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgZGVmYXVsdEJ1ZmZlclNpemU6IChwYXJhbXMpID0+IChzaG91bGRTaG93R3JhcGgocGFyYW1zKSA/IDY0IDogMSksXG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gbnVtYmVyRnJvbVVua25vd24sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0dyYXBoKGFyZ3MucGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVHcmFwaE1vbml0b3IoYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlVGV4dE1vbml0b3IoYXJncyk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IFN0cmluZ01vbml0b3JQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnbW9uaXRvci1zdHJpbmcnLFxuICAgICAgICB0eXBlOiAnbW9uaXRvcicsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgbXVsdGlsaW5lOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHN0cmluZ0Zyb21Vbmtub3duLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgbXVsdGlsaW5lID0gdmFsdWUucmF3VmFsdWUubGVuZ3RoID4gMSB8fFxuICAgICAgICAgICAgICAgICgnbXVsdGlsaW5lJyBpbiBhcmdzLnBhcmFtcyAmJiBhcmdzLnBhcmFtcy5tdWx0aWxpbmUpO1xuICAgICAgICAgICAgaWYgKG11bHRpbGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXVsdGlMb2dDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXRTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudDogKF9hID0gYXJncy5wYXJhbXMubGluZUNvdW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBDb25zdGFudHMubW9uaXRvci5kZWZhdWx0TGluZUNvdW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0U3RyaW5nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIElucHV0QmluZGluZyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVhZGVyID0gY29uZmlnLnJlYWRlcjtcbiAgICAgICAgICAgIHRoaXMud3JpdGVyID0gY29uZmlnLndyaXRlcjtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gY29uZmlnLnRhcmdldDtcbiAgICAgICAgICAgIHRoaXMucmVhZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRoaXMudGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHRoaXMucmVhZGVyKHRhcmdldFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3cml0ZV8ocmF3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVyKHRoaXMudGFyZ2V0LCByYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZUNoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVfKGV2LnJhd1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXYub3B0aW9ucyxcbiAgICAgICAgICAgICAgICByYXdWYWx1ZTogZXYucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnB1dEJpbmRpbmdDb250cm9sbGVyKHBsdWdpbiwgYXJncykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwbHVnaW4uYWNjZXB0KGFyZ3MudGFyZ2V0LnJlYWQoKSwgYXJncy5wYXJhbXMpO1xuICAgICAgICBpZiAoaXNFbXB0eShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgY29uc3QgdmFsdWVBcmdzID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiBhcmdzLnRhcmdldCxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogcmVzdWx0LmluaXRpYWxWYWx1ZSxcbiAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LnBhcmFtcyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gcGx1Z2luLmJpbmRpbmcucmVhZGVyKHZhbHVlQXJncyk7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBwbHVnaW4uYmluZGluZy5jb25zdHJhaW50XG4gICAgICAgICAgICA/IHBsdWdpbi5iaW5kaW5nLmNvbnN0cmFpbnQodmFsdWVBcmdzKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY3JlYXRlVmFsdWUocmVhZGVyKHJlc3VsdC5pbml0aWFsVmFsdWUpLCB7XG4gICAgICAgICAgICBjb25zdHJhaW50OiBjb25zdHJhaW50LFxuICAgICAgICAgICAgZXF1YWxzOiBwbHVnaW4uYmluZGluZy5lcXVhbHMsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaW5kaW5nID0gbmV3IElucHV0QmluZGluZyh7XG4gICAgICAgICAgICByZWFkZXI6IHJlYWRlcixcbiAgICAgICAgICAgIHRhcmdldDogYXJncy50YXJnZXQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB3cml0ZXI6IHBsdWdpbi5iaW5kaW5nLndyaXRlcih2YWx1ZUFyZ3MpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBwLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXMuZGlzYWJsZWQpLnZhbHVlO1xuICAgICAgICBjb25zdCBoaWRkZW4gPSBwLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXMuaGlkZGVuKS52YWx1ZTtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IHBsdWdpbi5jb250cm9sbGVyKHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnQsXG4gICAgICAgICAgICBkb2N1bWVudDogYXJncy5kb2N1bWVudCxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogcmVzdWx0LmluaXRpYWxWYWx1ZSxcbiAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LnBhcmFtcyxcbiAgICAgICAgICAgIHZhbHVlOiBiaW5kaW5nLnZhbHVlLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBoaWRkZW4sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcC5vcHRpb25hbC5zdHJpbmcoYXJncy5wYXJhbXMubGFiZWwpLnZhbHVlO1xuICAgICAgICByZXR1cm4gbmV3IElucHV0QmluZGluZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgYmluZGluZzogYmluZGluZyxcbiAgICAgICAgICAgIGJsYWRlOiBjcmVhdGVCbGFkZSgpLFxuICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCAhPT0gbnVsbCAmJiBsYWJlbCAhPT0gdm9pZCAwID8gbGFiZWwgOiBhcmdzLnRhcmdldC5rZXksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgTW9uaXRvckJpbmRpbmcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25UaWNrXyA9IHRoaXMub25UaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5yZWFkZXJfID0gY29uZmlnLnJlYWRlcjtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gY29uZmlnLnRhcmdldDtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy50aWNrZXIgPSBjb25maWcudGlja2VyO1xuICAgICAgICAgICAgdGhpcy50aWNrZXIuZW1pdHRlci5vbigndGljaycsIHRoaXMub25UaWNrXyk7XG4gICAgICAgICAgICB0aGlzLnJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkge1xuICAgICAgICAgICAgdGhpcy50aWNrZXIuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRoaXMudGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5yZWFkZXJfKHRhcmdldFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSBjcmVhdGVQdXNoZWRCdWZmZXIoYnVmZmVyLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgIHJhd1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblRpY2tfKF8pIHtcbiAgICAgICAgICAgIHRoaXMucmVhZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVGlja2VyKGRvY3VtZW50LCBpbnRlcnZhbCkge1xuICAgICAgICByZXR1cm4gaW50ZXJ2YWwgPT09IDBcbiAgICAgICAgICAgID8gbmV3IE1hbnVhbFRpY2tlcigpXG4gICAgICAgICAgICA6IG5ldyBJbnRlcnZhbFRpY2tlcihkb2N1bWVudCwgaW50ZXJ2YWwgIT09IG51bGwgJiYgaW50ZXJ2YWwgIT09IHZvaWQgMCA/IGludGVydmFsIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdEludGVydmFsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKHBsdWdpbiwgYXJncykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgY29uc3QgUCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBsdWdpbi5hY2NlcHQoYXJncy50YXJnZXQucmVhZCgpLCBhcmdzLnBhcmFtcyk7XG4gICAgICAgIGlmIChpc0VtcHR5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpbmRpbmdBcmdzID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiBhcmdzLnRhcmdldCxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogcmVzdWx0LmluaXRpYWxWYWx1ZSxcbiAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LnBhcmFtcyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gcGx1Z2luLmJpbmRpbmcucmVhZGVyKGJpbmRpbmdBcmdzKTtcbiAgICAgICAgY29uc3QgYnVmZmVyU2l6ZSA9IChfYiA9IChfYSA9IFAub3B0aW9uYWwubnVtYmVyKGFyZ3MucGFyYW1zLmJ1ZmZlclNpemUpLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAocGx1Z2luLmJpbmRpbmcuZGVmYXVsdEJ1ZmZlclNpemUgJiZcbiAgICAgICAgICAgIHBsdWdpbi5iaW5kaW5nLmRlZmF1bHRCdWZmZXJTaXplKHJlc3VsdC5wYXJhbXMpKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMTtcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBQLm9wdGlvbmFsLm51bWJlcihhcmdzLnBhcmFtcy5pbnRlcnZhbCkudmFsdWU7XG4gICAgICAgIGNvbnN0IGJpbmRpbmcgPSBuZXcgTW9uaXRvckJpbmRpbmcoe1xuICAgICAgICAgICAgcmVhZGVyOiByZWFkZXIsXG4gICAgICAgICAgICB0YXJnZXQ6IGFyZ3MudGFyZ2V0LFxuICAgICAgICAgICAgdGlja2VyOiBjcmVhdGVUaWNrZXIoYXJncy5kb2N1bWVudCwgaW50ZXJ2YWwpLFxuICAgICAgICAgICAgdmFsdWU6IGluaXRpYWxpemVCdWZmZXIoYnVmZmVyU2l6ZSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkaXNhYmxlZCA9IFAub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtcy5kaXNhYmxlZCkudmFsdWU7XG4gICAgICAgIGNvbnN0IGhpZGRlbiA9IFAub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtcy5oaWRkZW4pLnZhbHVlO1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gcGx1Z2luLmNvbnRyb2xsZXIoe1xuICAgICAgICAgICAgZG9jdW1lbnQ6IGFyZ3MuZG9jdW1lbnQsXG4gICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMsXG4gICAgICAgICAgICB2YWx1ZTogYmluZGluZy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IChfYyA9IFAub3B0aW9uYWwuc3RyaW5nKGFyZ3MucGFyYW1zLmxhYmVsKS52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYXJncy50YXJnZXQua2V5O1xuICAgICAgICByZXR1cm4gbmV3IE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICBiaW5kaW5nOiBiaW5kaW5nLFxuICAgICAgICAgICAgYmxhZGU6IGNyZWF0ZUJsYWRlKCksXG4gICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIFBsdWdpblBvb2wge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc01hcF8gPSB7XG4gICAgICAgICAgICAgICAgYmxhZGVzOiBbXSxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IFtdLFxuICAgICAgICAgICAgICAgIG1vbml0b3JzOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZ2V0QWxsKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBsdWdpbnNNYXBfLmJsYWRlcyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBsdWdpbnNNYXBfLmlucHV0cyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBsdWdpbnNNYXBfLm1vbml0b3JzLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3RlcihyKSB7XG4gICAgICAgICAgICBpZiAoci50eXBlID09PSAnYmxhZGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zTWFwXy5ibGFkZXMudW5zaGlmdChyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHIudHlwZSA9PT0gJ2lucHV0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc01hcF8uaW5wdXRzLnVuc2hpZnQocik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyLnR5cGUgPT09ICdtb25pdG9yJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc01hcF8ubW9uaXRvcnMudW5zaGlmdChyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVJbnB1dChkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShpbml0aWFsVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHRhcmdldC5rZXksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdub21hdGNoaW5nY29udHJvbGxlcicsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucGx1Z2luc01hcF8uaW5wdXRzLnJlZHVjZSgocmVzdWx0LCBwbHVnaW4pID0+IHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHZvaWQgMCA/IHJlc3VsdCA6IGNyZWF0ZUlucHV0QmluZGluZ0NvbnRyb2xsZXIocGx1Z2luLCB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQ6IGRvY3VtZW50LFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgfSksIG51bGwpO1xuICAgICAgICAgICAgaWYgKGJjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0YXJnZXQua2V5LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHlwZTogJ25vbWF0Y2hpbmdjb250cm9sbGVyJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZU1vbml0b3IoZG9jdW1lbnQsIHRhcmdldCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucGx1Z2luc01hcF8ubW9uaXRvcnMucmVkdWNlKChyZXN1bHQsIHBsdWdpbikgPT4gcmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdm9pZCAwID8gcmVzdWx0IDogY3JlYXRlTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKHBsdWdpbiwge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50OiBkb2N1bWVudCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIH0pLCBudWxsKTtcbiAgICAgICAgICAgIGlmIChiYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogdGFyZ2V0LmtleSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdub21hdGNoaW5nY29udHJvbGxlcicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVCbGFkZShkb2N1bWVudCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucGx1Z2luc01hcF8uYmxhZGVzLnJlZHVjZSgocmVzdWx0LCBwbHVnaW4pID0+IHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHZvaWQgMCA/IHJlc3VsdCA6IGNyZWF0ZUJsYWRlQ29udHJvbGxlcihwbHVnaW4sIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudDogZG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoIWJjKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ3ZpZXcnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVCbGFkZUFwaShiYykge1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTW9uaXRvckJpbmRpbmdBcGkoYmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgUmFja0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhY2tBcGkoYmMsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wbHVnaW5zTWFwXy5ibGFkZXMucmVkdWNlKChyZXN1bHQsIHBsdWdpbikgPT4gcmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdm9pZCAwID8gcmVzdWx0IDogcGx1Z2luLmFwaSh7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogYmMsXG4gICAgICAgICAgICAgICAgcG9vbDogdGhpcyxcbiAgICAgICAgICAgIH0pLCBudWxsKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRQbHVnaW5Qb29sKCkge1xuICAgICAgICBjb25zdCBwb29sID0gbmV3IFBsdWdpblBvb2woKTtcbiAgICAgICAgW1xuICAgICAgICAgICAgUG9pbnQyZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgUG9pbnQzZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgUG9pbnQ0ZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgU3RyaW5nSW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBOdW1iZXJJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFN0cmluZ0NvbG9ySW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBPYmplY3RDb2xvcklucHV0UGx1Z2luLFxuICAgICAgICAgICAgTnVtYmVyQ29sb3JJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIEJvb2xlYW5JbnB1dFBsdWdpbixcbiAgICAgICAgICAgIEJvb2xlYW5Nb25pdG9yUGx1Z2luLFxuICAgICAgICAgICAgU3RyaW5nTW9uaXRvclBsdWdpbixcbiAgICAgICAgICAgIE51bWJlck1vbml0b3JQbHVnaW4sXG4gICAgICAgICAgICBCdXR0b25CbGFkZVBsdWdpbixcbiAgICAgICAgICAgIEZvbGRlckJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgU2VwYXJhdG9yQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICBUYWJCbGFkZVBsdWdpbixcbiAgICAgICAgXS5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICBwb29sLnJlZ2lzdGVyKHApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBvb2w7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9pbnQyZEZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBQb2ludDJkLmlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgICAgPyBuZXcgUG9pbnQyZCh2YWx1ZS54LCB2YWx1ZS55KVxuICAgICAgICAgICAgOiBuZXcgUG9pbnQyZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZVBvaW50MmQodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneCcsIHZhbHVlLngpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneScsIHZhbHVlLnkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQocGFyYW1zLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgaWYgKCFwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgY29uc3QgY3MgPSBjcmVhdGVTdGVwQ29uc3RyYWludChwYXJhbXMsIGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIGlmIChjcykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChjcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcnMgPSBjcmVhdGVSYW5nZUNvbnN0cmFpbnQocGFyYW1zKTtcbiAgICAgICAgaWYgKHJzKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHJzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUNvbnN0cmFpbnQoY29uc3RyYWludHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50KHBhcmFtcywgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnROZENvbnN0cmFpbnQoe1xuICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50MmRBc3NlbWJseSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd4JyBpbiBwYXJhbXMgPyBwYXJhbXMueCA6IHVuZGVmaW5lZCwgaW5pdGlhbFZhbHVlLngpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3knIGluIHBhcmFtcyA/IHBhcmFtcy55IDogdW5kZWZpbmVkLCBpbml0aWFsVmFsdWUueSksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZShjb25zdHJhaW50LCByYXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gY29uc3RyYWludCA/IGZpbmROdW1iZXJSYW5nZShjb25zdHJhaW50KSA6IFtdO1xuICAgICAgICBpZiAoIWlzRW1wdHkobWluKSB8fCAhaXNFbXB0eShtYXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMobWluICE9PSBudWxsICYmIG1pbiAhPT0gdm9pZCAwID8gbWluIDogMCksIE1hdGguYWJzKG1heCAhPT0gbnVsbCAmJiBtYXggIT09IHZvaWQgMCA/IG1heCA6IDApKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGVwID0gZ2V0QmFzZVN0ZXAoY29uc3RyYWludCk7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChNYXRoLmFicyhzdGVwKSAqIDEwLCBNYXRoLmFicyhyYXdWYWx1ZSkgKiAxMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlTWF4VmFsdWUoaW5pdGlhbFZhbHVlLCBjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IHhjID0gY29uc3RyYWludCBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50XG4gICAgICAgICAgICA/IGNvbnN0cmFpbnQuY29tcG9uZW50c1swXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHljID0gY29uc3RyYWludCBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50XG4gICAgICAgICAgICA/IGNvbnN0cmFpbnQuY29tcG9uZW50c1sxXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHhyID0gZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZSh4YywgaW5pdGlhbFZhbHVlLngpO1xuICAgICAgICBjb25zdCB5ciA9IGdldFN1aXRhYmxlTWF4RGltZW5zaW9uVmFsdWUoeWMsIGluaXRpYWxWYWx1ZS55KTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHhyLCB5cik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUF4aXMoaW5pdGlhbFZhbHVlLCBjb25zdHJhaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXAoY29uc3RyYWludCksXG4gICAgICAgICAgICBjb25zdHJhaW50OiBjb25zdHJhaW50LFxuICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiBnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUoY29uc3RyYWludCwgaW5pdGlhbFZhbHVlKSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZU51bWJlckZvcm1hdHRlcihnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMoY29uc3RyYWludCwgaW5pdGlhbFZhbHVlKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkSW52ZXJ0WShwYXJhbXMpIHtcbiAgICAgICAgaWYgKCEoJ3knIGluIHBhcmFtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5UGFyYW1zID0gcGFyYW1zLnk7XG4gICAgICAgIGlmICgheVBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnaW52ZXJ0ZWQnIGluIHlQYXJhbXMgPyAhIXlQYXJhbXMuaW52ZXJ0ZWQgOiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgUG9pbnQyZElucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LXBvaW50MmQnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVBvaW50MmQuaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcGlja2VyOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBpY2tlckxheW91dCksXG4gICAgICAgICAgICAgICAgeDogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgeTogcC5vcHRpb25hbC5vYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBpbnZlcnRlZDogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICBtYXg6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzdGVwOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gcG9pbnQyZEZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQoYXJncy5wYXJhbXMsIGFyZ3MuaW5pdGlhbFZhbHVlKSxcbiAgICAgICAgICAgIGVxdWFsczogUG9pbnQyZC5lcXVhbHMsXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQb2ludDJkLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gYXJncy5kb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoIShjIGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSAnZXhwYW5kZWQnIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMuZXhwYW5kZWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwaWNrZXIgPSAncGlja2VyJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLnBpY2tlciA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQyZENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYXhlczogW1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVBeGlzKHZhbHVlLnJhd1ZhbHVlLngsIGMuY29tcG9uZW50c1swXSksXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXModmFsdWUucmF3VmFsdWUueSwgYy5jb21wb25lbnRzWzFdKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCAhPT0gbnVsbCAmJiBleHBhbmRlZCAhPT0gdm9pZCAwID8gZXhwYW5kZWQgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnZlcnRzWTogc2hvdWxkSW52ZXJ0WShhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IGdldFN1aXRhYmxlTWF4VmFsdWUodmFsdWUucmF3VmFsdWUsIGMpLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBwaWNrZXIgIT09IG51bGwgJiYgcGlja2VyICE9PSB2b2lkIDAgPyBwaWNrZXIgOiAncG9wdXAnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIExpc3RBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KHRoaXMsIGV2LnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5nZXQoJ29wdGlvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgb3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5zZXQoJ29wdGlvbnMnLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNsaWRlckFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQodGhpcywgZXYucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5zbGlkZXJDb250cm9sbGVyLnByb3BzLmdldCgnbWF4VmFsdWUnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbWF4VmFsdWUobWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnNsaWRlckNvbnRyb2xsZXIucHJvcHMuc2V0KCdtYXhWYWx1ZScsIG1heFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIuc2xpZGVyQ29udHJvbGxlci5wcm9wcy5nZXQoJ21pblZhbHVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IG1pblZhbHVlKG1pblZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5zbGlkZXJDb250cm9sbGVyLnByb3BzLnNldCgnbWluVmFsdWUnLCBtaW5WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUZXh0QXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudCh0aGlzLCBldi5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZvcm1hdHRlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5nZXQoJ2Zvcm1hdHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBmb3JtYXR0ZXIoZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5zZXQoJ2Zvcm1hdHRlcicsIGZvcm1hdHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBMaXN0QmxhZGVQbHVnaW4gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6ICdsaXN0JyxcbiAgICAgICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAucmVxdWlyZWQuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcC5yZXF1aXJlZC5yYXcsXG4gICAgICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ2xpc3QnKSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxjID0gbmV3IExpc3RDb25zdHJhaW50KG5vcm1hbGl6ZUxpc3RPcHRpb25zKGFyZ3MucGFyYW1zLm9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNyZWF0ZVZhbHVlKGFyZ3MucGFyYW1zLnZhbHVlLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGxjLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGljID0gbmV3IExpc3RDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IG5ldyBWYWx1ZU1hcCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBsYy52YWx1ZXMudmFsdWUoJ29wdGlvbnMnKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGFyZ3MucGFyYW1zLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiBpYyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIudmFsdWVDb250cm9sbGVyIGluc3RhbmNlb2YgTGlzdENvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpc3RBcGkoYXJncy5jb250cm9sbGVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfSkoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBleHBvcnRQcmVzZXRKc29uKHRhcmdldHMpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldHMucmVkdWNlKChyZXN1bHQsIHRhcmdldCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7XG4gICAgICAgICAgICAgICAgW3RhcmdldC5wcmVzZXRLZXldOiB0YXJnZXQucmVhZCgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGltcG9ydFByZXNldEpzb24odGFyZ2V0cywgcHJlc2V0KSB7XG4gICAgICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByZXNldFt0YXJnZXQucHJlc2V0S2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LndyaXRlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgUm9vdEFwaSBleHRlbmRzIEZvbGRlckFwaSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyLCBwb29sKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogSW1wb3J0cyBhIHByZXNldCBvZiBhbGwgaW5wdXRzLlxuICAgICAgICAgKiBAcGFyYW0gcHJlc2V0IFRoZSBwcmVzZXQgb2JqZWN0IHRvIGltcG9ydC5cbiAgICAgICAgICovXG4gICAgICAgIGltcG9ydFByZXNldChwcmVzZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLmNvbnRyb2xsZXJfLnJhY2tDb250cm9sbGVyLnJhY2tcbiAgICAgICAgICAgICAgICAuZmluZChJbnB1dEJpbmRpbmdDb250cm9sbGVyKVxuICAgICAgICAgICAgICAgIC5tYXAoKGliYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpYmMuYmluZGluZy50YXJnZXQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGltcG9ydFByZXNldEpzb24odGFyZ2V0cywgcHJlc2V0KTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFeHBvcnRzIGEgcHJlc2V0IG9mIGFsbCBpbnB1dHMuXG4gICAgICAgICAqIEByZXR1cm4gQW4gZXhwb3J0ZWQgcHJlc2V0IG9iamVjdC5cbiAgICAgICAgICovXG4gICAgICAgIGV4cG9ydFByZXNldCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLmNvbnRyb2xsZXJfLnJhY2tDb250cm9sbGVyLnJhY2tcbiAgICAgICAgICAgICAgICAuZmluZChJbnB1dEJpbmRpbmdDb250cm9sbGVyKVxuICAgICAgICAgICAgICAgIC5tYXAoKGliYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpYmMuYmluZGluZy50YXJnZXQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRQcmVzZXRKc29uKHRhcmdldHMpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWZyZXNoZXMgYWxsIGJpbmRpbmdzIG9mIHRoZSBwYW5lLlxuICAgICAgICAgKi9cbiAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlLXJlYWQgYWxsIGlucHV0IGJpbmRpbmdzXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJhY2tDb250cm9sbGVyLnJhY2tcbiAgICAgICAgICAgICAgICAuZmluZChJbnB1dEJpbmRpbmdDb250cm9sbGVyKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpYmMpID0+IHtcbiAgICAgICAgICAgICAgICBpYmMuYmluZGluZy5yZWFkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEZvcmNlLXJlYWQgYWxsIG1vbml0b3IgYmluZGluZ3NcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmFja0NvbnRyb2xsZXIucmFja1xuICAgICAgICAgICAgICAgIC5maW5kKE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgobWJjKSA9PiB7XG4gICAgICAgICAgICAgICAgbWJjLmJpbmRpbmcucmVhZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBSb290Q29udHJvbGxlciBleHRlbmRzIEZvbGRlckNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGNvbmZpZy5leHBhbmRlZCxcbiAgICAgICAgICAgICAgICBibGFkZTogY29uZmlnLmJsYWRlLFxuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcucHJvcHMsXG4gICAgICAgICAgICAgICAgcm9vdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFNsaWRlckJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ3NsaWRlcicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgbWF4OiBwLnJlcXVpcmVkLm51bWJlcixcbiAgICAgICAgICAgICAgICBtaW46IHAucmVxdWlyZWQubnVtYmVyLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ3NsaWRlcicpLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogcC5vcHRpb25hbC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICBsYWJlbDogcC5vcHRpb25hbC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8geyBwYXJhbXM6IHJlc3VsdCB9IDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gKF9hID0gYXJncy5wYXJhbXMudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgICAgICBjb25zdCBkcmMgPSBuZXcgRGVmaW5pdGVSYW5nZUNvbnN0cmFpbnQoe1xuICAgICAgICAgICAgICAgIG1heDogYXJncy5wYXJhbXMubWF4LFxuICAgICAgICAgICAgICAgIG1pbjogYXJncy5wYXJhbXMubWluLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB2YyA9IG5ldyBTbGlkZXJUZXh0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXA6IDEsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICBzbGlkZXJQcm9wczogbmV3IFZhbHVlTWFwKHtcbiAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWU6IGRyYy52YWx1ZXMudmFsdWUoJ21heCcpLFxuICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZTogZHJjLnZhbHVlcy52YWx1ZSgnbWluJyksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKHVuZGVmaW5lZCwgaW5pdGlhbFZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiAoX2IgPSBhcmdzLnBhcmFtcy5mb3JtYXQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bWJlclRvU3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZShpbml0aWFsVmFsdWUsIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludDogZHJjLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTGFiZWxlZFZhbHVlQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYXJncy5wYXJhbXMubGFiZWwsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiB2YyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgTGFiZWxlZFZhbHVlQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlci52YWx1ZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBTbGlkZXJUZXh0Q29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgU2xpZGVyQXBpKGFyZ3MuY29udHJvbGxlcik7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IFRleHRCbGFkZVBsdWdpbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogJ3RleHQnLFxuICAgICAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2U6IHAucmVxdWlyZWQuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwLnJlcXVpcmVkLnJhdyxcbiAgICAgICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgndGV4dCcpLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IHAub3B0aW9uYWwuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBwLm9wdGlvbmFsLnN0cmluZyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8geyBwYXJhbXM6IHJlc3VsdCB9IDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgaWMgPSBuZXcgVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZXI6IGFyZ3MucGFyYW1zLnBhcnNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IChfYSA9IGFyZ3MucGFyYW1zLmZvcm1hdCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKCh2KSA9PiBTdHJpbmcodikpLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNyZWF0ZVZhbHVlKGFyZ3MucGFyYW1zLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGFyZ3MucGFyYW1zLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiBpYyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIudmFsdWVDb250cm9sbGVyIGluc3RhbmNlb2YgVGV4dENvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRleHRBcGkoYXJncy5jb250cm9sbGVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfSkoKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRXcmFwcGVyRWxlbWVudChkb2MpIHtcbiAgICAgICAgY29uc3QgZWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSgnZGZ3JykoKSk7XG4gICAgICAgIGlmIChkb2MuYm9keSkge1xuICAgICAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoZWxlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVtYmVkU3R5bGUoZG9jLCBpZCwgY3NzKSB7XG4gICAgICAgIGlmIChkb2MucXVlcnlTZWxlY3Rvcihgc3R5bGVbZGF0YS10cC1zdHlsZT0ke2lkfV1gKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0eWxlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICBzdHlsZUVsZW0uZGF0YXNldC50cFN0eWxlID0gaWQ7XG4gICAgICAgIHN0eWxlRWxlbS50ZXh0Q29udGVudCA9IGNzcztcbiAgICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJvb3QgcGFuZSBvZiBUd2Vha3BhbmUuXG4gICAgICovXG4gICAgY2xhc3MgUGFuZSBleHRlbmRzIFJvb3RBcGkge1xuICAgICAgICBjb25zdHJ1Y3RvcihvcHRfY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gb3B0X2NvbmZpZyAhPT0gbnVsbCAmJiBvcHRfY29uZmlnICE9PSB2b2lkIDAgPyBvcHRfY29uZmlnIDoge307XG4gICAgICAgICAgICBjb25zdCBkb2MgPSAoX2EgPSBjb25maWcuZG9jdW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGdldFdpbmRvd0RvY3VtZW50KCk7XG4gICAgICAgICAgICBjb25zdCBwb29sID0gY3JlYXRlRGVmYXVsdFBsdWdpblBvb2woKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RDb250cm9sbGVyID0gbmV3IFJvb3RDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBjb25maWcuZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgYmxhZGU6IGNyZWF0ZUJsYWRlKCksXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogY29uZmlnLnRpdGxlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdXBlcihyb290Q29udHJvbGxlciwgcG9vbCk7XG4gICAgICAgICAgICB0aGlzLnBvb2xfID0gcG9vbDtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbV8gPSAoX2IgPSBjb25maWcuY29udGFpbmVyKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBjcmVhdGVEZWZhdWx0V3JhcHBlckVsZW1lbnQoZG9jKTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbV8uYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZG9jXyA9IGRvYztcbiAgICAgICAgICAgIHRoaXMudXNlc0RlZmF1bHRXcmFwcGVyXyA9ICFjb25maWcuY29udGFpbmVyO1xuICAgICAgICAgICAgdGhpcy5zZXRVcERlZmF1bHRQbHVnaW5zXygpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBkb2N1bWVudCgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kb2NfKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvY187XG4gICAgICAgIH1cbiAgICAgICAgZGlzcG9zZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW0gPSB0aGlzLmNvbnRhaW5lckVsZW1fO1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXJFbGVtKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXNEZWZhdWx0V3JhcHBlcl8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRFbGVtID0gY29udGFpbmVyRWxlbS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW0ucmVtb3ZlQ2hpbGQoY29udGFpbmVyRWxlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtXyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmRvY18gPSBudWxsO1xuICAgICAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJlZ2lzdGVyUGx1Z2luKGJ1bmRsZSkge1xuICAgICAgICAgICAgY29uc3QgcGx1Z2lucyA9ICdwbHVnaW4nIGluIGJ1bmRsZVxuICAgICAgICAgICAgICAgID8gW2J1bmRsZS5wbHVnaW5dXG4gICAgICAgICAgICAgICAgOiAncGx1Z2lucycgaW4gYnVuZGxlXG4gICAgICAgICAgICAgICAgICAgID8gYnVuZGxlLnBsdWdpbnNcbiAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgIHBsdWdpbnMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9vbF8ucmVnaXN0ZXIocCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWJlZFBsdWdpblN0eWxlXyhwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVtYmVkUGx1Z2luU3R5bGVfKHBsdWdpbikge1xuICAgICAgICAgICAgaWYgKHBsdWdpbi5jc3MpIHtcbiAgICAgICAgICAgICAgICBlbWJlZFN0eWxlKHRoaXMuZG9jdW1lbnQsIGBwbHVnaW4tJHtwbHVnaW4uaWR9YCwgcGx1Z2luLmNzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VXBEZWZhdWx0UGx1Z2luc18oKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHN0cmluZyBsaXRlcmFsIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgZGVmYXVsdCBDU1MgYnkgUm9sbHVwIGF0IHRoZSBjb21waWxhdGlvbiB0aW1lXG4gICAgICAgICAgICBlbWJlZFN0eWxlKHRoaXMuZG9jdW1lbnQsICdkZWZhdWx0JywgJy50cC10Yml2X2IsLnRwLWNvbHR4dHZfbXMsLnRwLWNrYnZfaSwudHAtcm90dl9iLC50cC1mbGR2X2IsLnRwLW1sbHZfaSwudHAtc2dsdl9pLC50cC1ncmx2X2csLnRwLXR4dHZfaSwudHAtcDJkcHZfcCwudHAtY29sc3d2X3N3LC50cC1wMmR2X2IsLnRwLWJ0bnZfYiwudHAtbHN0dl9zey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Ym9yZGVyLXdpZHRoOjA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjB9LnRwLXAyZHZfYiwudHAtYnRudl9iLC50cC1sc3R2X3N7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtjb2xvcjp2YXIoLS1idG4tZmcpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0udHAtcDJkdl9iOmhvdmVyLC50cC1idG52X2I6aG92ZXIsLnRwLWxzdHZfczpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1oKX0udHAtcDJkdl9iOmZvY3VzLC50cC1idG52X2I6Zm9jdXMsLnRwLWxzdHZfczpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1mKX0udHAtcDJkdl9iOmFjdGl2ZSwudHAtYnRudl9iOmFjdGl2ZSwudHAtbHN0dl9zOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1hKX0udHAtcDJkdl9iOmRpc2FibGVkLC50cC1idG52X2I6ZGlzYWJsZWQsLnRwLWxzdHZfczpkaXNhYmxlZHtvcGFjaXR5Oi41fS50cC10eHR2X2ksLnRwLXAyZHB2X3AsLnRwLWNvbHN3dl9zd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLWluLWZnKTtmb250LWZhbWlseTppbmhlcml0O2hlaWdodDp2YXIoLS1ibGQtdXMpO2xpbmUtaGVpZ2h0OnZhcigtLWJsZC11cyk7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0udHAtdHh0dl9pOmhvdmVyLC50cC1wMmRwdl9wOmhvdmVyLC50cC1jb2xzd3Zfc3c6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1oKX0udHAtdHh0dl9pOmZvY3VzLC50cC1wMmRwdl9wOmZvY3VzLC50cC1jb2xzd3Zfc3c6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1mKX0udHAtdHh0dl9pOmFjdGl2ZSwudHAtcDJkcHZfcDphY3RpdmUsLnRwLWNvbHN3dl9zdzphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1hKX0udHAtdHh0dl9pOmRpc2FibGVkLC50cC1wMmRwdl9wOmRpc2FibGVkLC50cC1jb2xzd3Zfc3c6ZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtbWxsdl9pLC50cC1zZ2x2X2ksLnRwLWdybHZfZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vLWZnKTtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtzY3JvbGxiYXItY29sb3I6Y3VycmVudENvbG9yIHJnYmEoMCwwLDAsMCk7c2Nyb2xsYmFyLXdpZHRoOnRoaW47d2lkdGg6MTAwJX0udHAtbWxsdl9pOjotd2Via2l0LXNjcm9sbGJhciwudHAtc2dsdl9pOjotd2Via2l0LXNjcm9sbGJhciwudHAtZ3Jsdl9nOjotd2Via2l0LXNjcm9sbGJhcntoZWlnaHQ6OHB4O3dpZHRoOjhweH0udHAtbWxsdl9pOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsLnRwLXNnbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLC50cC1ncmx2X2c6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9LnRwLW1sbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsLnRwLXNnbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsLnRwLWdybHZfZzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yO2JvcmRlcjpyZ2JhKDAsMCwwLDApIHNvbGlkIDJweDtib3JkZXItcmFkaXVzOjRweH0udHAtcm90dnstLWZvbnQtZmFtaWx5OiB2YXIoLS10cC1mb250LWZhbWlseSwgUm9ib3RvIE1vbm8sIFNvdXJjZSBDb2RlIFBybywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZSk7LS1icy1icjogdmFyKC0tdHAtYmFzZS1ib3JkZXItcmFkaXVzLCA2cHgpOy0tY250LWgtcDogdmFyKC0tdHAtY29udGFpbmVyLWhvcml6b250YWwtcGFkZGluZywgNHB4KTstLWNudC12LXA6IHZhcigtLXRwLWNvbnRhaW5lci12ZXJ0aWNhbC1wYWRkaW5nLCA0cHgpOy0tZWxtLWJyOiB2YXIoLS10cC1lbGVtZW50LWJvcmRlci1yYWRpdXMsIDJweCk7LS1ibGQtczogdmFyKC0tdHAtYmxhZGUtc3BhY2luZywgNHB4KTstLWJsZC11czogdmFyKC0tdHAtYmxhZGUtdW5pdC1zaXplLCAyMHB4KTstLWJzLWJnOiB2YXIoLS10cC1iYXNlLWJhY2tncm91bmQtY29sb3IsIGhzbCgyMzBkZWcsIDclLCAxNyUpKTstLWJzLXNoOiB2YXIoLS10cC1iYXNlLXNoYWRvdy1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjIpKTstLWJ0bi1iZzogdmFyKC0tdHAtYnV0dG9uLWJhY2tncm91bmQtY29sb3IsIGhzbCgyMzBkZWcsIDclLCA3MCUpKTstLWJ0bi1iZy1hOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1hY3RpdmUsICNkNmQ3ZGIpOy0tYnRuLWJnLWY6IHZhcigtLXRwLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWZvY3VzLCAjYzhjYWQwKTstLWJ0bi1iZy1oOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1ob3ZlciwgI2JiYmNjNCk7LS1idG4tZmc6IHZhcigtLXRwLWJ1dHRvbi1mb3JlZ3JvdW5kLWNvbG9yLCBoc2woMjMwZGVnLCA3JSwgMTclKSk7LS1jbnQtYmc6IHZhcigtLXRwLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMSkpOy0tY250LWJnLWE6IHZhcigtLXRwLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjI1KSk7LS1jbnQtYmctZjogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3ItZm9jdXMsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4yKSk7LS1jbnQtYmctaDogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3ItaG92ZXIsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4xNSkpOy0tY250LWZnOiB2YXIoLS10cC1jb250YWluZXItZm9yZWdyb3VuZC1jb2xvciwgaHNsKDIzMGRlZywgNyUsIDc1JSkpOy0taW4tYmc6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3IsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4xKSk7LS1pbi1iZy1hOiB2YXIoLS10cC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjI1KSk7LS1pbi1iZy1mOiB2YXIoLS10cC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWZvY3VzLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMikpOy0taW4tYmctaDogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvci1ob3ZlciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjE1KSk7LS1pbi1mZzogdmFyKC0tdHAtaW5wdXQtZm9yZWdyb3VuZC1jb2xvciwgaHNsKDIzMGRlZywgNyUsIDc1JSkpOy0tbGJsLWZnOiB2YXIoLS10cC1sYWJlbC1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuNykpOy0tbW8tYmc6IHZhcigtLXRwLW1vbml0b3ItYmFja2dyb3VuZC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjIpKTstLW1vLWZnOiB2YXIoLS10cC1tb25pdG9yLWZvcmVncm91bmQtY29sb3IsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC43KSk7LS1ncnYtZmc6IHZhcigtLXRwLWdyb292ZS1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMSkpfS50cC1yb3R2X2M+LnRwLWNudHYudHAtdi1sc3QsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtY250di50cC12LWxzdCwudHAtZmxkdl9jPi50cC1jbnR2LnRwLXYtbHN0e21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jbnQtdi1wKSl9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9jLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYywudHAtZmxkdl9jPi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2N7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYiwudHAtdGFidl9jIC50cC1icmt2Pi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2IsLnRwLWZsZHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtcm90dl9jPio6bm90KC50cC12LWZzdCksLnRwLXRhYnZfYyAudHAtYnJrdj4qOm5vdCgudHAtdi1mc3QpLC50cC1mbGR2X2M+Kjpub3QoLnRwLXYtZnN0KXttYXJnaW4tdG9wOnZhcigtLWJsZC1zKX0udHAtcm90dl9jPi50cC1zcHJ2Om5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLXNwcnY6bm90KC50cC12LWZzdCksLnRwLWZsZHZfYz4udHAtc3Bydjpub3QoLnRwLXYtZnN0KSwudHAtcm90dl9jPi50cC1jbnR2Om5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHY6bm90KC50cC12LWZzdCksLnRwLWZsZHZfYz4udHAtY250djpub3QoLnRwLXYtZnN0KXttYXJnaW4tdG9wOnZhcigtLWNudC12LXApfS50cC1yb3R2X2M+LnRwLXNwcnYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLWZsZHZfYz4udHAtc3BydisqOm5vdCgudHAtdi1oaWRkZW4pLC50cC1yb3R2X2M+LnRwLWNudHYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLWZsZHZfYz4udHAtY250disqOm5vdCgudHAtdi1oaWRkZW4pe21hcmdpbi10b3A6dmFyKC0tY250LXYtcCl9LnRwLXJvdHZfYz4udHAtc3Bydjpub3QoLnRwLXYtaGlkZGVuKSsudHAtc3BydiwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1zcHJ2LC50cC1mbGR2X2M+LnRwLXNwcnY6bm90KC50cC12LWhpZGRlbikrLnRwLXNwcnYsLnRwLXJvdHZfYz4udHAtY250djpub3QoLnRwLXYtaGlkZGVuKSsudHAtY250diwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1jbnR2LC50cC1mbGR2X2M+LnRwLWNudHY6bm90KC50cC12LWhpZGRlbikrLnRwLWNudHZ7bWFyZ2luLXRvcDowfS50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHYsLnRwLWZsZHZfYz4udHAtY250dnttYXJnaW4tbGVmdDo0cHh9LnRwLXRhYnZfYyAudHAtYnJrdj4udHAtZmxkdj4udHAtZmxkdl9iLC50cC1mbGR2X2M+LnRwLWZsZHY+LnRwLWZsZHZfYntib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1lbG0tYnIpfS50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9iLC50cC1mbGR2X2M+LnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtdGFidl9jIC50cC1icmt2IC50cC1mbGR2Pi50cC1mbGR2X2MsLnRwLWZsZHZfYyAudHAtZmxkdj4udHAtZmxkdl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Ky50cC1mbGR2Pi50cC1mbGR2X2IsLnRwLWZsZHZfYz4udHAtY250disudHAtZmxkdj4udHAtZmxkdl9ie2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0udHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Ky50cC10YWJ2Pi50cC10YWJ2X3QsLnRwLWZsZHZfYz4udHAtY250disudHAtdGFidj4udHAtdGFidl90e2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0udHAtdGFidl9jIC50cC1icmt2Pi50cC10YWJ2Pi50cC10YWJ2X3QsLnRwLWZsZHZfYz4udHAtdGFidj4udHAtdGFidl90e2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtdGFidl9jIC50cC1icmt2IC50cC10YWJ2Pi50cC10YWJ2X2MsLnRwLWZsZHZfYyAudHAtdGFidj4udHAtdGFidl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtcm90dl9iLC50cC1mbGR2X2J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmcpO2NvbG9yOnZhcigtLWNudC1mZyk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6dmFyKC0tY250LWgtcCk7cGFkZGluZy1yaWdodDpjYWxjKDRweCArIHZhcigtLWJsZC11cykgKyB2YXIoLS1jbnQtaC1wKSk7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCU7dHJhbnNpdGlvbjpib3JkZXItcmFkaXVzIC4ycyBlYXNlLWluLW91dCAuMnN9LnRwLXJvdHZfYjpob3ZlciwudHAtZmxkdl9iOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWgpfS50cC1yb3R2X2I6Zm9jdXMsLnRwLWZsZHZfYjpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1mKX0udHAtcm90dl9iOmFjdGl2ZSwudHAtZmxkdl9iOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1hKX0udHAtcm90dl9iOmRpc2FibGVkLC50cC1mbGR2X2I6ZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtcm90dl9tLC50cC1mbGR2X217YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgdmFyKC0tY250LWZnKSwgdmFyKC0tY250LWZnKSAycHgsIHRyYW5zcGFyZW50IDJweCwgdHJhbnNwYXJlbnQgNHB4LCB2YXIoLS1jbnQtZmcpIDRweCk7Ym9yZGVyLXJhZGl1czoycHg7Ym90dG9tOjA7Y29udGVudDpcIlwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjZweDtyaWdodDpjYWxjKHZhcigtLWNudC1oLXApICsgKHZhcigtLWJsZC11cykgKyA0cHggLSA2cHgpLzIgLSAycHgpO21hcmdpbjphdXRvO29wYWNpdHk6LjU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpZHRoOjZweH0udHAtcm90di50cC1yb3R2LWV4cGFuZGVkIC50cC1yb3R2X20sLnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9iPi50cC1mbGR2X217dHJhbnNmb3JtOm5vbmV9LnRwLXJvdHZfYywudHAtZmxkdl9je2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctYm90dG9tOjA7cGFkZGluZy10b3A6MDtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmhlaWdodCAuMnMgZWFzZS1pbi1vdXQsb3BhY2l0eSAuMnMgbGluZWFyLHBhZGRpbmcgLjJzIGVhc2UtaW4tb3V0fS50cC1yb3R2LnRwLXJvdHYtY3BsOm5vdCgudHAtcm90di1leHBhbmRlZCkgLnRwLXJvdHZfYywudHAtZmxkdi50cC1mbGR2LWNwbDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2N7ZGlzcGxheTpub25lfS50cC1yb3R2LnRwLXJvdHYtZXhwYW5kZWQgLnRwLXJvdHZfYywudHAtZmxkdi50cC1mbGR2LWV4cGFuZGVkPi50cC1mbGR2X2N7b3BhY2l0eToxO3BhZGRpbmctYm90dG9tOnZhcigtLWNudC12LXApO3BhZGRpbmctdG9wOnZhcigtLWNudC12LXApO3RyYW5zZm9ybTpub25lO292ZXJmbG93OnZpc2libGU7dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhciAuMnMscGFkZGluZyAuMnMgZWFzZS1pbi1vdXR9LnRwLWxzdHYsLnRwLWNvbHR4dHZfbXtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtbHN0dl9ze3BhZGRpbmc6MCAyMHB4IDAgNHB4O3dpZHRoOjEwMCV9LnRwLWxzdHZfbSwudHAtY29sdHh0dl9tbXtib3R0b206MDttYXJnaW46YXV0bztwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjJweDt0b3A6MH0udHAtbHN0dl9tIHN2ZywudHAtY29sdHh0dl9tbSBzdmd7Ym90dG9tOjA7aGVpZ2h0OjE2cHg7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxNnB4fS50cC1sc3R2X20gc3ZnIHBhdGgsLnRwLWNvbHR4dHZfbW0gc3ZnIHBhdGh7ZmlsbDpjdXJyZW50Q29sb3J9LnRwLXBuZHR4dHYsLnRwLWNvbHR4dHZfd3tkaXNwbGF5OmZsZXh9LnRwLXBuZHR4dHZfYSwudHAtY29sdHh0dl9je3dpZHRoOjEwMCV9LnRwLXBuZHR4dHZfYSsudHAtcG5kdHh0dl9hLC50cC1jb2x0eHR2X2MrLnRwLXBuZHR4dHZfYSwudHAtcG5kdHh0dl9hKy50cC1jb2x0eHR2X2MsLnRwLWNvbHR4dHZfYysudHAtY29sdHh0dl9je21hcmdpbi1sZWZ0OjJweH0udHAtYnRudl9ie3dpZHRoOjEwMCV9LnRwLWJ0bnZfdHt0ZXh0LWFsaWduOmNlbnRlcn0udHAtY2tidl9se2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNrYnZfaXtsZWZ0OjA7b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS50cC1ja2J2X3d7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWJsZC11cyk7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtY2tidl93IHN2Z3tib3R0b206MDtkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xlZnQ6MDttYXJnaW46YXV0bztvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxNnB4fS50cC1ja2J2X3cgc3ZnIHBhdGh7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLXdpZHRoOjJ9LnRwLWNrYnZfaTpob3ZlcisudHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctaCl9LnRwLWNrYnZfaTpmb2N1cysudHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctZil9LnRwLWNrYnZfaTphY3RpdmUrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWEpfS50cC1ja2J2X2k6Y2hlY2tlZCsudHAtY2tidl93IHN2Z3tvcGFjaXR5OjF9LnRwLWNrYnYudHAtdi1kaXNhYmxlZCAudHAtY2tidl93e29wYWNpdHk6LjV9LnRwLWNvbHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNvbHZfaHtkaXNwbGF5OmZsZXh9LnRwLWNvbHZfc3tmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO3dpZHRoOnZhcigtLWJsZC11cyl9LnRwLWNvbHZfdHtmbGV4OjE7bWFyZ2luLWxlZnQ6NHB4fS50cC1jb2x2X3B7aGVpZ2h0OjA7bWFyZ2luLXRvcDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhcixtYXJnaW4gLjJzIGVhc2UtaW4tb3V0fS50cC1jb2x2LnRwLWNvbHYtY3BsIC50cC1jb2x2X3B7b3ZlcmZsb3c6dmlzaWJsZX0udHAtY29sdi50cC1jb2x2LWV4cGFuZGVkIC50cC1jb2x2X3B7bWFyZ2luLXRvcDp2YXIoLS1ibGQtcyk7b3BhY2l0eToxfS50cC1jb2x2IC50cC1wb3B2e2xlZnQ6Y2FsYygtMSp2YXIoLS1jbnQtaC1wKSk7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jbnQtaC1wKSk7dG9wOnZhcigtLWJsZC11cyl9LnRwLWNvbHB2X2gsLnRwLWNvbHB2X2Fwe21hcmdpbi1sZWZ0OjZweDttYXJnaW4tcmlnaHQ6NnB4fS50cC1jb2xwdl9oe21hcmdpbi10b3A6dmFyKC0tYmxkLXMpfS50cC1jb2xwdl9yZ2J7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO3dpZHRoOjEwMCV9LnRwLWNvbHB2X2F7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6dmFyKC0tY250LXYtcCk7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbnQtdi1wKSArIDJweCk7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNvbHB2X2E6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWdydi1mZyk7Y29udGVudDpcIlwiO2hlaWdodDoycHg7bGVmdDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTt0b3A6MH0udHAtY29scHYudHAtdi1kaXNhYmxlZCAudHAtY29scHZfYTo6YmVmb3Jle29wYWNpdHk6LjV9LnRwLWNvbHB2X2Fwe2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleDozfS50cC1jb2xwdl9hdHtmbGV4OjE7bWFyZ2luLWxlZnQ6NHB4fS50cC1zdnB2e2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1zdnB2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtc3Zwdl9je2N1cnNvcjpjcm9zc2hhaXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpKjQpO3dpZHRoOjEwMCV9LnRwLXN2cHZfbXtib3JkZXItcmFkaXVzOjEwMCU7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2ZpbHRlcjpkcm9wLXNoYWRvdygwIDAgMXB4IHJnYmEoMCwgMCwgMCwgMC4zKSk7aGVpZ2h0OjEycHg7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMnB4fS50cC1zdnB2OmZvY3VzIC50cC1zdnB2X217Ym9yZGVyLWNvbG9yOiNmZmZ9LnRwLWhwbHZ7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWJsZC11cyk7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1ocGx2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtaHBsdl9je2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRUFBQUFBQkNBWUFBQUJ1YmFnWEFBQUFRMGxFUVZRb1UyUDh6OER3bjBHQ2dRRURpMk9LL1JCZ1lIakJnSXBmb3ZGaDhqOFlCSWd6RkdReHVxRWdQaGFET1Q1Z09oUGtkQ3hPWmVCZytJREZaWmlHQWdDYVNTTVl0Y1JITGdBQUFBQkpSVTVFcmtKZ2dnPT0pO2JhY2tncm91bmQtcG9zaXRpb246bGVmdCB0b3A7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyLXJhZGl1czoycHg7ZGlzcGxheTpibG9jaztoZWlnaHQ6NHB4O2xlZnQ6MDttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMDAlfS50cC1ocGx2X217Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC4xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEycHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEycHh9LnRwLWhwbHY6Zm9jdXMgLnRwLWhwbHZfbXtib3JkZXItY29sb3I6I2ZmZn0udHAtYXBsdntjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtvdXRsaW5lOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0udHAtYXBsdi50cC12LWRpc2FibGVke29wYWNpdHk6LjV9LnRwLWFwbHZfYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKSxsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDRweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCwycHggMnB4O2JvcmRlci1yYWRpdXM6MnB4O2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjRweDtsZWZ0OjA7bWFyZ2luLXRvcDotMnB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEwMCV9LnRwLWFwbHZfY3tib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtYXBsdl9te2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpLGxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpO2JhY2tncm91bmQtc2l6ZToxMnB4IDEycHg7YmFja2dyb3VuZC1wb3NpdGlvbjowIDAsNnB4IDZweDtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym94LXNoYWRvdzowIDAgMnB4IHJnYmEoMCwwLDAsLjEpO2hlaWdodDoxMnB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi02cHg7bWFyZ2luLXRvcDotNnB4O292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTJweH0udHAtYXBsdl9we2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3JkZXI6cmdiYSgyNTUsMjU1LDI1NSwuNzUpIHNvbGlkIDJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnRwLWFwbHY6Zm9jdXMgLnRwLWFwbHZfcHtib3JkZXItY29sb3I6I2ZmZn0udHAtY29sc3d2e2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpLGxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpO2JhY2tncm91bmQtc2l6ZToxMHB4IDEwcHg7YmFja2dyb3VuZC1wb3NpdGlvbjowIDAsNXB4IDVweDtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7b3ZlcmZsb3c6aGlkZGVufS50cC1jb2xzd3YudHAtdi1kaXNhYmxlZHtvcGFjaXR5Oi41fS50cC1jb2xzd3Zfc3d7Ym9yZGVyLXJhZGl1czowfS50cC1jb2xzd3ZfYnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlci13aWR0aDowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGVmdDowO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtY29sc3d2X2I6Zm9jdXM6OmFmdGVye2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtY29sdHh0dntkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJX0udHAtY29sdHh0dl9te21hcmdpbi1yaWdodDo0cHh9LnRwLWNvbHR4dHZfbXN7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2NvbG9yOnZhcigtLWxibC1mZyk7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTtwYWRkaW5nOjAgMThweCAwIDRweH0udHAtY29sdHh0dl9tczpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWgpfS50cC1jb2x0eHR2X21zOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctZil9LnRwLWNvbHR4dHZfbXM6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctYSl9LnRwLWNvbHR4dHZfbW17Y29sb3I6dmFyKC0tbGJsLWZnKX0udHAtY29sdHh0di50cC12LWRpc2FibGVkIC50cC1jb2x0eHR2X21te29wYWNpdHk6LjV9LnRwLWNvbHR4dHZfd3tmbGV4OjF9LnRwLWRmd3Z7cG9zaXRpb246YWJzb2x1dGU7dG9wOjhweDtyaWdodDo4cHg7d2lkdGg6MjU2cHh9LnRwLWZsZHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLWZsZHYudHAtZmxkdi1ub3QgLnRwLWZsZHZfYntkaXNwbGF5Om5vbmV9LnRwLWZsZHZfdHtwYWRkaW5nLWxlZnQ6NHB4fS50cC1mbGR2X2I6ZGlzYWJsZWQgLnRwLWZsZHZfbXtkaXNwbGF5Om5vbmV9LnRwLWZsZHZfY3twYWRkaW5nLWxlZnQ6NHB4fS50cC1mbGR2X2l7Ym90dG9tOjA7Y29sb3I6dmFyKC0tY250LWJnKTtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO3dpZHRoOnZhcigtLWJzLWJyKX0udHAtZmxkdl9pOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3I7Ym90dG9tOjA7Y29udGVudDpcIlwiO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDo0cHh9LnRwLWZsZHZfYjpob3ZlcisudHAtZmxkdl9pe2NvbG9yOnZhcigtLWNudC1iZy1oKX0udHAtZmxkdl9iOmZvY3VzKy50cC1mbGR2X2l7Y29sb3I6dmFyKC0tY250LWJnLWYpfS50cC1mbGR2X2I6YWN0aXZlKy50cC1mbGR2X2l7Y29sb3I6dmFyKC0tY250LWJnLWEpfS50cC1mbGR2LnRwLXYtZGlzYWJsZWQ+LnRwLWZsZHZfaXtvcGFjaXR5Oi41fS50cC1ncmx2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1ncmx2X2d7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpKjMpfS50cC1ncmx2X2cgcG9seWxpbmV7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1tby1mZyk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kfS50cC1ncmx2X3R7bWFyZ2luLXRvcDotNHB4O3RyYW5zaXRpb246bGVmdCAuMDVzLHRvcCAuMDVzO3Zpc2liaWxpdHk6aGlkZGVufS50cC1ncmx2X3QudHAtZ3Jsdl90LWF7dmlzaWJpbGl0eTp2aXNpYmxlfS50cC1ncmx2X3QudHAtZ3Jsdl90LWlue3RyYW5zaXRpb246bm9uZX0udHAtZ3Jsdi50cC12LWRpc2FibGVkIC50cC1ncmx2X2d7b3BhY2l0eTouNX0udHAtZ3JsdiAudHAtdHR2e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW8tZmcpfS50cC1ncmx2IC50cC10dHY6OmJlZm9yZXtib3JkZXItdG9wLWNvbG9yOnZhcigtLW1vLWZnKX0udHAtbGJsdnthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2xpbmUtaGVpZ2h0OjEuMztwYWRkaW5nLWxlZnQ6dmFyKC0tY250LWgtcCk7cGFkZGluZy1yaWdodDp2YXIoLS1jbnQtaC1wKX0udHAtbGJsdi50cC1sYmx2LW5vbHtkaXNwbGF5OmJsb2NrfS50cC1sYmx2X2x7Y29sb3I6dmFyKC0tbGJsLWZnKTtmbGV4OjE7LXdlYmtpdC1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6NHB4O3BhZGRpbmctcmlnaHQ6MTZweH0udHAtbGJsdi50cC12LWRpc2FibGVkIC50cC1sYmx2X2x7b3BhY2l0eTouNX0udHAtbGJsdi50cC1sYmx2LW5vbCAudHAtbGJsdl9se2Rpc3BsYXk6bm9uZX0udHAtbGJsdl92e2FsaWduLXNlbGY6ZmxleC1zdGFydDtmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO3dpZHRoOjE2MHB4fS50cC1sYmx2LnRwLWxibHYtbm9sIC50cC1sYmx2X3Z7d2lkdGg6MTAwJX0udHAtbHN0dl9ze3BhZGRpbmc6MCAyMHB4IDAgNHB4O3dpZHRoOjEwMCV9LnRwLWxzdHZfbXtjb2xvcjp2YXIoLS1idG4tZmcpfS50cC1zZ2x2X2l7cGFkZGluZzowIDRweH0udHAtc2dsdi50cC12LWRpc2FibGVkIC50cC1zZ2x2X2l7b3BhY2l0eTouNX0udHAtbWxsdl9pe2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSozKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO3BhZGRpbmc6MCA0cHg7cmVzaXplOm5vbmU7d2hpdGUtc3BhY2U6cHJlfS50cC1tbGx2LnRwLXYtZGlzYWJsZWQgLnRwLW1sbHZfaXtvcGFjaXR5Oi41fS50cC1wMmR2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1wMmR2X2h7ZGlzcGxheTpmbGV4fS50cC1wMmR2X2J7aGVpZ2h0OnZhcigtLWJsZC11cyk7bWFyZ2luLXJpZ2h0OjRweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDp2YXIoLS1ibGQtdXMpfS50cC1wMmR2X2Igc3Zne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjE2cHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tdG9wOi04cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxNnB4fS50cC1wMmR2X2Igc3ZnIHBhdGh7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6Mn0udHAtcDJkdl9iIHN2ZyBjaXJjbGV7ZmlsbDpjdXJyZW50Q29sb3J9LnRwLXAyZHZfdHtmbGV4OjF9LnRwLXAyZHZfcHtoZWlnaHQ6MDttYXJnaW4tdG9wOjA7b3BhY2l0eTowO292ZXJmbG93OmhpZGRlbjt0cmFuc2l0aW9uOmhlaWdodCAuMnMgZWFzZS1pbi1vdXQsb3BhY2l0eSAuMnMgbGluZWFyLG1hcmdpbiAuMnMgZWFzZS1pbi1vdXR9LnRwLXAyZHYudHAtcDJkdi1leHBhbmRlZCAudHAtcDJkdl9we21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO29wYWNpdHk6MX0udHAtcDJkdiAudHAtcG9wdntsZWZ0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3RvcDp2YXIoLS1ibGQtdXMpfS50cC1wMmRwdntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KX0udHAtcDJkcHZfcHtjdXJzb3I6Y3Jvc3NoYWlyO2hlaWdodDowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWJvdHRvbToxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1wMmRwdi50cC12LWRpc2FibGVkIC50cC1wMmRwdl9we29wYWNpdHk6LjV9LnRwLXAyZHB2X2d7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTtsZWZ0OjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS50cC1wMmRwdl9heHtvcGFjaXR5Oi4xO3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLWRhc2hhcnJheToxfS50cC1wMmRwdl9se29wYWNpdHk6LjU7c3Ryb2tlOnZhcigtLWluLWZnKTtzdHJva2UtZGFzaGFycmF5OjF9LnRwLXAyZHB2X217Ym9yZGVyOnZhcigtLWluLWZnKSBzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDo0cHg7bWFyZ2luLWxlZnQ6LTJweDttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6NHB4fS50cC1wMmRwdl9wOmZvY3VzIC50cC1wMmRwdl9te2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tZmcpO2JvcmRlci13aWR0aDowfS50cC1wb3B2e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtYmcpO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaGFkb3c6MCAycHggNHB4IHZhcigtLWJzLXNoKTtkaXNwbGF5Om5vbmU7bWF4LXdpZHRoOjE2OHB4O3BhZGRpbmc6dmFyKC0tY250LXYtcCkgdmFyKC0tY250LWgtcCk7cG9zaXRpb246YWJzb2x1dGU7dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDAwfS50cC1wb3B2LnRwLXBvcHYtdntkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6dmlzaWJsZX0udHAtc3Bydl9ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZ3J2LWZnKTtib3JkZXItd2lkdGg6MDtkaXNwbGF5OmJsb2NrO2hlaWdodDoycHg7bWFyZ2luOjA7d2lkdGg6MTAwJX0udHAtc3Bydi50cC12LWRpc2FibGVkIC50cC1zcHJ2X3J7b3BhY2l0eTouNX0udHAtc2xkdi50cC12LWRpc2FibGVke29wYWNpdHk6LjV9LnRwLXNsZHZfdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWJsZC11cyk7bWFyZ2luOjAgNnB4O291dGxpbmU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtc2xkdl90OjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZyk7Ym9yZGVyLXJhZGl1czoxcHg7Ym90dG9tOjA7Y29udGVudDpcIlwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjJweDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtc2xkdl9re2hlaWdodDoxMDAlO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0udHAtc2xkdl9rOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1mZyk7Ym9yZGVyLXJhZGl1czoxcHg7Ym90dG9tOjA7Y29udGVudDpcIlwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjJweDtsZWZ0OjA7bWFyZ2luLWJvdHRvbTphdXRvO21hcmdpbi10b3A6YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1zbGR2X2s6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym90dG9tOjA7Y29udGVudDpcIlwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEycHg7bWFyZ2luLWJvdHRvbTphdXRvO21hcmdpbi10b3A6YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotNnB4O3RvcDowO3dpZHRoOjEycHh9LnRwLXNsZHZfdDpob3ZlciAudHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1oKX0udHAtc2xkdl90OmZvY3VzIC50cC1zbGR2X2s6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWYpfS50cC1zbGR2X3Q6YWN0aXZlIC50cC1zbGR2X2s6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWEpfS50cC1zbGR0eHR2e2Rpc3BsYXk6ZmxleH0udHAtc2xkdHh0dl9ze2ZsZXg6Mn0udHAtc2xkdHh0dl90e2ZsZXg6MTttYXJnaW4tbGVmdDo0cHh9LnRwLXRhYnZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLXRhYnZfdHthbGlnbi1pdGVtczpmbGV4LWVuZDtjb2xvcjp2YXIoLS1jbnQtYmcpO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LnRwLXRhYnZfdDpob3Zlcntjb2xvcjp2YXIoLS1jbnQtYmctaCl9LnRwLXRhYnZfdDpoYXMoKjpmb2N1cyl7Y29sb3I6dmFyKC0tY250LWJnLWYpfS50cC10YWJ2X3Q6aGFzKCo6YWN0aXZlKXtjb2xvcjp2YXIoLS1jbnQtYmctYSl9LnRwLXRhYnZfdDo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yO2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtoZWlnaHQ6MnB4O2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9LnRwLXRhYnYudHAtdi1kaXNhYmxlZCAudHAtdGFidl90OjpiZWZvcmV7b3BhY2l0eTouNX0udHAtdGFidi50cC10YWJ2LW5vcCAudHAtdGFidl90e2hlaWdodDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC10YWJ2LnRwLXRhYnYtbm9wIC50cC10YWJ2X3Q6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZyk7Ym90dG9tOjA7Y29udGVudDpcIlwiO2hlaWdodDoycHg7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9LnRwLXRhYnZfY3twYWRkaW5nLWJvdHRvbTp2YXIoLS1jbnQtdi1wKTtwYWRkaW5nLWxlZnQ6NHB4O3BhZGRpbmctdG9wOnZhcigtLWNudC12LXApfS50cC10YWJ2X2l7Ym90dG9tOjA7Y29sb3I6dmFyKC0tY250LWJnKTtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO3dpZHRoOnZhcigtLWJzLWJyKX0udHAtdGFidl9pOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3I7Ym90dG9tOjA7Y29udGVudDpcIlwiO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDo0cHh9LnRwLXRhYnZfdDpob3ZlcisudHAtdGFidl9pe2NvbG9yOnZhcigtLWNudC1iZy1oKX0udHAtdGFidl90OmhhcygqOmZvY3VzKSsudHAtdGFidl9pe2NvbG9yOnZhcigtLWNudC1iZy1mKX0udHAtdGFidl90OmhhcygqOmFjdGl2ZSkrLnRwLXRhYnZfaXtjb2xvcjp2YXIoLS1jbnQtYmctYSl9LnRwLXRhYnYudHAtdi1kaXNhYmxlZD4udHAtdGFidl9pe29wYWNpdHk6LjV9LnRwLXRiaXZ7ZmxleDoxO21pbi13aWR0aDowO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC10Yml2Ky50cC10Yml2e21hcmdpbi1sZWZ0OjJweH0udHAtdGJpdisudHAtdGJpdi50cC12LWRpc2FibGVkOjpiZWZvcmV7b3BhY2l0eTouNX0udHAtdGJpdl9ie2Rpc3BsYXk6YmxvY2s7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tY250LWgtcCkgKyA0cHgpO3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1jbnQtaC1wKSArIDRweCk7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0udHAtdGJpdl9iOmRpc2FibGVke29wYWNpdHk6LjV9LnRwLXRiaXZfYjo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtib3R0b206MnB4O2NvbnRlbnQ6XCJcIjtsZWZ0OjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC10Yml2X2I6aG92ZXI6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1oKX0udHAtdGJpdl9iOmZvY3VzOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctZil9LnRwLXRiaXZfYjphY3RpdmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1hKX0udHAtdGJpdl90e2NvbG9yOnZhcigtLWNudC1mZyk7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtvcGFjaXR5Oi41O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS50cC10Yml2LnRwLXRiaXYtc2VsIC50cC10Yml2X3R7b3BhY2l0eToxfS50cC10eHR2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC10eHR2X2l7cGFkZGluZzowIDRweH0udHAtdHh0di50cC10eHR2LWZzdCAudHAtdHh0dl9pe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LW1pZCAudHAtdHh0dl9pe2JvcmRlci1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LWxzdCAudHAtdHh0dl9pe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnRwLXR4dHYudHAtdHh0di1udW0gLnRwLXR4dHZfaXt0ZXh0LWFsaWduOnJpZ2h0fS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10eHR2X2l7b3BhY2l0eTouM30udHAtdHh0dl9re2N1cnNvcjpwb2ludGVyO2hlaWdodDoxMDAlO2xlZnQ6LTNweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMnB4fS50cC10eHR2X2s6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItcmFkaXVzOjFweDtib3R0b206MDtjb250ZW50OlwiXCI7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSAtIDRweCk7bGVmdDo1MCU7bWFyZ2luLWJvdHRvbTphdXRvO21hcmdpbi1sZWZ0Oi0xcHg7bWFyZ2luLXRvcDphdXRvO29wYWNpdHk6LjE7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNpdGlvbjpib3JkZXItcmFkaXVzIC4xcyxoZWlnaHQgLjFzLHRyYW5zZm9ybSAuMXMsd2lkdGggLjFzO3dpZHRoOjJweH0udHAtdHh0dl9rOmhvdmVyOjpiZWZvcmUsLnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR4dHZfazo6YmVmb3Jle29wYWNpdHk6MX0udHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9rOjpiZWZvcmV7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjRweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMXB4KTt3aWR0aDo0cHh9LnRwLXR4dHZfZ3tib3R0b206MDtkaXNwbGF5OmJsb2NrO2hlaWdodDo4cHg7bGVmdDo1MCU7bWFyZ2luOmF1dG87b3ZlcmZsb3c6dmlzaWJsZTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjEwMCV9LnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR4dHZfZ3t2aXNpYmlsaXR5OnZpc2libGV9LnRwLXR4dHZfZ2J7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLWRhc2hhcnJheToxfS50cC10eHR2X2doe2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0taW4tZmcpfS50cC10eHR2IC50cC10dHZ7bWFyZ2luLWxlZnQ6NnB4O3Zpc2liaWxpdHk6aGlkZGVufS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10dHZ7dmlzaWJpbGl0eTp2aXNpYmxlfS50cC10dHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1mZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2NvbG9yOnZhcigtLWJzLWJnKTtwYWRkaW5nOjJweCA0cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC0xMDAlKX0udHAtdHR2OjpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLWluLWZnKSByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDpcIlwiO2ZvbnQtc2l6ZTouOWVtO2hlaWdodDo0cHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTt3aWR0aDo0cHh9LnRwLXJvdHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1icik7Ym94LXNoYWRvdzowIDJweCA0cHggdmFyKC0tYnMtc2gpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmxlZnR9LnRwLXJvdHZfYntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpO3BhZGRpbmctbGVmdDpjYWxjKDRweCArIHZhcigtLWJsZC11cykgKyB2YXIoLS1jbnQtaC1wKSk7dGV4dC1hbGlnbjpjZW50ZXJ9LnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2J7ZGlzcGxheTpub25lfS50cC1yb3R2X2I6ZGlzYWJsZWQgLnRwLXJvdHZfbXtkaXNwbGF5Om5vbmV9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdD4udHAtZmxkdl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtYnIpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWJyKX0udHAtcm90dl9jPi50cC1mbGR2LnRwLXYtbHN0Pi50cC1mbGR2X2l7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2J7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2X2MgLnRwLWZsZHYudHAtdi12bHN0Om5vdCgudHAtZmxkdi1leHBhbmRlZCk+LnRwLWZsZHZfYntib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWZzdHttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY250LXYtcCkpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1mc3Q+LnRwLWZsZHZfYntib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHZfYz4udHAtdGFidi50cC12LWxzdD4udHAtdGFidl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtYnIpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWJyKX0udHAtcm90dl9jPi50cC10YWJ2LnRwLXYtbHN0Pi50cC10YWJ2X2l7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYz4udHAtdGFidi50cC12LWZzdHttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY250LXYtcCkpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLXRhYnYudHAtdi1mc3Q+LnRwLXRhYnZfdHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtdi1kaXNhYmxlZCwudHAtcm90diAudHAtdi1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS50cC1yb3R2LnRwLXYtaGlkZGVuLC50cC1yb3R2IC50cC12LWhpZGRlbntkaXNwbGF5Om5vbmV9Jyk7XG4gICAgICAgICAgICB0aGlzLnBvb2xfLmdldEFsbCgpLmZvckVhY2goKHBsdWdpbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1iZWRQbHVnaW5TdHlsZV8ocGx1Z2luKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclBsdWdpbih7XG4gICAgICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAgICAgICBTbGlkZXJCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgTGlzdEJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgICAgICAgICBUYWJCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgVGV4dEJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFZFUlNJT04gPSBuZXcgU2VtdmVyKCczLjEuNCcpO1xuXG4gICAgZXhwb3J0cy5CbGFkZUFwaSA9IEJsYWRlQXBpO1xuICAgIGV4cG9ydHMuQnV0dG9uQXBpID0gQnV0dG9uQXBpO1xuICAgIGV4cG9ydHMuRm9sZGVyQXBpID0gRm9sZGVyQXBpO1xuICAgIGV4cG9ydHMuSW5wdXRCaW5kaW5nQXBpID0gSW5wdXRCaW5kaW5nQXBpO1xuICAgIGV4cG9ydHMuTGlzdEFwaSA9IExpc3RBcGk7XG4gICAgZXhwb3J0cy5Nb25pdG9yQmluZGluZ0FwaSA9IE1vbml0b3JCaW5kaW5nQXBpO1xuICAgIGV4cG9ydHMuUGFuZSA9IFBhbmU7XG4gICAgZXhwb3J0cy5TZXBhcmF0b3JBcGkgPSBTZXBhcmF0b3JBcGk7XG4gICAgZXhwb3J0cy5TbGlkZXJBcGkgPSBTbGlkZXJBcGk7XG4gICAgZXhwb3J0cy5UYWJBcGkgPSBUYWJBcGk7XG4gICAgZXhwb3J0cy5UYWJQYWdlQXBpID0gVGFiUGFnZUFwaTtcbiAgICBleHBvcnRzLlRleHRBcGkgPSBUZXh0QXBpO1xuICAgIGV4cG9ydHMuVHBDaGFuZ2VFdmVudCA9IFRwQ2hhbmdlRXZlbnQ7XG4gICAgZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdmVjMkNvcHkob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gYVswXVxuICAgIG91dFsxXSA9IGFbMV1cbiAgICByZXR1cm4gb3V0XG59IiwiaW1wb3J0IGNhbnZhc1NrZXRjaCBmcm9tICdjYW52YXMtc2tldGNoJ1xuaW1wb3J0IHsgcmFuZG9tLCBtYXRoIH0gZnJvbSAnY2FudmFzLXNrZXRjaC11dGlsJ1xuaW1wb3J0IHsgUGFuZSB9IGZyb20gJ3R3ZWFrcGFuZSdcblxuLypcblRPRE9cbi0gQWRkIHNhbHQgZm9yIHJlbWVtYmVyIHJhbmRvbVxuLSBBdW1hdGlzZXIgbGVzIHBhcmFtw6h0cmVzIGVuIGZvbmN0aW9uIGRlIGxldXIgY2hhbmdlbWVudCAocC5leC4gZ3V0dGVyIG1heCA1MCUgZGUgbGEgc2l6ZSBkZXMgYmFsbHMpXG4qL1xuXG5sZXQgcG9zaXRpb25zID0gW11cblxuY29uc3QgUEFSQU1TID0ge1xuICAgIC8vIEdyaWQgLy9cbiAgICBtYXJnaW46IDI1LFxuICAgIGd1dHRlcjogMTUsXG4gICAgY2VsbHM6IDUsXG4gICAgYmFja2dyb3VuZDogJyNGRkYnLFxuICAgIC8vIFNoYXBlIC8vXG4gICAgc2l6ZTogNTAsXG4gICAgYW1vdW50OiAxMCxcbiAgICBjb2xvcjogJyMwMDAnLFxufVxuXG5jb25zdCBnZXREaW1lbnNpb25zID0gKHsgbWFyZ2luLCBzaXplLCBndXR0ZXIsIGNlbGxzIH0pID0+IHtcbiAgICBjb25zdCBkaW1lbnNpb25zID0gMiAqIG1hcmdpbiArIGNlbGxzICogc2l6ZSArIChjZWxscyAtIDEpICogZ3V0dGVyXG4gICAgcmV0dXJuIFtkaW1lbnNpb25zLCBkaW1lbnNpb25zXVxufVxuXG5jb25zdCBnZXRQb3NpdGlvbiA9IChwb3NpdGlvbiwgeyBtYXJnaW4sIHNpemUsIGd1dHRlciB9KSA9PiB7XG4gICAgcmV0dXJuIG1hcmdpbiArIHBvc2l0aW9uICogc2l6ZSArIChwb3NpdGlvbiAtIDEpICogZ3V0dGVyIC0gc2l6ZSAqIDAuNVxufVxuXG5jb25zdCBnZXRTaWJsaW5ncyA9IChwb3NpdGlvbnMsIHsgY2VsbHMgfSkgPT4ge1xuICAgIGNvbnN0IHNpYmxpbmdzID0gW11cblxuICAgIGNvbnN0IGlzRmlyc3RMaW5lID0gKGlkKSA9PiBNYXRoLmZsb29yKGlkIC8gY2VsbHMpICUgY2VsbHMgPT09IDBcbiAgICBjb25zdCBpc0xhc3RMaW5lID0gKGlkKSA9PiAoTWF0aC5mbG9vcihpZCAvIGNlbGxzKSArIDEpICUgY2VsbHMgPT09IDBcbiAgICBjb25zdCBpc0ZpcnN0Q29sID0gKGlkKSA9PiBpZCAlIGNlbGxzID09PSAwXG4gICAgY29uc3QgaXNMYXN0Q29sID0gKGlkKSA9PiAoaWQgKyAxKSAlIGNlbGxzID09PSAwXG5cbiAgICBjb25zdCBnZXROZWlnaGJvck4gPSAoaWQpID0+IChwb3NpdGlvbnNbaWQgLSBjZWxsc10gPyBpZCAtIGNlbGxzIDogbnVsbClcbiAgICBjb25zdCBnZXROZWlnaGJvckUgPSAoaWQpID0+IChwb3NpdGlvbnNbaWQgKyAxXSA/IGlkICsgMSA6IG51bGwpXG4gICAgY29uc3QgZ2V0TmVpZ2hib3JTID0gKGlkKSA9PiAocG9zaXRpb25zW2lkICsgY2VsbHNdID8gaWQgKyBjZWxscyA6IG51bGwpXG4gICAgY29uc3QgZ2V0TmVpZ2hib3JXID0gKGlkKSA9PiAocG9zaXRpb25zW2lkIC0gMV0gPyBpZCAtIDEgOiBudWxsKVxuXG4gICAgY29uc3QgZ2V0TmVpZ2hib3JORSA9IChpZCkgPT5cbiAgICAgICAgcG9zaXRpb25zW2lkICsgMSAtIGNlbGxzXSA/IGlkICsgMSAtIGNlbGxzIDogbnVsbFxuICAgIGNvbnN0IGdldE5laWdoYm9yU0UgPSAoaWQpID0+XG4gICAgICAgIHBvc2l0aW9uc1tpZCArIDEgKyBjZWxsc10gPyBpZCArIDEgKyBjZWxscyA6IG51bGxcbiAgICBjb25zdCBnZXROZWlnaGJvclNXID0gKGlkKSA9PlxuICAgICAgICBwb3NpdGlvbnNbaWQgLSAxICsgY2VsbHNdID8gaWQgLSAxICsgY2VsbHMgOiBudWxsXG4gICAgY29uc3QgZ2V0TmVpZ2hib3JOVyA9IChpZCkgPT5cbiAgICAgICAgcG9zaXRpb25zW2lkIC0gMSAtIGNlbGxzXSA/IGlkIC0gMSAtIGNlbGxzIDogbnVsbFxuXG4gICAgcG9zaXRpb25zLmZvckVhY2goKHBvc2l0aW9uLCBpZCkgPT4ge1xuICAgICAgICBjb25zdCBuID0gaXNGaXJzdExpbmUoaWQpID8gbnVsbCA6IGdldE5laWdoYm9yTihpZClcbiAgICAgICAgY29uc3QgcyA9IGlzTGFzdExpbmUoaWQpID8gbnVsbCA6IGdldE5laWdoYm9yUyhpZClcbiAgICAgICAgY29uc3QgZSA9IGlzTGFzdENvbChpZCkgPyBudWxsIDogZ2V0TmVpZ2hib3JFKGlkKVxuICAgICAgICBjb25zdCB3ID0gaXNGaXJzdENvbChpZCkgPyBudWxsIDogZ2V0TmVpZ2hib3JXKGlkKVxuXG4gICAgICAgIGNvbnN0IG5lID0gaXNGaXJzdExpbmUoaWQpIHx8IGlzTGFzdENvbChpZCkgPyBudWxsIDogZ2V0TmVpZ2hib3JORShpZClcbiAgICAgICAgY29uc3Qgc2UgPSBpc0xhc3RMaW5lKGlkKSB8fCBpc0xhc3RDb2woaWQpID8gbnVsbCA6IGdldE5laWdoYm9yU0UoaWQpXG4gICAgICAgIGNvbnN0IHN3ID0gaXNMYXN0TGluZShpZCkgfHwgaXNGaXJzdENvbChpZCkgPyBudWxsIDogZ2V0TmVpZ2hib3JTVyhpZClcbiAgICAgICAgY29uc3QgbncgPSBpc0ZpcnN0TGluZShpZCkgfHwgaXNGaXJzdENvbChpZCkgPyBudWxsIDogZ2V0TmVpZ2hib3JOVyhpZClcblxuICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IHBvc2l0aW9uXG5cbiAgICAgICAgc2libGluZ3MucHVzaCh7IGlzQWN0aXZlLCBzaWJsaW5nczogeyBuLCBuZSwgZSwgc2UsIHMsIHN3LCB3LCBudyB9IH0pXG4gICAgfSlcblxuICAgIHJldHVybiBzaWJsaW5nc1xufVxuXG5jb25zdCBjcmVhdGVHcmlkT2ZQb3NpdGlvbnMgPSAoeyBjZWxscywgYW1vdW50IH0pID0+IHtcbiAgICBsZXQgcG9zaXRpb25zID0gbmV3IEFycmF5KGNlbGxzICoqIDIpLmZpbGwoMCwgMCwgY2VsbHMgKiogMilcbiAgICBsZXQgaW5jID0gMFxuICAgIGxldCBwcmV2ID0gbnVsbFxuXG4gICAgd2hpbGUgKGluYyA8IGFtb3VudCAmJiBpbmMgPCBjZWxscyAqKiAyKSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHJhbmRvbS5yYW5nZUZsb29yKDAsIGNlbGxzICoqIDIpXG5cbiAgICAgICAgY29uc3QgeyBzaWJsaW5ncyB9ID0gZ2V0U2libGluZ3MocG9zaXRpb25zLCBQQVJBTVMpW3Bvc11cbiAgICAgICAgY29uc3QgaXNTZXBhcmF0ZSA9IE9iamVjdC52YWx1ZXMoc2libGluZ3MpLmV2ZXJ5KFxuICAgICAgICAgICAgKHNpYmxpbmcpID0+IHNpYmxpbmcgPT09IG51bGxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChwb3NpdGlvbnNbcG9zXSAhPT0gMSkge1xuICAgICAgICAgICAgaWYgKGluYyA+IDAgJiYgaXNTZXBhcmF0ZSkgY29udGludWVcbiAgICAgICAgICAgIHBvc2l0aW9uc1twb3NdID0gMVxuICAgICAgICAgICAgcHJldiA9IHBvc1xuICAgICAgICAgICAgaW5jKytcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBvc2l0aW9ucyA9IGdldFNpYmxpbmdzKHBvc2l0aW9ucywgUEFSQU1TKVxuXG4gICAgcmV0dXJuIHBvc2l0aW9uc1xufVxuXG5jb25zdCB1c2VHcmlkID0gKHsgY2VsbHMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBmb3IgKGxldCBpZCA9IDA7IGlkIDwgUEFSQU1TLmNlbGxzICoqIDI7IGlkKyspIHtcbiAgICAgICAgY29uc3QgY29sID0gKGlkICUgY2VsbHMpICsgMVxuICAgICAgICBjb25zdCByb3cgPSBNYXRoLmZsb29yKGlkIC8gY2VsbHMpICsgMVxuXG4gICAgICAgIGNvbnN0IHggPSBnZXRQb3NpdGlvbihjb2wsIFBBUkFNUylcbiAgICAgICAgY29uc3QgeSA9IGdldFBvc2l0aW9uKHJvdywgUEFSQU1TKVxuXG4gICAgICAgIGNvbnN0IHBvcyA9IGlkXG5cbiAgICAgICAgY2FsbGJhY2soeyBjb2wsIHJvdywgeCwgeSwgcG9zIH0pXG4gICAgfVxufVxuXG5jb25zdCBzZXR0aW5ncyA9IHtcbiAgICBkaW1lbnNpb25zOiBnZXREaW1lbnNpb25zKFBBUkFNUyksXG4gICAgdW5pdHM6ICdweCcsXG4gICAgcGl4ZWxSYXRpbzogMixcbiAgICBleHBvcnRQaXhlbFJhdGlvOiAxMCxcbiAgICBuYW1lOiAnb2NzaW5AJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxufVxuXG5jb25zdCBza2V0Y2ggPSAoeyByZW5kZXIsIHVwZGF0ZSwgZXhwb3J0RnJhbWUgfSkgPT4ge1xuICAgIGNvbnN0IHBhbmUgPSBuZXcgUGFuZSgpXG5cbiAgICBjb25zdCBmMSA9IHBhbmUuYWRkRm9sZGVyKHtcbiAgICAgICAgdGl0bGU6ICdHcmlkJyxcbiAgICB9KVxuICAgIGYxLmFkZElucHV0KFBBUkFNUywgJ21hcmdpbicsIHtcbiAgICAgICAgbGFiZWw6ICdNYXJnaW4nLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIG1heDogMjAwLFxuICAgICAgICBzdGVwOiAxLFxuICAgIH0pXG4gICAgZjEuYWRkSW5wdXQoUEFSQU1TLCAnZ3V0dGVyJywge1xuICAgICAgICBsYWJlbDogJ0d1dHRlcicsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAyNSxcbiAgICAgICAgc3RlcDogMSxcbiAgICB9KVxuICAgIGYxLmFkZElucHV0KFBBUkFNUywgJ2NlbGxzJywge1xuICAgICAgICBsYWJlbDogJ1Jvd3MvTGluZXMnLFxuICAgICAgICBtaW46IDIsXG4gICAgICAgIG1heDogMTAsXG4gICAgICAgIHN0ZXA6IDEsXG4gICAgfSlcbiAgICBmMS5hZGRJbnB1dChQQVJBTVMsICdiYWNrZ3JvdW5kJywgeyBsYWJlbDogJ0ZpbGwnIH0pXG5cbiAgICBjb25zdCBmMiA9IHBhbmUuYWRkRm9sZGVyKHtcbiAgICAgICAgdGl0bGU6ICdTaGFwZScsXG4gICAgfSlcbiAgICBmMi5hZGRJbnB1dChQQVJBTVMsICdzaXplJywge1xuICAgICAgICBsYWJlbDogJ0RpYW1ldGVyJyxcbiAgICAgICAgbWluOiA1LFxuICAgICAgICBtYXg6IDEwMCxcbiAgICAgICAgc3RlcDogMSxcbiAgICB9KVxuXG4gICAgZjIuYWRkSW5wdXQoUEFSQU1TLCAnYW1vdW50Jywge1xuICAgICAgICBsYWJlbDogJ0Ftb3VudCcsXG4gICAgICAgIG1pbjogMixcbiAgICAgICAgbWF4OiAxMDAsXG4gICAgICAgIHN0ZXA6IDEsXG4gICAgfSlcbiAgICBmMi5hZGRJbnB1dChQQVJBTVMsICdjb2xvcicsIHsgbGFiZWw6ICdGaWxsJyB9KVxuXG4gICAgY29uc3QgZjMgPSBwYW5lLmFkZEZvbGRlcih7XG4gICAgICAgIHRpdGxlOiAnQWN0aW9ucycsXG4gICAgfSlcblxuICAgIGNvbnN0IHJhbmQgPSBmMy5hZGRCdXR0b24oe1xuICAgICAgICB0aXRsZTogJ1JhbmRvbWl6ZScsXG4gICAgICAgIGxhYmVsOiAnR2VuZXJhdGUnLFxuICAgIH0pXG4gICAgZjMuYWRkU2VwYXJhdG9yKClcbiAgICBjb25zdCBzYXZlID0gZjMuYWRkQnV0dG9uKHtcbiAgICAgICAgdGl0bGU6ICdQTkcnLFxuICAgICAgICBsYWJlbDogJ0V4cG9ydCcsXG4gICAgfSlcblxuICAgIHJhbmQub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICBwb3NpdGlvbnMgPSBjcmVhdGVHcmlkT2ZQb3NpdGlvbnMoUEFSQU1TKVxuICAgICAgICByZW5kZXIoKVxuICAgIH0pXG4gICAgc2F2ZS5vbignY2xpY2snLCAoKSA9PiBleHBvcnRGcmFtZSgpKVxuICAgIHBhbmUub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgcG9zaXRpb25zID0gY3JlYXRlR3JpZE9mUG9zaXRpb25zKFBBUkFNUylcbiAgICAgICAgdXBkYXRlKHsgZGltZW5zaW9uczogZ2V0RGltZW5zaW9ucyhQQVJBTVMpIH0pXG4gICAgICAgIHJlbmRlcigpXG4gICAgfSlcblxuICAgIHBvc2l0aW9ucyA9IGNyZWF0ZUdyaWRPZlBvc2l0aW9ucyhQQVJBTVMpXG5cbiAgICByZXR1cm4gKHsgY29udGV4dCwgd2lkdGgsIGhlaWdodCB9KSA9PiB7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gUEFSQU1TLmJhY2tncm91bmRcbiAgICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuXG4gICAgICAgIC8vIERyYXcgYmxhY2sgcG9pbnRzXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gUEFSQU1TLmNvbG9yXG4gICAgICAgIHVzZUdyaWQoUEFSQU1TLCAoeyB4LCB5LCBwb3MgfSkgPT4ge1xuICAgICAgICAgICAgY29udGV4dC5zYXZlKClcbiAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHgsIHkpXG5cbiAgICAgICAgICAgIGNvbnN0IGlzRHJhd2FibGVQb2ludCA9IHBvc2l0aW9uc1twb3NdLmlzQWN0aXZlXG5cbiAgICAgICAgICAgIGlmIChpc0RyYXdhYmxlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpXG4gICAgICAgICAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgUEFSQU1TLnNpemUgKiAwLjUsIDAsIDIgKiBNYXRoLlBJKVxuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbCgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gRHJhdyBibGFjayBsaW5lc1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IFBBUkFNUy5jb2xvclxuICAgICAgICB1c2VHcmlkKFBBUkFNUywgKHsgeCwgeSwgcG9zIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnRleHQuc2F2ZSgpXG4gICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSh4LCB5KVxuXG4gICAgICAgICAgICBjb25zdCBpc0RyYXdhYmxlUG9pbnQgPSBwb3NpdGlvbnNbcG9zXS5pc0FjdGl2ZVxuXG4gICAgICAgICAgICBpZiAoaXNEcmF3YWJsZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlLCBzIH0gPSBwb3NpdGlvbnNbcG9zXS5zaWJsaW5nc1xuXG4gICAgICAgICAgICAgICAgLy8gRHJhdyBuLHMsZSx3IGxpbmVzXG4gICAgICAgICAgICAgICAgaWYgKHMgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAtUEFSQU1TLnNpemUgKiAwLjUsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgUEFSQU1TLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBQQVJBTVMuc2l6ZSArIFBBUkFNUy5ndXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChlICE9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC1QQVJBTVMuc2l6ZSAqIDAuNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFBBUkFNUy5zaXplICsgUEFSQU1TLmd1dHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIFBBUkFNUy5zaXplXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKClcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBEcmF3IGJsYWNrIGRpYWdvbmFsZXNcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBQQVJBTVMuY29sb3JcbiAgICAgICAgdXNlR3JpZChQQVJBTVMsICh7IHgsIHksIHBvcyB9KSA9PiB7XG4gICAgICAgICAgICBjb250ZXh0LnNhdmUoKVxuICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoeCwgeSlcblxuICAgICAgICAgICAgY29uc3QgaXNEcmF3YWJsZVBvaW50ID0gcG9zaXRpb25zW3Bvc10uaXNBY3RpdmVcblxuICAgICAgICAgICAgaWYgKGlzRHJhd2FibGVQb2ludCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2UsIHN3IH0gPSBwb3NpdGlvbnNbcG9zXS5zaWJsaW5nc1xuXG4gICAgICAgICAgICAgICAgLy8gRHJhdyBuZSxzZSxzdyxudyBsaW5lc1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpZGUgPSBQQVJBTVMuc2l6ZSArIFBBUkFNUy5ndXR0ZXJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLmh5cG90KHNpZGUsIHNpZGUpXG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLmh5cG90KFBBUkFNUy5zaXplICogMC41LCBQQVJBTVMuc2l6ZSAqIDAuNSlcblxuICAgICAgICAgICAgICAgIGlmIChzZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnNhdmUoKVxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJvdGF0ZShtYXRoLmRlZ1RvUmFkKC00NSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoLSh3aWR0aCAqIDAuNSksIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN3ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2F2ZSgpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucm90YXRlKG1hdGguZGVnVG9SYWQoNDUpKVxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0KC0od2lkdGggKiAwLjUpLCAwLCB3aWR0aCwgaGVpZ2h0KVxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKClcbiAgICAgICAgfSlcblxuICAgICAgICAvL0RyYXcgY29ybmVycyBQQVMgUFJPUFJFXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gUEFSQU1TLmNvbG9yXG4gICAgICAgIHVzZUdyaWQoUEFSQU1TLCAoeyB4LCB5LCBwb3MgfSkgPT4ge1xuICAgICAgICAgICAgY29udGV4dC5zYXZlKClcbiAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHgsIHkpXG5cbiAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gcG9zaXRpb25zW3Bvc10uaXNBY3RpdmVcblxuICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbiwgcywgZSwgdyB9ID0gcG9zaXRpb25zW3Bvc10uc2libGluZ3NcbiAgICAgICAgICAgICAgICAvL0RSQVcgQ09STkVSUyAoV0lUSCBXSElURSBQT0lOVFMpXG4gICAgICAgICAgICAgICAgLy9jb250ZXh0LmZpbGxTdHlsZSA9ICdyZWQnXG4gICAgICAgICAgICAgICAgaWYgKG4gIT09IG51bGwgJiYgdyAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgLShQQVJBTVMuc2l6ZSAqIDAuNSArIFBBUkFNUy5ndXR0ZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLShQQVJBTVMuc2l6ZSAqIDAuNSArIFBBUkFNUy5ndXR0ZXIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAobiAhPT0gbnVsbCAmJiBlICE9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBQQVJBTVMuc2l6ZSAqIDAuNSArIFBBUkFNUy5ndXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAtKFBBUkFNUy5zaXplICogMC41ICsgUEFSQU1TLmd1dHRlcilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChzICE9PSBudWxsICYmIGUgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFBBUkFNUy5zaXplICogMC41ICsgUEFSQU1TLmd1dHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIFBBUkFNUy5zaXplICogMC41ICsgUEFSQU1TLmd1dHRlclxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKHMgIT09IG51bGwgJiYgdyAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgLShQQVJBTVMuc2l6ZSAqIDAuNSArIFBBUkFNUy5ndXR0ZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUEFSQU1TLnNpemUgKiAwLjUgKyBQQVJBTVMuZ3V0dGVyXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gRHJhdyB3aGl0ZSBiaWcgcG9pbnRzXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gUEFSQU1TLmJhY2tncm91bmRcbiAgICAgICAgdXNlR3JpZChQQVJBTVMsICh7IHgsIHksIHBvcyB9KSA9PiB7XG4gICAgICAgICAgICBjb250ZXh0LnNhdmUoKVxuICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoeCwgeSlcblxuICAgICAgICAgICAgY29uc3QgaXNEcmF3YWJsZVBvaW50ID0gcG9zaXRpb25zW3Bvc10uaXNBY3RpdmVcblxuICAgICAgICAgICAgaWYgKCFpc0RyYXdhYmxlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpXG4gICAgICAgICAgICAgICAgY29udGV4dC5hcmMoXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIFBBUkFNUy5zaXplICogMC41ICsgUEFSQU1TLmd1dHRlcixcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgMiAqIE1hdGguUElcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKClcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmNhbnZhc1NrZXRjaChza2V0Y2gsIHNldHRpbmdzKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxudmFyIEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmZcbmV4cG9ydHMua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0XG4gKiAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGVcbiAqIHVzaW5nIF9fcHJvdG9fXy4gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWBcbiAqIChTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOCkuIElFIDEwIGxhY2tzIHN1cHBvcnRcbiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBjb25zb2xlLmVycm9yKFxuICAgICdUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgJyArXG4gICAgJ2BidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuJ1xuICApXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgLy8gQ2FuIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkP1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7IF9fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfSB9XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIGJ1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG5pZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgIT0gbnVsbCAmJlxuICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSlcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2UodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IFR5cGVFcnJvcihcbiAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgICApXG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZSh2YWx1ZSwgQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIEFycmF5QnVmZmVyKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgKVxuICB9XG5cbiAgdmFyIHZhbHVlT2YgPSB2YWx1ZS52YWx1ZU9mICYmIHZhbHVlLnZhbHVlT2YoKVxuICBpZiAodmFsdWVPZiAhPSBudWxsICYmIHZhbHVlT2YgIT09IHZhbHVlKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlT2YsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIHZhciBiID0gZnJvbU9iamVjdCh2YWx1ZSlcbiAgaWYgKGIpIHJldHVybiBiXG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1ByaW1pdGl2ZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICAgIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0oJ3N0cmluZycpLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGhcbiAgICApXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gIClcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBOb3RlOiBDaGFuZ2UgcHJvdG90eXBlICphZnRlciogQnVmZmVyLmZyb20gaXMgZGVmaW5lZCB0byB3b3JrYXJvdW5kIENocm9tZSBidWc6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzE0OFxuQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIHNpemUgKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICB2YXIgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHtcbiAgICAgIGJ1ZiA9IEJ1ZmZlci5mcm9tKGJ1ZilcbiAgICB9XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgaXNJbnN0YW5jZShzdHJpbmcsIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBzdHJpbmdcbiAgICApXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbXVzdE1hdGNoID0gKGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZSlcbiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7XG4gICAgICAgICAgcmV0dXJuIG11c3RNYXRjaCA/IC0xIDogdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgfVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmdcblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5yZXBsYWNlKC8oLnsyfSkvZywgJyQxICcpLnRyaW0oKVxuICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmIChpc0luc3RhbmNlKHRhcmdldCwgVWludDhBcnJheSkpIHtcbiAgICB0YXJnZXQgPSBCdWZmZXIuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKVxuICB9XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdGFyZ2V0KVxuICAgIClcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVXNlIGJ1aWx0LWluIHdoZW4gYXZhaWxhYmxlLCBtaXNzaW5nIGZyb20gSUUxMVxuICAgIHRoaXMuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc3RhcnQsIGVuZClcbiAgfSBlbHNlIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKChlbmNvZGluZyA9PT0gJ3V0ZjgnICYmIGNvZGUgPCAxMjgpIHx8XG4gICAgICAgICAgZW5jb2RpbmcgPT09ICdsYXRpbjEnKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogSWYgYHZhbGAgZml0cyBpbnRvIGEgc2luZ2xlIGJ5dGUsIHVzZSB0aGF0IG51bWVyaWMgdmFsdWUuXG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlciBvciBVaW50OEFycmF5IG9iamVjdHMgZnJvbSBvdGhlciBjb250ZXh0cyAoaS5lLiBpZnJhbWVzKSBkbyBub3QgcGFzc1xuLy8gdGhlIGBpbnN0YW5jZW9mYCBjaGVjayBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyBvZiB0aGF0IHR5cGUuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzSW5zdGFuY2UgKG9iaiwgdHlwZSkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmXG4gICAgICBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lKVxufVxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICAvLyBGb3IgSUUxMSBzdXBwb3J0XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuIiwiLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIlxuZ2xvYmFsLkNBTlZBU19TS0VUQ0hfREVGQVVMVF9TVE9SQUdFX0tFWSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuIl19