403Webshell
Server IP : 82.208.35.60  /  Your IP : 216.73.216.89
Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31
System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64
User : studiokobylisy_cz ( 1008)
PHP Version : 7.3.31
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/order_states_form.bundle.js
/*! For license information please see order_states_form.bundle.js.LICENSE.txt */
(()=>{var e={96367:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(56268);var o=window.$;t.default=function(){o('.colorpicker input[type="text"]').each((function(e,t){o(t).colorpicker()}))}},76544:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventEmitter=void 0;var o,n=(o=r(17187))&&o.__esModule?o:{default:o},i=t.EventEmitter=new n.default;t.default=i},45795:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=i(r(99663)),n=i(r(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=window.$,l=function(){function e(){var t=this;(0,o.default)(this,e),a(document).on("change","select.translatable_choice_language",(function(e){t.filterSelect(e)})),a("select.translatable_choice_language").trigger("change")}return(0,n.default)(e,[{key:"filterSelect",value:function(e){var t=a(e.currentTarget),r=t.closest(".form-group"),o=t.find("option:selected").val();r.find('select.translatable_choice[data-language="'+o+'"]').parent().show();var n=r.find("select.translatable_choice");n.not('select.translatable_choice[data-language="'+o+'"]').each((function(e,t){a(t).parent().hide()})),this.bindValueSelection(n)}},{key:"bindValueSelection",value:function(e){e.each((function(e,t){a(t).on("change",(function(e){var t=a(e.currentTarget),r=t.attr("id");a("#"+r+"_value").val(t.find("option:selected").val())}))}))}}]),e}();t.default=l},92526:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=a(r(99663)),n=a(r(22600)),i=r(76544);function a(e){return e&&e.__esModule?e:{default:e}}var l=window.$,s=function(){function e(t){var r=this;(0,o.default)(this,e);var n=t||{};return this.localeItemSelector=n.localeItemSelector||".js-locale-item",this.localeButtonSelector=n.localeButtonSelector||".js-locale-btn",this.localeInputSelector=n.localeInputSelector||".js-locale-input",this.selectedLocale=l(this.localeItemSelector).data("locale"),l("body").on("click",this.localeItemSelector,this.toggleLanguage.bind(this)),i.EventEmitter.on("languageSelected",this.toggleInputs.bind(this)),{localeItemSelector:this.localeItemSelector,localeButtonSelector:this.localeButtonSelector,localeInputSelector:this.localeInputSelector,refreshFormInputs:function(e){r.refreshInputs(e)},getSelectedLocale:function(){return r.selectedLocale}}}return(0,n.default)(e,[{key:"refreshInputs",value:function(e){this.selectedLocale&&i.EventEmitter.emit("languageSelected",{selectedLocale:this.selectedLocale,form:e})}},{key:"toggleLanguage",value:function(e){var t=l(e.target),r=t.closest("form");this.selectedLocale=t.data("locale"),this.refreshInputs(r)}},{key:"toggleInputs",value:function(e){var t=e.form;this.selectedLocale=e.selectedLocale;var r=t.find(this.localeButtonSelector),o=r.data("change-language-url");r.text(this.selectedLocale),t.find(this.localeInputSelector).addClass("d-none"),t.find(this.localeInputSelector+".js-locale-"+this.selectedLocale).removeClass("d-none"),o&&this.saveSelectedLanguage(o,this.selectedLocale)}},{key:"saveSelectedLanguage",value:function(e,t){l.post({url:e,data:{language_iso_code:t}})}}]),e}();t.default=s},89026:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={sendEmailSelector:"#order_state_send_email",mailTemplateSelector:".order_state_template_select",mailTemplatePreview:"#order_state_template_preview"}},32242:(e,t,r)=>{e.exports={default:r(33391),__esModule:!0}},99663:(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},22600:(e,t,r)=>{"use strict";t.__esModule=!0;var o,n=(o=r(32242))&&o.__esModule?o:{default:o};t.default=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),(0,n.default)(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}()},33391:(e,t,r)=>{r(31477);var o=r(34579).Object;e.exports=function(e,t,r){return o.defineProperty(e,t,r)}},85663:e=>{e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},12159:(e,t,r)=>{var o=r(36727);e.exports=function(e){if(!o(e))throw TypeError(e+" is not an object!");return e}},34579:e=>{var t=e.exports={version:"2.6.11"};"number"==typeof __e&&(__e=t)},19216:(e,t,r)=>{var o=r(85663);e.exports=function(e,t,r){if(o(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,o){return e.call(t,r,o)};case 3:return function(r,o,n){return e.call(t,r,o,n)}}return function(){return e.apply(t,arguments)}}},89666:(e,t,r)=>{e.exports=!r(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(e,t,r)=>{var o=r(36727),n=r(33938).document,i=o(n)&&o(n.createElement);e.exports=function(e){return i?n.createElement(e):{}}},83856:(e,t,r)=>{var o=r(33938),n=r(34579),i=r(19216),a=r(41818),l=r(27069),s=function(e,t,r){var c,u,h,p=e&s.F,f=e&s.G,d=e&s.S,v=e&s.P,g=e&s.B,y=e&s.W,k=f?n:n[t]||(n[t]={}),b=k.prototype,m=f?o:d?o[t]:(o[t]||{}).prototype;for(c in f&&(r=t),r)(u=!p&&m&&void 0!==m[c])&&l(k,c)||(h=u?m[c]:r[c],k[c]=f&&"function"!=typeof m[c]?r[c]:g&&u?i(h,o):y&&m[c]==h?function(e){var t=function(t,r,o){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,o)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(h):v&&"function"==typeof h?i(Function.call,h):h,v&&((k.virtual||(k.virtual={}))[c]=h,e&s.R&&b&&!b[c]&&a(b,c,h)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,e.exports=s},7929:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},33938:e=>{var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},27069:e=>{var t={}.hasOwnProperty;e.exports=function(e,r){return t.call(e,r)}},41818:(e,t,r)=>{var o=r(4743),n=r(83101);e.exports=r(89666)?function(e,t,r){return o.f(e,t,n(1,r))}:function(e,t,r){return e[t]=r,e}},33758:(e,t,r)=>{e.exports=!r(89666)&&!r(7929)((function(){return 7!=Object.defineProperty(r(97467)("div"),"a",{get:function(){return 7}}).a}))},36727:e=>{e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},4743:(e,t,r)=>{var o=r(12159),n=r(33758),i=r(33206),a=Object.defineProperty;t.f=r(89666)?Object.defineProperty:function(e,t,r){if(o(e),t=i(t,!0),o(r),n)try{return a(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(e[t]=r.value),e}},83101:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},33206:(e,t,r)=>{var o=r(36727);e.exports=function(e,t){if(!o(e))return e;var r,n;if(t&&"function"==typeof(r=e.toString)&&!o(n=r.call(e)))return n;if("function"==typeof(r=e.valueOf)&&!o(n=r.call(e)))return n;if(!t&&"function"==typeof(r=e.toString)&&!o(n=r.call(e)))return n;throw TypeError("Can't convert object to primitive value")}},31477:(e,t,r)=>{var o=r(83856);o(o.S+o.F*!r(89666),"Object",{defineProperty:r(4743).f})},17187:e=>{"use strict";var t,r="object"==typeof Reflect?Reflect:null,o=r&&"function"==typeof r.apply?r.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};t=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var n=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function l(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function s(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function c(e,t,r,o){var n,i,a,c;if(l(r),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),i=e._events),a=i[t]),void 0===a)a=i[t]=r,++e._eventsCount;else if("function"==typeof a?a=i[t]=o?[r,a]:[a,r]:o?a.unshift(r):a.push(r),(n=s(e))>0&&a.length>n&&!a.warned){a.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=e,u.type=t,u.count=a.length,c=u,console&&console.warn&&console.warn(c)}return e}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function h(e,t,r){var o={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},n=u.bind(o);return n.listener=r,o.wrapFn=n,n}function p(e,t,r){var o=e._events;if(void 0===o)return[];var n=o[t];return void 0===n?[]:"function"==typeof n?r?[n.listener||n]:[n]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(n):d(n,n.length)}function f(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function d(e,t){for(var r=new Array(t),o=0;o<t;++o)r[o]=e[o];return r}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||n(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||n(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return s(this)},i.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var n="error"===e,i=this._events;if(void 0!==i)n=n&&void 0===i.error;else if(!n)return!1;if(n){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var l=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw l.context=a,l}var s=i[e];if(void 0===s)return!1;if("function"==typeof s)o(s,this,t);else{var c=s.length,u=d(s,c);for(r=0;r<c;++r)o(u[r],this,t)}return!0},i.prototype.addListener=function(e,t){return c(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return c(this,e,t,!0)},i.prototype.once=function(e,t){return l(t),this.on(e,h(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return l(t),this.prependListener(e,h(this,e,t)),this},i.prototype.removeListener=function(e,t){var r,o,n,i,a;if(l(t),void 0===(o=this._events))return this;if(void 0===(r=o[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(n=-1,i=r.length-1;i>=0;i--)if(r[i]===t||r[i].listener===t){a=r[i].listener,n=i;break}if(n<0)return this;0===n?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,n),1===r.length&&(o[e]=r[0]),void 0!==o.removeListener&&this.emit("removeListener",e,a||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,r,o;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var n,i=Object.keys(r);for(o=0;o<i.length;++o)"removeListener"!==(n=i[o])&&this.removeAllListeners(n);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(o=t.length-1;o>=0;o--)this.removeListener(e,t[o]);return this},i.prototype.listeners=function(e){return p(this,e,!0)},i.prototype.rawListeners=function(e){return p(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):f.call(e,t)},i.prototype.listenerCount=f,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},56268:(e,t,r)=>{(function(t,o){var n,i;n=window,i=function(e){return function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=7)}([function(t,r){t.exports=e},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,n=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),i=(o=r(0))&&o.__esModule?o:{default:o};function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var l=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(a(this,e),this.colorpicker=t,this.options=r,!this.colorpicker.element||!this.colorpicker.element.length)throw new Error("Extension: this.colorpicker.element is not valid");this.colorpicker.element.on("colorpickerCreate.colorpicker-ext",i.default.proxy(this.onCreate,this)),this.colorpicker.element.on("colorpickerDestroy.colorpicker-ext",i.default.proxy(this.onDestroy,this)),this.colorpicker.element.on("colorpickerUpdate.colorpicker-ext",i.default.proxy(this.onUpdate,this)),this.colorpicker.element.on("colorpickerChange.colorpicker-ext",i.default.proxy(this.onChange,this)),this.colorpicker.element.on("colorpickerInvalid.colorpicker-ext",i.default.proxy(this.onInvalid,this)),this.colorpicker.element.on("colorpickerShow.colorpicker-ext",i.default.proxy(this.onShow,this)),this.colorpicker.element.on("colorpickerHide.colorpicker-ext",i.default.proxy(this.onHide,this)),this.colorpicker.element.on("colorpickerEnable.colorpicker-ext",i.default.proxy(this.onEnable,this)),this.colorpicker.element.on("colorpickerDisable.colorpicker-ext",i.default.proxy(this.onDisable,this))}return n(e,[{key:"resolveColor",value:function(e){return!1}},{key:"onCreate",value:function(e){}},{key:"onDestroy",value:function(e){this.colorpicker.element.off(".colorpicker-ext")}},{key:"onUpdate",value:function(e){}},{key:"onChange",value:function(e){}},{key:"onInvalid",value:function(e){}},{key:"onHide",value:function(e){}},{key:"onShow",value:function(e){}},{key:"onDisable",value:function(e){}},{key:"onEnable",value:function(e){}}]),e}();t.default=l,e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ColorItem=t.HSVAColor=void 0;var o,n=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),i=(o=r(16))&&o.__esModule?o:{default:o};function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var l=function(){function e(t,r,o,n){a(this,e),this.h=isNaN(t)?0:t,this.s=isNaN(r)?0:r,this.v=isNaN(o)?0:o,this.a=isNaN(t)?1:n}return n(e,[{key:"toString",value:function(){return this.h+", "+this.s+"%, "+this.v+"%, "+this.a}}]),e}(),s=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;a(this,e),this.replace(t,r)}return n(e,[{key:"api",value:function(t){for(var r=arguments.length,o=Array(r>1?r-1:0),n=1;n<r;n++)o[n-1]=arguments[n];if(0===arguments.length)return this._color;var a=this._color[t].apply(this._color,o);return a instanceof i.default?new e(a,this.format):a}},{key:"original",get:function(){return this._original}}],[{key:"HSVAColor",get:function(){return l}}]),n(e,[{key:"replace",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(r=e.sanitizeFormat(r),this._original={color:t,format:r,valid:!0},this._color=e.parse(t),null===this._color)return this._color=(0,i.default)(),void(this._original.valid=!1);this._format=r||(e.isHex(t)?"hex":this._color.model)}},{key:"isValid",value:function(){return!0===this._original.valid}},{key:"setHueRatio",value:function(e){this.hue=360*(1-e)}},{key:"setSaturationRatio",value:function(e){this.saturation=100*e}},{key:"setValueRatio",value:function(e){this.value=100*(1-e)}},{key:"setAlphaRatio",value:function(e){this.alpha=1-e}},{key:"isDesaturated",value:function(){return 0===this.saturation}},{key:"isTransparent",value:function(){return 0===this.alpha}},{key:"hasTransparency",value:function(){return this.hasAlpha()&&this.alpha<1}},{key:"hasAlpha",value:function(){return!isNaN(this.alpha)}},{key:"toObject",value:function(){return new l(this.hue,this.saturation,this.value,this.alpha)}},{key:"toHsva",value:function(){return this.toObject()}},{key:"toHsvaRatio",value:function(){return new l(this.hue/360,this.saturation/100,this.value/100,this.alpha)}},{key:"toString",value:function(){return this.string()}},{key:"string",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!(t=e.sanitizeFormat(t||this.format)))return this._color.round().string();if(void 0===this._color[t])throw new Error("Unsupported color format: '"+t+"'");var r=this._color[t]();return r.round?r.round().string():r}},{key:"equals",value:function(t){return!(!(t=t instanceof e?t:new e(t)).isValid()||!this.isValid())&&this.hue===t.hue&&this.saturation===t.saturation&&this.value===t.value&&this.alpha===t.alpha}},{key:"getClone",value:function(){return new e(this._color,this.format)}},{key:"getCloneHueOnly",value:function(){return new e([this.hue,100,100,1],this.format)}},{key:"getCloneOpaque",value:function(){return new e(this._color.alpha(1),this.format)}},{key:"toRgbString",value:function(){return this.string("rgb")}},{key:"toHexString",value:function(){return this.string("hex")}},{key:"toHslString",value:function(){return this.string("hsl")}},{key:"isDark",value:function(){return this._color.isDark()}},{key:"isLight",value:function(){return this._color.isLight()}},{key:"generate",value:function(t){var r=[];if(Array.isArray(t))r=t;else{if(!e.colorFormulas.hasOwnProperty(t))throw new Error("No color formula found with the name '"+t+"'.");r=e.colorFormulas[t]}var o=[],n=this._color,i=this.format;return r.forEach((function(t){var r=[t?(n.hue()+t)%360:n.hue(),n.saturationv(),n.value(),n.alpha()];o.push(new e(r,i))})),o}},{key:"hue",get:function(){return this._color.hue()},set:function(e){this._color=this._color.hue(e)}},{key:"saturation",get:function(){return this._color.saturationv()},set:function(e){this._color=this._color.saturationv(e)}},{key:"value",get:function(){return this._color.value()},set:function(e){this._color=this._color.value(e)}},{key:"alpha",get:function(){var e=this._color.alpha();return isNaN(e)?1:e},set:function(e){this._color=this._color.alpha(Math.round(100*e)/100)}},{key:"format",get:function(){return this._format?this._format:this._color.model},set:function(t){this._format=e.sanitizeFormat(t)}}],[{key:"parse",value:function(t){if(t instanceof i.default)return t;if(t instanceof e)return t._color;var r=null;if(null===(t=t instanceof l?[t.h,t.s,t.v,isNaN(t.a)?1:t.a]:e.sanitizeString(t)))return null;Array.isArray(t)&&(r="hsv");try{return(0,i.default)(t,r)}catch(e){return null}}},{key:"sanitizeString",value:function(e){return"string"==typeof e||e instanceof String?e.match(/^[0-9a-f]{2,}$/i)?"#"+e:"transparent"===e.toLowerCase()?"#FFFFFF00":e:e}},{key:"isHex",value:function(e){return("string"==typeof e||e instanceof String)&&!!e.match(/^#?[0-9a-f]{2,}$/i)}},{key:"sanitizeFormat",value:function(e){switch(e){case"hex":case"hex3":case"hex4":case"hex6":case"hex8":return"hex";case"rgb":case"rgba":case"keyword":case"name":return"rgb";case"hsl":case"hsla":case"hsv":case"hsva":case"hwb":case"hwba":return"hsl";default:return""}}}]),e}();s.colorFormulas={complementary:[180],triad:[0,120,240],tetrad:[0,90,180,270],splitcomplement:[0,72,216]},t.default=s,t.HSVAColor=l,t.ColorItem=s},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=126;t.default={customClass:null,color:!1,fallbackColor:!1,format:"auto",horizontal:!1,inline:!1,container:!1,popover:{animation:!0,placement:"bottom",fallbackPlacement:"flip"},debug:!1,input:"input",addon:".colorpicker-input-addon",autoInputFallback:!0,useHashPrefix:!0,useAlpha:!0,template:'<div class="colorpicker">\n      <div class="colorpicker-saturation"><i class="colorpicker-guide"></i></div>\n      <div class="colorpicker-hue"><i class="colorpicker-guide"></i></div>\n      <div class="colorpicker-alpha">\n        <div class="colorpicker-alpha-color"></div>\n        <i class="colorpicker-guide"></i>\n      </div>\n    </div>',extensions:[{name:"preview",options:{showText:!0}}],sliders:{saturation:{selector:".colorpicker-saturation",maxLeft:o,maxTop:o,callLeft:"setSaturationRatio",callTop:"setValueRatio"},hue:{selector:".colorpicker-hue",maxLeft:0,maxTop:o,callLeft:!1,callTop:"setHueRatio"},alpha:{selector:".colorpicker-alpha",childSelector:".colorpicker-alpha-color",maxLeft:0,maxTop:o,callLeft:!1,callTop:"setAlphaRatio"}},slidersHorz:{saturation:{selector:".colorpicker-saturation",maxLeft:o,maxTop:o,callLeft:"setSaturationRatio",callTop:"setValueRatio"},hue:{selector:".colorpicker-hue",maxLeft:o,maxTop:0,callLeft:"setHueRatio",callTop:!1},alpha:{selector:".colorpicker-alpha",childSelector:".colorpicker-alpha-color",maxLeft:o,maxTop:0,callLeft:"setAlphaRatio",callTop:!1}}},e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),i=l(r(1)),a=l(r(0));function l(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var u={colors:null,namesAsValues:!0},h=function(e){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};s(this,t);var n=c(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a.default.extend(!0,{},u,r)));return Array.isArray(n.options.colors)||"object"===o(n.options.colors)||(n.options.colors=null),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),n(t,[{key:"colors",get:function(){return this.options.colors}}]),n(t,[{key:"getLength",value:function(){return this.options.colors?Array.isArray(this.options.colors)?this.options.colors.length:"object"===o(this.options.colors)?Object.keys(this.options.colors).length:0:0}},{key:"resolveColor",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!(this.getLength()<=0)&&(Array.isArray(this.options.colors)?this.options.colors.indexOf(e)>=0?e:this.options.colors.indexOf(e.toUpperCase())>=0?e.toUpperCase():this.options.colors.indexOf(e.toLowerCase())>=0&&e.toLowerCase():"object"===o(this.options.colors)&&(!this.options.namesAsValues||t?this.getValue(e,!1):this.getName(e,this.getName("#"+e))))}},{key:"getName",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if("string"!=typeof e||!this.options.colors)return t;for(var r in this.options.colors)if(this.options.colors.hasOwnProperty(r)&&this.options.colors[r].toLowerCase()===e.toLowerCase())return r;return t}},{key:"getValue",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return"string"==typeof e&&this.options.colors&&this.options.colors.hasOwnProperty(e)?this.options.colors[e]:t}}]),t}(i.default);t.default=h,e.exports=t.default},function(e,t,r){"use strict";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},function(e,t,r){var o=r(5),n={};for(var i in o)o.hasOwnProperty(i)&&(n[o[i]]=i);var a=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var l in a)if(a.hasOwnProperty(l)){if(!("channels"in a[l]))throw new Error("missing channels property: "+l);if(!("labels"in a[l]))throw new Error("missing channel labels property: "+l);if(a[l].labels.length!==a[l].channels)throw new Error("channel and label counts mismatch: "+l);var s=a[l].channels,c=a[l].labels;delete a[l].channels,delete a[l].labels,Object.defineProperty(a[l],"channels",{value:s}),Object.defineProperty(a[l],"labels",{value:c})}a.rgb.hsl=function(e){var t,r,o=e[0]/255,n=e[1]/255,i=e[2]/255,a=Math.min(o,n,i),l=Math.max(o,n,i),s=l-a;return l===a?t=0:o===l?t=(n-i)/s:n===l?t=2+(i-o)/s:i===l&&(t=4+(o-n)/s),(t=Math.min(60*t,360))<0&&(t+=360),r=(a+l)/2,[t,100*(l===a?0:r<=.5?s/(l+a):s/(2-l-a)),100*r]},a.rgb.hsv=function(e){var t,r,o,n,i,a=e[0]/255,l=e[1]/255,s=e[2]/255,c=Math.max(a,l,s),u=c-Math.min(a,l,s),h=function(e){return(c-e)/6/u+.5};return 0===u?n=i=0:(i=u/c,t=h(a),r=h(l),o=h(s),a===c?n=o-r:l===c?n=1/3+t-o:s===c&&(n=2/3+r-t),n<0?n+=1:n>1&&(n-=1)),[360*n,100*i,100*c]},a.rgb.hwb=function(e){var t=e[0],r=e[1],o=e[2];return[a.rgb.hsl(e)[0],1/255*Math.min(t,Math.min(r,o))*100,100*(o=1-1/255*Math.max(t,Math.max(r,o)))]},a.rgb.cmyk=function(e){var t,r=e[0]/255,o=e[1]/255,n=e[2]/255;return[100*((1-r-(t=Math.min(1-r,1-o,1-n)))/(1-t)||0),100*((1-o-t)/(1-t)||0),100*((1-n-t)/(1-t)||0),100*t]},a.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,i,a,l=1/0;for(var s in o)if(o.hasOwnProperty(s)){var c=(i=e,a=o[s],Math.pow(i[0]-a[0],2)+Math.pow(i[1]-a[1],2)+Math.pow(i[2]-a[2],2));c<l&&(l=c,r=s)}return r},a.keyword.rgb=function(e){return o[e]},a.rgb.xyz=function(e){var t=e[0]/255,r=e[1]/255,o=e[2]/255;return[100*(.4124*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.3576*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)+.1805*(o=o>.04045?Math.pow((o+.055)/1.055,2.4):o/12.92)),100*(.2126*t+.7152*r+.0722*o),100*(.0193*t+.1192*r+.9505*o)]},a.rgb.lab=function(e){var t=a.rgb.xyz(e),r=t[0],o=t[1],n=t[2];return o/=100,n/=108.883,r=(r/=95.047)>.008856?Math.pow(r,1/3):7.787*r+16/116,[116*(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116)-16,500*(r-o),200*(o-(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116))]},a.hsl.rgb=function(e){var t,r,o,n,i,a=e[0]/360,l=e[1]/100,s=e[2]/100;if(0===l)return[i=255*s,i,i];t=2*s-(r=s<.5?s*(1+l):s+l-s*l),n=[0,0,0];for(var c=0;c<3;c++)(o=a+1/3*-(c-1))<0&&o++,o>1&&o--,i=6*o<1?t+6*(r-t)*o:2*o<1?r:3*o<2?t+(r-t)*(2/3-o)*6:t,n[c]=255*i;return n},a.hsl.hsv=function(e){var t=e[0],r=e[1]/100,o=e[2]/100,n=r,i=Math.max(o,.01);return r*=(o*=2)<=1?o:2-o,n*=i<=1?i:2-i,[t,100*(0===o?2*n/(i+n):2*r/(o+r)),(o+r)/2*100]},a.hsv.rgb=function(e){var t=e[0]/60,r=e[1]/100,o=e[2]/100,n=Math.floor(t)%6,i=t-Math.floor(t),a=255*o*(1-r),l=255*o*(1-r*i),s=255*o*(1-r*(1-i));switch(o*=255,n){case 0:return[o,s,a];case 1:return[l,o,a];case 2:return[a,o,s];case 3:return[a,l,o];case 4:return[s,a,o];case 5:return[o,a,l]}},a.hsv.hsl=function(e){var t,r,o,n=e[0],i=e[1]/100,a=e[2]/100,l=Math.max(a,.01);return o=(2-i)*a,r=i*l,[n,100*(r=(r/=(t=(2-i)*l)<=1?t:2-t)||0),100*(o/=2)]},a.hwb.rgb=function(e){var t,r,o,n,i,a,l,s=e[0]/360,c=e[1]/100,u=e[2]/100,h=c+u;switch(h>1&&(c/=h,u/=h),o=6*s-(t=Math.floor(6*s)),0!=(1&t)&&(o=1-o),n=c+o*((r=1-u)-c),t){default:case 6:case 0:i=r,a=n,l=c;break;case 1:i=n,a=r,l=c;break;case 2:i=c,a=r,l=n;break;case 3:i=c,a=n,l=r;break;case 4:i=n,a=c,l=r;break;case 5:i=r,a=c,l=n}return[255*i,255*a,255*l]},a.cmyk.rgb=function(e){var t=e[0]/100,r=e[1]/100,o=e[2]/100,n=e[3]/100;return[255*(1-Math.min(1,t*(1-n)+n)),255*(1-Math.min(1,r*(1-n)+n)),255*(1-Math.min(1,o*(1-n)+n))]},a.xyz.rgb=function(e){var t,r,o,n=e[0]/100,i=e[1]/100,a=e[2]/100;return r=-.9689*n+1.8758*i+.0415*a,o=.0557*n+-.204*i+1.057*a,t=(t=3.2406*n+-1.5372*i+-.4986*a)>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,o=o>.0031308?1.055*Math.pow(o,1/2.4)-.055:12.92*o,[255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1)),255*(o=Math.min(Math.max(0,o),1))]},a.xyz.lab=function(e){var t=e[0],r=e[1],o=e[2];return r/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116)-16,500*(t-r),200*(r-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},a.lab.xyz=function(e){var t,r,o,n=e[0];t=e[1]/500+(r=(n+16)/116),o=r-e[2]/200;var i=Math.pow(r,3),a=Math.pow(t,3),l=Math.pow(o,3);return r=i>.008856?i:(r-16/116)/7.787,t=a>.008856?a:(t-16/116)/7.787,o=l>.008856?l:(o-16/116)/7.787,[t*=95.047,r*=100,o*=108.883]},a.lab.lch=function(e){var t,r=e[0],o=e[1],n=e[2];return(t=360*Math.atan2(n,o)/2/Math.PI)<0&&(t+=360),[r,Math.sqrt(o*o+n*n),t]},a.lch.lab=function(e){var t,r=e[0],o=e[1];return t=e[2]/360*2*Math.PI,[r,o*Math.cos(t),o*Math.sin(t)]},a.rgb.ansi16=function(e){var t=e[0],r=e[1],o=e[2],n=1 in arguments?arguments[1]:a.rgb.hsv(e)[2];if(0===(n=Math.round(n/50)))return 30;var i=30+(Math.round(o/255)<<2|Math.round(r/255)<<1|Math.round(t/255));return 2===n&&(i+=60),i},a.hsv.ansi16=function(e){return a.rgb.ansi16(a.hsv.rgb(e),e[2])},a.rgb.ansi256=function(e){var t=e[0],r=e[1],o=e[2];return t===r&&r===o?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)},a.ansi16.rgb=function(e){var t=e%10;if(0===t||7===t)return e>50&&(t+=3.5),[t=t/10.5*255,t,t];var r=.5*(1+~~(e>50));return[(1&t)*r*255,(t>>1&1)*r*255,(t>>2&1)*r*255]},a.ansi256.rgb=function(e){if(e>=232){var t=10*(e-232)+8;return[t,t,t]}var r;return e-=16,[Math.floor(e/36)/5*255,Math.floor((r=e%36)/6)/5*255,r%6/5*255]},a.rgb.hex=function(e){var t=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(t.length)+t},a.hex.rgb=function(e){var t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];var r=t[0];3===t[0].length&&(r=r.split("").map((function(e){return e+e})).join(""));var o=parseInt(r,16);return[o>>16&255,o>>8&255,255&o]},a.rgb.hcg=function(e){var t,r=e[0]/255,o=e[1]/255,n=e[2]/255,i=Math.max(Math.max(r,o),n),a=Math.min(Math.min(r,o),n),l=i-a;return t=l<=0?0:i===r?(o-n)/l%6:i===o?2+(n-r)/l:4+(r-o)/l+4,t/=6,[360*(t%=1),100*l,100*(l<1?a/(1-l):0)]},a.hsl.hcg=function(e){var t,r=e[1]/100,o=e[2]/100,n=0;return(t=o<.5?2*r*o:2*r*(1-o))<1&&(n=(o-.5*t)/(1-t)),[e[0],100*t,100*n]},a.hsv.hcg=function(e){var t=e[1]/100,r=e[2]/100,o=t*r,n=0;return o<1&&(n=(r-o)/(1-o)),[e[0],100*o,100*n]},a.hcg.rgb=function(e){var t=e[0]/360,r=e[1]/100,o=e[2]/100;if(0===r)return[255*o,255*o,255*o];var n,i=[0,0,0],a=t%1*6,l=a%1,s=1-l;switch(Math.floor(a)){case 0:i[0]=1,i[1]=l,i[2]=0;break;case 1:i[0]=s,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=l;break;case 3:i[0]=0,i[1]=s,i[2]=1;break;case 4:i[0]=l,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=s}return n=(1-r)*o,[255*(r*i[0]+n),255*(r*i[1]+n),255*(r*i[2]+n)]},a.hcg.hsv=function(e){var t=e[1]/100,r=t+e[2]/100*(1-t),o=0;return r>0&&(o=t/r),[e[0],100*o,100*r]},a.hcg.hsl=function(e){var t=e[1]/100,r=e[2]/100*(1-t)+.5*t,o=0;return r>0&&r<.5?o=t/(2*r):r>=.5&&r<1&&(o=t/(2*(1-r))),[e[0],100*o,100*r]},a.hcg.hwb=function(e){var t=e[1]/100,r=t+e[2]/100*(1-t);return[e[0],100*(r-t),100*(1-r)]},a.hwb.hcg=function(e){var t=e[1]/100,r=1-e[2]/100,o=r-t,n=0;return o<1&&(n=(r-o)/(1-o)),[e[0],100*o,100*n]},a.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},a.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},a.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},a.gray.hsl=a.gray.hsv=function(e){return[0,0,e[0]]},a.gray.hwb=function(e){return[0,100,e[0]]},a.gray.cmyk=function(e){return[0,0,0,e[0]]},a.gray.lab=function(e){return[e[0],0,0]},a.gray.hex=function(e){var t=255&Math.round(e[0]/100*255),r=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(r.length)+r},a.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}},function(e,t,r){"use strict";var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=a(r(8)),i=a(r(0));function a(e){return e&&e.__esModule?e:{default:e}}var l="colorpicker";i.default[l]=n.default,i.default.fn[l]=function(e){var t=Array.prototype.slice.call(arguments,1),r=1===this.length,a=null,s=this.each((function(){var s=(0,i.default)(this),c=s.data(l),u="object"===(void 0===e?"undefined":o(e))?e:{};c||(c=new n.default(this,u),s.data(l,c)),r&&(a=s,"string"==typeof e&&(a="colorpicker"===e?c:i.default.isFunction(c[e])?c[e].apply(c,t):c[e]))}));return r?a:s},i.default.fn[l].constructor=n.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),n=v(r(1)),i=v(r(3)),a=v(r(9)),l=v(r(0)),s=v(r(13)),c=v(r(14)),u=v(r(15)),h=v(r(22)),p=v(r(23)),f=v(r(24)),d=v(r(2));function v(e){return e&&e.__esModule?e:{default:e}}var g=0,y="undefined"!=typeof self?self:void 0,k=function(){function e(t,r){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),g+=1,this.id=g,this.lastEvent={alias:null,e:null},this.element=(0,l.default)(t).addClass("colorpicker-element").attr("data-colorpicker-id",this.id),this.options=l.default.extend(!0,{},i.default,r,this.element.data()),this.disabled=!1,this.extensions=[],this.container=!0===this.options.container||!0!==this.options.container&&!0===this.options.inline?this.element:this.options.container,this.container=!1!==this.container&&(0,l.default)(this.container),this.inputHandler=new u.default(this),this.colorHandler=new h.default(this),this.sliderHandler=new s.default(this),this.popupHandler=new c.default(this,y),this.pickerHandler=new p.default(this),this.addonHandler=new f.default(this),this.init(),(0,l.default)(l.default.proxy((function(){this.trigger("colorpickerCreate")}),this))}return o(e,[{key:"color",get:function(){return this.colorHandler.color}},{key:"format",get:function(){return this.colorHandler.format}},{key:"picker",get:function(){return this.pickerHandler.picker}}],[{key:"Color",get:function(){return d.default}},{key:"Extension",get:function(){return n.default}}]),o(e,[{key:"init",value:function(){this.addonHandler.bind(),this.inputHandler.bind(),this.initExtensions(),this.colorHandler.bind(),this.pickerHandler.bind(),this.sliderHandler.bind(),this.popupHandler.bind(),this.pickerHandler.attach(),this.update(),this.inputHandler.isDisabled()&&this.disable()}},{key:"initExtensions",value:function(){var t=this;Array.isArray(this.options.extensions)||(this.options.extensions=[]),this.options.debug&&this.options.extensions.push({name:"debugger"}),this.options.extensions.forEach((function(r){t.registerExtension(e.extensions[r.name.toLowerCase()],r.options||{})}))}},{key:"registerExtension",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=new e(this,t);return this.extensions.push(r),r}},{key:"destroy",value:function(){var e=this.color;this.sliderHandler.unbind(),this.inputHandler.unbind(),this.popupHandler.unbind(),this.colorHandler.unbind(),this.addonHandler.unbind(),this.pickerHandler.unbind(),this.element.removeClass("colorpicker-element").removeData("colorpicker","color").off(".colorpicker"),this.trigger("colorpickerDestroy",e)}},{key:"show",value:function(e){this.popupHandler.show(e)}},{key:"hide",value:function(e){this.popupHandler.hide(e)}},{key:"toggle",value:function(e){this.popupHandler.toggle(e)}},{key:"getValue",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=this.colorHandler.color;return(t=t instanceof d.default?t:e)instanceof d.default?t.string(this.format):t}},{key:"setValue",value:function(e){if(!this.isDisabled()){var t=this.colorHandler;t.hasColor()&&e&&t.color.equals(e)||!t.hasColor()&&!e||(t.color=e?t.createColor(e,this.options.autoInputFallback):null,this.trigger("colorpickerChange",t.color,e),this.update())}}},{key:"update",value:function(){this.colorHandler.hasColor()?this.inputHandler.update():this.colorHandler.assureColor(),this.addonHandler.update(),this.pickerHandler.update(),this.trigger("colorpickerUpdate")}},{key:"enable",value:function(){return this.inputHandler.enable(),this.disabled=!1,this.picker.removeClass("colorpicker-disabled"),this.trigger("colorpickerEnable"),!0}},{key:"disable",value:function(){return this.inputHandler.disable(),this.disabled=!0,this.picker.addClass("colorpicker-disabled"),this.trigger("colorpickerDisable"),!0}},{key:"isEnabled",value:function(){return!this.isDisabled()}},{key:"isDisabled",value:function(){return!0===this.disabled}},{key:"trigger",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;this.element.trigger({type:e,colorpicker:this,color:t||this.color,value:r||this.getValue()})}}]),e}();k.extensions=a.default,t.default=k,e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Palette=t.Swatches=t.Preview=t.Debugger=void 0;var o=l(r(10)),n=l(r(11)),i=l(r(12)),a=l(r(4));function l(e){return e&&e.__esModule?e:{default:e}}t.Debugger=o.default,t.Preview=n.default,t.Swatches=i.default,t.Palette=a.default,t.default={debugger:o.default,preview:n.default,swatches:i.default,palette:a.default}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),n=function e(t,r,o){null===t&&(t=Function.prototype);var n=Object.getOwnPropertyDescriptor(t,r);if(void 0===n){var i=Object.getPrototypeOf(t);return null===i?void 0:e(i,r,o)}if("value"in n)return n.value;var a=n.get;return void 0!==a?a.call(o):void 0},i=l(r(1)),a=l(r(0));function l(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var u=function(e){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};s(this,t);var o=c(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,r));return o.eventCounter=0,o.colorpicker.inputHandler.hasInput()&&o.colorpicker.inputHandler.input.on("change.colorpicker-ext",a.default.proxy(o.onChangeInput,o)),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),o(t,[{key:"log",value:function(e){for(var t,r=arguments.length,o=Array(r>1?r-1:0),n=1;n<r;n++)o[n-1]=arguments[n];this.eventCounter+=1;var i="#"+this.eventCounter+": Colorpicker#"+this.colorpicker.id+" ["+e+"]";(t=console).debug.apply(t,[i].concat(o)),this.colorpicker.element.trigger({type:"colorpickerDebug",colorpicker:this.colorpicker,color:this.color,value:null,debug:{debugger:this,eventName:e,logArgs:o,logMessage:i}})}},{key:"resolveColor",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return this.log("resolveColor()",e,t),!1}},{key:"onCreate",value:function(e){return this.log("colorpickerCreate"),n(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"onCreate",this).call(this,e)}},{key:"onDestroy",value:function(e){return this.log("colorpickerDestroy"),this.eventCounter=0,this.colorpicker.inputHandler.hasInput()&&this.colorpicker.inputHandler.input.off(".colorpicker-ext"),n(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"onDestroy",this).call(this,e)}},{key:"onUpdate",value:function(e){this.log("colorpickerUpdate")}},{key:"onChangeInput",value:function(e){this.log("input:change.colorpicker",e.value,e.color)}},{key:"onChange",value:function(e){this.log("colorpickerChange",e.value,e.color)}},{key:"onInvalid",value:function(e){this.log("colorpickerInvalid",e.value,e.color)}},{key:"onHide",value:function(e){this.log("colorpickerHide"),this.eventCounter=0}},{key:"onShow",value:function(e){this.log("colorpickerShow")}},{key:"onDisable",value:function(e){this.log("colorpickerDisable")}},{key:"onEnable",value:function(e){this.log("colorpickerEnable")}}]),t}(i.default);t.default=u,e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),n=function e(t,r,o){null===t&&(t=Function.prototype);var n=Object.getOwnPropertyDescriptor(t,r);if(void 0===n){var i=Object.getPrototypeOf(t);return null===i?void 0:e(i,r,o)}if("value"in n)return n.value;var a=n.get;return void 0!==a?a.call(o):void 0},i=l(r(1)),a=l(r(0));function l(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var u=function(e){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};s(this,t);var o=c(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a.default.extend(!0,{},{template:'<div class="colorpicker-bar colorpicker-preview"><div /></div>',showText:!0,format:e.format},r)));return o.element=(0,a.default)(o.options.template),o.elementInner=o.element.find("div"),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),o(t,[{key:"onCreate",value:function(e){n(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"onCreate",this).call(this,e),this.colorpicker.picker.append(this.element)}},{key:"onUpdate",value:function(e){n(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"onUpdate",this).call(this,e),e.color?(this.elementInner.css("backgroundColor",e.color.toRgbString()),this.options.showText&&(this.elementInner.html(e.color.string(this.options.format||this.colorpicker.format)),e.color.isDark()&&e.color.alpha>.5?this.elementInner.css("color","white"):this.elementInner.css("color","black"))):this.elementInner.css("backgroundColor",null).css("color",null).html("")}}]),t}(i.default);t.default=u,e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),n=function e(t,r,o){null===t&&(t=Function.prototype);var n=Object.getOwnPropertyDescriptor(t,r);if(void 0===n){var i=Object.getPrototypeOf(t);return null===i?void 0:e(i,r,o)}if("value"in n)return n.value;var a=n.get;return void 0!==a?a.call(o):void 0},i=l(r(4)),a=l(r(0));function l(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var u={barTemplate:'<div class="colorpicker-bar colorpicker-swatches">\n                    <div class="colorpicker-swatches--inner"></div>\n                </div>',swatchTemplate:'<i class="colorpicker-swatch"><i class="colorpicker-swatch--inner"></i></i>'},h=function(e){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};s(this,t);var o=c(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a.default.extend(!0,{},u,r)));return o.element=null,o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),o(t,[{key:"isEnabled",value:function(){return this.getLength()>0}},{key:"onCreate",value:function(e){n(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"onCreate",this).call(this,e),this.isEnabled()&&(this.element=(0,a.default)(this.options.barTemplate),this.load(),this.colorpicker.picker.append(this.element))}},{key:"load",value:function(){var e=this,t=this.colorpicker,r=this.element.find(".colorpicker-swatches--inner"),o=!0===this.options.namesAsValues&&!Array.isArray(this.colors);r.empty(),a.default.each(this.colors,(function(n,i){var l=(0,a.default)(e.options.swatchTemplate).attr("data-name",n).attr("data-value",i).attr("title",o?n+": "+i:i).on("mousedown.colorpicker touchstart.colorpicker",(function(e){var r=(0,a.default)(this);t.setValue(o?r.attr("data-name"):r.attr("data-value"))}));l.find(".colorpicker-swatch--inner").css("background-color",i),r.append(l)})),r.append((0,a.default)('<i class="colorpicker-clear"></i>'))}}]),t}(i.default);t.default=h,e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,n=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),i=(o=r(0))&&o.__esModule?o:{default:o},a=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.colorpicker=t,this.currentSlider=null,this.mousePointer={left:0,top:0},this.onMove=i.default.proxy(this.defaultOnMove,this)}return n(e,[{key:"defaultOnMove",value:function(e,t){if(this.currentSlider){var r=this.currentSlider,o=this.colorpicker,n=o.colorHandler,i=n.hasColor()?n.color.getClone():n.getFallbackColor();r.guideStyle.left=t+"px",r.guideStyle.top=e+"px",r.callLeft&&i[r.callLeft](t/r.maxLeft),r.callTop&&i[r.callTop](e/r.maxTop),o.setValue(i),o.popupHandler.focus()}}},{key:"bind",value:function(){var e=this.colorpicker.options.horizontal?this.colorpicker.options.slidersHorz:this.colorpicker.options.sliders,t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(e[r].selector);this.colorpicker.picker.find(t.join(", ")).on("mousedown.colorpicker touchstart.colorpicker",i.default.proxy(this.pressed,this))}},{key:"unbind",value:function(){(0,i.default)(this.colorpicker.picker).off({"mousemove.colorpicker":i.default.proxy(this.moved,this),"touchmove.colorpicker":i.default.proxy(this.moved,this),"mouseup.colorpicker":i.default.proxy(this.released,this),"touchend.colorpicker":i.default.proxy(this.released,this)})}},{key:"pressed",value:function(e){if(!this.colorpicker.isDisabled()){this.colorpicker.lastEvent.alias="pressed",this.colorpicker.lastEvent.e=e,!e.pageX&&!e.pageY&&e.originalEvent&&e.originalEvent.touches&&(e.pageX=e.originalEvent.touches[0].pageX,e.pageY=e.originalEvent.touches[0].pageY);var t=(0,i.default)(e.target).closest("div"),r=this.colorpicker.options.horizontal?this.colorpicker.options.slidersHorz:this.colorpicker.options.sliders;if(!t.is(".colorpicker")){for(var o in this.currentSlider=null,r)if(r.hasOwnProperty(o)){var n=r[o];if(t.is(n.selector)){this.currentSlider=i.default.extend({},n,{name:o});break}if(void 0!==n.childSelector&&t.is(n.childSelector)){this.currentSlider=i.default.extend({},n,{name:o}),t=t.parent();break}}var a=t.find(".colorpicker-guide").get(0);if(null!==this.currentSlider&&null!==a){var l=t.offset();this.currentSlider.guideStyle=a.style,this.currentSlider.left=e.pageX-l.left,this.currentSlider.top=e.pageY-l.top,this.mousePointer={left:e.pageX,top:e.pageY},(0,i.default)(this.colorpicker.picker).on({"mousemove.colorpicker":i.default.proxy(this.moved,this),"touchmove.colorpicker":i.default.proxy(this.moved,this),"mouseup.colorpicker":i.default.proxy(this.released,this),"touchend.colorpicker":i.default.proxy(this.released,this)}).trigger("mousemove")}}}}},{key:"moved",value:function(e){this.colorpicker.lastEvent.alias="moved",this.colorpicker.lastEvent.e=e,!e.pageX&&!e.pageY&&e.originalEvent&&e.originalEvent.touches&&(e.pageX=e.originalEvent.touches[0].pageX,e.pageY=e.originalEvent.touches[0].pageY),e.preventDefault();var t=Math.max(0,Math.min(this.currentSlider.maxLeft,this.currentSlider.left+((e.pageX||this.mousePointer.left)-this.mousePointer.left))),r=Math.max(0,Math.min(this.currentSlider.maxTop,this.currentSlider.top+((e.pageY||this.mousePointer.top)-this.mousePointer.top)));this.onMove(r,t)}},{key:"released",value:function(e){this.colorpicker.lastEvent.alias="released",this.colorpicker.lastEvent.e=e,(0,i.default)(this.colorpicker.picker).off({"mousemove.colorpicker":this.moved,"touchmove.colorpicker":this.moved,"mouseup.colorpicker":this.released,"touchend.colorpicker":this.released})}}]),e}();t.default=a,e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),n=a(r(0)),i=a(r(3));function a(e){return e&&e.__esModule?e:{default:e}}var l=function(){function e(t,r){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.root=r,this.colorpicker=t,this.popoverTarget=null,this.popoverTip=null,this.clicking=!1,this.hidding=!1,this.showing=!1}return o(e,[{key:"bind",value:function(){var e=this.colorpicker;e.options.inline?e.picker.addClass("colorpicker-inline colorpicker-visible"):(e.picker.addClass("colorpicker-popup colorpicker-hidden"),(this.hasInput||this.hasAddon)&&(e.options.popover&&this.createPopover(),this.hasAddon&&(this.addon.attr("tabindex")||this.addon.attr("tabindex",0),this.addon.on({"mousedown.colorpicker touchstart.colorpicker":n.default.proxy(this.toggle,this)}),this.addon.on({"focus.colorpicker":n.default.proxy(this.show,this)}),this.addon.on({"focusout.colorpicker":n.default.proxy(this.hide,this)})),this.hasInput&&!this.hasAddon&&(this.input.on({"mousedown.colorpicker touchstart.colorpicker":n.default.proxy(this.show,this),"focus.colorpicker":n.default.proxy(this.show,this)}),this.input.on({"focusout.colorpicker":n.default.proxy(this.hide,this)})),(0,n.default)(this.root).on("resize.colorpicker",n.default.proxy(this.reposition,this))))}},{key:"unbind",value:function(){this.hasInput&&(this.input.off({"mousedown.colorpicker touchstart.colorpicker":n.default.proxy(this.show,this),"focus.colorpicker":n.default.proxy(this.show,this)}),this.input.off({"focusout.colorpicker":n.default.proxy(this.hide,this)})),this.hasAddon&&(this.addon.off({"mousedown.colorpicker touchstart.colorpicker":n.default.proxy(this.toggle,this)}),this.addon.off({"focus.colorpicker":n.default.proxy(this.show,this)}),this.addon.off({"focusout.colorpicker":n.default.proxy(this.hide,this)})),this.popoverTarget&&this.popoverTarget.popover("dispose"),(0,n.default)(this.root).off("resize.colorpicker",n.default.proxy(this.reposition,this)),(0,n.default)(this.root.document).off("mousedown.colorpicker touchstart.colorpicker",n.default.proxy(this.hide,this)),(0,n.default)(this.root.document).off("mousedown.colorpicker touchstart.colorpicker",n.default.proxy(this.onClickingInside,this))}},{key:"isClickingInside",value:function(e){return!!e&&(this.isOrIsInside(this.popoverTip,e.currentTarget)||this.isOrIsInside(this.popoverTip,e.target)||this.isOrIsInside(this.colorpicker.picker,e.currentTarget)||this.isOrIsInside(this.colorpicker.picker,e.target))}},{key:"isOrIsInside",value:function(e,t){return!(!e||!t)&&((t=(0,n.default)(t)).is(e)||e.find(t).length>0)}},{key:"onClickingInside",value:function(e){this.clicking=this.isClickingInside(e)}},{key:"createPopover",value:function(){var e=this.colorpicker;this.popoverTarget=this.hasAddon?this.addon:this.input,e.picker.addClass("colorpicker-bs-popover-content"),this.popoverTarget.popover(n.default.extend(!0,{},i.default.popover,e.options.popover,{trigger:"manual",content:e.picker,html:!0})),this.popoverTip=(0,n.default)(this.popoverTarget.popover("getTipElement").data("bs.popover").tip),this.popoverTip.addClass("colorpicker-bs-popover"),this.popoverTarget.on("shown.bs.popover",n.default.proxy(this.fireShow,this)),this.popoverTarget.on("hidden.bs.popover",n.default.proxy(this.fireHide,this))}},{key:"reposition",value:function(e){this.popoverTarget&&this.isVisible()&&this.popoverTarget.popover("update")}},{key:"toggle",value:function(e){this.isVisible()?this.hide(e):this.show(e)}},{key:"show",value:function(e){if(!(this.isVisible()||this.showing||this.hidding)){this.showing=!0,this.hidding=!1,this.clicking=!1;var t=this.colorpicker;t.lastEvent.alias="show",t.lastEvent.e=e,e&&(!this.hasInput||"color"===this.input.attr("type"))&&e&&e.preventDefault&&(e.stopPropagation(),e.preventDefault()),this.isPopover&&(0,n.default)(this.root).on("resize.colorpicker",n.default.proxy(this.reposition,this)),t.picker.addClass("colorpicker-visible").removeClass("colorpicker-hidden"),this.popoverTarget?this.popoverTarget.popover("show"):this.fireShow()}}},{key:"fireShow",value:function(){this.hidding=!1,this.showing=!1,this.isPopover&&((0,n.default)(this.root.document).on("mousedown.colorpicker touchstart.colorpicker",n.default.proxy(this.hide,this)),(0,n.default)(this.root.document).on("mousedown.colorpicker touchstart.colorpicker",n.default.proxy(this.onClickingInside,this))),this.colorpicker.trigger("colorpickerShow")}},{key:"hide",value:function(e){if(!(this.isHidden()||this.showing||this.hidding)){var t=this.colorpicker,r=this.clicking||this.isClickingInside(e);this.hidding=!0,this.showing=!1,this.clicking=!1,t.lastEvent.alias="hide",t.lastEvent.e=e,r?this.hidding=!1:this.popoverTarget?this.popoverTarget.popover("hide"):this.fireHide()}}},{key:"fireHide",value:function(){this.hidding=!1,this.showing=!1;var e=this.colorpicker;e.picker.addClass("colorpicker-hidden").removeClass("colorpicker-visible"),(0,n.default)(this.root).off("resize.colorpicker",n.default.proxy(this.reposition,this)),(0,n.default)(this.root.document).off("mousedown.colorpicker touchstart.colorpicker",n.default.proxy(this.hide,this)),(0,n.default)(this.root.document).off("mousedown.colorpicker touchstart.colorpicker",n.default.proxy(this.onClickingInside,this)),e.trigger("colorpickerHide")}},{key:"focus",value:function(){return this.hasAddon?this.addon.focus():!!this.hasInput&&this.input.focus()}},{key:"isVisible",value:function(){return this.colorpicker.picker.hasClass("colorpicker-visible")&&!this.colorpicker.picker.hasClass("colorpicker-hidden")}},{key:"isHidden",value:function(){return this.colorpicker.picker.hasClass("colorpicker-hidden")&&!this.colorpicker.picker.hasClass("colorpicker-visible")}},{key:"input",get:function(){return this.colorpicker.inputHandler.input}},{key:"hasInput",get:function(){return this.colorpicker.inputHandler.hasInput()}},{key:"addon",get:function(){return this.colorpicker.addonHandler.addon}},{key:"hasAddon",get:function(){return this.colorpicker.addonHandler.hasAddon()}},{key:"isPopover",get:function(){return!this.colorpicker.options.inline&&!!this.popoverTip}}]),e}();t.default=l,e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),n=a(r(0)),i=a(r(2));function a(e){return e&&e.__esModule?e:{default:e}}var l=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.colorpicker=t,this.input=this.colorpicker.element.is("input")?this.colorpicker.element:!!this.colorpicker.options.input&&this.colorpicker.element.find(this.colorpicker.options.input),this.input&&0===this.input.length&&(this.input=!1),this._initValue()}return o(e,[{key:"bind",value:function(){this.hasInput()&&(this.input.on({"keyup.colorpicker":n.default.proxy(this.onkeyup,this)}),this.input.on({"change.colorpicker":n.default.proxy(this.onchange,this)}))}},{key:"unbind",value:function(){this.hasInput()&&this.input.off(".colorpicker")}},{key:"_initValue",value:function(){if(this.hasInput()){var e="";[this.input.val(),this.input.data("color"),this.input.attr("data-color")].map((function(t){t&&""===e&&(e=t)})),e instanceof i.default?e=this.getFormattedColor(e.string(this.colorpicker.format)):"string"==typeof e||e instanceof String||(e=""),this.input.prop("value",e)}}},{key:"getValue",value:function(){return!!this.hasInput()&&this.input.val()}},{key:"setValue",value:function(e){this.hasInput()&&((e=e||"")!==(this.input.prop("value")||"")&&(this.input.prop("value",e),this.input.trigger({type:"change",colorpicker:this.colorpicker,color:this.colorpicker.color,value:e})))}},{key:"getFormattedColor",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return(e=e||this.colorpicker.colorHandler.getColorString())?(e=this.colorpicker.colorHandler.resolveColorDelegate(e,!1),!1===this.colorpicker.options.useHashPrefix&&(e=e.replace(/^#/g,"")),e):""}},{key:"hasInput",value:function(){return!1!==this.input}},{key:"isEnabled",value:function(){return this.hasInput()&&!this.isDisabled()}},{key:"isDisabled",value:function(){return this.hasInput()&&!0===this.input.prop("disabled")}},{key:"disable",value:function(){this.hasInput()&&this.input.prop("disabled",!0)}},{key:"enable",value:function(){this.hasInput()&&this.input.prop("disabled",!1)}},{key:"update",value:function(){this.hasInput()&&(!1===this.colorpicker.options.autoInputFallback&&this.colorpicker.colorHandler.isInvalidColor()||this.setValue(this.getFormattedColor()))}},{key:"onchange",value:function(e){this.colorpicker.lastEvent.alias="input.change",this.colorpicker.lastEvent.e=e;var t=this.getValue();t!==e.value&&this.colorpicker.setValue(t)}},{key:"onkeyup",value:function(e){this.colorpicker.lastEvent.alias="input.keyup",this.colorpicker.lastEvent.e=e;var t=this.getValue();t!==e.value&&this.colorpicker.setValue(t)}}]),e}();t.default=l,e.exports=t.default},function(e,t,r){"use strict";var o=r(17),n=r(20),i=[].slice,a=["keyword","gray","hex"],l={};Object.keys(n).forEach((function(e){l[i.call(n[e].labels).sort().join("")]=e}));var s={};function c(e,t){if(!(this instanceof c))return new c(e,t);if(t&&t in a&&(t=null),t&&!(t in n))throw new Error("Unknown model: "+t);var r,u;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof c)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var h=o.get(e);if(null===h)throw new Error("Unable to parse color from string: "+e);this.model=h.model,u=n[this.model].channels,this.color=h.value.slice(0,u),this.valpha="number"==typeof h.value[u]?h.value[u]:1}else if(e.length){this.model=t||"rgb",u=n[this.model].channels;var p=i.call(e,0,u);this.color=f(p,u),this.valpha="number"==typeof e[u]?e[u]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var d=Object.keys(e);"alpha"in e&&(d.splice(d.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var v=d.sort().join("");if(!(v in l))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=l[v];var g=n[this.model].labels,y=[];for(r=0;r<g.length;r++)y.push(e[g[r]]);this.color=f(y)}if(s[this.model])for(u=n[this.model].channels,r=0;r<u;r++){var k=s[this.model][r];k&&(this.color[r]=k(this.color[r]))}this.valpha=Math.max(0,Math.min(1,this.valpha)),Object.freeze&&Object.freeze(this)}function u(e,t,r){return(e=Array.isArray(e)?e:[e]).forEach((function(e){(s[e]||(s[e]=[]))[t]=r})),e=e[0],function(o){var n;return arguments.length?(r&&(o=r(o)),(n=this[e]()).color[t]=o,n):(n=this[e]().color[t],r&&(n=r(n)),n)}}function h(e){return function(t){return Math.max(0,Math.min(e,t))}}function p(e){return Array.isArray(e)?e:[e]}function f(e,t){for(var r=0;r<t;r++)"number"!=typeof e[r]&&(e[r]=0);return e}c.prototype={toString:function(){return this.string()},toJSON:function(){return this[this.model]()},string:function(e){var t=this.model in o.to?this:this.rgb(),r=1===(t=t.round("number"==typeof e?e:1)).valpha?t.color:t.color.concat(this.valpha);return o.to[t.model](r)},percentString:function(e){var t=this.rgb().round("number"==typeof e?e:1),r=1===t.valpha?t.color:t.color.concat(this.valpha);return o.to.rgb.percent(r)},array:function(){return 1===this.valpha?this.color.slice():this.color.concat(this.valpha)},object:function(){for(var e={},t=n[this.model].channels,r=n[this.model].labels,o=0;o<t;o++)e[r[o]]=this.color[o];return 1!==this.valpha&&(e.alpha=this.valpha),e},unitArray:function(){var e=this.rgb().color;return e[0]/=255,e[1]/=255,e[2]/=255,1!==this.valpha&&e.push(this.valpha),e},unitObject:function(){var e=this.rgb().object();return e.r/=255,e.g/=255,e.b/=255,1!==this.valpha&&(e.alpha=this.valpha),e},round:function(e){return e=Math.max(e||0,0),new c(this.color.map(function(e){return function(t){return function(e,t){return Number(e.toFixed(t))}(t,e)}}(e)).concat(this.valpha),this.model)},alpha:function(e){return arguments.length?new c(this.color.concat(Math.max(0,Math.min(1,e))),this.model):this.valpha},red:u("rgb",0,h(255)),green:u("rgb",1,h(255)),blue:u("rgb",2,h(255)),hue:u(["hsl","hsv","hsl","hwb","hcg"],0,(function(e){return(e%360+360)%360})),saturationl:u("hsl",1,h(100)),lightness:u("hsl",2,h(100)),saturationv:u("hsv",1,h(100)),value:u("hsv",2,h(100)),chroma:u("hcg",1,h(100)),gray:u("hcg",2,h(100)),white:u("hwb",1,h(100)),wblack:u("hwb",2,h(100)),cyan:u("cmyk",0,h(100)),magenta:u("cmyk",1,h(100)),yellow:u("cmyk",2,h(100)),black:u("cmyk",3,h(100)),x:u("xyz",0,h(100)),y:u("xyz",1,h(100)),z:u("xyz",2,h(100)),l:u("lab",0,h(100)),a:u("lab",1),b:u("lab",2),keyword:function(e){return arguments.length?new c(e):n[this.model].keyword(this.color)},hex:function(e){return arguments.length?new c(e):o.to.hex(this.rgb().round().color)},rgbNumber:function(){var e=this.rgb().color;return(255&e[0])<<16|(255&e[1])<<8|255&e[2]},luminosity:function(){for(var e=this.rgb().color,t=[],r=0;r<e.length;r++){var o=e[r]/255;t[r]=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4)}return.2126*t[0]+.7152*t[1]+.0722*t[2]},contrast:function(e){var t=this.luminosity(),r=e.luminosity();return t>r?(t+.05)/(r+.05):(r+.05)/(t+.05)},level:function(e){var t=this.contrast(e);return t>=7.1?"AAA":t>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),t=0;t<3;t++)e.color[t]=255-e.color[t];return e},lighten:function(e){var t=this.hsl();return t.color[2]+=t.color[2]*e,t},darken:function(e){var t=this.hsl();return t.color[2]-=t.color[2]*e,t},saturate:function(e){var t=this.hsl();return t.color[1]+=t.color[1]*e,t},desaturate:function(e){var t=this.hsl();return t.color[1]-=t.color[1]*e,t},whiten:function(e){var t=this.hwb();return t.color[1]+=t.color[1]*e,t},blacken:function(e){var t=this.hwb();return t.color[2]+=t.color[2]*e,t},grayscale:function(){var e=this.rgb().color,t=.3*e[0]+.59*e[1]+.11*e[2];return c.rgb(t,t,t)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var t=this.hsl(),r=t.color[0];return r=(r=(r+e)%360)<0?360+r:r,t.color[0]=r,t},mix:function(e,t){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var r=e.rgb(),o=this.rgb(),n=void 0===t?.5:t,i=2*n-1,a=r.alpha()-o.alpha(),l=((i*a==-1?i:(i+a)/(1+i*a))+1)/2,s=1-l;return c.rgb(l*r.red()+s*o.red(),l*r.green()+s*o.green(),l*r.blue()+s*o.blue(),r.alpha()*n+o.alpha()*(1-n))}},Object.keys(n).forEach((function(e){if(-1===a.indexOf(e)){var t=n[e].channels;c.prototype[e]=function(){if(this.model===e)return new c(this);if(arguments.length)return new c(arguments,e);var r="number"==typeof arguments[t]?t:this.valpha;return new c(p(n[this.model][e].raw(this.color)).concat(r),e)},c[e]=function(r){return"number"==typeof r&&(r=f(i.call(arguments),t)),new c(r,e)}}})),e.exports=c},function(e,t,r){var o=r(5),n=r(18),i={};for(var a in o)o.hasOwnProperty(a)&&(i[o[a]]=a);var l=e.exports={to:{},get:{}};function s(e,t,r){return Math.min(Math.max(t,e),r)}function c(e){var t=e.toString(16).toUpperCase();return t.length<2?"0"+t:t}l.get=function(e){var t,r;switch(e.substring(0,3).toLowerCase()){case"hsl":t=l.get.hsl(e),r="hsl";break;case"hwb":t=l.get.hwb(e),r="hwb";break;default:t=l.get.rgb(e),r="rgb"}return t?{model:r,value:t}:null},l.get.rgb=function(e){if(!e)return null;var t,r,n,i=[0,0,0,1];if(t=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(n=t[2],t=t[1],r=0;r<3;r++){var a=2*r;i[r]=parseInt(t.slice(a,a+2),16)}n&&(i[3]=Math.round(parseInt(n,16)/255*100)/100)}else if(t=e.match(/^#([a-f0-9]{3,4})$/i)){for(n=(t=t[1])[3],r=0;r<3;r++)i[r]=parseInt(t[r]+t[r],16);n&&(i[3]=Math.round(parseInt(n+n,16)/255*100)/100)}else if(t=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(r=0;r<3;r++)i[r]=parseInt(t[r+1],0);t[4]&&(i[3]=parseFloat(t[4]))}else{if(!(t=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(t=e.match(/(\D+)/))?"transparent"===t[1]?[0,0,0,0]:(i=o[t[1]])?(i[3]=1,i):null:null;for(r=0;r<3;r++)i[r]=Math.round(2.55*parseFloat(t[r+1]));t[4]&&(i[3]=parseFloat(t[4]))}for(r=0;r<3;r++)i[r]=s(i[r],0,255);return i[3]=s(i[3],0,1),i},l.get.hsl=function(e){if(!e)return null;var t=e.match(/^hsla?\(\s*([+-]?(?:\d*\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(t){var r=parseFloat(t[4]);return[(parseFloat(t[1])+360)%360,s(parseFloat(t[2]),0,100),s(parseFloat(t[3]),0,100),s(isNaN(r)?1:r,0,1)]}return null},l.get.hwb=function(e){if(!e)return null;var t=e.match(/^hwb\(\s*([+-]?\d*[\.]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(t){var r=parseFloat(t[4]);return[(parseFloat(t[1])%360+360)%360,s(parseFloat(t[2]),0,100),s(parseFloat(t[3]),0,100),s(isNaN(r)?1:r,0,1)]}return null},l.to.hex=function(){var e=n(arguments);return"#"+c(e[0])+c(e[1])+c(e[2])+(e[3]<1?c(Math.round(255*e[3])):"")},l.to.rgb=function(){var e=n(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},l.to.rgb.percent=function(){var e=n(arguments),t=Math.round(e[0]/255*100),r=Math.round(e[1]/255*100),o=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+t+"%, "+r+"%, "+o+"%)":"rgba("+t+"%, "+r+"%, "+o+"%, "+e[3]+")"},l.to.hsl=function(){var e=n(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},l.to.hwb=function(){var e=n(arguments),t="";return e.length>=4&&1!==e[3]&&(t=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+t+")"},l.to.keyword=function(e){return i[e.slice(0,3)]}},function(e,t,r){"use strict";var o=r(19),n=Array.prototype.concat,i=Array.prototype.slice,a=e.exports=function(e){for(var t=[],r=0,a=e.length;r<a;r++){var l=e[r];o(l)?t=n.call(t,i.call(l)):t.push(l)}return t};a.wrap=function(e){return function(){return e(a(arguments))}}},function(e,t,r){"use strict";e.exports=function(e){return!!e&&(e instanceof Array||Array.isArray(e)||e.length>=0&&e.splice instanceof Function)}},function(e,t,r){var o=r(6),n=r(21),i={};Object.keys(o).forEach((function(e){i[e]={},Object.defineProperty(i[e],"channels",{value:o[e].channels}),Object.defineProperty(i[e],"labels",{value:o[e].labels});var t=n(e);Object.keys(t).forEach((function(r){var o=t[r];i[e][r]=function(e){var t=function(t){if(null==t)return t;arguments.length>1&&(t=Array.prototype.slice.call(arguments));var r=e(t);if("object"==typeof r)for(var o=r.length,n=0;n<o;n++)r[n]=Math.round(r[n]);return r};return"conversion"in e&&(t.conversion=e.conversion),t}(o),i[e][r].raw=function(e){var t=function(t){return null==t?t:(arguments.length>1&&(t=Array.prototype.slice.call(arguments)),e(t))};return"conversion"in e&&(t.conversion=e.conversion),t}(o)}))})),e.exports=i},function(e,t,r){var o=r(6);function n(e,t){return function(r){return t(e(r))}}function i(e,t){for(var r=[t[e].parent,e],i=o[t[e].parent][e],a=t[e].parent;t[a].parent;)r.unshift(t[a].parent),i=n(o[t[a].parent][a],i),a=t[a].parent;return i.conversion=r,i}e.exports=function(e){for(var t=function(e){var t=function(){for(var e={},t=Object.keys(o),r=t.length,n=0;n<r;n++)e[t[n]]={distance:-1,parent:null};return e}(),r=[e];for(t[e].distance=0;r.length;)for(var n=r.pop(),i=Object.keys(o[n]),a=i.length,l=0;l<a;l++){var s=i[l],c=t[s];-1===c.distance&&(c.distance=t[n].distance+1,c.parent=n,r.unshift(s))}return t}(e),r={},n=Object.keys(t),a=n.length,l=0;l<a;l++){var s=n[l];null!==t[s].parent&&(r[s]=i(s,t))}return r}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),n=a(r(0)),i=a(r(2));function a(e){return e&&e.__esModule?e:{default:e}}var l=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.colorpicker=t}return o(e,[{key:"bind",value:function(){this.colorpicker.options.color?this.color=this.createColor(this.colorpicker.options.color):!this.color&&this.colorpicker.inputHandler.getValue()&&(this.color=this.createColor(this.colorpicker.inputHandler.getValue(),this.colorpicker.options.autoInputFallback))}},{key:"unbind",value:function(){this.colorpicker.element.removeData("color")}},{key:"getColorString",value:function(){return this.hasColor()?this.color.string(this.format):""}},{key:"setColorString",value:function(e){var t=e?this.createColor(e):null;this.color=t||null}},{key:"createColor",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=new i.default(this.resolveColorDelegate(e),this.format);return r.isValid()||(t&&(r=this.getFallbackColor()),this.colorpicker.trigger("colorpickerInvalid",r,e)),this.isAlphaEnabled()||(r.alpha=1),r}},{key:"getFallbackColor",value:function(){if(this.fallback&&this.fallback===this.color)return this.color;var e=this.resolveColorDelegate(this.fallback),t=new i.default(e,this.format);return t.isValid()?t:(console.warn("The fallback color is invalid. Falling back to the previous color or black if any."),this.color?this.color:new i.default("#000000",this.format))}},{key:"assureColor",value:function(){return this.hasColor()||(this.color=this.getFallbackColor()),this.color}},{key:"resolveColorDelegate",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=!1;return n.default.each(this.colorpicker.extensions,(function(o,n){!1===r&&(r=n.resolveColor(e,t))})),r||e}},{key:"isInvalidColor",value:function(){return!this.hasColor()||!this.color.isValid()}},{key:"isAlphaEnabled",value:function(){return!1!==this.colorpicker.options.useAlpha}},{key:"hasColor",value:function(){return this.color instanceof i.default}},{key:"fallback",get:function(){return this.colorpicker.options.fallbackColor?this.colorpicker.options.fallbackColor:this.hasColor()?this.color:null}},{key:"format",get:function(){return this.colorpicker.options.format?this.colorpicker.options.format:this.hasColor()&&this.color.hasTransparency()&&this.color.format.match(/^hex/)?this.isAlphaEnabled()?"rgba":"hex":this.hasColor()?this.color.format:"rgb"}},{key:"color",get:function(){return this.colorpicker.element.data("color")},set:function(e){this.colorpicker.element.data("color",e),e instanceof i.default&&"auto"===this.colorpicker.options.format&&(this.colorpicker.options.format=this.color.format)}}]),e}();t.default=l,e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,n=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),i=(o=r(0))&&o.__esModule?o:{default:o},a=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.colorpicker=t,this.picker=null}return n(e,[{key:"bind",value:function(){var e=this.picker=(0,i.default)(this.options.template);this.options.customClass&&e.addClass(this.options.customClass),this.options.horizontal&&e.addClass("colorpicker-horizontal"),this._supportsAlphaBar()?(this.options.useAlpha=!0,e.addClass("colorpicker-with-alpha")):this.options.useAlpha=!1}},{key:"attach",value:function(){var e=this.colorpicker.container?this.colorpicker.container:null;e&&this.picker.appendTo(e)}},{key:"unbind",value:function(){this.picker.remove()}},{key:"_supportsAlphaBar",value:function(){return(this.options.useAlpha||this.colorpicker.colorHandler.hasColor()&&this.color.hasTransparency())&&!1!==this.options.useAlpha&&(!this.options.format||this.options.format&&!this.options.format.match(/^hex([36])?$/i))}},{key:"update",value:function(){if(this.colorpicker.colorHandler.hasColor()){var e=!0!==this.options.horizontal,t=e?this.options.sliders:this.options.slidersHorz,r=this.picker.find(".colorpicker-saturation .colorpicker-guide"),o=this.picker.find(".colorpicker-hue .colorpicker-guide"),n=this.picker.find(".colorpicker-alpha .colorpicker-guide"),i=this.color.toHsvaRatio();o.length&&o.css(e?"top":"left",(e?t.hue.maxTop:t.hue.maxLeft)*(1-i.h)),n.length&&n.css(e?"top":"left",(e?t.alpha.maxTop:t.alpha.maxLeft)*(1-i.a)),r.length&&r.css({top:t.saturation.maxTop-i.v*t.saturation.maxTop,left:i.s*t.saturation.maxLeft}),this.picker.find(".colorpicker-saturation").css("backgroundColor",this.color.getCloneHueOnly().toHexString());var a,l=this.color.toHexString();a=this.options.horizontal?"linear-gradient(to right, "+l+" 0%, transparent 100%)":"linear-gradient(to bottom, "+l+" 0%, transparent 100%)",this.picker.find(".colorpicker-alpha-color").css("background",a)}}},{key:"options",get:function(){return this.colorpicker.options}},{key:"color",get:function(){return this.colorpicker.colorHandler.color}}]),e}();t.default=a,e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,r,o){return r&&e(t.prototype,r),o&&e(t,o),t}}(),n=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.colorpicker=t,this.addon=null}return o(e,[{key:"hasAddon",value:function(){return!!this.addon}},{key:"bind",value:function(){this.addon=this.colorpicker.options.addon?this.colorpicker.element.find(this.colorpicker.options.addon):null,this.addon&&0===this.addon.length&&(this.addon=null)}},{key:"unbind",value:function(){this.hasAddon()&&this.addon.off(".colorpicker")}},{key:"update",value:function(){if(this.colorpicker.colorHandler.hasColor()&&this.hasAddon()){var e={background:this.colorpicker.colorHandler.getColorString()},t=this.addon.find("i").eq(0);t.length>0?t.css(e):this.addon.css(e)}}}]),e}();t.default=n,e.exports=t.default}])},"object"==typeof o?e.exports=i(r(73609)):"function"==typeof t&&t.amd?t("bootstrap-colorpicker",["jquery"],i):"object"==typeof o?o["bootstrap-colorpicker"]=i(r(73609)):n["bootstrap-colorpicker"]=i(n.jQuery)}).call(window,!1,!1)},73609:e=>{"use strict";e.exports=window.jQuery}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var i=t[o]={exports:{}};return e[o](i,i.exports,r),i.exports}(()=>{"use strict";var e=i(r(96367)),t=i(r(45795)),o=i(r(92526)),n=i(r(89026));function i(e){return e&&e.__esModule?e:{default:e}}var a=window.$;a((function(){(0,e.default)(),new o.default,new t.default;var r=null;a(document).ready((function(){a(n.default.sendEmailSelector).is(":checked")||a(n.default.mailTemplateSelector).hide(),a(document).on("change",n.default.sendEmailSelector,(function(){a(n.default.mailTemplateSelector).slideToggle()})),a(document).on("click",n.default.mailTemplatePreview,(function(e){var t;t=a(e.currentTarget).closest(".form-group").find("select.translatable_choice:visible").find("option:selected").attr("data-preview"),null==r||r.closed||r.close(),(r=window.open(t,"tpl_viewing","toolbar=0,location=0,directories=0,statfr=no,menubar=0,scrollbars=yes,resizable=yes,width=520,height=400,top=50,left=300")).focus()}))}))}))})(),window.order_states_form={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvdXRpbHMvY29sb3JwaWNrZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9ldmVudC1lbWl0dGVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvZm9ybS90cmFuc2xhdGFibGUtY2hvaWNlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvdHJhbnNsYXRhYmxlLWlucHV0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL29yZGVyLXN0YXRlcy9mb3JtLW1hcC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwLWNvbG9ycGlja2VyL2Rpc3QvanMvYm9vdHN0cmFwLWNvbG9ycGlja2VyLmpzIiwid2VicGFjazovL1tuYW1lXS9leHRlcm5hbCBcImpRdWVyeVwiIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9vcmRlci1zdGF0ZXMvZm9ybS5qcyJdLCJuYW1lcyI6WyIkIiwid2luZG93IiwiZWFjaCIsImkiLCJwaWNrZXIiLCJjb2xvcnBpY2tlciIsIkV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlckNsYXNzIiwiVHJhbnNsYXRhYmxlQ2hvaWNlIiwiZG9jdW1lbnQiLCJvbiIsImV2ZW50IiwiZmlsdGVyU2VsZWN0IiwidHJpZ2dlciIsIiRlbGVtZW50IiwiY3VycmVudFRhcmdldCIsIiRmb3JtR3JvdXAiLCJjbG9zZXN0IiwibGFuZ3VhZ2UiLCJmaW5kIiwidmFsIiwicGFyZW50Iiwic2hvdyIsIiRzZWxlY3RzIiwibm90IiwiaW5kZXgiLCJpdGVtIiwiaGlkZSIsInRoaXMiLCJiaW5kVmFsdWVTZWxlY3Rpb24iLCJlbGVtZW50IiwiJHNlbGVjdCIsInNlbGVjdElkIiwiYXR0ciIsIlRyYW5zbGF0YWJsZUlucHV0Iiwib3B0aW9ucyIsIm9wdHMiLCJsb2NhbGVJdGVtU2VsZWN0b3IiLCJsb2NhbGVCdXR0b25TZWxlY3RvciIsImxvY2FsZUlucHV0U2VsZWN0b3IiLCJzZWxlY3RlZExvY2FsZSIsImRhdGEiLCJ0b2dnbGVMYW5ndWFnZSIsImJpbmQiLCJ0b2dnbGVJbnB1dHMiLCJyZWZyZXNoRm9ybUlucHV0cyIsImZvcm0iLCJyZWZyZXNoSW5wdXRzIiwiZ2V0U2VsZWN0ZWRMb2NhbGUiLCJlbWl0IiwibG9jYWxlSXRlbSIsInRhcmdldCIsImxvY2FsZUJ1dHRvbiIsImNoYW5nZUxhbmd1YWdlVXJsIiwidGV4dCIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJzYXZlU2VsZWN0ZWRMYW5ndWFnZSIsInBvc3QiLCJ1cmwiLCJsYW5ndWFnZV9pc29fY29kZSIsInNlbmRFbWFpbFNlbGVjdG9yIiwibWFpbFRlbXBsYXRlU2VsZWN0b3IiLCJtYWlsVGVtcGxhdGVQcmV2aWV3IiwibW9kdWxlIiwiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsIm9iaiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJsZW5ndGgiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwia2V5IiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwicHJvdG90eXBlIiwiJE9iamVjdCIsIml0IiwiZGVzYyIsImRlZmluZVByb3BlcnR5IiwiaXNPYmplY3QiLCJjb3JlIiwidmVyc2lvbiIsIl9fZSIsImFGdW5jdGlvbiIsImZuIiwidGhhdCIsInVuZGVmaW5lZCIsImEiLCJjYWxsIiwiYiIsImMiLCJhcHBseSIsImFyZ3VtZW50cyIsIk9iamVjdCIsImdldCIsImlzIiwiY3JlYXRlRWxlbWVudCIsImdsb2JhbCIsImN0eCIsImhhcyIsIiRleHBvcnQiLCJ0eXBlIiwibmFtZSIsInNvdXJjZSIsIm93biIsIm91dCIsIklTX0ZPUkNFRCIsIkYiLCJJU19HTE9CQUwiLCJHIiwiSVNfU1RBVElDIiwiUyIsIklTX1BST1RPIiwiUCIsIklTX0JJTkQiLCJCIiwiSVNfV1JBUCIsIlciLCJleHBQcm90byIsIkMiLCJGdW5jdGlvbiIsInZpcnR1YWwiLCJSIiwiVSIsImV4ZWMiLCJlIiwiTWF0aCIsInNlbGYiLCJfX2ciLCJoYXNPd25Qcm9wZXJ0eSIsImRQIiwiY3JlYXRlRGVzYyIsIm9iamVjdCIsInZhbHVlIiwiZiIsImFuT2JqZWN0IiwiSUU4X0RPTV9ERUZJTkUiLCJ0b1ByaW1pdGl2ZSIsIk8iLCJBdHRyaWJ1dGVzIiwiYml0bWFwIiwidG9TdHJpbmciLCJ2YWx1ZU9mIiwiUmVmbGVjdE93bktleXMiLCJSZWZsZWN0IiwiUmVmbGVjdEFwcGx5IiwicmVjZWl2ZXIiLCJhcmdzIiwib3duS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5TmFtZXMiLCJjb25jYXQiLCJOdW1iZXJJc05hTiIsIk51bWJlciIsImlzTmFOIiwiaW5pdCIsIl9ldmVudHMiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImNoZWNrTGlzdGVuZXIiLCJsaXN0ZW5lciIsIl9nZXRNYXhMaXN0ZW5lcnMiLCJfYWRkTGlzdGVuZXIiLCJwcmVwZW5kIiwibSIsImV2ZW50cyIsImV4aXN0aW5nIiwid2FybmluZyIsImNyZWF0ZSIsIm5ld0xpc3RlbmVyIiwidW5zaGlmdCIsInB1c2giLCJ3YXJuZWQiLCJ3IiwiRXJyb3IiLCJTdHJpbmciLCJlbWl0dGVyIiwiY291bnQiLCJjb25zb2xlIiwid2FybiIsIm9uY2VXcmFwcGVyIiwiZmlyZWQiLCJyZW1vdmVMaXN0ZW5lciIsIndyYXBGbiIsIl9vbmNlV3JhcCIsInN0YXRlIiwid3JhcHBlZCIsIl9saXN0ZW5lcnMiLCJ1bndyYXAiLCJldmxpc3RlbmVyIiwiYXJyIiwicmV0IiwiQXJyYXkiLCJ1bndyYXBMaXN0ZW5lcnMiLCJhcnJheUNsb25lIiwibGlzdGVuZXJDb3VudCIsIm4iLCJjb3B5Iiwic2V0IiwiYXJnIiwiUmFuZ2VFcnJvciIsImdldFByb3RvdHlwZU9mIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwiZG9FcnJvciIsImVycm9yIiwiZXIiLCJlcnIiLCJtZXNzYWdlIiwiY29udGV4dCIsImhhbmRsZXIiLCJsZW4iLCJsaXN0ZW5lcnMiLCJhZGRMaXN0ZW5lciIsInByZXBlbmRMaXN0ZW5lciIsIm9uY2UiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdCIsInBvc2l0aW9uIiwib3JpZ2luYWxMaXN0ZW5lciIsInNoaWZ0IiwicG9wIiwic3BsaWNlT25lIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwia2V5cyIsInJhd0xpc3RlbmVycyIsImV2ZW50TmFtZXMiLCJkZWZpbmUiLCJyb290IiwiZmFjdG9yeSIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXyIsIm1vZHVsZXMiLCJpbnN0YWxsZWRNb2R1bGVzIiwibW9kdWxlSWQiLCJsIiwiZCIsImdldHRlciIsIm8iLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ0IiwibW9kZSIsIm5zIiwicHJvcGVydHkiLCJwIiwicyIsIl9jcmVhdGVDbGFzcyIsIl9qcXVlcnkyIiwiX2NsYXNzQ2FsbENoZWNrIiwiRXh0ZW5zaW9uIiwicHJveHkiLCJvbkNyZWF0ZSIsIm9uRGVzdHJveSIsIm9uVXBkYXRlIiwib25DaGFuZ2UiLCJvbkludmFsaWQiLCJvblNob3ciLCJvbkhpZGUiLCJvbkVuYWJsZSIsIm9uRGlzYWJsZSIsImNvbG9yIiwiQ29sb3JJdGVtIiwiSFNWQUNvbG9yIiwiX2NvbG9yMiIsImgiLCJ2IiwiZm9ybWF0IiwicmVwbGFjZSIsIl9sZW4iLCJfa2V5IiwiX2NvbG9yIiwicmVzdWx0IiwiX29yaWdpbmFsIiwic2FuaXRpemVGb3JtYXQiLCJ2YWxpZCIsInBhcnNlIiwiX2Zvcm1hdCIsImlzSGV4IiwibW9kZWwiLCJodWUiLCJzYXR1cmF0aW9uIiwiYWxwaGEiLCJoYXNBbHBoYSIsInRvT2JqZWN0Iiwic3RyaW5nIiwicm91bmQiLCJzdHIiLCJpc1ZhbGlkIiwiaXNEYXJrIiwiaXNMaWdodCIsImZvcm11bGEiLCJodWVzIiwiaXNBcnJheSIsImNvbG9yRm9ybXVsYXMiLCJjb2xvcnMiLCJtYWluQ29sb3IiLCJmb3JFYWNoIiwibGV2ZWxzIiwic2F0dXJhdGlvbnYiLCJzYW5pdGl6ZVN0cmluZyIsIm1hdGNoIiwidG9Mb3dlckNhc2UiLCJjb21wbGVtZW50YXJ5IiwidHJpYWQiLCJ0ZXRyYWQiLCJzcGxpdGNvbXBsZW1lbnQiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwic2xpZGVyU2l6ZSIsInNhc3NWYXJzIiwiY3VzdG9tQ2xhc3MiLCJmYWxsYmFja0NvbG9yIiwiaG9yaXpvbnRhbCIsImlubGluZSIsImNvbnRhaW5lciIsInBvcG92ZXIiLCJhbmltYXRpb24iLCJwbGFjZW1lbnQiLCJmYWxsYmFja1BsYWNlbWVudCIsImRlYnVnIiwiaW5wdXQiLCJhZGRvbiIsImF1dG9JbnB1dEZhbGxiYWNrIiwidXNlSGFzaFByZWZpeCIsInVzZUFscGhhIiwidGVtcGxhdGUiLCJleHRlbnNpb25zIiwic2hvd1RleHQiLCJzbGlkZXJzIiwic2VsZWN0b3IiLCJtYXhMZWZ0IiwibWF4VG9wIiwiY2FsbExlZnQiLCJjYWxsVG9wIiwiY2hpbGRTZWxlY3RvciIsInNsaWRlcnNIb3J6IiwiX3R5cGVvZiIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJfRXh0ZW5zaW9uMyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIlJlZmVyZW5jZUVycm9yIiwiZGVmYXVsdHMiLCJuYW1lc0FzVmFsdWVzIiwiUGFsZXR0ZSIsIl9FeHRlbnNpb24iLCJfdGhpcyIsIl9fcHJvdG9fXyIsImV4dGVuZCIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsInNldFByb3RvdHlwZU9mIiwiX2luaGVyaXRzIiwicmVhbENvbG9yIiwiZ2V0TGVuZ3RoIiwiaW5kZXhPZiIsInRvVXBwZXJDYXNlIiwiZ2V0VmFsdWUiLCJnZXROYW1lIiwiZGVmYXVsdFZhbHVlIiwiY3NzS2V5d29yZHMiLCJyZXZlcnNlS2V5d29yZHMiLCJjb252ZXJ0IiwicmdiIiwiY2hhbm5lbHMiLCJsYWJlbHMiLCJoc2wiLCJoc3YiLCJod2IiLCJjbXlrIiwieHl6IiwibGFiIiwibGNoIiwiaGV4Iiwia2V5d29yZCIsImFuc2kxNiIsImFuc2kyNTYiLCJoY2ciLCJhcHBsZSIsImdyYXkiLCJnIiwibWluIiwibWF4IiwiZGVsdGEiLCJyZGlmIiwiZ2RpZiIsImJkaWYiLCJkaWZmIiwiZGlmZmMiLCJrIiwicmV2ZXJzZWQiLCJjdXJyZW50Q2xvc2VzdEtleXdvcmQiLCJ4IiwieSIsImN1cnJlbnRDbG9zZXN0RGlzdGFuY2UiLCJJbmZpbml0eSIsImRpc3RhbmNlIiwicG93IiwieiIsInQxIiwidDIiLCJ0MyIsInNtaW4iLCJsbWluIiwiaGkiLCJmbG9vciIsInEiLCJzbCIsInZtaW4iLCJ3aCIsImJsIiwicmF0aW8iLCJ5MiIsIngyIiwiejIiLCJhdGFuMiIsIlBJIiwic3FydCIsImhyIiwiY29zIiwic2luIiwiYW5zaSIsIm11bHQiLCJyZW0iLCJzdWJzdHJpbmciLCJjb2xvclN0cmluZyIsInNwbGl0IiwibWFwIiwiY2hhciIsImpvaW4iLCJpbnRlZ2VyIiwicGFyc2VJbnQiLCJjaHJvbWEiLCJtZyIsInB1cmUiLCJfQ29sb3JwaWNrZXIyIiwicGx1Z2luIiwib3B0aW9uIiwiZm5BcmdzIiwic2xpY2UiLCJpc1NpbmdsZUVsZW1lbnQiLCJyZXR1cm5WYWx1ZSIsIiRlbGVtZW50cyIsIiR0aGlzIiwiaW5zdCIsImlzRnVuY3Rpb24iLCJfRXh0ZW5zaW9uMiIsIl9vcHRpb25zMiIsIl9leHRlbnNpb25zMiIsIl9TbGlkZXJIYW5kbGVyMiIsIl9Qb3B1cEhhbmRsZXIyIiwiX0lucHV0SGFuZGxlcjIiLCJfQ29sb3JIYW5kbGVyMiIsIl9QaWNrZXJIYW5kbGVyMiIsIl9BZGRvbkhhbmRsZXIyIiwiX0NvbG9ySXRlbTIiLCJjb2xvclBpY2tlcklkQ291bnRlciIsIkNvbG9ycGlja2VyIiwiaWQiLCJsYXN0RXZlbnQiLCJhbGlhcyIsImRpc2FibGVkIiwiaW5wdXRIYW5kbGVyIiwiY29sb3JIYW5kbGVyIiwic2xpZGVySGFuZGxlciIsInBvcHVwSGFuZGxlciIsInBpY2tlckhhbmRsZXIiLCJhZGRvbkhhbmRsZXIiLCJpbml0RXh0ZW5zaW9ucyIsImF0dGFjaCIsInVwZGF0ZSIsImlzRGlzYWJsZWQiLCJkaXNhYmxlIiwiZXh0IiwicmVnaXN0ZXJFeHRlbnNpb24iLCJFeHRlbnNpb25DbGFzcyIsImNvbmZpZyIsInVuYmluZCIsInJlbW92ZURhdGEiLCJ0b2dnbGUiLCJjaCIsImhhc0NvbG9yIiwiZXF1YWxzIiwiY3JlYXRlQ29sb3IiLCJhc3N1cmVDb2xvciIsImVuYWJsZSIsImV2ZW50TmFtZSIsIlN3YXRjaGVzIiwiUHJldmlldyIsIkRlYnVnZ2VyIiwiX0RlYnVnZ2VyMiIsIl9QcmV2aWV3MiIsIl9Td2F0Y2hlczIiLCJfUGFsZXR0ZTIiLCJfZ2V0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZXZlbnRDb3VudGVyIiwiaGFzSW5wdXQiLCJvbkNoYW5nZUlucHV0IiwiX2NvbnNvbGUiLCJsb2dNZXNzYWdlIiwiZGVidWdnZXIiLCJsb2dBcmdzIiwibG9nIiwiZWxlbWVudElubmVyIiwiYXBwZW5kIiwiY3NzIiwidG9SZ2JTdHJpbmciLCJodG1sIiwiX1BhbGV0dGUzIiwiYmFyVGVtcGxhdGUiLCJzd2F0Y2hUZW1wbGF0ZSIsIl9QYWxldHRlIiwiaXNFbmFibGVkIiwibG9hZCIsIl90aGlzMiIsInN3YXRjaENvbnRhaW5lciIsImlzQWxpYXNlZCIsImVtcHR5IiwiJHN3YXRjaCIsIiRzdyIsInNldFZhbHVlIiwiU2xpZGVySGFuZGxlciIsImN1cnJlbnRTbGlkZXIiLCJtb3VzZVBvaW50ZXIiLCJsZWZ0IiwidG9wIiwib25Nb3ZlIiwiZGVmYXVsdE9uTW92ZSIsInNsaWRlciIsImNwIiwiZ2V0Q2xvbmUiLCJnZXRGYWxsYmFja0NvbG9yIiwiZ3VpZGVTdHlsZSIsImZvY3VzIiwic2xpZGVyQ2xhc3NlcyIsInNsaWRlck5hbWUiLCJwcmVzc2VkIiwibW92ZWQiLCJyZWxlYXNlZCIsInBhZ2VYIiwicGFnZVkiLCJvcmlnaW5hbEV2ZW50IiwidG91Y2hlcyIsInpvbmUiLCJndWlkZSIsIm9mZnNldCIsInN0eWxlIiwicHJldmVudERlZmF1bHQiLCJQb3B1cEhhbmRsZXIiLCJwb3BvdmVyVGFyZ2V0IiwicG9wb3ZlclRpcCIsImNsaWNraW5nIiwiaGlkZGluZyIsInNob3dpbmciLCJoYXNBZGRvbiIsImNyZWF0ZVBvcG92ZXIiLCJyZXBvc2l0aW9uIiwib25DbGlja2luZ0luc2lkZSIsImlzT3JJc0luc2lkZSIsImlzQ2xpY2tpbmdJbnNpZGUiLCJjb250ZW50IiwidGlwIiwiZmlyZVNob3ciLCJmaXJlSGlkZSIsImlzVmlzaWJsZSIsInN0b3BQcm9wYWdhdGlvbiIsImlzUG9wb3ZlciIsImlzSGlkZGVuIiwiaGFzQ2xhc3MiLCJJbnB1dEhhbmRsZXIiLCJfaW5pdFZhbHVlIiwib25rZXl1cCIsIm9uY2hhbmdlIiwiZ2V0Rm9ybWF0dGVkQ29sb3IiLCJwcm9wIiwiZ2V0Q29sb3JTdHJpbmciLCJyZXNvbHZlQ29sb3JEZWxlZ2F0ZSIsImlzSW52YWxpZENvbG9yIiwiX3NsaWNlIiwic2tpcHBlZE1vZGVscyIsImhhc2hlZE1vZGVsS2V5cyIsInNvcnQiLCJsaW1pdGVycyIsIkNvbG9yIiwidmFscGhhIiwibmV3QXJyIiwiemVyb0FycmF5Iiwic3BsaWNlIiwiaGFzaGVkS2V5cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJsaW1pdCIsImZyZWV6ZSIsImdldHNldCIsImNoYW5uZWwiLCJtb2RpZmllciIsIm1heGZuIiwiYXNzZXJ0QXJyYXkiLCJ0b0pTT04iLCJwbGFjZXMiLCJ0byIsInBlcmNlbnRTdHJpbmciLCJwZXJjZW50IiwiYXJyYXkiLCJ1bml0QXJyYXkiLCJ1bml0T2JqZWN0IiwibnVtIiwidG9GaXhlZCIsInJvdW5kVG8iLCJyb3VuZFRvUGxhY2UiLCJyZWQiLCJncmVlbiIsImJsdWUiLCJzYXR1cmF0aW9ubCIsImxpZ2h0bmVzcyIsIndoaXRlIiwid2JsYWNrIiwiY3lhbiIsIm1hZ2VudGEiLCJ5ZWxsb3ciLCJibGFjayIsInJnYk51bWJlciIsImx1bWlub3NpdHkiLCJsdW0iLCJjaGFuIiwiY29udHJhc3QiLCJjb2xvcjIiLCJsdW0xIiwibHVtMiIsImxldmVsIiwiY29udHJhc3RSYXRpbyIsIm5lZ2F0ZSIsImxpZ2h0ZW4iLCJkYXJrZW4iLCJzYXR1cmF0ZSIsImRlc2F0dXJhdGUiLCJ3aGl0ZW4iLCJibGFja2VuIiwiZ3JheXNjYWxlIiwiZmFkZSIsIm9wYXF1ZXIiLCJyb3RhdGUiLCJkZWdyZWVzIiwibWl4IiwibWl4aW5Db2xvciIsIndlaWdodCIsImNvbG9yMSIsIncxIiwidzIiLCJuZXdBbHBoYSIsInJhdyIsImNvbG9yTmFtZXMiLCJzd2l6emxlIiwicmV2ZXJzZU5hbWVzIiwiY3MiLCJjbGFtcCIsImhleERvdWJsZSIsImhleEFscGhhIiwiaTIiLCJwYXJzZUZsb2F0IiwicmdiYSIsImhzbGEiLCJod2JhIiwiaXNBcnJheWlzaCIsInJlc3VsdHMiLCJ3cmFwIiwiY29udmVyc2lvbnMiLCJyb3V0ZSIsImZyb21Nb2RlbCIsInJvdXRlcyIsInRvTW9kZWwiLCJ3cmFwcGVkRm4iLCJjb252ZXJzaW9uIiwid3JhcFJvdW5kZWQiLCJ3cmFwUmF3IiwibGluayIsImZyb20iLCJ3cmFwQ29udmVyc2lvbiIsImdyYXBoIiwicGF0aCIsImN1ciIsIm1vZGVscyIsImJ1aWxkR3JhcGgiLCJxdWV1ZSIsImN1cnJlbnQiLCJhZGphY2VudHMiLCJhZGphY2VudCIsIm5vZGUiLCJkZXJpdmVCRlMiLCJDb2xvckhhbmRsZXIiLCJmYWxsYmFja09uSW52YWxpZCIsImlzQWxwaGFFbmFibGVkIiwiZmFsbGJhY2siLCJleHRSZXNvbHZlZENvbG9yIiwicmVzb2x2ZUNvbG9yIiwiaGFzVHJhbnNwYXJlbmN5IiwiUGlja2VySGFuZGxlciIsIl9zdXBwb3J0c0FscGhhQmFyIiwicGlja2VyUGFyZW50IiwiYXBwZW5kVG8iLCJyZW1vdmUiLCJ2ZXJ0aWNhbCIsInNhdHVyYXRpb25HdWlkZSIsImh1ZUd1aWRlIiwiYWxwaGFHdWlkZSIsImhzdmEiLCJ0b0hzdmFSYXRpbyIsImdldENsb25lSHVlT25seSIsInRvSGV4U3RyaW5nIiwiYWxwaGFCZyIsImhleENvbG9yIiwiQWRkb25IYW5kbGVyIiwic3R5bGVzIiwiaWNuIiwiZXEiLCJhbWQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwidGVtcGxhdGVQcmV2aWV3V2luZG93IiwicmVhZHkiLCJGb3JtTWFwIiwic2xpZGVUb2dnbGUiLCIkdXJpIiwiY2xvc2VkIiwiY2xvc2UiLCJvcGVuIl0sIm1hcHBpbmdzIjoiOzJGQXdCQSxTLElBRU9BLEVBQUtDLE9BQUxELEUsVUFLTSxXQUNYQSxFQUFFLG1DQUFtQ0UsTUFBSyxTQUFDQyxFQUFHQyxHQUM1Q0osRUFBRUksR0FBUUMsbUIsb0dDUmQsSSxPQUFBLFcsMkJBTWFDLEVBQWVBLGVBQUEsSUFBSUMsVSxVQUVqQkQsRyxxS0NSUk4sRUFBS0MsT0FBTEQsRUFLY1EsRSxXQUNuQixhQUFjLGlDQUVaUixFQUFFUyxVQUFVQyxHQUFHLFNBQVUsdUNBQXVDLFNBQUNDLEdBQy9ELEVBQUtDLGFBQWFELE1BR3BCWCxFQUFFLHVDQUF1Q2EsUUFBUSxVLDBEQUd0Q0YsR0FDWCxJQUFNRyxFQUFXZCxFQUFFVyxFQUFNSSxlQUNuQkMsRUFBYUYsRUFBU0csUUFBUSxlQUM5QkMsRUFBV0osRUFBU0ssS0FBSyxtQkFBbUJDLE1BR2xESixFQUFXRyxLQUFYLDZDQUE2REQsRUFBN0QsTUFBMkVHLFNBQVNDLE9BRXBGLElBQU1DLEVBQVdQLEVBQVdHLEtBQUssOEJBR2pDSSxFQUFTQyxJQUFULDZDQUEwRE4sRUFBMUQsTUFBd0VoQixNQUFLLFNBQUN1QixFQUFPQyxHQUNuRjFCLEVBQUUwQixHQUFNTCxTQUFTTSxVQUluQkMsS0FBS0MsbUJBQW1CTixLLHlDQUdQQSxHQUNqQkEsRUFBU3JCLE1BQUssU0FBQ3VCLEVBQU9LLEdBQ3BCOUIsRUFBRThCLEdBQVNwQixHQUFHLFVBQVUsU0FBQ0MsR0FDdkIsSUFBTW9CLEVBQVUvQixFQUFFVyxFQUFNSSxlQUNsQmlCLEVBQVdELEVBQVFFLEtBQUssTUFD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LE9BQWUsU0NDNUJ3dEIsRUFBMkIsR0FHL0IsU0FBUzNaLEVBQW9CMUUsR0FFNUIsSUFBSXNlLEVBQWVELEVBQXlCcmUsR0FDNUMsUUFBcUJySixJQUFqQjJuQixFQUNILE9BQU9BLEVBQWF6cEIsUUFHckIsSUFBSUQsRUFBU3lwQixFQUF5QnJlLEdBQVksQ0FHakRuTCxRQUFTLElBT1YsT0FIQTBwQixFQUFvQnZlLEdBQVVwTCxFQUFRQSxFQUFPQyxRQUFTNlAsR0FHL0M5UCxFQUFPQyxRLG1CQ0lmLEksSUFBQSxVLElBQ0EsVSxJQUNBLFUsSUFDQSxVLHVEQUVPakUsRUFBS0MsT0FBTEQsRUFFUEEsR0FBRSxZQUNBLGVBQ0EsSUFBSWtDLFVBQ0osSUFBSTFCLFVBRUosSUFBSW90QixFQUF3QixLQXVCNUI1dEIsRUFBRVMsVUFBVW90QixPQUFNLFdBQ1g3dEIsRUFBRTh0QixVQUFRanFCLG1CQUFtQjJDLEdBQUcsYUFDbkN4RyxFQUFFOHRCLFVBQVFocUIsc0JBQXNCbkMsT0FFbEMzQixFQUFFUyxVQUFVQyxHQUFHLFNBQVVvdEIsVUFBUWpxQixtQkFBbUIsV0FDbEQ3RCxFQUFFOHRCLFVBQVFocUIsc0JBQXNCaXFCLGlCQUdsQy90QixFQUFFUyxVQUFVQyxHQUFHLFFBQVNvdEIsVUFBUS9wQixxQkFBcUIsU0FBQ3BELEdBOUJ4RCxJQUF1QnF0QixJQStCRmh1QixFQUFFVyxFQUFNSSxlQUNBRSxRQUFRLGVBQWVFLEtBQUssc0NBQ2hDQSxLQUFLLG1CQUFtQmMsS0FBSyxnQkFoQ3ZCLE1BQXpCMnJCLEdBQWtDQSxFQUFzQkssUUFDMURMLEVBQXNCTSxTQUV4Qk4sRUFBd0IzdEIsT0FBT2t1QixLQUM3QkgsRUFDQSxjQUNBLDZIQVlvQjlMLGtCIiwiZmlsZSI6Im9yZGVyX3N0YXRlc19mb3JtLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCAnYm9vdHN0cmFwLWNvbG9ycGlja2VyJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIEVuYWJsZSBhbGwgY29sb3JwaWNrZXJzLlxuICovXG5jb25zdCBpbml0ID0gZnVuY3Rpb24gaW5pdERhdGVQaWNrZXJzKCkge1xuICAkKCcuY29sb3JwaWNrZXIgaW5wdXRbdHlwZT1cInRleHRcIl0nKS5lYWNoKChpLCBwaWNrZXIpID0+IHtcbiAgICAkKHBpY2tlcikuY29sb3JwaWNrZXIoKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyQ2xhc3MgZnJvbSAnZXZlbnRzJztcblxuLyoqXG4gKiBXZSBpbnN0YW5jaWF0ZSBvbmUgRXZlbnRFbWl0dGVyIChyZXN0cmljdGVkIHZpYSBhIGNvbnN0KSBzbyB0aGF0IGV2ZXJ5IGNvbXBvbmVudHNcbiAqIHJlZ2lzdGVyL2Rpc3BhdGNoIG9uIHRoZSBzYW1lIG9uZSBhbmQgY2FuIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlci5cbiAqL1xuZXhwb3J0IGNvbnN0IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXJDbGFzcygpO1xuXG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBDb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGZpbHRlcmluZyBzZWxlY3QgdmFsdWVzIGJ5IGxhbmd1YWdlIHNlbGVjdGVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUcmFuc2xhdGFibGVDaG9pY2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyByZWdpc3RlcnMgdGhlIGV2ZW50IHdoaWNoIGRpc3BsYXlzIHRoZSBwb3BvdmVyXG4gICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICdzZWxlY3QudHJhbnNsYXRhYmxlX2Nob2ljZV9sYW5ndWFnZScsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5maWx0ZXJTZWxlY3QoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgJCgnc2VsZWN0LnRyYW5zbGF0YWJsZV9jaG9pY2VfbGFuZ3VhZ2UnKS50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgfVxuXG4gIGZpbHRlclNlbGVjdChldmVudCkge1xuICAgIGNvbnN0ICRlbGVtZW50ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCAkZm9ybUdyb3VwID0gJGVsZW1lbnQuY2xvc2VzdCgnLmZvcm0tZ3JvdXAnKTtcbiAgICBjb25zdCBsYW5ndWFnZSA9ICRlbGVtZW50LmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpLnZhbCgpO1xuXG4gICAgLy8gc2hvdyBhbGwgdGhlIGxhbmd1YWdlcyBzZWxlY3RzXG4gICAgJGZvcm1Hcm91cC5maW5kKGBzZWxlY3QudHJhbnNsYXRhYmxlX2Nob2ljZVtkYXRhLWxhbmd1YWdlPVwiJHtsYW5ndWFnZX1cIl1gKS5wYXJlbnQoKS5zaG93KCk7XG5cbiAgICBjb25zdCAkc2VsZWN0cyA9ICRmb3JtR3JvdXAuZmluZCgnc2VsZWN0LnRyYW5zbGF0YWJsZV9jaG9pY2UnKTtcblxuICAgIC8vIEhpZGUgYWxsIHRoZSBzZWxlY3RzIG5vdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBsYW5ndWFnZSBzZWxlY3RlZFxuICAgICRzZWxlY3RzLm5vdChgc2VsZWN0LnRyYW5zbGF0YWJsZV9jaG9pY2VbZGF0YS1sYW5ndWFnZT1cIiR7bGFuZ3VhZ2V9XCJdYCkuZWFjaCgoaW5kZXgsIGl0ZW0pID0+IHtcbiAgICAgICQoaXRlbSkucGFyZW50KCkuaGlkZSgpO1xuICAgIH0pO1xuXG4gICAgLy8gQmluZCBjaG9pY2Ugc2VsZWN0aW9uIHRvIGZpbGwgdGhlIGhpZGRlbiBpbnB1dFxuICAgIHRoaXMuYmluZFZhbHVlU2VsZWN0aW9uKCRzZWxlY3RzKTtcbiAgfVxuXG4gIGJpbmRWYWx1ZVNlbGVjdGlvbigkc2VsZWN0cykge1xuICAgICRzZWxlY3RzLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICAkKGVsZW1lbnQpLm9uKCdjaGFuZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgJHNlbGVjdCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdElkID0gJHNlbGVjdC5hdHRyKCdpZCcpO1xuICAgICAgICAkKGAjJHtzZWxlY3RJZH1fdmFsdWVgKS52YWwoJHNlbGVjdC5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS52YWwoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSAnLi9ldmVudC1lbWl0dGVyJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHRvZ2dsZSB0cmFuc2xhdGVkIGlucHV0cyAoZGlzcGxheWVkIHdpdGggb25lXG4gKiBpbnB1dCBhbmQgYSBsYW5ndWFnZSBzZWxlY3RvciB1c2luZyB0aGUgVHJhbnNsYXRhYmxlVHlwZSBTeW1mb255IGZvcm0gdHlwZSkuXG4gKiBBbHNvIGNvbXBhdGlibGUgd2l0aCBUcmFuc2xhdGFibGVGaWVsZCBjaGFuZ2VzLlxuICovXG5jbGFzcyBUcmFuc2xhdGFibGVJbnB1dCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMubG9jYWxlSXRlbVNlbGVjdG9yID0gb3B0cy5sb2NhbGVJdGVtU2VsZWN0b3IgfHwgJy5qcy1sb2NhbGUtaXRlbSc7XG4gICAgdGhpcy5sb2NhbGVCdXR0b25TZWxlY3RvciA9IG9wdHMubG9jYWxlQnV0dG9uU2VsZWN0b3IgfHwgJy5qcy1sb2NhbGUtYnRuJztcbiAgICB0aGlzLmxvY2FsZUlucHV0U2VsZWN0b3IgPSBvcHRzLmxvY2FsZUlucHV0U2VsZWN0b3IgfHwgJy5qcy1sb2NhbGUtaW5wdXQnO1xuICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGUgPSAkKHRoaXMubG9jYWxlSXRlbVNlbGVjdG9yKS5kYXRhKCdsb2NhbGUnKTtcblxuICAgICQoJ2JvZHknKS5vbihcbiAgICAgICdjbGljaycsXG4gICAgICB0aGlzLmxvY2FsZUl0ZW1TZWxlY3RvcixcbiAgICAgIHRoaXMudG9nZ2xlTGFuZ3VhZ2UuYmluZCh0aGlzKSxcbiAgICApO1xuICAgIEV2ZW50RW1pdHRlci5vbignbGFuZ3VhZ2VTZWxlY3RlZCcsIHRoaXMudG9nZ2xlSW5wdXRzLmJpbmQodGhpcykpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2FsZUl0ZW1TZWxlY3RvcjogdGhpcy5sb2NhbGVJdGVtU2VsZWN0b3IsXG4gICAgICBsb2NhbGVCdXR0b25TZWxlY3RvcjogdGhpcy5sb2NhbGVCdXR0b25TZWxlY3RvcixcbiAgICAgIGxvY2FsZUlucHV0U2VsZWN0b3I6IHRoaXMubG9jYWxlSW5wdXRTZWxlY3RvcixcblxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0ge2pRdWVyeX0gZm9ybVxuICAgICAgICovXG4gICAgICByZWZyZXNoRm9ybUlucHV0czogKGZvcm0pID0+IHsgdGhpcy5yZWZyZXNoSW5wdXRzKGZvcm0pOyB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgICAgICovXG4gICAgICBnZXRTZWxlY3RlZExvY2FsZTogKCkgPT4gdGhpcy5zZWxlY3RlZExvY2FsZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBmb3JtXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWZyZXNoSW5wdXRzKGZvcm0pIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRMb2NhbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBFdmVudEVtaXR0ZXIuZW1pdCgnbGFuZ3VhZ2VTZWxlY3RlZCcsIHtcbiAgICAgIHNlbGVjdGVkTG9jYWxlOiB0aGlzLnNlbGVjdGVkTG9jYWxlLFxuICAgICAgZm9ybSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBldmVudCBvbiBsYW5ndWFnZSBzZWxlY3Rpb24gdG8gdXBkYXRlIGlucHV0cyBhbmQgb3RoZXIgY29tcG9uZW50cyB3aGljaCBkZXBlbmQgb24gdGhlIGxvY2FsZS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0b2dnbGVMYW5ndWFnZShldmVudCkge1xuICAgIGNvbnN0IGxvY2FsZUl0ZW0gPSAkKGV2ZW50LnRhcmdldCk7XG4gICAgY29uc3QgZm9ybSA9IGxvY2FsZUl0ZW0uY2xvc2VzdCgnZm9ybScpO1xuICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGUgPSBsb2NhbGVJdGVtLmRhdGEoJ2xvY2FsZScpO1xuICAgIHRoaXMucmVmcmVzaElucHV0cyhmb3JtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgYWxsIHRyYW5zbGF0YWJsZSBpbnB1dHMgaW4gZm9ybSBpbiB3aGljaCBsb2NhbGUgd2FzIGNoYW5nZWRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRvZ2dsZUlucHV0cyhldmVudCkge1xuICAgIGNvbnN0IHtmb3JtfSA9IGV2ZW50O1xuICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGUgPSBldmVudC5zZWxlY3RlZExvY2FsZTtcbiAgICBjb25zdCBsb2NhbGVCdXR0b24gPSBmb3JtLmZpbmQodGhpcy5sb2NhbGVCdXR0b25TZWxlY3Rvcik7XG4gICAgY29uc3QgY2hhbmdlTGFuZ3VhZ2VVcmwgPSBsb2NhbGVCdXR0b24uZGF0YSgnY2hhbmdlLWxhbmd1YWdlLXVybCcpO1xuXG4gICAgbG9jYWxlQnV0dG9uLnRleHQodGhpcy5zZWxlY3RlZExvY2FsZSk7XG4gICAgZm9ybS5maW5kKHRoaXMubG9jYWxlSW5wdXRTZWxlY3RvcikuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgIGZvcm1cbiAgICAgIC5maW5kKGAke3RoaXMubG9jYWxlSW5wdXRTZWxlY3Rvcn0uanMtbG9jYWxlLSR7dGhpcy5zZWxlY3RlZExvY2FsZX1gKVxuICAgICAgLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcblxuICAgIGlmIChjaGFuZ2VMYW5ndWFnZVVybCkge1xuICAgICAgdGhpcy5zYXZlU2VsZWN0ZWRMYW5ndWFnZShjaGFuZ2VMYW5ndWFnZVVybCwgdGhpcy5zZWxlY3RlZExvY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgbGFuZ3VhZ2UgY2hvaWNlIGZvciBlbXBsb3llZSBmb3Jtcy5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNoYW5nZUxhbmd1YWdlVXJsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RlZExvY2FsZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2F2ZVNlbGVjdGVkTGFuZ3VhZ2UoY2hhbmdlTGFuZ3VhZ2VVcmwsIHNlbGVjdGVkTG9jYWxlKSB7XG4gICAgJC5wb3N0KHtcbiAgICAgIHVybDogY2hhbmdlTGFuZ3VhZ2VVcmwsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxhbmd1YWdlX2lzb19jb2RlOiBzZWxlY3RlZExvY2FsZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJhbnNsYXRhYmxlSW5wdXQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbi8qKlxuICogRGVmaW5lcyBhbGwgc2VsZWN0b3JzIHRoYXQgYXJlIHVzZWQgaW4gY3VycmVuY3kgYWRkL2VkaXQgZm9ybS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICBzZW5kRW1haWxTZWxlY3RvcjogJyNvcmRlcl9zdGF0ZV9zZW5kX2VtYWlsJyxcbiAgbWFpbFRlbXBsYXRlU2VsZWN0b3I6ICcub3JkZXJfc3RhdGVfdGVtcGxhdGVfc2VsZWN0JyxcbiAgbWFpbFRlbXBsYXRlUHJldmlldzogJyNvcmRlcl9zdGF0ZV90ZW1wbGF0ZV9wcmV2aWV3Jyxcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmaW5lUHJvcGVydHkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuICRPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIElTX1dSQVAgPSB0eXBlICYgJGV4cG9ydC5XO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV07XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIga2V5LCBvd24sIG91dDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAob3duICYmIGhhcyhleHBvcnRzLCBrZXkpKSBjb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uIChDKSB7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQykge1xuICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEMoKTtcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYgKElTX1BST1RPKSB7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYgKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0pIGhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG5cbihmdW5jdGlvbihkZWZpbmUsIGV4cG9ydHMpIHtcbi8qIVxuICogQm9vdHN0cmFwIENvbG9ycGlja2VyIC0gQm9vdHN0cmFwIENvbG9ycGlja2VyIGlzIGEgbW9kdWxhciBjb2xvciBwaWNrZXIgcGx1Z2luIGZvciBCb290c3RyYXAgNC5cbiAqIEBwYWNrYWdlIGJvb3RzdHJhcC1jb2xvcnBpY2tlclxuICogQHZlcnNpb24gdjMuMi4wXG4gKiBAbGljZW5zZSBNSVRcbiAqIEBsaW5rIGh0dHBzOi8vaXRzamF2aS5jb20vYm9vdHN0cmFwLWNvbG9ycGlja2VyL1xuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2l0c2phdmkvYm9vdHN0cmFwLWNvbG9ycGlja2VyLmdpdFxuICovXG4oZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJqcXVlcnlcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJib290c3RyYXAtY29sb3JwaWNrZXJcIiwgW1wianF1ZXJ5XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImJvb3RzdHJhcC1jb2xvcnBpY2tlclwiXSA9IGZhY3RvcnkocmVxdWlyZShcImpxdWVyeVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiYm9vdHN0cmFwLWNvbG9ycGlja2VyXCJdID0gZmFjdG9yeShyb290W1wialF1ZXJ5XCJdKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA3KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX187XG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX2pxdWVyeSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbnZhciBfanF1ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2pxdWVyeSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKlxuICogQ29sb3JwaWNrZXIgZXh0ZW5zaW9uIGNsYXNzLlxuICovXG52YXIgRXh0ZW5zaW9uID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQHBhcmFtIHtDb2xvcnBpY2tlcn0gY29sb3JwaWNrZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIEV4dGVuc2lvbihjb2xvcnBpY2tlcikge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFeHRlbnNpb24pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9ycGlja2VyIGluc3RhbmNlXG4gICAgICogQHR5cGUge0NvbG9ycGlja2VyfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JwaWNrZXIgPSBjb2xvcnBpY2tlcjtcbiAgICAvKipcbiAgICAgKiBFeHRlbnNpb24gb3B0aW9uc1xuICAgICAqXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKCEodGhpcy5jb2xvcnBpY2tlci5lbGVtZW50ICYmIHRoaXMuY29sb3JwaWNrZXIuZWxlbWVudC5sZW5ndGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4dGVuc2lvbjogdGhpcy5jb2xvcnBpY2tlci5lbGVtZW50IGlzIG5vdCB2YWxpZCcpO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3JwaWNrZXIuZWxlbWVudC5vbignY29sb3JwaWNrZXJDcmVhdGUuY29sb3JwaWNrZXItZXh0JywgX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLm9uQ3JlYXRlLCB0aGlzKSk7XG4gICAgdGhpcy5jb2xvcnBpY2tlci5lbGVtZW50Lm9uKCdjb2xvcnBpY2tlckRlc3Ryb3kuY29sb3JwaWNrZXItZXh0JywgX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLm9uRGVzdHJveSwgdGhpcykpO1xuICAgIHRoaXMuY29sb3JwaWNrZXIuZWxlbWVudC5vbignY29sb3JwaWNrZXJVcGRhdGUuY29sb3JwaWNrZXItZXh0JywgX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLm9uVXBkYXRlLCB0aGlzKSk7XG4gICAgdGhpcy5jb2xvcnBpY2tlci5lbGVtZW50Lm9uKCdjb2xvcnBpY2tlckNoYW5nZS5jb2xvcnBpY2tlci1leHQnLCBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMub25DaGFuZ2UsIHRoaXMpKTtcbiAgICB0aGlzLmNvbG9ycGlja2VyLmVsZW1lbnQub24oJ2NvbG9ycGlja2VySW52YWxpZC5jb2xvcnBpY2tlci1leHQnLCBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMub25JbnZhbGlkLCB0aGlzKSk7XG4gICAgdGhpcy5jb2xvcnBpY2tlci5lbGVtZW50Lm9uKCdjb2xvcnBpY2tlclNob3cuY29sb3JwaWNrZXItZXh0JywgX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLm9uU2hvdywgdGhpcykpO1xuICAgIHRoaXMuY29sb3JwaWNrZXIuZWxlbWVudC5vbignY29sb3JwaWNrZXJIaWRlLmNvbG9ycGlja2VyLWV4dCcsIF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5vbkhpZGUsIHRoaXMpKTtcbiAgICB0aGlzLmNvbG9ycGlja2VyLmVsZW1lbnQub24oJ2NvbG9ycGlja2VyRW5hYmxlLmNvbG9ycGlja2VyLWV4dCcsIF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5vbkVuYWJsZSwgdGhpcykpO1xuICAgIHRoaXMuY29sb3JwaWNrZXIuZWxlbWVudC5vbignY29sb3JwaWNrZXJEaXNhYmxlLmNvbG9ycGlja2VyLWV4dCcsIF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5vbkRpc2FibGUsIHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBjYWxsZWQgZXZlcnkgdGltZSBhIG5ldyBjb2xvciBuZWVkcyB0byBiZSBjcmVhdGVkLlxuICAgKiBSZXR1cm4gZmFsc2UgdG8gc2tpcCB0aGlzIHJlc29sdmVyIGFuZCBjb250aW51ZSB3aXRoIG90aGVyIGV4dGVuc2lvbnMnIG9uZXNcbiAgICogb3IgcmV0dXJuIGFueXRoaW5nIGVsc2UgdG8gY29uc2lkZXIgdGhlIGNvbG9yIHJlc29sdmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbG9ySXRlbXxTdHJpbmd8Kn0gY29sb3JcbiAgICogQHBhcmFtIHtib29sZWFufSByZWFsQ29sb3IgaWYgdHJ1ZSwgdGhlIGNvbG9yIHNob3VsZCByZXNvbHZlIGludG8gYSByZWFsIChub3QgbmFtZWQpIGNvbG9yIGNvZGVcbiAgICogQHJldHVybiB7Q29sb3JJdGVtfFN0cmluZ3wqfVxuICAgKi9cblxuXG4gIF9jcmVhdGVDbGFzcyhFeHRlbnNpb24sIFt7XG4gICAga2V5OiAncmVzb2x2ZUNvbG9yJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzb2x2ZUNvbG9yKGNvbG9yKSB7XG4gICAgICB2YXIgcmVhbENvbG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGNhbGxlZCBhZnRlciB0aGUgY29sb3JwaWNrZXIgaXMgY3JlYXRlZFxuICAgICAqXG4gICAgICogQGxpc3RlbnMgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJDcmVhdGVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdvbkNyZWF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ3JlYXRlKGV2ZW50KSB7fVxuICAgIC8vIHRvIGJlIGV4dGVuZGVkXG5cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBjYWxsZWQgYWZ0ZXIgdGhlIGNvbG9ycGlja2VyIGlzIGRlc3Ryb3llZFxuICAgICAqXG4gICAgICogQGxpc3RlbnMgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJEZXN0cm95XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnb25EZXN0cm95JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25EZXN0cm95KGV2ZW50KSB7XG4gICAgICB0aGlzLmNvbG9ycGlja2VyLmVsZW1lbnQub2ZmKCcuY29sb3JwaWNrZXItZXh0Jyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGNhbGxlZCBhZnRlciB0aGUgY29sb3JwaWNrZXIgaXMgdXBkYXRlZFxuICAgICAqXG4gICAgICogQGxpc3RlbnMgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJVcGRhdGVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdvblVwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uVXBkYXRlKGV2ZW50KSB7fVxuICAgIC8vIHRvIGJlIGV4dGVuZGVkXG5cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBjYWxsZWQgYWZ0ZXIgdGhlIGNvbG9ycGlja2VyIGNvbG9yIGlzIGNoYW5nZWRcbiAgICAgKlxuICAgICAqIEBsaXN0ZW5zIENvbG9ycGlja2VyI2NvbG9ycGlja2VyQ2hhbmdlXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnb25DaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge31cbiAgICAvLyB0byBiZSBleHRlbmRlZFxuXG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbG9ycGlja2VyIGNvbG9yIGlzIGludmFsaWRcbiAgICAgKlxuICAgICAqIEBsaXN0ZW5zIENvbG9ycGlja2VyI2NvbG9ycGlja2VySW52YWxpZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ29uSW52YWxpZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uSW52YWxpZChldmVudCkge31cbiAgICAvLyB0byBiZSBleHRlbmRlZFxuXG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgY2FsbGVkIGFmdGVyIHRoZSBjb2xvcnBpY2tlciBpcyBoaWRkZW5cbiAgICAgKlxuICAgICAqIEBsaXN0ZW5zIENvbG9ycGlja2VyI2NvbG9ycGlja2VySGlkZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ29uSGlkZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uSGlkZShldmVudCkge31cbiAgICAvLyB0byBiZSBleHRlbmRlZFxuXG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgY2FsbGVkIGFmdGVyIHRoZSBjb2xvcnBpY2tlciBpcyBzaG93blxuICAgICAqXG4gICAgICogQGxpc3RlbnMgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJTaG93XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnb25TaG93JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25TaG93KGV2ZW50KSB7fVxuICAgIC8vIHRvIGJlIGV4dGVuZGVkXG5cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBjYWxsZWQgYWZ0ZXIgdGhlIGNvbG9ycGlja2VyIGlzIGRpc2FibGVkXG4gICAgICpcbiAgICAgKiBAbGlzdGVucyBDb2xvcnBpY2tlciNjb2xvcnBpY2tlckRpc2FibGVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdvbkRpc2FibGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkRpc2FibGUoZXZlbnQpIHt9XG4gICAgLy8gdG8gYmUgZXh0ZW5kZWRcblxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGNhbGxlZCBhZnRlciB0aGUgY29sb3JwaWNrZXIgaXMgZW5hYmxlZFxuICAgICAqXG4gICAgICogQGxpc3RlbnMgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJFbmFibGVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdvbkVuYWJsZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRW5hYmxlKGV2ZW50KSB7XG4gICAgICAvLyB0byBiZSBleHRlbmRlZFxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFeHRlbnNpb247XG59KCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IEV4dGVuc2lvbjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29sb3JJdGVtID0gZXhwb3J0cy5IU1ZBQ29sb3IgPSB1bmRlZmluZWQ7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbG9yIG1hbmlwdWxhdGlvbiBjbGFzcywgc3BlY2lmaWMgZm9yIEJvb3RzdHJhcCBDb2xvcnBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5cbnZhciBfY29sb3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcblxudmFyIF9jb2xvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb2xvcik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKlxuICogSFNWQSBjb2xvciBkYXRhIGNsYXNzLCBjb250YWluaW5nIHRoZSBodWUsIHNhdHVyYXRpb24sIHZhbHVlIGFuZCBhbHBoYVxuICogaW5mb3JtYXRpb24uXG4gKi9cbnZhciBIU1ZBQ29sb3IgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcnxpbnR9IGhcbiAgICogQHBhcmFtIHtudW1iZXJ8aW50fSBzXG4gICAqIEBwYXJhbSB7bnVtYmVyfGludH0gdlxuICAgKiBAcGFyYW0ge251bWJlcnxpbnR9IGFcbiAgICovXG4gIGZ1bmN0aW9uIEhTVkFDb2xvcihoLCBzLCB2LCBhKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEhTVkFDb2xvcik7XG5cbiAgICB0aGlzLmggPSBpc05hTihoKSA/IDAgOiBoO1xuICAgIHRoaXMucyA9IGlzTmFOKHMpID8gMCA6IHM7XG4gICAgdGhpcy52ID0gaXNOYU4odikgPyAwIDogdjtcbiAgICB0aGlzLmEgPSBpc05hTihoKSA/IDEgOiBhO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEhTVkFDb2xvciwgW3tcbiAgICBrZXk6ICd0b1N0cmluZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaCArICcsICcgKyB0aGlzLnMgKyAnJSwgJyArIHRoaXMudiArICclLCAnICsgdGhpcy5hO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBIU1ZBQ29sb3I7XG59KCk7XG5cbi8qKlxuICogSFNWQSBjb2xvciBtYW5pcHVsYXRpb25cbiAqL1xuXG5cbnZhciBDb2xvckl0ZW0gPSBmdW5jdGlvbiAoKSB7XG4gIF9jcmVhdGVDbGFzcyhDb2xvckl0ZW0sIFt7XG4gICAga2V5OiAnYXBpJyxcblxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyBhIG1ldGhvZCBvZiB0aGUgUWl4Q29sb3IgQVBJIGFuZCByZXR1cm5zIGEgbmV3IENvbG9yIG9iamVjdCBvclxuICAgICAqIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1ldGhvZCBjYWxsLlxuICAgICAqXG4gICAgICogSWYgbm8gYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBpbnRlcm5hbCBRaXhDb2xvciBvYmplY3QgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZm4gUWl4Q29sb3IgZnVuY3Rpb24gbmFtZVxuICAgICAqIEBwYXJhbSBhcmdzIFFpeENvbG9yIGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAqIEBleGFtcGxlIGxldCBkYXJrZXJDb2xvciA9IGNvbG9yLmFwaSgnZGFya2VuJywgMC4yNSk7XG4gICAgICogQGV4YW1wbGUgbGV0IGx1bWlub3NpdHkgPSBjb2xvci5hcGkoJ2x1bWlub3NpdHknKTtcbiAgICAgKiBAZXhhbXBsZSBjb2xvciA9IGNvbG9yLmFwaSgnbmVnYXRlJyk7XG4gICAgICogQGV4YW1wbGUgbGV0IHFDb2xvciA9IGNvbG9yLmFwaSgpLm5lZ2F0ZSgpO1xuICAgICAqIEByZXR1cm5zIHtDb2xvckl0ZW18UWl4Q29sb3J8Kn1cbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gYXBpKGZuKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xvcjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2NvbG9yW2ZuXS5hcHBseSh0aGlzLl9jb2xvciwgYXJncyk7XG5cbiAgICAgIGlmICghKHJlc3VsdCBpbnN0YW5jZW9mIF9jb2xvcjIuZGVmYXVsdCkpIHtcbiAgICAgICAgLy8gcmV0dXJuIHJlc3VsdCBvZiB0aGUgbWV0aG9kIGNhbGxcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb2xvckl0ZW0ocmVzdWx0LCB0aGlzLmZvcm1hdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgb3JpZ2luYWwgQ29sb3JJdGVtIGNvbnN0cnVjdG9yIGRhdGEsXG4gICAgICogcGx1cyBhICd2YWxpZCcgZmxhZyB0byBrbm93IGlmIGl0J3MgdmFsaWQgb3Igbm90LlxuICAgICAqXG4gICAgICogQHJldHVybnMge3tjb2xvcjogKiwgZm9ybWF0OiBTdHJpbmcsIHZhbGlkOiBib29sZWFufX1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnb3JpZ2luYWwnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q29sb3JJdGVtfEhTVkFDb2xvcnxRaXhDb2xvcnxTdHJpbmd8KnxudWxsfSBjb2xvciBDb2xvciBkYXRhXG4gICAgICogQHBhcmFtIHtTdHJpbmd8bnVsbH0gZm9ybWF0IENvbG9yIG1vZGVsIHRvIGNvbnZlcnQgdG8gYnkgZGVmYXVsdC4gU3VwcG9ydGVkOiAncmdiJywgJ2hzbCcsICdoZXgnLlxuICAgICAqL1xuXG4gIH1dLCBbe1xuICAgIGtleTogJ0hTVkFDb2xvcicsXG5cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIEhTVkFDb2xvciBjbGFzc1xuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBleGFtcGxlIGxldCBjb2xvckRhdGEgPSBuZXcgQ29sb3JJdGVtLkhTVkFDb2xvcigzNjAsIDEwMCwgMTAwLCAxKTtcbiAgICAgKiBAcmV0dXJucyB7SFNWQUNvbG9yfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIEhTVkFDb2xvcjtcbiAgICB9XG4gIH1dKTtcblxuICBmdW5jdGlvbiBDb2xvckl0ZW0oKSB7XG4gICAgdmFyIGNvbG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBudWxsO1xuICAgIHZhciBmb3JtYXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29sb3JJdGVtKTtcblxuICAgIHRoaXMucmVwbGFjZShjb2xvciwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgaW50ZXJuYWwgUWl4Q29sb3Igb2JqZWN0IHdpdGggYSBuZXcgb25lLlxuICAgKiBUaGlzIGFsc28gcmVwbGFjZXMgdGhlIGludGVybmFsIG9yaWdpbmFsIGNvbG9yIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29sb3JJdGVtfEhTVkFDb2xvcnxRaXhDb2xvcnxTdHJpbmd8KnxudWxsfSBjb2xvciBDb2xvciBkYXRhIHRvIGJlIHBhcnNlZCAoaWYgbmVlZGVkKVxuICAgKiBAcGFyYW0ge1N0cmluZ3xudWxsfSBmb3JtYXQgQ29sb3IgbW9kZWwgdG8gY29udmVydCB0byBieSBkZWZhdWx0LiBTdXBwb3J0ZWQ6ICdyZ2InLCAnaHNsJywgJ2hleCcuXG4gICAqIEBleGFtcGxlIGNvbG9yLnJlcGxhY2UoJ3JnYigyNTUsMCwwKScsICdoc2wnKTtcbiAgICogQGV4YW1wbGUgY29sb3IucmVwbGFjZShoc3ZhQ29sb3JEYXRhKTtcbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoQ29sb3JJdGVtLCBbe1xuICAgIGtleTogJ3JlcGxhY2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXBsYWNlKGNvbG9yKSB7XG4gICAgICB2YXIgZm9ybWF0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuXG4gICAgICBmb3JtYXQgPSBDb2xvckl0ZW0uc2FuaXRpemVGb3JtYXQoZm9ybWF0KTtcblxuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSB7e2NvbG9yOiAqLCBmb3JtYXQ6IFN0cmluZ319XG4gICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICovXG4gICAgICB0aGlzLl9vcmlnaW5hbCA9IHtcbiAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICAgICAgdmFsaWQ6IHRydWVcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIEB0eXBlIHtRaXhDb2xvcn1cbiAgICAgICAqIEBwcml2YXRlXG4gICAgICAgKi9cbiAgICAgIHRoaXMuX2NvbG9yID0gQ29sb3JJdGVtLnBhcnNlKGNvbG9yKTtcblxuICAgICAgaWYgKHRoaXMuX2NvbG9yID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2NvbG9yID0gKDAsIF9jb2xvcjIuZGVmYXVsdCkoKTtcbiAgICAgICAgdGhpcy5fb3JpZ2luYWwudmFsaWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIEB0eXBlIHsqfHN0cmluZ31cbiAgICAgICAqIEBwcml2YXRlXG4gICAgICAgKi9cbiAgICAgIHRoaXMuX2Zvcm1hdCA9IGZvcm1hdCA/IGZvcm1hdCA6IENvbG9ySXRlbS5pc0hleChjb2xvcikgPyAnaGV4JyA6IHRoaXMuX2NvbG9yLm1vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyB0aGUgY29sb3IgcmV0dXJuaW5nIGEgUWl4IENvbG9yIG9iamVjdCBvciBudWxsIGlmIGNhbm5vdCBiZVxuICAgICAqIHBhcnNlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29sb3JJdGVtfEhTVkFDb2xvcnxRaXhDb2xvcnxTdHJpbmd8KnxudWxsfSBjb2xvciBDb2xvciBkYXRhXG4gICAgICogQGV4YW1wbGUgbGV0IHFDb2xvciA9IENvbG9ySXRlbS5wYXJzZSgncmdiKDI1NSwwLDApJyk7XG4gICAgICogQHN0YXRpY1xuICAgICAqIEByZXR1cm5zIHtRaXhDb2xvcnxudWxsfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc1ZhbGlkJyxcblxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb2xvciBpcyB2YWxpZCwgZmFsc2UgaWYgbm90LlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWwudmFsaWQgPT09IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSHVlIHZhbHVlIGZyb20gMCB0byAzNjBcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtpbnR9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3NldEh1ZVJhdGlvJyxcblxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgaHVlIHJhdGlvLCB3aGVyZSAxLjAgaXMgMCwgMC41IGlzIDE4MCBhbmQgMC4wIGlzIDM2MC5cbiAgICAgKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaCBSYXRpbyBmcm9tIDEuMCB0byAwLjBcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0SHVlUmF0aW8oaCkge1xuICAgICAgdGhpcy5odWUgPSAoMSAtIGgpICogMzYwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNhdHVyYXRpb24gdmFsdWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7aW50fSB2YWx1ZSBJbnRlZ2VyIGZyb20gMCB0byAxMDBcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2V0U2F0dXJhdGlvblJhdGlvJyxcblxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc2F0dXJhdGlvbiByYXRpbywgd2hlcmUgMS4wIGlzIDEwMCBhbmQgMC4wIGlzIDAuXG4gICAgICpcbiAgICAgKiBAaWdub3JlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHMgUmF0aW8gZnJvbSAwLjAgdG8gMS4wXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFNhdHVyYXRpb25SYXRpbyhzKSB7XG4gICAgICB0aGlzLnNhdHVyYXRpb24gPSBzICogMTAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlICd2YWx1ZScgY2hhbm5lbCB2YWx1ZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtpbnR9IHZhbHVlIEludGVnZXIgZnJvbSAwIHRvIDEwMFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzZXRWYWx1ZVJhdGlvJyxcblxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgcmF0aW8sIHdoZXJlIDEuMCBpcyAwIGFuZCAwLjAgaXMgMTAwLlxuICAgICAqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2IFJhdGlvIGZyb20gMS4wIHRvIDAuMFxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRWYWx1ZVJhdGlvKHYpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAoMSAtIHYpICogMTAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIHZhbHVlLiBJdCB3aWxsIGJlIHJvdW5kZWQgdG8gMiBkZWNpbWFscy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7aW50fSB2YWx1ZSBGbG9hdCBmcm9tIDAuMCB0byAxLjBcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2V0QWxwaGFSYXRpbycsXG5cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIHJhdGlvLCB3aGVyZSAxLjAgaXMgMC4wIGFuZCAwLjAgaXMgMS4wLlxuICAgICAqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhIFJhdGlvIGZyb20gMS4wIHRvIDAuMFxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRBbHBoYVJhdGlvKGEpIHtcbiAgICAgIHRoaXMuYWxwaGEgPSAxIC0gYTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IGNvbG9yIGZvcm1hdFxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIFN1cHBvcnRlZDogJ3JnYicsICdoc2wnLCAnaGV4J1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc0Rlc2F0dXJhdGVkJyxcblxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzYXR1cmF0aW9uIHZhbHVlIGlzIHplcm8sIGZhbHNlIG90aGVyd2lzZVxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGVzYXR1cmF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYXR1cmF0aW9uID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYWxwaGEgdmFsdWUgaXMgemVybywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaXNUcmFuc3BhcmVudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzVHJhbnNwYXJlbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hbHBoYSA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFscGhhIHZhbHVlIGlzIG51bWVyaWMgYW5kIGxlc3MgdGhhbiAxLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdoYXNUcmFuc3BhcmVuY3knLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNUcmFuc3BhcmVuY3koKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNBbHBoYSgpICYmIHRoaXMuYWxwaGEgPCAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYWxwaGEgdmFsdWUgaXMgbnVtZXJpYywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaGFzQWxwaGEnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNBbHBoYSgpIHtcbiAgICAgIHJldHVybiAhaXNOYU4odGhpcy5hbHBoYSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBIU1ZBQ29sb3Igb2JqZWN0LCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb2xvclxuICAgICAqXG4gICAgICogQHJldHVybnMge0hTVkFDb2xvcn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAndG9PYmplY3QnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b09iamVjdCgpIHtcbiAgICAgIHJldHVybiBuZXcgSFNWQUNvbG9yKHRoaXMuaHVlLCB0aGlzLnNhdHVyYXRpb24sIHRoaXMudmFsdWUsIHRoaXMuYWxwaGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsaWFzIG9mIHRvT2JqZWN0KClcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtIU1ZBQ29sb3J9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3RvSHN2YScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSHN2YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBIU1ZBQ29sb3Igb2JqZWN0IHdpdGggdGhlIHJhdGlvIHZhbHVlcyAoZnJvbSAwLjAgdG8gMS4wKSxcbiAgICAgKiBiYXNlZCBvbiB0aGUgY3VycmVudCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAcmV0dXJucyB7SFNWQUNvbG9yfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd0b0hzdmFSYXRpbycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSHN2YVJhdGlvKCkge1xuICAgICAgcmV0dXJuIG5ldyBIU1ZBQ29sb3IodGhpcy5odWUgLyAzNjAsIHRoaXMuc2F0dXJhdGlvbiAvIDEwMCwgdGhpcy52YWx1ZSAvIDEwMCwgdGhpcy5hbHBoYSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGN1cnJlbnQgY29sb3IgdG8gaXRzIHN0cmluZyByZXByZXNlbnRhdGlvbixcbiAgICAgKiB1c2luZyB0aGUgaW50ZXJuYWwgZm9ybWF0IG9mIHRoaXMgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd0b1N0cmluZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGN1cnJlbnQgY29sb3IgdG8gaXRzIHN0cmluZyByZXByZXNlbnRhdGlvbixcbiAgICAgKiB1c2luZyB0aGUgZ2l2ZW4gZm9ybWF0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd8bnVsbH0gZm9ybWF0IEZvcm1hdCB0byBjb252ZXJ0IHRvLiBJZiBlbXB0eSBvciBudWxsLCB0aGUgaW50ZXJuYWwgZm9ybWF0IHdpbGwgYmUgdXNlZC5cbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzdHJpbmcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdHJpbmcoKSB7XG4gICAgICB2YXIgZm9ybWF0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBudWxsO1xuXG4gICAgICBmb3JtYXQgPSBDb2xvckl0ZW0uc2FuaXRpemVGb3JtYXQoZm9ybWF0ID8gZm9ybWF0IDogdGhpcy5mb3JtYXQpO1xuXG4gICAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sb3Iucm91bmQoKS5zdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NvbG9yW2Zvcm1hdF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogXFwnJyArIGZvcm1hdCArICdcXCcnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0ciA9IHRoaXMuX2NvbG9yW2Zvcm1hdF0oKTtcblxuICAgICAgcmV0dXJuIHN0ci5yb3VuZCA/IHN0ci5yb3VuZCgpLnN0cmluZygpIDogc3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gY29sb3IgdmFsdWVzIGVxdWFscyB0aGlzIG9uZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqIFRoZSBmb3JtYXQgaXMgbm90IGNvbXBhcmVkLlxuICAgICAqIElmIGFueSBvZiB0aGUgY29sb3JzIGlzIGludmFsaWQsIHRoZSByZXN1bHQgd2lsbCBiZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29sb3JJdGVtfEhTVkFDb2xvcnxRaXhDb2xvcnxTdHJpbmd8KnxudWxsfSBjb2xvciBDb2xvciBkYXRhXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZXF1YWxzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXF1YWxzKGNvbG9yKSB7XG4gICAgICBjb2xvciA9IGNvbG9yIGluc3RhbmNlb2YgQ29sb3JJdGVtID8gY29sb3IgOiBuZXcgQ29sb3JJdGVtKGNvbG9yKTtcblxuICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuaHVlID09PSBjb2xvci5odWUgJiYgdGhpcy5zYXR1cmF0aW9uID09PSBjb2xvci5zYXR1cmF0aW9uICYmIHRoaXMudmFsdWUgPT09IGNvbG9yLnZhbHVlICYmIHRoaXMuYWxwaGEgPT09IGNvbG9yLmFscGhhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgaW5zdGFuY2VcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb2xvckl0ZW19XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2dldENsb25lJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2xvbmUoKSB7XG4gICAgICByZXR1cm4gbmV3IENvbG9ySXRlbSh0aGlzLl9jb2xvciwgdGhpcy5mb3JtYXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgaW5zdGFuY2UsIG9ubHkgY29weWluZyB0aGUgaHVlIHZhbHVlLFxuICAgICAqIGFuZCBzZXR0aW5nIHRoZSBvdGhlcnMgdG8gaXRzIG1heCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb2xvckl0ZW19XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2dldENsb25lSHVlT25seScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENsb25lSHVlT25seSgpIHtcbiAgICAgIHJldHVybiBuZXcgQ29sb3JJdGVtKFt0aGlzLmh1ZSwgMTAwLCAxMDAsIDFdLCB0aGlzLmZvcm1hdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBpbnN0YW5jZSBzZXR0aW5nIHRoZSBhbHBoYSB0byB0aGUgbWF4LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbG9ySXRlbX1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZ2V0Q2xvbmVPcGFxdWUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDbG9uZU9wYXF1ZSgpIHtcbiAgICAgIHJldHVybiBuZXcgQ29sb3JJdGVtKHRoaXMuX2NvbG9yLmFscGhhKDEpLCB0aGlzLmZvcm1hdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGNvbG9yIHRvIGEgUkdCIHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ31cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAndG9SZ2JTdHJpbmcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1JnYlN0cmluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmluZygncmdiJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGNvbG9yIHRvIGEgSGV4YWRlY2ltYWwgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd0b0hleFN0cmluZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSGV4U3RyaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKCdoZXgnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgY29sb3IgdG8gYSBIU0wgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd0b0hzbFN0cmluZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSHNsU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKCdoc2wnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbG9yIGlzIGRhcmssIGZhbHNlIG90aGVyd2hpc2UuXG4gICAgICogVGhpcyBpcyB1c2VmdWwgdG8gZGVjaWRlIGEgdGV4dCBjb2xvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc0RhcmsnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0RhcmsoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29sb3IuaXNEYXJrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb2xvciBpcyBsaWdodCwgZmFsc2Ugb3RoZXJ3aGlzZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCB0byBkZWNpZGUgYSB0ZXh0IGNvbG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2lzTGlnaHQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0xpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yLmlzTGlnaHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBsaXN0IG9mIGNvbG9ycyB1c2luZyB0aGUgZ2l2ZW4gaHVlLWJhc2VkIGZvcm11bGEgb3IgdGhlIGdpdmVuIGFycmF5IG9mIGh1ZSB2YWx1ZXMuXG4gICAgICogSHVlIGZvcm11bGFzIGNhbiBiZSBleHRlbmRlZCB1c2luZyBDb2xvckl0ZW0uY29sb3JGb3JtdWxhcyBzdGF0aWMgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJbXX0gZm9ybXVsYSBFeGFtcGxlczogJ2NvbXBsZW1lbnRhcnknLCAndHJpYWQnLCAndGV0cmFkJywgJ3NwbGl0Y29tcGxlbWVudCcsIFsxODAsIDI3MF1cbiAgICAgKiBAZXhhbXBsZSBsZXQgY29sb3JzID0gY29sb3IuZ2VuZXJhdGUoJ3RyaWFkJyk7XG4gICAgICogQGV4YW1wbGUgbGV0IGNvbG9ycyA9IGNvbG9yLmdlbmVyYXRlKFs0NSwgODAsIDExMiwgMjAwXSk7XG4gICAgICogQHJldHVybnMge0NvbG9ySXRlbVtdfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdnZW5lcmF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlKGZvcm11bGEpIHtcbiAgICAgIHZhciBodWVzID0gW107XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm11bGEpKSB7XG4gICAgICAgIGh1ZXMgPSBmb3JtdWxhO1xuICAgICAgfSBlbHNlIGlmICghQ29sb3JJdGVtLmNvbG9yRm9ybXVsYXMuaGFzT3duUHJvcGVydHkoZm9ybXVsYSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb2xvciBmb3JtdWxhIGZvdW5kIHdpdGggdGhlIG5hbWUgXFwnJyArIGZvcm11bGEgKyAnXFwnLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHVlcyA9IENvbG9ySXRlbS5jb2xvckZvcm11bGFzW2Zvcm11bGFdO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29sb3JzID0gW10sXG4gICAgICAgICAgbWFpbkNvbG9yID0gdGhpcy5fY29sb3IsXG4gICAgICAgICAgZm9ybWF0ID0gdGhpcy5mb3JtYXQ7XG5cbiAgICAgIGh1ZXMuZm9yRWFjaChmdW5jdGlvbiAoaHVlKSB7XG4gICAgICAgIHZhciBsZXZlbHMgPSBbaHVlID8gKG1haW5Db2xvci5odWUoKSArIGh1ZSkgJSAzNjAgOiBtYWluQ29sb3IuaHVlKCksIG1haW5Db2xvci5zYXR1cmF0aW9udigpLCBtYWluQ29sb3IudmFsdWUoKSwgbWFpbkNvbG9yLmFscGhhKCldO1xuXG4gICAgICAgIGNvbG9ycy5wdXNoKG5ldyBDb2xvckl0ZW0obGV2ZWxzLCBmb3JtYXQpKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY29sb3JzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2h1ZScsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29sb3IuaHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F0dXJhdGlvbiB2YWx1ZSBmcm9tIDAgdG8gMTAwXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7aW50fVxuICAgICAqL1xuICAgICxcblxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgaHVlIHZhbHVlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2ludH0gdmFsdWUgSW50ZWdlciBmcm9tIDAgdG8gMzYwXG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbG9yID0gdGhpcy5fY29sb3IuaHVlKHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzYXR1cmF0aW9uJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb2xvci5zYXR1cmF0aW9udigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbHVlIGNoYW5uZWwgdmFsdWUgZnJvbSAwIHRvIDEwMFxuICAgICAqXG4gICAgICogQHJldHVybnMge2ludH1cbiAgICAgKi9cbiAgICAsXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbG9yID0gdGhpcy5fY29sb3Iuc2F0dXJhdGlvbnYodmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3ZhbHVlJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb2xvci52YWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFscGhhIHZhbHVlIGZyb20gMC4wIHRvIDEuMFxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICAsXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbG9yID0gdGhpcy5fY29sb3IudmFsdWUodmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2FscGhhJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBhID0gdGhpcy5fY29sb3IuYWxwaGEoKTtcblxuICAgICAgcmV0dXJuIGlzTmFOKGEpID8gMSA6IGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBjb2xvciBmb3JtYXQgdG8gY29udmVydCB0byB3aGVuIGNhbGxpbmcgdG9TdHJpbmcoKSBvciBzdHJpbmcoKVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ30gJ3JnYicsICdoc2wnLCAnaGV4JyBvciAnJ1xuICAgICAqL1xuICAgICxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgLy8gMiBkZWNpbWFscyBtYXhcbiAgICAgIHRoaXMuX2NvbG9yID0gdGhpcy5fY29sb3IuYWxwaGEoTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMCkgLyAxMDApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Zvcm1hdCcsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybWF0ID8gdGhpcy5fZm9ybWF0IDogdGhpcy5fY29sb3IubW9kZWw7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdGhpcy5fZm9ybWF0ID0gQ29sb3JJdGVtLnNhbml0aXplRm9ybWF0KHZhbHVlKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogJ3BhcnNlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoY29sb3IpIHtcbiAgICAgIGlmIChjb2xvciBpbnN0YW5jZW9mIF9jb2xvcjIuZGVmYXVsdCkge1xuICAgICAgICByZXR1cm4gY29sb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2xvciBpbnN0YW5jZW9mIENvbG9ySXRlbSkge1xuICAgICAgICByZXR1cm4gY29sb3IuX2NvbG9yO1xuICAgICAgfVxuXG4gICAgICB2YXIgZm9ybWF0ID0gbnVsbDtcblxuICAgICAgaWYgKGNvbG9yIGluc3RhbmNlb2YgSFNWQUNvbG9yKSB7XG4gICAgICAgIGNvbG9yID0gW2NvbG9yLmgsIGNvbG9yLnMsIGNvbG9yLnYsIGlzTmFOKGNvbG9yLmEpID8gMSA6IGNvbG9yLmFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sb3IgPSBDb2xvckl0ZW0uc2FuaXRpemVTdHJpbmcoY29sb3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sb3IgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSkge1xuICAgICAgICBmb3JtYXQgPSAnaHN2JztcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuICgwLCBfY29sb3IyLmRlZmF1bHQpKGNvbG9yLCBmb3JtYXQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYW5pdGl6ZXMgYSBjb2xvciBzdHJpbmcsIGFkZGluZyBtaXNzaW5nIGhhc2ggdG8gaGV4YWRlY2ltYWwgY29sb3JzXG4gICAgICogYW5kIGNvbnZlcnRpbmcgJ3RyYW5zcGFyZW50JyB0byBhIGNvbG9yIGNvZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3wqfSBzdHIgQ29sb3Igc3RyaW5nXG4gICAgICogQGV4YW1wbGUgbGV0IGNvbG9yU3RyID0gQ29sb3JJdGVtLnNhbml0aXplU3RyaW5nKCdmZmFhMDAnKTtcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHJldHVybnMge1N0cmluZ3wqfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzYW5pdGl6ZVN0cmluZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNhbml0aXplU3RyaW5nKHN0cikge1xuICAgICAgaWYgKCEodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgfHwgc3RyIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyLm1hdGNoKC9eWzAtOWEtZl17Mix9JC9pKSkge1xuICAgICAgICByZXR1cm4gJyMnICsgc3RyO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyLnRvTG93ZXJDYXNlKCkgPT09ICd0cmFuc3BhcmVudCcpIHtcbiAgICAgICAgcmV0dXJuICcjRkZGRkZGMDAnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVjdHMgaWYgYSB2YWx1ZSBpcyBhIHN0cmluZyBhbmQgYSBjb2xvciBpbiBoZXhhZGVjaW1hbCBmb3JtYXQgKGluIGFueSB2YXJpYW50KS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAgICAgKiBAZXhhbXBsZSBDb2xvckl0ZW0uaXNIZXgoJ3JnYmEoMCwwLDApJyk7IC8vIGZhbHNlXG4gICAgICogQGV4YW1wbGUgQ29sb3JJdGVtLmlzSGV4KCdmZmFhMDAnKTsgLy8gdHJ1ZVxuICAgICAqIEBleGFtcGxlIENvbG9ySXRlbS5pc0hleCgnI2ZmYWEwMCcpOyAvLyB0cnVlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc0hleCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzSGV4KHN0cikge1xuICAgICAgaWYgKCEodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgfHwgc3RyIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIXN0ci5tYXRjaCgvXiM/WzAtOWEtZl17Mix9JC9pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYW5pdGl6ZXMgYSBjb2xvciBmb3JtYXQgdG8gb25lIHN1cHBvcnRlZCBieSB3ZWIgYnJvd3NlcnMuXG4gICAgICogUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgb2YgdGhlIGZvcm1hdCBjYW4ndCBiZSByZWNvZ25pc2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd8Kn0gZm9ybWF0XG4gICAgICogQGV4YW1wbGUgQ29sb3JJdGVtLnNhbml0aXplRm9ybWF0KCdyZ2JhJyk7IC8vICdyZ2InXG4gICAgICogQGV4YW1wbGUgQ29sb3JJdGVtLmlzSGV4KCdoZXg4Jyk7IC8vICdoZXgnXG4gICAgICogQGV4YW1wbGUgQ29sb3JJdGVtLmlzSGV4KCdpbnZhbGlkJyk7IC8vICcnXG4gICAgICogQHN0YXRpY1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9ICdyZ2InLCAnaHNsJywgJ2hleCcgb3IgJycuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3Nhbml0aXplRm9ybWF0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2FuaXRpemVGb3JtYXQoZm9ybWF0KSB7XG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdoZXgnOlxuICAgICAgICBjYXNlICdoZXgzJzpcbiAgICAgICAgY2FzZSAnaGV4NCc6XG4gICAgICAgIGNhc2UgJ2hleDYnOlxuICAgICAgICBjYXNlICdoZXg4JzpcbiAgICAgICAgICByZXR1cm4gJ2hleCc7XG4gICAgICAgIGNhc2UgJ3JnYic6XG4gICAgICAgIGNhc2UgJ3JnYmEnOlxuICAgICAgICBjYXNlICdrZXl3b3JkJzpcbiAgICAgICAgY2FzZSAnbmFtZSc6XG4gICAgICAgICAgcmV0dXJuICdyZ2InO1xuICAgICAgICBjYXNlICdoc2wnOlxuICAgICAgICBjYXNlICdoc2xhJzpcbiAgICAgICAgY2FzZSAnaHN2JzpcbiAgICAgICAgY2FzZSAnaHN2YSc6XG4gICAgICAgIGNhc2UgJ2h3Yic6IC8vIEhXQiB0aGlzIGlzIHN1cHBvcnRlZCBieSBRaXggQ29sb3IsIGJ1dCBub3QgYnkgYnJvd3NlcnNcbiAgICAgICAgY2FzZSAnaHdiYSc6XG4gICAgICAgICAgcmV0dXJuICdoc2wnO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29sb3JJdGVtO1xufSgpO1xuXG4vKipcbiAqIExpc3Qgb2YgaHVlLWJhc2VkIGNvbG9yIGZvcm11bGFzIHVzZWQgYnkgQ29sb3JJdGVtLnByb3RvdHlwZS5nZW5lcmF0ZSgpXG4gKlxuICogQHN0YXRpY1xuICogQHR5cGUge3tjb21wbGVtZW50YXJ5OiBudW1iZXJbXSwgdHJpYWQ6IG51bWJlcltdLCB0ZXRyYWQ6IG51bWJlcltdLCBzcGxpdGNvbXBsZW1lbnQ6IG51bWJlcltdfX1cbiAqL1xuXG5cbkNvbG9ySXRlbS5jb2xvckZvcm11bGFzID0ge1xuICBjb21wbGVtZW50YXJ5OiBbMTgwXSxcbiAgdHJpYWQ6IFswLCAxMjAsIDI0MF0sXG4gIHRldHJhZDogWzAsIDkwLCAxODAsIDI3MF0sXG4gIHNwbGl0Y29tcGxlbWVudDogWzAsIDcyLCAyMTZdXG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBDb2xvckl0ZW07XG5leHBvcnRzLkhTVkFDb2xvciA9IEhTVkFDb2xvcjtcbmV4cG9ydHMuQ29sb3JJdGVtID0gQ29sb3JJdGVtO1xuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQG1vZHVsZVxuICovXG5cbi8vIGFkanVzdCB0aGVzZSB2YWx1ZXMgYWNjb3JkaW5nbHkgdG8gdGhlIHNhc3MgdmFyc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIHNhc3NWYXJzID0ge1xuICAnYmFyX3NpemVfc2hvcnQnOiAxNixcbiAgJ2Jhc2VfbWFyZ2luJzogNixcbiAgJ2NvbHVtbnMnOiA2XG59O1xuXG52YXIgc2xpZGVyU2l6ZSA9IHNhc3NWYXJzLmJhcl9zaXplX3Nob3J0ICogc2Fzc1ZhcnMuY29sdW1ucyArIHNhc3NWYXJzLmJhc2VfbWFyZ2luICogKHNhc3NWYXJzLmNvbHVtbnMgLSAxKTtcblxuLyoqXG4gKiBDb2xvcnBpY2tlciBkZWZhdWx0IG9wdGlvbnNcbiAqL1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAvKipcbiAgICogQ3VzdG9tIGNsYXNzIHRvIGJlIGFkZGVkIHRvIHRoZSBgLmNvbG9ycGlja2VyLWVsZW1lbnRgIGVsZW1lbnRcbiAgICpcbiAgICogQHR5cGUge1N0cmluZ3xudWxsfVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBjdXN0b21DbGFzczogbnVsbCxcbiAgLyoqXG4gICAqIFNldHMgYSBpbml0aWFsIGNvbG9yLCBpZ25vcmluZyB0aGUgb25lIGZyb20gdGhlIGVsZW1lbnQvaW5wdXQgdmFsdWUgb3IgdGhlIGRhdGEtY29sb3IgYXR0cmlidXRlLlxuICAgKlxuICAgKiBAdHlwZSB7KFN0cmluZ3xDb2xvckl0ZW18Ym9vbGVhbil9XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb2xvcjogZmFsc2UsXG4gIC8qKlxuICAgKiBGYWxsYmFjayBjb2xvciB0byB1c2Ugd2hlbiB0aGUgZ2l2ZW4gY29sb3IgaXMgaW52YWxpZC5cbiAgICogSWYgZmFsc2UsIHRoZSBsYXRlc3QgdmFsaWQgY29sb3Igd2lsbCBiZSB1c2VkIGFzIGEgZmFsbGJhY2suXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd8Q29sb3JJdGVtfGJvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmYWxsYmFja0NvbG9yOiBmYWxzZSxcbiAgLyoqXG4gICAqIEZvcmNlcyBhbiBzcGVjaWZpYyBjb2xvciBmb3JtYXQuIElmICdhdXRvJywgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIHRoZSBmaXJzdCB0aW1lIG9ubHksXG4gICAqIGJ1dCBpZiBudWxsIGl0IHdpbGwgYmUgYWx3YXlzIHJlY2FsY3VsYXRlZC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBlbmRpbmcgJ2EnIG9mIHRoZSBmb3JtYXQgbWVhbmluZyBcImFscGhhXCIgaGFzIGN1cnJlbnRseSBubyBlZmZlY3QsIG1lYW5pbmcgdGhhdCByZ2IgaXMgdGhlIHNhbWUgYXNcbiAgICogcmdiYSBleGNlcHRpbmcgaWYgdGhlIGFscGhhIGNoYW5uZWwgaXMgZGlzYWJsZWQgKHNlZSB1c2VBbHBoYSkuXG4gICAqXG4gICAqIEB0eXBlIHsoJ3JnYid8J2hleCd8J2hzbCd8J2F1dG8nfG51bGwpfVxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIGZvcm1hdDogJ2F1dG8nLFxuICAvKipcbiAgICogSG9yaXpvbnRhbCBtb2RlIGxheW91dC5cbiAgICpcbiAgICogSWYgdHJ1ZSwgdGhlIGh1ZSBhbmQgYWxwaGEgY2hhbm5lbCBiYXJzIHdpbGwgYmUgcmVuZGVyZWQgaG9yaXpvbnRhbGx5LCBhYm92ZSB0aGUgc2F0dXJhdGlvbiBzZWxlY3Rvci5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBob3Jpem9udGFsOiBmYWxzZSxcbiAgLyoqXG4gICAqIEZvcmNlcyB0byBzaG93IHRoZSBjb2xvcnBpY2tlciBhcyBhbiBpbmxpbmUgZWxlbWVudC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGlmIHRoZXJlIGlzIG5vIGNvbnRhaW5lciBzcGVjaWZpZWQsIHRoZSBpbmxpbmUgZWxlbWVudFxuICAgKiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBib2R5LCBzbyB5b3UgbWF5IHdhbnQgdG8gc2V0IHRoZSBjb250YWluZXIgb3B0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGlubGluZTogZmFsc2UsXG4gIC8qKlxuICAgKiBDb250YWluZXIgd2hlcmUgdGhlIGNvbG9ycGlja2VyIGlzIGFwcGVuZGVkIHRvIGluIHRoZSBET00uXG4gICAqXG4gICAqIElmIGlzIGEgc3RyaW5nIChDU1Mgc2VsZWN0b3IpLCB0aGUgY29sb3JwaWNrZXIgd2lsbCBiZSBwbGFjZWQgaW5zaWRlIHRoaXMgY29udGFpbmVyLlxuICAgKiBJZiB0cnVlLCB0aGUgYC5jb2xvcnBpY2tlci1lbGVtZW50YCBlbGVtZW50IGl0c2VsZiB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRhaW5lci5cbiAgICogSWYgZmFsc2UsIHRoZSBkb2N1bWVudCBib2R5IGlzIHVzZWQgYXMgdGhlIGNvbnRhaW5lciwgdW5sZXNzIGl0IGlzIGEgcG9wb3ZlciAoaW4gdGhpcyBjYXNlIGl0IGlzIGFwcGVuZGVkIHRvIHRoZVxuICAgKiBwb3BvdmVyIGJvZHkgaW5zdGVhZCkuXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd8Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbnRhaW5lcjogZmFsc2UsXG4gIC8qKlxuICAgKiBCb290c3RyYXAgUG9wb3ZlciBvcHRpb25zLlxuICAgKiBUaGUgdHJpZ2dlciwgY29udGVudCBhbmQgaHRtbCBvcHRpb25zIGFyZSBhbHdheXMgaWdub3JlZC5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IE9iamVjdFxuICAgKi9cbiAgcG9wb3Zlcjoge1xuICAgIGFuaW1hdGlvbjogdHJ1ZSxcbiAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgIGZhbGxiYWNrUGxhY2VtZW50OiAnZmxpcCdcbiAgfSxcbiAgLyoqXG4gICAqIElmIHRydWUsIGxvYWRzIHRoZSAnZGVidWdnZXInIGV4dGVuc2lvbiBhdXRvbWF0aWNhbGx5LCB3aGljaCBsb2dzIHRoZSBldmVudHMgaW4gdGhlIGNvbnNvbGVcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJ1ZzogZmFsc2UsXG4gIC8qKlxuICAgKiBDaGlsZCBDU1Mgc2VsZWN0b3IgZm9yIHRoZSBjb2xvcnBpY2tlciBpbnB1dC5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXQ6ICdpbnB1dCcsXG4gIC8qKlxuICAgKiBDaGlsZCBDU1Mgc2VsZWN0b3IgZm9yIHRoZSBjb2xvcnBpY2tlciBhZGRvbi5cbiAgICogSWYgaXQgZXhpc3RzLCB0aGUgY2hpbGQgPGk+IGVsZW1lbnQgYmFja2dyb3VuZCB3aWxsIGJlIGNoYW5nZWQgb24gY29sb3IgY2hhbmdlLlxuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnLmNvbG9ycGlja2VyLXRyaWdnZXIsIC5jb2xvcnBpY2tlci1pbnB1dC1hZGRvbidcbiAgICovXG4gIGFkZG9uOiAnLmNvbG9ycGlja2VyLWlucHV0LWFkZG9uJyxcbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSBpbnB1dCBjb250ZW50IHdpbGwgYmUgcmVwbGFjZWQgYWx3YXlzIHdpdGggYSB2YWxpZCBjb2xvcixcbiAgICogaWYgZmFsc2UsIHRoZSBpbnZhbGlkIGNvbG9yIHdpbGwgYmUgbGVmdCBpbiB0aGUgaW5wdXQsXG4gICAqICAgd2hpbGUgdGhlIGludGVybmFsIGNvbG9yIG9iamVjdCB3aWxsIHN0aWxsIHJlc29sdmUgaW50byBhIHZhbGlkIG9uZS5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGF1dG9JbnB1dEZhbGxiYWNrOiB0cnVlLFxuICAvKipcbiAgICogSWYgdHJ1ZSBhIGhhc2ggd2lsbCBiZSBwcmVwZW5kZWQgdG8gaGV4YWRlY2ltYWwgY29sb3JzLlxuICAgKiBJZiBmYWxzZSwgdGhlIGhhc2ggd2lsbCBiZSByZW1vdmVkLlxuICAgKiBUaGlzIG9ubHkgYWZmZWN0cyB0aGUgaW5wdXQgdmFsdWVzIGluIGhleGFkZWNpbWFsIGZvcm1hdC5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHVzZUhhc2hQcmVmaXg6IHRydWUsXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGUgYWxwaGEgY2hhbm5lbCBiYXIgd2lsbCBiZSBkaXNwbGF5ZWQgbm8gbWF0dGVyIHdoYXQuXG4gICAqXG4gICAqIElmIGZhbHNlLCBpdCB3aWxsIGJlIGFsd2F5cyBoaWRkZW4gYW5kIGFscGhhIGNoYW5uZWwgd2lsbCBiZSBkaXNhYmxlZCBhbHNvIHByb2dyYW1tYXRpY2FsbHksIG1lYW5pbmcgdGhhdFxuICAgKiB0aGUgc2VsZWN0ZWQgb3IgdHlwZWQgY29sb3Igd2lsbCBiZSBhbHdheXMgb3BhcXVlLlxuICAgKlxuICAgKiBJZiBudWxsLCB0aGUgYWxwaGEgY2hhbm5lbCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQvZW5hYmxlZCBkZXBlbmRpbmcgaWYgdGhlIGluaXRpYWwgY29sb3IgZm9ybWF0IHN1cHBvcnRzXG4gICAqIGFscGhhIG9yIG5vdC5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHVzZUFscGhhOiB0cnVlLFxuICAvKipcbiAgICogQ29sb3JwaWNrZXIgd2lkZ2V0IHRlbXBsYXRlXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqIEBleGFtcGxlXG4gICAqIDwhLS0gVGhpcyBpcyB0aGUgZGVmYXVsdCB0ZW1wbGF0ZTogLS0+XG4gICAqIDxkaXYgY2xhc3M9XCJjb2xvcnBpY2tlclwiPlxuICAgKiAgIDxkaXYgY2xhc3M9XCJjb2xvcnBpY2tlci1zYXR1cmF0aW9uXCI+PGkgY2xhc3M9XCJjb2xvcnBpY2tlci1ndWlkZVwiPjwvaT48L2Rpdj5cbiAgICogICA8ZGl2IGNsYXNzPVwiY29sb3JwaWNrZXItaHVlXCI+PGkgY2xhc3M9XCJjb2xvcnBpY2tlci1ndWlkZVwiPjwvaT48L2Rpdj5cbiAgICogICA8ZGl2IGNsYXNzPVwiY29sb3JwaWNrZXItYWxwaGFcIj5cbiAgICogICAgIDxkaXYgY2xhc3M9XCJjb2xvcnBpY2tlci1hbHBoYS1jb2xvclwiPjwvZGl2PlxuICAgKiAgICAgPGkgY2xhc3M9XCJjb2xvcnBpY2tlci1ndWlkZVwiPjwvaT5cbiAgICogICA8L2Rpdj5cbiAgICogPC9kaXY+XG4gICAqL1xuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJjb2xvcnBpY2tlclwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xvcnBpY2tlci1zYXR1cmF0aW9uXCI+PGkgY2xhc3M9XCJjb2xvcnBpY2tlci1ndWlkZVwiPjwvaT48L2Rpdj5cXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sb3JwaWNrZXItaHVlXCI+PGkgY2xhc3M9XCJjb2xvcnBpY2tlci1ndWlkZVwiPjwvaT48L2Rpdj5cXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sb3JwaWNrZXItYWxwaGFcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvcnBpY2tlci1hbHBoYS1jb2xvclwiPjwvZGl2PlxcbiAgICAgICAgPGkgY2xhc3M9XCJjb2xvcnBpY2tlci1ndWlkZVwiPjwvaT5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+JyxcbiAgLyoqXG4gICAqXG4gICAqIEFzc29jaWF0aXZlIG9iamVjdCB3aXRoIHRoZSBleHRlbnNpb24gY2xhc3MgbmFtZSBhbmQgaXRzIGNvbmZpZy5cbiAgICogQ29sb3JwaWNrZXIgY29tZXMgd2l0aCBtYW55IGJ1bmRsZWQgZXh0ZW5zaW9uczogZGVidWdnZXIsIHBhbGV0dGUsIHByZXZpZXcgYW5kIHN3YXRjaGVzIChhIHN1cGVyc2V0IG9mIHBhbGV0dGUpLlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0W119XG4gICAqIEBleGFtcGxlXG4gICAqICAgZXh0ZW5zaW9uczogW1xuICAgKiAgICAge1xuICAgKiAgICAgICBuYW1lOiAnc3dhdGNoZXMnXG4gICAqICAgICAgIG9wdGlvbnM6IHtcbiAgICogICAgICAgICBjb2xvcnM6IHtcbiAgICogICAgICAgICAgICdwcmltYXJ5JzogJyMzMzdhYjcnLFxuICAgKiAgICAgICAgICAgJ3N1Y2Nlc3MnOiAnIzVjYjg1YycsXG4gICAqICAgICAgICAgICAnaW5mbyc6ICcjNWJjMGRlJyxcbiAgICogICAgICAgICAgICd3YXJuaW5nJzogJyNmMGFkNGUnLFxuICAgKiAgICAgICAgICAgJ2Rhbmdlcic6ICcjZDk1MzRmJ1xuICAgKiAgICAgICAgIH0sXG4gICAqICAgICAgICAgbmFtZXNBc1ZhbHVlczogdHJ1ZVxuICAgKiAgICAgICB9XG4gICAqICAgICB9XG4gICAqICAgXVxuICAgKi9cbiAgZXh0ZW5zaW9uczogW3tcbiAgICBuYW1lOiAncHJldmlldycsXG4gICAgb3B0aW9uczoge1xuICAgICAgc2hvd1RleHQ6IHRydWVcbiAgICB9XG4gIH1dLFxuICAvKipcbiAgICogVmVydGljYWwgc2xpZGVycyBjb25maWd1cmF0aW9uXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzbGlkZXJzOiB7XG4gICAgc2F0dXJhdGlvbjoge1xuICAgICAgc2VsZWN0b3I6ICcuY29sb3JwaWNrZXItc2F0dXJhdGlvbicsXG4gICAgICBtYXhMZWZ0OiBzbGlkZXJTaXplLFxuICAgICAgbWF4VG9wOiBzbGlkZXJTaXplLFxuICAgICAgY2FsbExlZnQ6ICdzZXRTYXR1cmF0aW9uUmF0aW8nLFxuICAgICAgY2FsbFRvcDogJ3NldFZhbHVlUmF0aW8nXG4gICAgfSxcbiAgICBodWU6IHtcbiAgICAgIHNlbGVjdG9yOiAnLmNvbG9ycGlja2VyLWh1ZScsXG4gICAgICBtYXhMZWZ0OiAwLFxuICAgICAgbWF4VG9wOiBzbGlkZXJTaXplLFxuICAgICAgY2FsbExlZnQ6IGZhbHNlLFxuICAgICAgY2FsbFRvcDogJ3NldEh1ZVJhdGlvJ1xuICAgIH0sXG4gICAgYWxwaGE6IHtcbiAgICAgIHNlbGVjdG9yOiAnLmNvbG9ycGlja2VyLWFscGhhJyxcbiAgICAgIGNoaWxkU2VsZWN0b3I6ICcuY29sb3JwaWNrZXItYWxwaGEtY29sb3InLFxuICAgICAgbWF4TGVmdDogMCxcbiAgICAgIG1heFRvcDogc2xpZGVyU2l6ZSxcbiAgICAgIGNhbGxMZWZ0OiBmYWxzZSxcbiAgICAgIGNhbGxUb3A6ICdzZXRBbHBoYVJhdGlvJ1xuICAgIH1cbiAgfSxcbiAgLyoqXG4gICAqIEhvcml6b250YWwgc2xpZGVycyBjb25maWd1cmF0aW9uXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzbGlkZXJzSG9yejoge1xuICAgIHNhdHVyYXRpb246IHtcbiAgICAgIHNlbGVjdG9yOiAnLmNvbG9ycGlja2VyLXNhdHVyYXRpb24nLFxuICAgICAgbWF4TGVmdDogc2xpZGVyU2l6ZSxcbiAgICAgIG1heFRvcDogc2xpZGVyU2l6ZSxcbiAgICAgIGNhbGxMZWZ0OiAnc2V0U2F0dXJhdGlvblJhdGlvJyxcbiAgICAgIGNhbGxUb3A6ICdzZXRWYWx1ZVJhdGlvJ1xuICAgIH0sXG4gICAgaHVlOiB7XG4gICAgICBzZWxlY3RvcjogJy5jb2xvcnBpY2tlci1odWUnLFxuICAgICAgbWF4TGVmdDogc2xpZGVyU2l6ZSxcbiAgICAgIG1heFRvcDogMCxcbiAgICAgIGNhbGxMZWZ0OiAnc2V0SHVlUmF0aW8nLFxuICAgICAgY2FsbFRvcDogZmFsc2VcbiAgICB9LFxuICAgIGFscGhhOiB7XG4gICAgICBzZWxlY3RvcjogJy5jb2xvcnBpY2tlci1hbHBoYScsXG4gICAgICBjaGlsZFNlbGVjdG9yOiAnLmNvbG9ycGlja2VyLWFscGhhLWNvbG9yJyxcbiAgICAgIG1heExlZnQ6IHNsaWRlclNpemUsXG4gICAgICBtYXhUb3A6IDAsXG4gICAgICBjYWxsTGVmdDogJ3NldEFscGhhUmF0aW8nLFxuICAgICAgY2FsbFRvcDogZmFsc2VcbiAgICB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9FeHRlbnNpb24yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxudmFyIF9FeHRlbnNpb24zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfRXh0ZW5zaW9uMik7XG5cbnZhciBfanF1ZXJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxudmFyIF9qcXVlcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfanF1ZXJ5KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBLZXktdmFsdWUgcGFpcnMgZGVmaW5pbmcgYSBjb2xvciBhbGlhcyBhbmQgaXRzIENTUyBjb2xvciByZXByZXNlbnRhdGlvbi5cbiAgICpcbiAgICogVGhleSBjYW4gYWxzbyBiZSBqdXN0IGFuIGFycmF5IG9mIHZhbHVlcy4gSW4gdGhhdCBjYXNlLCBubyBzcGVjaWFsIG5hbWVzIGFyZSB1c2VkLCBvbmx5IHRoZSByZWFsIGNvbG9ycy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdHxBcnJheX1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKiBAZXhhbXBsZVxuICAgKiAge1xuICAgKiAgICdibGFjayc6ICcjMDAwMDAwJyxcbiAgICogICAnd2hpdGUnOiAnI2ZmZmZmZicsXG4gICAqICAgJ3JlZCc6ICcjRkYwMDAwJyxcbiAgICogICAnZGVmYXVsdCc6ICcjNzc3Nzc3JyxcbiAgICogICAncHJpbWFyeSc6ICcjMzM3YWI3JyxcbiAgICogICAnc3VjY2Vzcyc6ICcjNWNiODVjJyxcbiAgICogICAnaW5mbyc6ICcjNWJjMGRlJyxcbiAgICogICAnd2FybmluZyc6ICcjZjBhZDRlJyxcbiAgICogICAnZGFuZ2VyJzogJyNkOTUzNGYnXG4gICAqICB9XG4gICAqXG4gICAqIEBleGFtcGxlIFsnI2YwYWQ0ZScsICcjMzM3YWI3JywgJyM1Y2I4NWMnXVxuICAgKi9cbiAgY29sb3JzOiBudWxsLFxuICAvKipcbiAgICogSWYgdHJ1ZSwgd2hlbiBhIGNvbG9yIHN3YXRjaCBpcyBzZWxlY3RlZCB0aGUgbmFtZSAoYWxpYXMpIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCB2YWx1ZSxcbiAgICogb3RoZXJ3aXNlIHRoZSBzd2F0Y2ggcmVhbCBjb2xvciB2YWx1ZSB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBuYW1lc0FzVmFsdWVzOiB0cnVlXG59O1xuXG4vKipcbiAqIFBhbGV0dGUgZXh0ZW5zaW9uXG4gKiBAaWdub3JlXG4gKi9cblxudmFyIFBhbGV0dGUgPSBmdW5jdGlvbiAoX0V4dGVuc2lvbikge1xuICBfaW5oZXJpdHMoUGFsZXR0ZSwgX0V4dGVuc2lvbik7XG5cbiAgX2NyZWF0ZUNsYXNzKFBhbGV0dGUsIFt7XG4gICAga2V5OiAnY29sb3JzJyxcblxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge09iamVjdHxBcnJheX1cbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JzO1xuICAgIH1cbiAgfV0pO1xuXG4gIGZ1bmN0aW9uIFBhbGV0dGUoY29sb3JwaWNrZXIpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGFsZXR0ZSk7XG5cbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUGFsZXR0ZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFBhbGV0dGUpKS5jYWxsKHRoaXMsIGNvbG9ycGlja2VyLCBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdHMsIG9wdGlvbnMpKSk7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoX3RoaXMub3B0aW9ucy5jb2xvcnMpICYmIF90eXBlb2YoX3RoaXMub3B0aW9ucy5jb2xvcnMpICE9PSAnb2JqZWN0Jykge1xuICAgICAgX3RoaXMub3B0aW9ucy5jb2xvcnMgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2ludH1cbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoUGFsZXR0ZSwgW3tcbiAgICBrZXk6ICdnZXRMZW5ndGgnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRMZW5ndGgoKSB7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5jb2xvcnMpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5jb2xvcnMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sb3JzLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKF90eXBlb2YodGhpcy5vcHRpb25zLmNvbG9ycykgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMuY29sb3JzKS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3Jlc29sdmVDb2xvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc29sdmVDb2xvcihjb2xvcikge1xuICAgICAgdmFyIHJlYWxDb2xvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuZ2V0TGVuZ3RoKCkgPD0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIEFycmF5IG9mIGNvbG9yc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmNvbG9ycykpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xvcnMuaW5kZXhPZihjb2xvcikgPj0gMCkge1xuICAgICAgICAgIHJldHVybiBjb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbG9ycy5pbmRleE9mKGNvbG9yLnRvVXBwZXJDYXNlKCkpID49IDApIHtcbiAgICAgICAgICByZXR1cm4gY29sb3IudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbG9ycy5pbmRleE9mKGNvbG9yLnRvTG93ZXJDYXNlKCkpID49IDApIHtcbiAgICAgICAgICByZXR1cm4gY29sb3IudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChfdHlwZW9mKHRoaXMub3B0aW9ucy5jb2xvcnMpICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hcCBvZiBvYmplY3RzXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5uYW1lc0FzVmFsdWVzIHx8IHJlYWxDb2xvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShjb2xvciwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFtZShjb2xvciwgdGhpcy5nZXROYW1lKCcjJyArIGNvbG9yKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBjb2xvciB2YWx1ZSwgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBjb2xvciBuYW1lIG9yIGRlZmF1bHRWYWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2dldE5hbWUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXROYW1lKHZhbHVlKSB7XG4gICAgICB2YXIgZGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICAgICAgaWYgKCEodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgfHwgIXRoaXMub3B0aW9ucy5jb2xvcnMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vcHRpb25zLmNvbG9ycykge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5jb2xvcnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbG9yc1tuYW1lXS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBjb2xvciBuYW1lLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGNvbG9yIHZhbHVlIG9yIGRlZmF1bHRWYWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAgICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZ2V0VmFsdWUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZShuYW1lKSB7XG4gICAgICB2YXIgZGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICAgICAgaWYgKCEodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB8fCAhdGhpcy5vcHRpb25zLmNvbG9ycykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xvcnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2xvcnNbbmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQYWxldHRlO1xufShfRXh0ZW5zaW9uMy5kZWZhdWx0KTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUGFsZXR0ZTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdFwiYWxpY2VibHVlXCI6IFsyNDAsIDI0OCwgMjU1XSxcclxuXHRcImFudGlxdWV3aGl0ZVwiOiBbMjUwLCAyMzUsIDIxNV0sXHJcblx0XCJhcXVhXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJhcXVhbWFyaW5lXCI6IFsxMjcsIDI1NSwgMjEyXSxcclxuXHRcImF6dXJlXCI6IFsyNDAsIDI1NSwgMjU1XSxcclxuXHRcImJlaWdlXCI6IFsyNDUsIDI0NSwgMjIwXSxcclxuXHRcImJpc3F1ZVwiOiBbMjU1LCAyMjgsIDE5Nl0sXHJcblx0XCJibGFja1wiOiBbMCwgMCwgMF0sXHJcblx0XCJibGFuY2hlZGFsbW9uZFwiOiBbMjU1LCAyMzUsIDIwNV0sXHJcblx0XCJibHVlXCI6IFswLCAwLCAyNTVdLFxyXG5cdFwiYmx1ZXZpb2xldFwiOiBbMTM4LCA0MywgMjI2XSxcclxuXHRcImJyb3duXCI6IFsxNjUsIDQyLCA0Ml0sXHJcblx0XCJidXJseXdvb2RcIjogWzIyMiwgMTg0LCAxMzVdLFxyXG5cdFwiY2FkZXRibHVlXCI6IFs5NSwgMTU4LCAxNjBdLFxyXG5cdFwiY2hhcnRyZXVzZVwiOiBbMTI3LCAyNTUsIDBdLFxyXG5cdFwiY2hvY29sYXRlXCI6IFsyMTAsIDEwNSwgMzBdLFxyXG5cdFwiY29yYWxcIjogWzI1NSwgMTI3LCA4MF0sXHJcblx0XCJjb3JuZmxvd2VyYmx1ZVwiOiBbMTAwLCAxNDksIDIzN10sXHJcblx0XCJjb3Juc2lsa1wiOiBbMjU1LCAyNDgsIDIyMF0sXHJcblx0XCJjcmltc29uXCI6IFsyMjAsIDIwLCA2MF0sXHJcblx0XCJjeWFuXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJkYXJrYmx1ZVwiOiBbMCwgMCwgMTM5XSxcclxuXHRcImRhcmtjeWFuXCI6IFswLCAxMzksIDEzOV0sXHJcblx0XCJkYXJrZ29sZGVucm9kXCI6IFsxODQsIDEzNCwgMTFdLFxyXG5cdFwiZGFya2dyYXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2dyZWVuXCI6IFswLCAxMDAsIDBdLFxyXG5cdFwiZGFya2dyZXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2toYWtpXCI6IFsxODksIDE4MywgMTA3XSxcclxuXHRcImRhcmttYWdlbnRhXCI6IFsxMzksIDAsIDEzOV0sXHJcblx0XCJkYXJrb2xpdmVncmVlblwiOiBbODUsIDEwNywgNDddLFxyXG5cdFwiZGFya29yYW5nZVwiOiBbMjU1LCAxNDAsIDBdLFxyXG5cdFwiZGFya29yY2hpZFwiOiBbMTUzLCA1MCwgMjA0XSxcclxuXHRcImRhcmtyZWRcIjogWzEzOSwgMCwgMF0sXHJcblx0XCJkYXJrc2FsbW9uXCI6IFsyMzMsIDE1MCwgMTIyXSxcclxuXHRcImRhcmtzZWFncmVlblwiOiBbMTQzLCAxODgsIDE0M10sXHJcblx0XCJkYXJrc2xhdGVibHVlXCI6IFs3MiwgNjEsIDEzOV0sXHJcblx0XCJkYXJrc2xhdGVncmF5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LCA3OSwgNzldLFxyXG5cdFwiZGFya3R1cnF1b2lzZVwiOiBbMCwgMjA2LCAyMDldLFxyXG5cdFwiZGFya3Zpb2xldFwiOiBbMTQ4LCAwLCAyMTFdLFxyXG5cdFwiZGVlcHBpbmtcIjogWzI1NSwgMjAsIDE0N10sXHJcblx0XCJkZWVwc2t5Ymx1ZVwiOiBbMCwgMTkxLCAyNTVdLFxyXG5cdFwiZGltZ3JheVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkaW1ncmV5XCI6IFsxMDUsIDEwNSwgMTA1XSxcclxuXHRcImRvZGdlcmJsdWVcIjogWzMwLCAxNDQsIDI1NV0sXHJcblx0XCJmaXJlYnJpY2tcIjogWzE3OCwgMzQsIDM0XSxcclxuXHRcImZsb3JhbHdoaXRlXCI6IFsyNTUsIDI1MCwgMjQwXSxcclxuXHRcImZvcmVzdGdyZWVuXCI6IFszNCwgMTM5LCAzNF0sXHJcblx0XCJmdWNoc2lhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJnYWluc2Jvcm9cIjogWzIyMCwgMjIwLCAyMjBdLFxyXG5cdFwiZ2hvc3R3aGl0ZVwiOiBbMjQ4LCAyNDgsIDI1NV0sXHJcblx0XCJnb2xkXCI6IFsyNTUsIDIxNSwgMF0sXHJcblx0XCJnb2xkZW5yb2RcIjogWzIxOCwgMTY1LCAzMl0sXHJcblx0XCJncmF5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImdyZWVuXCI6IFswLCAxMjgsIDBdLFxyXG5cdFwiZ3JlZW55ZWxsb3dcIjogWzE3MywgMjU1LCA0N10sXHJcblx0XCJncmV5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImhvbmV5ZGV3XCI6IFsyNDAsIDI1NSwgMjQwXSxcclxuXHRcImhvdHBpbmtcIjogWzI1NSwgMTA1LCAxODBdLFxyXG5cdFwiaW5kaWFucmVkXCI6IFsyMDUsIDkyLCA5Ml0sXHJcblx0XCJpbmRpZ29cIjogWzc1LCAwLCAxMzBdLFxyXG5cdFwiaXZvcnlcIjogWzI1NSwgMjU1LCAyNDBdLFxyXG5cdFwia2hha2lcIjogWzI0MCwgMjMwLCAxNDBdLFxyXG5cdFwibGF2ZW5kZXJcIjogWzIzMCwgMjMwLCAyNTBdLFxyXG5cdFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LCAyNDAsIDI0NV0sXHJcblx0XCJsYXduZ3JlZW5cIjogWzEyNCwgMjUyLCAwXSxcclxuXHRcImxlbW9uY2hpZmZvblwiOiBbMjU1LCAyNTAsIDIwNV0sXHJcblx0XCJsaWdodGJsdWVcIjogWzE3MywgMjE2LCAyMzBdLFxyXG5cdFwibGlnaHRjb3JhbFwiOiBbMjQwLCAxMjgsIDEyOF0sXHJcblx0XCJsaWdodGN5YW5cIjogWzIyNCwgMjU1LCAyNTVdLFxyXG5cdFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwgMjUwLCAyMTBdLFxyXG5cdFwibGlnaHRncmF5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0Z3JlZW5cIjogWzE0NCwgMjM4LCAxNDRdLFxyXG5cdFwibGlnaHRncmV5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0cGlua1wiOiBbMjU1LCAxODIsIDE5M10sXHJcblx0XCJsaWdodHNhbG1vblwiOiBbMjU1LCAxNjAsIDEyMl0sXHJcblx0XCJsaWdodHNlYWdyZWVuXCI6IFszMiwgMTc4LCAxNzBdLFxyXG5cdFwibGlnaHRza3libHVlXCI6IFsxMzUsIDIwNiwgMjUwXSxcclxuXHRcImxpZ2h0c2xhdGVncmF5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c3RlZWxibHVlXCI6IFsxNzYsIDE5NiwgMjIyXSxcclxuXHRcImxpZ2h0eWVsbG93XCI6IFsyNTUsIDI1NSwgMjI0XSxcclxuXHRcImxpbWVcIjogWzAsIDI1NSwgMF0sXHJcblx0XCJsaW1lZ3JlZW5cIjogWzUwLCAyMDUsIDUwXSxcclxuXHRcImxpbmVuXCI6IFsyNTAsIDI0MCwgMjMwXSxcclxuXHRcIm1hZ2VudGFcIjogWzI1NSwgMCwgMjU1XSxcclxuXHRcIm1hcm9vblwiOiBbMTI4LCAwLCAwXSxcclxuXHRcIm1lZGl1bWFxdWFtYXJpbmVcIjogWzEwMiwgMjA1LCAxNzBdLFxyXG5cdFwibWVkaXVtYmx1ZVwiOiBbMCwgMCwgMjA1XSxcclxuXHRcIm1lZGl1bW9yY2hpZFwiOiBbMTg2LCA4NSwgMjExXSxcclxuXHRcIm1lZGl1bXB1cnBsZVwiOiBbMTQ3LCAxMTIsIDIxOV0sXHJcblx0XCJtZWRpdW1zZWFncmVlblwiOiBbNjAsIDE3OSwgMTEzXSxcclxuXHRcIm1lZGl1bXNsYXRlYmx1ZVwiOiBbMTIzLCAxMDQsIDIzOF0sXHJcblx0XCJtZWRpdW1zcHJpbmdncmVlblwiOiBbMCwgMjUwLCAxNTRdLFxyXG5cdFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwgMjA5LCAyMDRdLFxyXG5cdFwibWVkaXVtdmlvbGV0cmVkXCI6IFsxOTksIDIxLCAxMzNdLFxyXG5cdFwibWlkbmlnaHRibHVlXCI6IFsyNSwgMjUsIDExMl0sXHJcblx0XCJtaW50Y3JlYW1cIjogWzI0NSwgMjU1LCAyNTBdLFxyXG5cdFwibWlzdHlyb3NlXCI6IFsyNTUsIDIyOCwgMjI1XSxcclxuXHRcIm1vY2Nhc2luXCI6IFsyNTUsIDIyOCwgMTgxXSxcclxuXHRcIm5hdmFqb3doaXRlXCI6IFsyNTUsIDIyMiwgMTczXSxcclxuXHRcIm5hdnlcIjogWzAsIDAsIDEyOF0sXHJcblx0XCJvbGRsYWNlXCI6IFsyNTMsIDI0NSwgMjMwXSxcclxuXHRcIm9saXZlXCI6IFsxMjgsIDEyOCwgMF0sXHJcblx0XCJvbGl2ZWRyYWJcIjogWzEwNywgMTQyLCAzNV0sXHJcblx0XCJvcmFuZ2VcIjogWzI1NSwgMTY1LCAwXSxcclxuXHRcIm9yYW5nZXJlZFwiOiBbMjU1LCA2OSwgMF0sXHJcblx0XCJvcmNoaWRcIjogWzIxOCwgMTEyLCAyMTRdLFxyXG5cdFwicGFsZWdvbGRlbnJvZFwiOiBbMjM4LCAyMzIsIDE3MF0sXHJcblx0XCJwYWxlZ3JlZW5cIjogWzE1MiwgMjUxLCAxNTJdLFxyXG5cdFwicGFsZXR1cnF1b2lzZVwiOiBbMTc1LCAyMzgsIDIzOF0sXHJcblx0XCJwYWxldmlvbGV0cmVkXCI6IFsyMTksIDExMiwgMTQ3XSxcclxuXHRcInBhcGF5YXdoaXBcIjogWzI1NSwgMjM5LCAyMTNdLFxyXG5cdFwicGVhY2hwdWZmXCI6IFsyNTUsIDIxOCwgMTg1XSxcclxuXHRcInBlcnVcIjogWzIwNSwgMTMzLCA2M10sXHJcblx0XCJwaW5rXCI6IFsyNTUsIDE5MiwgMjAzXSxcclxuXHRcInBsdW1cIjogWzIyMSwgMTYwLCAyMjFdLFxyXG5cdFwicG93ZGVyYmx1ZVwiOiBbMTc2LCAyMjQsIDIzMF0sXHJcblx0XCJwdXJwbGVcIjogWzEyOCwgMCwgMTI4XSxcclxuXHRcInJlYmVjY2FwdXJwbGVcIjogWzEwMiwgNTEsIDE1M10sXHJcblx0XCJyZWRcIjogWzI1NSwgMCwgMF0sXHJcblx0XCJyb3N5YnJvd25cIjogWzE4OCwgMTQzLCAxNDNdLFxyXG5cdFwicm95YWxibHVlXCI6IFs2NSwgMTA1LCAyMjVdLFxyXG5cdFwic2FkZGxlYnJvd25cIjogWzEzOSwgNjksIDE5XSxcclxuXHRcInNhbG1vblwiOiBbMjUwLCAxMjgsIDExNF0sXHJcblx0XCJzYW5keWJyb3duXCI6IFsyNDQsIDE2NCwgOTZdLFxyXG5cdFwic2VhZ3JlZW5cIjogWzQ2LCAxMzksIDg3XSxcclxuXHRcInNlYXNoZWxsXCI6IFsyNTUsIDI0NSwgMjM4XSxcclxuXHRcInNpZW5uYVwiOiBbMTYwLCA4MiwgNDVdLFxyXG5cdFwic2lsdmVyXCI6IFsxOTIsIDE5MiwgMTkyXSxcclxuXHRcInNreWJsdWVcIjogWzEzNSwgMjA2LCAyMzVdLFxyXG5cdFwic2xhdGVibHVlXCI6IFsxMDYsIDkwLCAyMDVdLFxyXG5cdFwic2xhdGVncmF5XCI6IFsxMTIsIDEyOCwgMTQ0XSxcclxuXHRcInNsYXRlZ3JleVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbm93XCI6IFsyNTUsIDI1MCwgMjUwXSxcclxuXHRcInNwcmluZ2dyZWVuXCI6IFswLCAyNTUsIDEyN10sXHJcblx0XCJzdGVlbGJsdWVcIjogWzcwLCAxMzAsIDE4MF0sXHJcblx0XCJ0YW5cIjogWzIxMCwgMTgwLCAxNDBdLFxyXG5cdFwidGVhbFwiOiBbMCwgMTI4LCAxMjhdLFxyXG5cdFwidGhpc3RsZVwiOiBbMjE2LCAxOTEsIDIxNl0sXHJcblx0XCJ0b21hdG9cIjogWzI1NSwgOTksIDcxXSxcclxuXHRcInR1cnF1b2lzZVwiOiBbNjQsIDIyNCwgMjA4XSxcclxuXHRcInZpb2xldFwiOiBbMjM4LCAxMzAsIDIzOF0sXHJcblx0XCJ3aGVhdFwiOiBbMjQ1LCAyMjIsIDE3OV0sXHJcblx0XCJ3aGl0ZVwiOiBbMjU1LCAyNTUsIDI1NV0sXHJcblx0XCJ3aGl0ZXNtb2tlXCI6IFsyNDUsIDI0NSwgMjQ1XSxcclxuXHRcInllbGxvd1wiOiBbMjU1LCAyNTUsIDBdLFxyXG5cdFwieWVsbG93Z3JlZW5cIjogWzE1NCwgMjA1LCA1MF1cclxufTtcclxuXG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vKiBNSVQgbGljZW5zZSAqL1xudmFyIGNzc0tleXdvcmRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxuLy8gTk9URTogY29udmVyc2lvbnMgc2hvdWxkIG9ubHkgcmV0dXJuIHByaW1pdGl2ZSB2YWx1ZXMgKGkuZS4gYXJyYXlzLCBvclxuLy8gICAgICAgdmFsdWVzIHRoYXQgZ2l2ZSBjb3JyZWN0IGB0eXBlb2ZgIHJlc3VsdHMpLlxuLy8gICAgICAgZG8gbm90IHVzZSBib3ggdmFsdWVzIHR5cGVzIChpLmUuIE51bWJlcigpLCBTdHJpbmcoKSwgZXRjLilcblxudmFyIHJldmVyc2VLZXl3b3JkcyA9IHt9O1xuZm9yICh2YXIga2V5IGluIGNzc0tleXdvcmRzKSB7XG5cdGlmIChjc3NLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0cmV2ZXJzZUtleXdvcmRzW2Nzc0tleXdvcmRzW2tleV1dID0ga2V5O1xuXHR9XG59XG5cbnZhciBjb252ZXJ0ID0gbW9kdWxlLmV4cG9ydHMgPSB7XG5cdHJnYjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdyZ2InfSxcblx0aHNsOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2hzbCd9LFxuXHRoc3Y6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHN2J30sXG5cdGh3Yjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdod2InfSxcblx0Y215azoge2NoYW5uZWxzOiA0LCBsYWJlbHM6ICdjbXlrJ30sXG5cdHh5ejoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICd4eXonfSxcblx0bGFiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2xhYid9LFxuXHRsY2g6IHtjaGFubmVsczogMywgbGFiZWxzOiAnbGNoJ30sXG5cdGhleDoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnaGV4J119LFxuXHRrZXl3b3JkOiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydrZXl3b3JkJ119LFxuXHRhbnNpMTY6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2Fuc2kxNiddfSxcblx0YW5zaTI1Njoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnYW5zaTI1NiddfSxcblx0aGNnOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogWydoJywgJ2MnLCAnZyddfSxcblx0YXBwbGU6IHtjaGFubmVsczogMywgbGFiZWxzOiBbJ3IxNicsICdnMTYnLCAnYjE2J119LFxuXHRncmF5OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydncmF5J119XG59O1xuXG4vLyBoaWRlIC5jaGFubmVscyBhbmQgLmxhYmVscyBwcm9wZXJ0aWVzXG5mb3IgKHZhciBtb2RlbCBpbiBjb252ZXJ0KSB7XG5cdGlmIChjb252ZXJ0Lmhhc093blByb3BlcnR5KG1vZGVsKSkge1xuXHRcdGlmICghKCdjaGFubmVscycgaW4gY29udmVydFttb2RlbF0pKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCEoJ2xhYmVscycgaW4gY29udmVydFttb2RlbF0pKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbCBsYWJlbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnZlcnRbbW9kZWxdLmxhYmVscy5sZW5ndGggIT09IGNvbnZlcnRbbW9kZWxdLmNoYW5uZWxzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NoYW5uZWwgYW5kIGxhYmVsIGNvdW50cyBtaXNtYXRjaDogJyArIG1vZGVsKTtcblx0XHR9XG5cblx0XHR2YXIgY2hhbm5lbHMgPSBjb252ZXJ0W21vZGVsXS5jaGFubmVscztcblx0XHR2YXIgbGFiZWxzID0gY29udmVydFttb2RlbF0ubGFiZWxzO1xuXHRcdGRlbGV0ZSBjb252ZXJ0W21vZGVsXS5jaGFubmVscztcblx0XHRkZWxldGUgY29udmVydFttb2RlbF0ubGFiZWxzO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W21vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjaGFubmVsc30pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W21vZGVsXSwgJ2xhYmVscycsIHt2YWx1ZTogbGFiZWxzfSk7XG5cdH1cbn1cblxuY29udmVydC5yZ2IuaHNsID0gZnVuY3Rpb24gKHJnYikge1xuXHR2YXIgciA9IHJnYlswXSAvIDI1NTtcblx0dmFyIGcgPSByZ2JbMV0gLyAyNTU7XG5cdHZhciBiID0gcmdiWzJdIC8gMjU1O1xuXHR2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XG5cdHZhciBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcblx0dmFyIGRlbHRhID0gbWF4IC0gbWluO1xuXHR2YXIgaDtcblx0dmFyIHM7XG5cdHZhciBsO1xuXG5cdGlmIChtYXggPT09IG1pbikge1xuXHRcdGggPSAwO1xuXHR9IGVsc2UgaWYgKHIgPT09IG1heCkge1xuXHRcdGggPSAoZyAtIGIpIC8gZGVsdGE7XG5cdH0gZWxzZSBpZiAoZyA9PT0gbWF4KSB7XG5cdFx0aCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG5cdH0gZWxzZSBpZiAoYiA9PT0gbWF4KSB7XG5cdFx0aCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG5cdH1cblxuXHRoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApO1xuXG5cdGlmIChoIDwgMCkge1xuXHRcdGggKz0gMzYwO1xuXHR9XG5cblx0bCA9IChtaW4gKyBtYXgpIC8gMjtcblxuXHRpZiAobWF4ID09PSBtaW4pIHtcblx0XHRzID0gMDtcblx0fSBlbHNlIGlmIChsIDw9IDAuNSkge1xuXHRcdHMgPSBkZWx0YSAvIChtYXggKyBtaW4pO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSBkZWx0YSAvICgyIC0gbWF4IC0gbWluKTtcblx0fVxuXG5cdHJldHVybiBbaCwgcyAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5oc3YgPSBmdW5jdGlvbiAocmdiKSB7XG5cdHZhciByZGlmO1xuXHR2YXIgZ2RpZjtcblx0dmFyIGJkaWY7XG5cdHZhciBoO1xuXHR2YXIgcztcblxuXHR2YXIgciA9IHJnYlswXSAvIDI1NTtcblx0dmFyIGcgPSByZ2JbMV0gLyAyNTU7XG5cdHZhciBiID0gcmdiWzJdIC8gMjU1O1xuXHR2YXIgdiA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXHR2YXIgZGlmZiA9IHYgLSBNYXRoLm1pbihyLCBnLCBiKTtcblx0dmFyIGRpZmZjID0gZnVuY3Rpb24gKGMpIHtcblx0XHRyZXR1cm4gKHYgLSBjKSAvIDYgLyBkaWZmICsgMSAvIDI7XG5cdH07XG5cblx0aWYgKGRpZmYgPT09IDApIHtcblx0XHRoID0gcyA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IGRpZmYgLyB2O1xuXHRcdHJkaWYgPSBkaWZmYyhyKTtcblx0XHRnZGlmID0gZGlmZmMoZyk7XG5cdFx0YmRpZiA9IGRpZmZjKGIpO1xuXG5cdFx0aWYgKHIgPT09IHYpIHtcblx0XHRcdGggPSBiZGlmIC0gZ2RpZjtcblx0XHR9IGVsc2UgaWYgKGcgPT09IHYpIHtcblx0XHRcdGggPSAoMSAvIDMpICsgcmRpZiAtIGJkaWY7XG5cdFx0fSBlbHNlIGlmIChiID09PSB2KSB7XG5cdFx0XHRoID0gKDIgLyAzKSArIGdkaWYgLSByZGlmO1xuXHRcdH1cblx0XHRpZiAoaCA8IDApIHtcblx0XHRcdGggKz0gMTtcblx0XHR9IGVsc2UgaWYgKGggPiAxKSB7XG5cdFx0XHRoIC09IDE7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFtcblx0XHRoICogMzYwLFxuXHRcdHMgKiAxMDAsXG5cdFx0diAqIDEwMFxuXHRdO1xufTtcblxuY29udmVydC5yZ2IuaHdiID0gZnVuY3Rpb24gKHJnYikge1xuXHR2YXIgciA9IHJnYlswXTtcblx0dmFyIGcgPSByZ2JbMV07XG5cdHZhciBiID0gcmdiWzJdO1xuXHR2YXIgaCA9IGNvbnZlcnQucmdiLmhzbChyZ2IpWzBdO1xuXHR2YXIgdyA9IDEgLyAyNTUgKiBNYXRoLm1pbihyLCBNYXRoLm1pbihnLCBiKSk7XG5cblx0YiA9IDEgLSAxIC8gMjU1ICogTWF0aC5tYXgociwgTWF0aC5tYXgoZywgYikpO1xuXG5cdHJldHVybiBbaCwgdyAqIDEwMCwgYiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5jbXlrID0gZnVuY3Rpb24gKHJnYikge1xuXHR2YXIgciA9IHJnYlswXSAvIDI1NTtcblx0dmFyIGcgPSByZ2JbMV0gLyAyNTU7XG5cdHZhciBiID0gcmdiWzJdIC8gMjU1O1xuXHR2YXIgYztcblx0dmFyIG07XG5cdHZhciB5O1xuXHR2YXIgaztcblxuXHRrID0gTWF0aC5taW4oMSAtIHIsIDEgLSBnLCAxIC0gYik7XG5cdGMgPSAoMSAtIHIgLSBrKSAvICgxIC0gaykgfHwgMDtcblx0bSA9ICgxIC0gZyAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXHR5ID0gKDEgLSBiIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cblx0cmV0dXJuIFtjICogMTAwLCBtICogMTAwLCB5ICogMTAwLCBrICogMTAwXTtcbn07XG5cbi8qKlxuICogU2VlIGh0dHBzOi8vZW4ubS53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2Rpc3RhbmNlI1NxdWFyZWRfRXVjbGlkZWFuX2Rpc3RhbmNlXG4gKiAqL1xuZnVuY3Rpb24gY29tcGFyYXRpdmVEaXN0YW5jZSh4LCB5KSB7XG5cdHJldHVybiAoXG5cdFx0TWF0aC5wb3coeFswXSAtIHlbMF0sIDIpICtcblx0XHRNYXRoLnBvdyh4WzFdIC0geVsxXSwgMikgK1xuXHRcdE1hdGgucG93KHhbMl0gLSB5WzJdLCAyKVxuXHQpO1xufVxuXG5jb252ZXJ0LnJnYi5rZXl3b3JkID0gZnVuY3Rpb24gKHJnYikge1xuXHR2YXIgcmV2ZXJzZWQgPSByZXZlcnNlS2V5d29yZHNbcmdiXTtcblx0aWYgKHJldmVyc2VkKSB7XG5cdFx0cmV0dXJuIHJldmVyc2VkO1xuXHR9XG5cblx0dmFyIGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcblx0dmFyIGN1cnJlbnRDbG9zZXN0S2V5d29yZDtcblxuXHRmb3IgKHZhciBrZXl3b3JkIGluIGNzc0tleXdvcmRzKSB7XG5cdFx0aWYgKGNzc0tleXdvcmRzLmhhc093blByb3BlcnR5KGtleXdvcmQpKSB7XG5cdFx0XHR2YXIgdmFsdWUgPSBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcblxuXHRcdFx0Ly8gQ29tcHV0ZSBjb21wYXJhdGl2ZSBkaXN0YW5jZVxuXHRcdFx0dmFyIGRpc3RhbmNlID0gY29tcGFyYXRpdmVEaXN0YW5jZShyZ2IsIHZhbHVlKTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgaXRzIGxlc3MsIGlmIHNvIHNldCBhcyBjbG9zZXN0XG5cdFx0XHRpZiAoZGlzdGFuY2UgPCBjdXJyZW50Q2xvc2VzdERpc3RhbmNlKSB7XG5cdFx0XHRcdGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcblx0XHRcdFx0Y3VycmVudENsb3Nlc3RLZXl3b3JkID0ga2V5d29yZDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudENsb3Nlc3RLZXl3b3JkO1xufTtcblxuY29udmVydC5rZXl3b3JkLnJnYiA9IGZ1bmN0aW9uIChrZXl3b3JkKSB7XG5cdHJldHVybiBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcbn07XG5cbmNvbnZlcnQucmdiLnh5eiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0dmFyIHIgPSByZ2JbMF0gLyAyNTU7XG5cdHZhciBnID0gcmdiWzFdIC8gMjU1O1xuXHR2YXIgYiA9IHJnYlsyXSAvIDI1NTtcblxuXHQvLyBhc3N1bWUgc1JHQlxuXHRyID0gciA+IDAuMDQwNDUgPyBNYXRoLnBvdygoKHIgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCkgOiAociAvIDEyLjkyKTtcblx0ZyA9IGcgPiAwLjA0MDQ1ID8gTWF0aC5wb3coKChnICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpIDogKGcgLyAxMi45Mik7XG5cdGIgPSBiID4gMC4wNDA0NSA/IE1hdGgucG93KCgoYiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KSA6IChiIC8gMTIuOTIpO1xuXG5cdHZhciB4ID0gKHIgKiAwLjQxMjQpICsgKGcgKiAwLjM1NzYpICsgKGIgKiAwLjE4MDUpO1xuXHR2YXIgeSA9IChyICogMC4yMTI2KSArIChnICogMC43MTUyKSArIChiICogMC4wNzIyKTtcblx0dmFyIHogPSAociAqIDAuMDE5MykgKyAoZyAqIDAuMTE5MikgKyAoYiAqIDAuOTUwNSk7XG5cblx0cmV0dXJuIFt4ICogMTAwLCB5ICogMTAwLCB6ICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmxhYiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0dmFyIHh5eiA9IGNvbnZlcnQucmdiLnh5eihyZ2IpO1xuXHR2YXIgeCA9IHh5elswXTtcblx0dmFyIHkgPSB4eXpbMV07XG5cdHZhciB6ID0geHl6WzJdO1xuXHR2YXIgbDtcblx0dmFyIGE7XG5cdHZhciBiO1xuXG5cdHggLz0gOTUuMDQ3O1xuXHR5IC89IDEwMDtcblx0eiAvPSAxMDguODgzO1xuXG5cdHggPSB4ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh4LCAxIC8gMykgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG5cdHkgPSB5ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh5LCAxIC8gMykgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG5cdHogPSB6ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh6LCAxIC8gMykgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cblx0bCA9ICgxMTYgKiB5KSAtIDE2O1xuXHRhID0gNTAwICogKHggLSB5KTtcblx0YiA9IDIwMCAqICh5IC0geik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQuaHNsLnJnYiA9IGZ1bmN0aW9uIChoc2wpIHtcblx0dmFyIGggPSBoc2xbMF0gLyAzNjA7XG5cdHZhciBzID0gaHNsWzFdIC8gMTAwO1xuXHR2YXIgbCA9IGhzbFsyXSAvIDEwMDtcblx0dmFyIHQxO1xuXHR2YXIgdDI7XG5cdHZhciB0Mztcblx0dmFyIHJnYjtcblx0dmFyIHZhbDtcblxuXHRpZiAocyA9PT0gMCkge1xuXHRcdHZhbCA9IGwgKiAyNTU7XG5cdFx0cmV0dXJuIFt2YWwsIHZhbCwgdmFsXTtcblx0fVxuXG5cdGlmIChsIDwgMC41KSB7XG5cdFx0dDIgPSBsICogKDEgKyBzKTtcblx0fSBlbHNlIHtcblx0XHR0MiA9IGwgKyBzIC0gbCAqIHM7XG5cdH1cblxuXHR0MSA9IDIgKiBsIC0gdDI7XG5cblx0cmdiID0gWzAsIDAsIDBdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuXHRcdHQzID0gaCArIDEgLyAzICogLShpIC0gMSk7XG5cdFx0aWYgKHQzIDwgMCkge1xuXHRcdFx0dDMrKztcblx0XHR9XG5cdFx0aWYgKHQzID4gMSkge1xuXHRcdFx0dDMtLTtcblx0XHR9XG5cblx0XHRpZiAoNiAqIHQzIDwgMSkge1xuXHRcdFx0dmFsID0gdDEgKyAodDIgLSB0MSkgKiA2ICogdDM7XG5cdFx0fSBlbHNlIGlmICgyICogdDMgPCAxKSB7XG5cdFx0XHR2YWwgPSB0Mjtcblx0XHR9IGVsc2UgaWYgKDMgKiB0MyA8IDIpIHtcblx0XHRcdHZhbCA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDMpICogNjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsID0gdDE7XG5cdFx0fVxuXG5cdFx0cmdiW2ldID0gdmFsICogMjU1O1xuXHR9XG5cblx0cmV0dXJuIHJnYjtcbn07XG5cbmNvbnZlcnQuaHNsLmhzdiA9IGZ1bmN0aW9uIChoc2wpIHtcblx0dmFyIGggPSBoc2xbMF07XG5cdHZhciBzID0gaHNsWzFdIC8gMTAwO1xuXHR2YXIgbCA9IGhzbFsyXSAvIDEwMDtcblx0dmFyIHNtaW4gPSBzO1xuXHR2YXIgbG1pbiA9IE1hdGgubWF4KGwsIDAuMDEpO1xuXHR2YXIgc3Y7XG5cdHZhciB2O1xuXG5cdGwgKj0gMjtcblx0cyAqPSAobCA8PSAxKSA/IGwgOiAyIC0gbDtcblx0c21pbiAqPSBsbWluIDw9IDEgPyBsbWluIDogMiAtIGxtaW47XG5cdHYgPSAobCArIHMpIC8gMjtcblx0c3YgPSBsID09PSAwID8gKDIgKiBzbWluKSAvIChsbWluICsgc21pbikgOiAoMiAqIHMpIC8gKGwgKyBzKTtcblxuXHRyZXR1cm4gW2gsIHN2ICogMTAwLCB2ICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHN2LnJnYiA9IGZ1bmN0aW9uIChoc3YpIHtcblx0dmFyIGggPSBoc3ZbMF0gLyA2MDtcblx0dmFyIHMgPSBoc3ZbMV0gLyAxMDA7XG5cdHZhciB2ID0gaHN2WzJdIC8gMTAwO1xuXHR2YXIgaGkgPSBNYXRoLmZsb29yKGgpICUgNjtcblxuXHR2YXIgZiA9IGggLSBNYXRoLmZsb29yKGgpO1xuXHR2YXIgcCA9IDI1NSAqIHYgKiAoMSAtIHMpO1xuXHR2YXIgcSA9IDI1NSAqIHYgKiAoMSAtIChzICogZikpO1xuXHR2YXIgdCA9IDI1NSAqIHYgKiAoMSAtIChzICogKDEgLSBmKSkpO1xuXHR2ICo9IDI1NTtcblxuXHRzd2l0Y2ggKGhpKSB7XG5cdFx0Y2FzZSAwOlxuXHRcdFx0cmV0dXJuIFt2LCB0LCBwXTtcblx0XHRjYXNlIDE6XG5cdFx0XHRyZXR1cm4gW3EsIHYsIHBdO1xuXHRcdGNhc2UgMjpcblx0XHRcdHJldHVybiBbcCwgdiwgdF07XG5cdFx0Y2FzZSAzOlxuXHRcdFx0cmV0dXJuIFtwLCBxLCB2XTtcblx0XHRjYXNlIDQ6XG5cdFx0XHRyZXR1cm4gW3QsIHAsIHZdO1xuXHRcdGNhc2UgNTpcblx0XHRcdHJldHVybiBbdiwgcCwgcV07XG5cdH1cbn07XG5cbmNvbnZlcnQuaHN2LmhzbCA9IGZ1bmN0aW9uIChoc3YpIHtcblx0dmFyIGggPSBoc3ZbMF07XG5cdHZhciBzID0gaHN2WzFdIC8gMTAwO1xuXHR2YXIgdiA9IGhzdlsyXSAvIDEwMDtcblx0dmFyIHZtaW4gPSBNYXRoLm1heCh2LCAwLjAxKTtcblx0dmFyIGxtaW47XG5cdHZhciBzbDtcblx0dmFyIGw7XG5cblx0bCA9ICgyIC0gcykgKiB2O1xuXHRsbWluID0gKDIgLSBzKSAqIHZtaW47XG5cdHNsID0gcyAqIHZtaW47XG5cdHNsIC89IChsbWluIDw9IDEpID8gbG1pbiA6IDIgLSBsbWluO1xuXHRzbCA9IHNsIHx8IDA7XG5cdGwgLz0gMjtcblxuXHRyZXR1cm4gW2gsIHNsICogMTAwLCBsICogMTAwXTtcbn07XG5cbi8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1jb2xvci8jaHdiLXRvLXJnYlxuY29udmVydC5od2IucmdiID0gZnVuY3Rpb24gKGh3Yikge1xuXHR2YXIgaCA9IGh3YlswXSAvIDM2MDtcblx0dmFyIHdoID0gaHdiWzFdIC8gMTAwO1xuXHR2YXIgYmwgPSBod2JbMl0gLyAxMDA7XG5cdHZhciByYXRpbyA9IHdoICsgYmw7XG5cdHZhciBpO1xuXHR2YXIgdjtcblx0dmFyIGY7XG5cdHZhciBuO1xuXG5cdC8vIHdoICsgYmwgY2FudCBiZSA+IDFcblx0aWYgKHJhdGlvID4gMSkge1xuXHRcdHdoIC89IHJhdGlvO1xuXHRcdGJsIC89IHJhdGlvO1xuXHR9XG5cblx0aSA9IE1hdGguZmxvb3IoNiAqIGgpO1xuXHR2ID0gMSAtIGJsO1xuXHRmID0gNiAqIGggLSBpO1xuXG5cdGlmICgoaSAmIDB4MDEpICE9PSAwKSB7XG5cdFx0ZiA9IDEgLSBmO1xuXHR9XG5cblx0biA9IHdoICsgZiAqICh2IC0gd2gpOyAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvblxuXG5cdHZhciByO1xuXHR2YXIgZztcblx0dmFyIGI7XG5cdHN3aXRjaCAoaSkge1xuXHRcdGRlZmF1bHQ6XG5cdFx0Y2FzZSA2OlxuXHRcdGNhc2UgMDogciA9IHY7IGcgPSBuOyBiID0gd2g7IGJyZWFrO1xuXHRcdGNhc2UgMTogciA9IG47IGcgPSB2OyBiID0gd2g7IGJyZWFrO1xuXHRcdGNhc2UgMjogciA9IHdoOyBnID0gdjsgYiA9IG47IGJyZWFrO1xuXHRcdGNhc2UgMzogciA9IHdoOyBnID0gbjsgYiA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgNDogciA9IG47IGcgPSB3aDsgYiA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgNTogciA9IHY7IGcgPSB3aDsgYiA9IG47IGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQuY215ay5yZ2IgPSBmdW5jdGlvbiAoY215aykge1xuXHR2YXIgYyA9IGNteWtbMF0gLyAxMDA7XG5cdHZhciBtID0gY215a1sxXSAvIDEwMDtcblx0dmFyIHkgPSBjbXlrWzJdIC8gMTAwO1xuXHR2YXIgayA9IGNteWtbM10gLyAxMDA7XG5cdHZhciByO1xuXHR2YXIgZztcblx0dmFyIGI7XG5cblx0ciA9IDEgLSBNYXRoLm1pbigxLCBjICogKDEgLSBrKSArIGspO1xuXHRnID0gMSAtIE1hdGgubWluKDEsIG0gKiAoMSAtIGspICsgayk7XG5cdGIgPSAxIC0gTWF0aC5taW4oMSwgeSAqICgxIC0gaykgKyBrKTtcblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC54eXoucmdiID0gZnVuY3Rpb24gKHh5eikge1xuXHR2YXIgeCA9IHh5elswXSAvIDEwMDtcblx0dmFyIHkgPSB4eXpbMV0gLyAxMDA7XG5cdHZhciB6ID0geHl6WzJdIC8gMTAwO1xuXHR2YXIgcjtcblx0dmFyIGc7XG5cdHZhciBiO1xuXG5cdHIgPSAoeCAqIDMuMjQwNikgKyAoeSAqIC0xLjUzNzIpICsgKHogKiAtMC40OTg2KTtcblx0ZyA9ICh4ICogLTAuOTY4OSkgKyAoeSAqIDEuODc1OCkgKyAoeiAqIDAuMDQxNSk7XG5cdGIgPSAoeCAqIDAuMDU1NykgKyAoeSAqIC0wLjIwNDApICsgKHogKiAxLjA1NzApO1xuXG5cdC8vIGFzc3VtZSBzUkdCXG5cdHIgPSByID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogTWF0aC5wb3cociwgMS4wIC8gMi40KSkgLSAwLjA1NSlcblx0XHQ6IHIgKiAxMi45MjtcblxuXHRnID0gZyA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIE1hdGgucG93KGcsIDEuMCAvIDIuNCkpIC0gMC4wNTUpXG5cdFx0OiBnICogMTIuOTI7XG5cblx0YiA9IGIgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiBNYXRoLnBvdyhiLCAxLjAgLyAyLjQpKSAtIDAuMDU1KVxuXHRcdDogYiAqIDEyLjkyO1xuXG5cdHIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByKSwgMSk7XG5cdGcgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBnKSwgMSk7XG5cdGIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBiKSwgMSk7XG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQueHl6LmxhYiA9IGZ1bmN0aW9uICh4eXopIHtcblx0dmFyIHggPSB4eXpbMF07XG5cdHZhciB5ID0geHl6WzFdO1xuXHR2YXIgeiA9IHh5elsyXTtcblx0dmFyIGw7XG5cdHZhciBhO1xuXHR2YXIgYjtcblxuXHR4IC89IDk1LjA0Nztcblx0eSAvPSAxMDA7XG5cdHogLz0gMTA4Ljg4MztcblxuXHR4ID0geCA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeCwgMSAvIDMpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuXHR5ID0geSA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeSwgMSAvIDMpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuXHR6ID0geiA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeiwgMSAvIDMpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG5cdGwgPSAoMTE2ICogeSkgLSAxNjtcblx0YSA9IDUwMCAqICh4IC0geSk7XG5cdGIgPSAyMDAgKiAoeSAtIHopO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LmxhYi54eXogPSBmdW5jdGlvbiAobGFiKSB7XG5cdHZhciBsID0gbGFiWzBdO1xuXHR2YXIgYSA9IGxhYlsxXTtcblx0dmFyIGIgPSBsYWJbMl07XG5cdHZhciB4O1xuXHR2YXIgeTtcblx0dmFyIHo7XG5cblx0eSA9IChsICsgMTYpIC8gMTE2O1xuXHR4ID0gYSAvIDUwMCArIHk7XG5cdHogPSB5IC0gYiAvIDIwMDtcblxuXHR2YXIgeTIgPSBNYXRoLnBvdyh5LCAzKTtcblx0dmFyIHgyID0gTWF0aC5wb3coeCwgMyk7XG5cdHZhciB6MiA9IE1hdGgucG93KHosIDMpO1xuXHR5ID0geTIgPiAwLjAwODg1NiA/IHkyIDogKHkgLSAxNiAvIDExNikgLyA3Ljc4Nztcblx0eCA9IHgyID4gMC4wMDg4NTYgPyB4MiA6ICh4IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cdHogPSB6MiA+IDAuMDA4ODU2ID8gejIgOiAoeiAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXG5cdHggKj0gOTUuMDQ3O1xuXHR5ICo9IDEwMDtcblx0eiAqPSAxMDguODgzO1xuXG5cdHJldHVybiBbeCwgeSwgel07XG59O1xuXG5jb252ZXJ0LmxhYi5sY2ggPSBmdW5jdGlvbiAobGFiKSB7XG5cdHZhciBsID0gbGFiWzBdO1xuXHR2YXIgYSA9IGxhYlsxXTtcblx0dmFyIGIgPSBsYWJbMl07XG5cdHZhciBocjtcblx0dmFyIGg7XG5cdHZhciBjO1xuXG5cdGhyID0gTWF0aC5hdGFuMihiLCBhKTtcblx0aCA9IGhyICogMzYwIC8gMiAvIE1hdGguUEk7XG5cblx0aWYgKGggPCAwKSB7XG5cdFx0aCArPSAzNjA7XG5cdH1cblxuXHRjID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xuXG5cdHJldHVybiBbbCwgYywgaF07XG59O1xuXG5jb252ZXJ0LmxjaC5sYWIgPSBmdW5jdGlvbiAobGNoKSB7XG5cdHZhciBsID0gbGNoWzBdO1xuXHR2YXIgYyA9IGxjaFsxXTtcblx0dmFyIGggPSBsY2hbMl07XG5cdHZhciBhO1xuXHR2YXIgYjtcblx0dmFyIGhyO1xuXG5cdGhyID0gaCAvIDM2MCAqIDIgKiBNYXRoLlBJO1xuXHRhID0gYyAqIE1hdGguY29zKGhyKTtcblx0YiA9IGMgKiBNYXRoLnNpbihocik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmFuc2kxNiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHZhciByID0gYXJnc1swXTtcblx0dmFyIGcgPSBhcmdzWzFdO1xuXHR2YXIgYiA9IGFyZ3NbMl07XG5cdHZhciB2YWx1ZSA9IDEgaW4gYXJndW1lbnRzID8gYXJndW1lbnRzWzFdIDogY29udmVydC5yZ2IuaHN2KGFyZ3MpWzJdOyAvLyBoc3YgLT4gYW5zaTE2IG9wdGltaXphdGlvblxuXG5cdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIDUwKTtcblxuXHRpZiAodmFsdWUgPT09IDApIHtcblx0XHRyZXR1cm4gMzA7XG5cdH1cblxuXHR2YXIgYW5zaSA9IDMwXG5cdFx0KyAoKE1hdGgucm91bmQoYiAvIDI1NSkgPDwgMilcblx0XHR8IChNYXRoLnJvdW5kKGcgLyAyNTUpIDw8IDEpXG5cdFx0fCBNYXRoLnJvdW5kKHIgLyAyNTUpKTtcblxuXHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRhbnNpICs9IDYwO1xuXHR9XG5cblx0cmV0dXJuIGFuc2k7XG59O1xuXG5jb252ZXJ0Lmhzdi5hbnNpMTYgPSBmdW5jdGlvbiAoYXJncykge1xuXHQvLyBvcHRpbWl6YXRpb24gaGVyZTsgd2UgYWxyZWFkeSBrbm93IHRoZSB2YWx1ZSBhbmQgZG9uJ3QgbmVlZCB0byBnZXRcblx0Ly8gaXQgY29udmVydGVkIGZvciB1cy5cblx0cmV0dXJuIGNvbnZlcnQucmdiLmFuc2kxNihjb252ZXJ0Lmhzdi5yZ2IoYXJncyksIGFyZ3NbMl0pO1xufTtcblxuY29udmVydC5yZ2IuYW5zaTI1NiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHZhciByID0gYXJnc1swXTtcblx0dmFyIGcgPSBhcmdzWzFdO1xuXHR2YXIgYiA9IGFyZ3NbMl07XG5cblx0Ly8gd2UgdXNlIHRoZSBleHRlbmRlZCBncmV5c2NhbGUgcGFsZXR0ZSBoZXJlLCB3aXRoIHRoZSBleGNlcHRpb24gb2Zcblx0Ly8gYmxhY2sgYW5kIHdoaXRlLiBub3JtYWwgcGFsZXR0ZSBvbmx5IGhhcyA0IGdyZXlzY2FsZSBzaGFkZXMuXG5cdGlmIChyID09PSBnICYmIGcgPT09IGIpIHtcblx0XHRpZiAociA8IDgpIHtcblx0XHRcdHJldHVybiAxNjtcblx0XHR9XG5cblx0XHRpZiAociA+IDI0OCkge1xuXHRcdFx0cmV0dXJuIDIzMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoKHIgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdH1cblxuXHR2YXIgYW5zaSA9IDE2XG5cdFx0KyAoMzYgKiBNYXRoLnJvdW5kKHIgLyAyNTUgKiA1KSlcblx0XHQrICg2ICogTWF0aC5yb3VuZChnIC8gMjU1ICogNSkpXG5cdFx0KyBNYXRoLnJvdW5kKGIgLyAyNTUgKiA1KTtcblxuXHRyZXR1cm4gYW5zaTtcbn07XG5cbmNvbnZlcnQuYW5zaTE2LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHZhciBjb2xvciA9IGFyZ3MgJSAxMDtcblxuXHQvLyBoYW5kbGUgZ3JleXNjYWxlXG5cdGlmIChjb2xvciA9PT0gMCB8fCBjb2xvciA9PT0gNykge1xuXHRcdGlmIChhcmdzID4gNTApIHtcblx0XHRcdGNvbG9yICs9IDMuNTtcblx0XHR9XG5cblx0XHRjb2xvciA9IGNvbG9yIC8gMTAuNSAqIDI1NTtcblxuXHRcdHJldHVybiBbY29sb3IsIGNvbG9yLCBjb2xvcl07XG5cdH1cblxuXHR2YXIgbXVsdCA9ICh+fihhcmdzID4gNTApICsgMSkgKiAwLjU7XG5cdHZhciByID0gKChjb2xvciAmIDEpICogbXVsdCkgKiAyNTU7XG5cdHZhciBnID0gKCgoY29sb3IgPj4gMSkgJiAxKSAqIG11bHQpICogMjU1O1xuXHR2YXIgYiA9ICgoKGNvbG9yID4+IDIpICYgMSkgKiBtdWx0KSAqIDI1NTtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5hbnNpMjU2LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdC8vIGhhbmRsZSBncmV5c2NhbGVcblx0aWYgKGFyZ3MgPj0gMjMyKSB7XG5cdFx0dmFyIGMgPSAoYXJncyAtIDIzMikgKiAxMCArIDg7XG5cdFx0cmV0dXJuIFtjLCBjLCBjXTtcblx0fVxuXG5cdGFyZ3MgLT0gMTY7XG5cblx0dmFyIHJlbTtcblx0dmFyIHIgPSBNYXRoLmZsb29yKGFyZ3MgLyAzNikgLyA1ICogMjU1O1xuXHR2YXIgZyA9IE1hdGguZmxvb3IoKHJlbSA9IGFyZ3MgJSAzNikgLyA2KSAvIDUgKiAyNTU7XG5cdHZhciBiID0gKHJlbSAlIDYpIC8gNSAqIDI1NTtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5yZ2IuaGV4ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0dmFyIGludGVnZXIgPSAoKE1hdGgucm91bmQoYXJnc1swXSkgJiAweEZGKSA8PCAxNilcblx0XHQrICgoTWF0aC5yb3VuZChhcmdzWzFdKSAmIDB4RkYpIDw8IDgpXG5cdFx0KyAoTWF0aC5yb3VuZChhcmdzWzJdKSAmIDB4RkYpO1xuXG5cdHZhciBzdHJpbmcgPSBpbnRlZ2VyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufTtcblxuY29udmVydC5oZXgucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0dmFyIG1hdGNoID0gYXJncy50b1N0cmluZygxNikubWF0Y2goL1thLWYwLTldezZ9fFthLWYwLTldezN9L2kpO1xuXHRpZiAoIW1hdGNoKSB7XG5cdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0fVxuXG5cdHZhciBjb2xvclN0cmluZyA9IG1hdGNoWzBdO1xuXG5cdGlmIChtYXRjaFswXS5sZW5ndGggPT09IDMpIHtcblx0XHRjb2xvclN0cmluZyA9IGNvbG9yU3RyaW5nLnNwbGl0KCcnKS5tYXAoZnVuY3Rpb24gKGNoYXIpIHtcblx0XHRcdHJldHVybiBjaGFyICsgY2hhcjtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdHZhciBpbnRlZ2VyID0gcGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblx0dmFyIHIgPSAoaW50ZWdlciA+PiAxNikgJiAweEZGO1xuXHR2YXIgZyA9IChpbnRlZ2VyID4+IDgpICYgMHhGRjtcblx0dmFyIGIgPSBpbnRlZ2VyICYgMHhGRjtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5yZ2IuaGNnID0gZnVuY3Rpb24gKHJnYikge1xuXHR2YXIgciA9IHJnYlswXSAvIDI1NTtcblx0dmFyIGcgPSByZ2JbMV0gLyAyNTU7XG5cdHZhciBiID0gcmdiWzJdIC8gMjU1O1xuXHR2YXIgbWF4ID0gTWF0aC5tYXgoTWF0aC5tYXgociwgZyksIGIpO1xuXHR2YXIgbWluID0gTWF0aC5taW4oTWF0aC5taW4ociwgZyksIGIpO1xuXHR2YXIgY2hyb21hID0gKG1heCAtIG1pbik7XG5cdHZhciBncmF5c2NhbGU7XG5cdHZhciBodWU7XG5cblx0aWYgKGNocm9tYSA8IDEpIHtcblx0XHRncmF5c2NhbGUgPSBtaW4gLyAoMSAtIGNocm9tYSk7XG5cdH0gZWxzZSB7XG5cdFx0Z3JheXNjYWxlID0gMDtcblx0fVxuXG5cdGlmIChjaHJvbWEgPD0gMCkge1xuXHRcdGh1ZSA9IDA7XG5cdH0gZWxzZVxuXHRpZiAobWF4ID09PSByKSB7XG5cdFx0aHVlID0gKChnIC0gYikgLyBjaHJvbWEpICUgNjtcblx0fSBlbHNlXG5cdGlmIChtYXggPT09IGcpIHtcblx0XHRodWUgPSAyICsgKGIgLSByKSAvIGNocm9tYTtcblx0fSBlbHNlIHtcblx0XHRodWUgPSA0ICsgKHIgLSBnKSAvIGNocm9tYSArIDQ7XG5cdH1cblxuXHRodWUgLz0gNjtcblx0aHVlICU9IDE7XG5cblx0cmV0dXJuIFtodWUgKiAzNjAsIGNocm9tYSAqIDEwMCwgZ3JheXNjYWxlICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHNsLmhjZyA9IGZ1bmN0aW9uIChoc2wpIHtcblx0dmFyIHMgPSBoc2xbMV0gLyAxMDA7XG5cdHZhciBsID0gaHNsWzJdIC8gMTAwO1xuXHR2YXIgYyA9IDE7XG5cdHZhciBmID0gMDtcblxuXHRpZiAobCA8IDAuNSkge1xuXHRcdGMgPSAyLjAgKiBzICogbDtcblx0fSBlbHNlIHtcblx0XHRjID0gMi4wICogcyAqICgxLjAgLSBsKTtcblx0fVxuXG5cdGlmIChjIDwgMS4wKSB7XG5cdFx0ZiA9IChsIC0gMC41ICogYykgLyAoMS4wIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2hzbFswXSwgYyAqIDEwMCwgZiAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmhzdi5oY2cgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdHZhciBzID0gaHN2WzFdIC8gMTAwO1xuXHR2YXIgdiA9IGhzdlsyXSAvIDEwMDtcblxuXHR2YXIgYyA9IHMgKiB2O1xuXHR2YXIgZiA9IDA7XG5cblx0aWYgKGMgPCAxLjApIHtcblx0XHRmID0gKHYgLSBjKSAvICgxIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2hzdlswXSwgYyAqIDEwMCwgZiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5yZ2IgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdHZhciBoID0gaGNnWzBdIC8gMzYwO1xuXHR2YXIgYyA9IGhjZ1sxXSAvIDEwMDtcblx0dmFyIGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0aWYgKGMgPT09IDAuMCkge1xuXHRcdHJldHVybiBbZyAqIDI1NSwgZyAqIDI1NSwgZyAqIDI1NV07XG5cdH1cblxuXHR2YXIgcHVyZSA9IFswLCAwLCAwXTtcblx0dmFyIGhpID0gKGggJSAxKSAqIDY7XG5cdHZhciB2ID0gaGkgJSAxO1xuXHR2YXIgdyA9IDEgLSB2O1xuXHR2YXIgbWcgPSAwO1xuXG5cdHN3aXRjaCAoTWF0aC5mbG9vcihoaSkpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRwdXJlWzBdID0gMTsgcHVyZVsxXSA9IHY7IHB1cmVbMl0gPSAwOyBicmVhaztcblx0XHRjYXNlIDE6XG5cdFx0XHRwdXJlWzBdID0gdzsgcHVyZVsxXSA9IDE7IHB1cmVbMl0gPSAwOyBicmVhaztcblx0XHRjYXNlIDI6XG5cdFx0XHRwdXJlWzBdID0gMDsgcHVyZVsxXSA9IDE7IHB1cmVbMl0gPSB2OyBicmVhaztcblx0XHRjYXNlIDM6XG5cdFx0XHRwdXJlWzBdID0gMDsgcHVyZVsxXSA9IHc7IHB1cmVbMl0gPSAxOyBicmVhaztcblx0XHRjYXNlIDQ6XG5cdFx0XHRwdXJlWzBdID0gdjsgcHVyZVsxXSA9IDA7IHB1cmVbMl0gPSAxOyBicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cHVyZVswXSA9IDE7IHB1cmVbMV0gPSAwOyBwdXJlWzJdID0gdztcblx0fVxuXG5cdG1nID0gKDEuMCAtIGMpICogZztcblxuXHRyZXR1cm4gW1xuXHRcdChjICogcHVyZVswXSArIG1nKSAqIDI1NSxcblx0XHQoYyAqIHB1cmVbMV0gKyBtZykgKiAyNTUsXG5cdFx0KGMgKiBwdXJlWzJdICsgbWcpICogMjU1XG5cdF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc3YgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdHZhciBjID0gaGNnWzFdIC8gMTAwO1xuXHR2YXIgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHR2YXIgdiA9IGMgKyBnICogKDEuMCAtIGMpO1xuXHR2YXIgZiA9IDA7XG5cblx0aWYgKHYgPiAwLjApIHtcblx0XHRmID0gYyAvIHY7XG5cdH1cblxuXHRyZXR1cm4gW2hjZ1swXSwgZiAqIDEwMCwgdiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc2wgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdHZhciBjID0gaGNnWzFdIC8gMTAwO1xuXHR2YXIgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHR2YXIgbCA9IGcgKiAoMS4wIC0gYykgKyAwLjUgKiBjO1xuXHR2YXIgcyA9IDA7XG5cblx0aWYgKGwgPiAwLjAgJiYgbCA8IDAuNSkge1xuXHRcdHMgPSBjIC8gKDIgKiBsKTtcblx0fSBlbHNlXG5cdGlmIChsID49IDAuNSAmJiBsIDwgMS4wKSB7XG5cdFx0cyA9IGMgLyAoMiAqICgxIC0gbCkpO1xuXHR9XG5cblx0cmV0dXJuIFtoY2dbMF0sIHMgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cuaHdiID0gZnVuY3Rpb24gKGhjZykge1xuXHR2YXIgYyA9IGhjZ1sxXSAvIDEwMDtcblx0dmFyIGcgPSBoY2dbMl0gLyAxMDA7XG5cdHZhciB2ID0gYyArIGcgKiAoMS4wIC0gYyk7XG5cdHJldHVybiBbaGNnWzBdLCAodiAtIGMpICogMTAwLCAoMSAtIHYpICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHdiLmhjZyA9IGZ1bmN0aW9uIChod2IpIHtcblx0dmFyIHcgPSBod2JbMV0gLyAxMDA7XG5cdHZhciBiID0gaHdiWzJdIC8gMTAwO1xuXHR2YXIgdiA9IDEgLSBiO1xuXHR2YXIgYyA9IHYgLSB3O1xuXHR2YXIgZyA9IDA7XG5cblx0aWYgKGMgPCAxKSB7XG5cdFx0ZyA9ICh2IC0gYykgLyAoMSAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtod2JbMF0sIGMgKiAxMDAsIGcgKiAxMDBdO1xufTtcblxuY29udmVydC5hcHBsZS5yZ2IgPSBmdW5jdGlvbiAoYXBwbGUpIHtcblx0cmV0dXJuIFsoYXBwbGVbMF0gLyA2NTUzNSkgKiAyNTUsIChhcHBsZVsxXSAvIDY1NTM1KSAqIDI1NSwgKGFwcGxlWzJdIC8gNjU1MzUpICogMjU1XTtcbn07XG5cbmNvbnZlcnQucmdiLmFwcGxlID0gZnVuY3Rpb24gKHJnYikge1xuXHRyZXR1cm4gWyhyZ2JbMF0gLyAyNTUpICogNjU1MzUsIChyZ2JbMV0gLyAyNTUpICogNjU1MzUsIChyZ2JbMl0gLyAyNTUpICogNjU1MzVdO1xufTtcblxuY29udmVydC5ncmF5LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHJldHVybiBbYXJnc1swXSAvIDEwMCAqIDI1NSwgYXJnc1swXSAvIDEwMCAqIDI1NSwgYXJnc1swXSAvIDEwMCAqIDI1NV07XG59O1xuXG5jb252ZXJ0LmdyYXkuaHNsID0gY29udmVydC5ncmF5LmhzdiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHJldHVybiBbMCwgMCwgYXJnc1swXV07XG59O1xuXG5jb252ZXJ0LmdyYXkuaHdiID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFswLCAxMDAsIGdyYXlbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmNteWsgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gWzAsIDAsIDAsIGdyYXlbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmxhYiA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbZ3JheVswXSwgMCwgMF07XG59O1xuXG5jb252ZXJ0LmdyYXkuaGV4ID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0dmFyIHZhbCA9IE1hdGgucm91bmQoZ3JheVswXSAvIDEwMCAqIDI1NSkgJiAweEZGO1xuXHR2YXIgaW50ZWdlciA9ICh2YWwgPDwgMTYpICsgKHZhbCA8PCA4KSArIHZhbDtcblxuXHR2YXIgc3RyaW5nID0gaW50ZWdlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0cmV0dXJuICcwMDAwMDAnLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn07XG5cbmNvbnZlcnQucmdiLmdyYXkgPSBmdW5jdGlvbiAocmdiKSB7XG5cdHZhciB2YWwgPSAocmdiWzBdICsgcmdiWzFdICsgcmdiWzJdKSAvIDM7XG5cdHJldHVybiBbdmFsIC8gMjU1ICogMTAwXTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9Db2xvcnBpY2tlciA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG5cbnZhciBfQ29sb3JwaWNrZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfQ29sb3JwaWNrZXIpO1xuXG52YXIgX2pxdWVyeSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbnZhciBfanF1ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2pxdWVyeSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBwbHVnaW4gPSAnY29sb3JwaWNrZXInO1xuXG5fanF1ZXJ5Mi5kZWZhdWx0W3BsdWdpbl0gPSBfQ29sb3JwaWNrZXIyLmRlZmF1bHQ7XG5cbi8vIENvbG9ycGlja2VyIGpRdWVyeSBQbHVnaW4gQVBJXG5fanF1ZXJ5Mi5kZWZhdWx0LmZuW3BsdWdpbl0gPSBmdW5jdGlvbiAob3B0aW9uKSB7XG4gIHZhciBmbkFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgaXNTaW5nbGVFbGVtZW50ID0gdGhpcy5sZW5ndGggPT09IDEsXG4gICAgICByZXR1cm5WYWx1ZSA9IG51bGw7XG5cbiAgdmFyICRlbGVtZW50cyA9IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgdmFyICR0aGlzID0gKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMpLFxuICAgICAgICBpbnN0ID0gJHRoaXMuZGF0YShwbHVnaW4pLFxuICAgICAgICBvcHRpb25zID0gKHR5cGVvZiBvcHRpb24gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG9wdGlvbikpID09PSAnb2JqZWN0JyA/IG9wdGlvbiA6IHt9O1xuXG4gICAgLy8gQ3JlYXRlIGluc3RhbmNlIGlmIGRvZXMgbm90IGV4aXN0XG4gICAgaWYgKCFpbnN0KSB7XG4gICAgICBpbnN0ID0gbmV3IF9Db2xvcnBpY2tlcjIuZGVmYXVsdCh0aGlzLCBvcHRpb25zKTtcbiAgICAgICR0aGlzLmRhdGEocGx1Z2luLCBpbnN0KTtcbiAgICB9XG5cbiAgICBpZiAoIWlzU2luZ2xlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVyblZhbHVlID0gJHRoaXM7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChvcHRpb24gPT09ICdjb2xvcnBpY2tlcicpIHtcbiAgICAgICAgLy8gUmV0dXJuIGNvbG9ycGlja2VyIGluc3RhbmNlOiBlLmcuIC5jb2xvcnBpY2tlcignY29sb3JwaWNrZXInKVxuICAgICAgICByZXR1cm5WYWx1ZSA9IGluc3Q7XG4gICAgICB9IGVsc2UgaWYgKF9qcXVlcnkyLmRlZmF1bHQuaXNGdW5jdGlvbihpbnN0W29wdGlvbl0pKSB7XG4gICAgICAgIC8vIFJldHVybiBtZXRob2QgY2FsbCByZXR1cm4gdmFsdWU6IGUuZy4gLmNvbG9ycGlja2VyKCdpc0VuYWJsZWQnKVxuICAgICAgICByZXR1cm5WYWx1ZSA9IGluc3Rbb3B0aW9uXS5hcHBseShpbnN0LCBmbkFyZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV0dXJuIHByb3BlcnR5IHZhbHVlOiBlLmcuIC5jb2xvcnBpY2tlcignZWxlbWVudCcpXG4gICAgICAgIHJldHVyblZhbHVlID0gaW5zdFtvcHRpb25dO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGlzU2luZ2xlRWxlbWVudCA/IHJldHVyblZhbHVlIDogJGVsZW1lbnRzO1xufTtcblxuX2pxdWVyeTIuZGVmYXVsdC5mbltwbHVnaW5dLmNvbnN0cnVjdG9yID0gX0NvbG9ycGlja2VyMi5kZWZhdWx0O1xuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9FeHRlbnNpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuXG52YXIgX0V4dGVuc2lvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9FeHRlbnNpb24pO1xuXG52YXIgX29wdGlvbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG52YXIgX29wdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb3B0aW9ucyk7XG5cbnZhciBfZXh0ZW5zaW9ucyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cbnZhciBfZXh0ZW5zaW9uczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leHRlbnNpb25zKTtcblxudmFyIF9qcXVlcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG52YXIgX2pxdWVyeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qcXVlcnkpO1xuXG52YXIgX1NsaWRlckhhbmRsZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblxudmFyIF9TbGlkZXJIYW5kbGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1NsaWRlckhhbmRsZXIpO1xuXG52YXIgX1BvcHVwSGFuZGxlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xuXG52YXIgX1BvcHVwSGFuZGxlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Qb3B1cEhhbmRsZXIpO1xuXG52YXIgX0lucHV0SGFuZGxlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXG52YXIgX0lucHV0SGFuZGxlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9JbnB1dEhhbmRsZXIpO1xuXG52YXIgX0NvbG9ySGFuZGxlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xuXG52YXIgX0NvbG9ySGFuZGxlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Db2xvckhhbmRsZXIpO1xuXG52YXIgX1BpY2tlckhhbmRsZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcblxudmFyIF9QaWNrZXJIYW5kbGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1BpY2tlckhhbmRsZXIpO1xuXG52YXIgX0FkZG9uSGFuZGxlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG52YXIgX0FkZG9uSGFuZGxlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9BZGRvbkhhbmRsZXIpO1xuXG52YXIgX0NvbG9ySXRlbSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbnZhciBfQ29sb3JJdGVtMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0NvbG9ySXRlbSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBjb2xvclBpY2tlcklkQ291bnRlciA9IDA7XG5cbnZhciByb290ID0gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHVuZGVmaW5lZDsgLy8gd2luZG93XG5cbi8qKlxuICogQ29sb3JwaWNrZXIgd2lkZ2V0IGNsYXNzXG4gKi9cblxudmFyIENvbG9ycGlja2VyID0gZnVuY3Rpb24gKCkge1xuICBfY3JlYXRlQ2xhc3MoQ29sb3JwaWNrZXIsIFt7XG4gICAga2V5OiAnY29sb3InLFxuXG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb2xvciBvYmplY3RcbiAgICAgKlxuICAgICAqIEB0eXBlIHtDb2xvcnxudWxsfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3JIYW5kbGVyLmNvbG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvbG9yIGZvcm1hdFxuICAgICAqXG4gICAgICogQHR5cGUge1N0cmluZ3xudWxsfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdmb3JtYXQnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3JIYW5kbGVyLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXR0ZXIgb2YgdGhlIHBpY2tlciBlbGVtZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7alF1ZXJ5fEhUTUxFbGVtZW50fVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwaWNrZXInLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGlja2VySGFuZGxlci5waWNrZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VyQ3JlYXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBlbGVtZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cblxuICB9XSwgW3tcbiAgICBrZXk6ICdDb2xvcicsXG5cbiAgICAvKipcbiAgICAgKiBDb2xvciBjbGFzc1xuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEB0eXBlIHtDb2xvcn1cbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfQ29sb3JJdGVtMi5kZWZhdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dGVuc2lvbiBjbGFzc1xuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEB0eXBlIHtFeHRlbnNpb259XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ0V4dGVuc2lvbicsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX0V4dGVuc2lvbjIuZGVmYXVsdDtcbiAgICB9XG4gIH1dKTtcblxuICBmdW5jdGlvbiBDb2xvcnBpY2tlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbG9ycGlja2VyKTtcblxuICAgIGNvbG9yUGlja2VySWRDb3VudGVyICs9IDE7XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9ycGlja2VyIGluc3RhbmNlIG51bWJlclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5pZCA9IGNvbG9yUGlja2VySWRDb3VudGVyO1xuXG4gICAgLyoqXG4gICAgICogTGF0ZXN0IGNvbG9ycGlja2VyIGV2ZW50XG4gICAgICpcbiAgICAgKiBAdHlwZSB7e25hbWU6IFN0cmluZywgZTogKn19XG4gICAgICovXG4gICAgdGhpcy5sYXN0RXZlbnQgPSB7XG4gICAgICBhbGlhczogbnVsbCxcbiAgICAgIGU6IG51bGxcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQgdGhhdCB0aGUgY29sb3JwaWNrZXIgaXMgYm91bmQgdG9cbiAgICAgKlxuICAgICAqIEB0eXBlIHsqfGpRdWVyeX1cbiAgICAgKi9cbiAgICB0aGlzLmVsZW1lbnQgPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoZWxlbWVudCkuYWRkQ2xhc3MoJ2NvbG9ycGlja2VyLWVsZW1lbnQnKS5hdHRyKCdkYXRhLWNvbG9ycGlja2VyLWlkJywgdGhpcy5pZCk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7ZGVmYXVsdHN9XG4gICAgICovXG4gICAgdGhpcy5vcHRpb25zID0gX2pxdWVyeTIuZGVmYXVsdC5leHRlbmQodHJ1ZSwge30sIF9vcHRpb25zMi5kZWZhdWx0LCBvcHRpb25zLCB0aGlzLmVsZW1lbnQuZGF0YSgpKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRXh0ZW5zaW9ucyBhZGRlZCB0byB0aGlzIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RXh0ZW5zaW9uW119XG4gICAgICovXG4gICAgdGhpcy5leHRlbnNpb25zID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudCB3aGVyZSB0aGVcbiAgICAgKiBAdHlwZSB7KnxqUXVlcnl9XG4gICAgICovXG4gICAgdGhpcy5jb250YWluZXIgPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyID09PSB0cnVlIHx8IHRoaXMub3B0aW9ucy5jb250YWluZXIgIT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmlubGluZSA9PT0gdHJ1ZSA/IHRoaXMuZWxlbWVudCA6IHRoaXMub3B0aW9ucy5jb250YWluZXI7XG5cbiAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyICE9PSBmYWxzZSA/ICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KSh0aGlzLmNvbnRhaW5lcikgOiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtJbnB1dEhhbmRsZXJ9XG4gICAgICovXG4gICAgdGhpcy5pbnB1dEhhbmRsZXIgPSBuZXcgX0lucHV0SGFuZGxlcjIuZGVmYXVsdCh0aGlzKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Q29sb3JIYW5kbGVyfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JIYW5kbGVyID0gbmV3IF9Db2xvckhhbmRsZXIyLmRlZmF1bHQodGhpcyk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge1NsaWRlckhhbmRsZXJ9XG4gICAgICovXG4gICAgdGhpcy5zbGlkZXJIYW5kbGVyID0gbmV3IF9TbGlkZXJIYW5kbGVyMi5kZWZhdWx0KHRoaXMpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtQb3B1cEhhbmRsZXJ9XG4gICAgICovXG4gICAgdGhpcy5wb3B1cEhhbmRsZXIgPSBuZXcgX1BvcHVwSGFuZGxlcjIuZGVmYXVsdCh0aGlzLCByb290KTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UGlja2VySGFuZGxlcn1cbiAgICAgKi9cbiAgICB0aGlzLnBpY2tlckhhbmRsZXIgPSBuZXcgX1BpY2tlckhhbmRsZXIyLmRlZmF1bHQodGhpcyk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0FkZG9uSGFuZGxlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFkZG9uSGFuZGxlciA9IG5ldyBfQWRkb25IYW5kbGVyMi5kZWZhdWx0KHRoaXMpO1xuXG4gICAgdGhpcy5pbml0KCk7XG5cbiAgICAvLyBFbWl0IGEgY3JlYXRlIGV2ZW50XG4gICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKF9qcXVlcnkyLmRlZmF1bHQucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgLyoqXG4gICAgICAgKiAoQ29sb3JwaWNrZXIpIFdoZW4gdGhlIENvbG9ycGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHRoZSBET00gaXMgcmVhZHkuXG4gICAgICAgKlxuICAgICAgICogQGV2ZW50IENvbG9ycGlja2VyI2NvbG9ycGlja2VyQ3JlYXRlXG4gICAgICAgKi9cbiAgICAgIHRoaXMudHJpZ2dlcignY29sb3JwaWNrZXJDcmVhdGUnKTtcbiAgICB9LCB0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHBsdWdpblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIF9jcmVhdGVDbGFzcyhDb2xvcnBpY2tlciwgW3tcbiAgICBrZXk6ICdpbml0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIC8vIEluaXQgYWRkb25cbiAgICAgIHRoaXMuYWRkb25IYW5kbGVyLmJpbmQoKTtcblxuICAgICAgLy8gSW5pdCBpbnB1dFxuICAgICAgdGhpcy5pbnB1dEhhbmRsZXIuYmluZCgpO1xuXG4gICAgICAvLyBJbml0IGV4dGVuc2lvbnMgKGJlZm9yZSBpbml0aWFsaXppbmcgdGhlIGNvbG9yKVxuICAgICAgdGhpcy5pbml0RXh0ZW5zaW9ucygpO1xuXG4gICAgICAvLyBJbml0IGNvbG9yXG4gICAgICB0aGlzLmNvbG9ySGFuZGxlci5iaW5kKCk7XG5cbiAgICAgIC8vIEluaXQgcGlja2VyXG4gICAgICB0aGlzLnBpY2tlckhhbmRsZXIuYmluZCgpO1xuXG4gICAgICAvLyBJbml0IHNsaWRlcnMgYW5kIHBvcHVwXG4gICAgICB0aGlzLnNsaWRlckhhbmRsZXIuYmluZCgpO1xuICAgICAgdGhpcy5wb3B1cEhhbmRsZXIuYmluZCgpO1xuXG4gICAgICAvLyBJbmplY3QgaW50byB0aGUgRE9NICh0aGlzIG1heSBtYWtlIGl0IHZpc2libGUpXG4gICAgICB0aGlzLnBpY2tlckhhbmRsZXIuYXR0YWNoKCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgY29tcG9uZW50c1xuICAgICAgdGhpcy51cGRhdGUoKTtcblxuICAgICAgaWYgKHRoaXMuaW5wdXRIYW5kbGVyLmlzRGlzYWJsZWQoKSkge1xuICAgICAgICB0aGlzLmRpc2FibGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgcGx1Z2luIGV4dGVuc2lvbnNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpbml0RXh0ZW5zaW9ucycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRFeHRlbnNpb25zKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5leHRlbnNpb25zKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyA9IFtdO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnB1c2goeyBuYW1lOiAnZGVidWdnZXInIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWdpc3RlciBhbmQgaW5zdGFudGlhdGUgZXh0ZW5zaW9uc1xuICAgICAgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlvbiAoZXh0KSB7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyRXh0ZW5zaW9uKENvbG9ycGlja2VyLmV4dGVuc2lvbnNbZXh0Lm5hbWUudG9Mb3dlckNhc2UoKV0sIGV4dC5vcHRpb25zIHx8IHt9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW5kIHJlZ2lzdGVycyB0aGUgZ2l2ZW4gZXh0ZW5zaW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0V4dGVuc2lvbn0gRXh0ZW5zaW9uQ2xhc3MgVGhlIGV4dGVuc2lvbiBjbGFzcyB0byBpbnN0YW50aWF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBFeHRlbnNpb24gY29uZmlndXJhdGlvblxuICAgICAqIEByZXR1cm5zIHtFeHRlbnNpb259XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3JlZ2lzdGVyRXh0ZW5zaW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVnaXN0ZXJFeHRlbnNpb24oRXh0ZW5zaW9uQ2xhc3MpIHtcbiAgICAgIHZhciBjb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgICB2YXIgZXh0ID0gbmV3IEV4dGVuc2lvbkNsYXNzKHRoaXMsIGNvbmZpZyk7XG5cbiAgICAgIHRoaXMuZXh0ZW5zaW9ucy5wdXNoKGV4dCk7XG4gICAgICByZXR1cm4gZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc3Ryb3lzIHRoZSBjdXJyZW50IGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAZmlyZXMgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJEZXN0cm95XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2Rlc3Ryb3knLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdmFyIGNvbG9yID0gdGhpcy5jb2xvcjtcblxuICAgICAgdGhpcy5zbGlkZXJIYW5kbGVyLnVuYmluZCgpO1xuICAgICAgdGhpcy5pbnB1dEhhbmRsZXIudW5iaW5kKCk7XG4gICAgICB0aGlzLnBvcHVwSGFuZGxlci51bmJpbmQoKTtcbiAgICAgIHRoaXMuY29sb3JIYW5kbGVyLnVuYmluZCgpO1xuICAgICAgdGhpcy5hZGRvbkhhbmRsZXIudW5iaW5kKCk7XG4gICAgICB0aGlzLnBpY2tlckhhbmRsZXIudW5iaW5kKCk7XG5cbiAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygnY29sb3JwaWNrZXItZWxlbWVudCcpLnJlbW92ZURhdGEoJ2NvbG9ycGlja2VyJywgJ2NvbG9yJykub2ZmKCcuY29sb3JwaWNrZXInKTtcblxuICAgICAgLyoqXG4gICAgICAgKiAoQ29sb3JwaWNrZXIpIFdoZW4gdGhlIGluc3RhbmNlIGlzIGRlc3Ryb3llZCB3aXRoIGFsbCBldmVudHMgdW5ib3VuZC5cbiAgICAgICAqXG4gICAgICAgKiBAZXZlbnQgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJEZXN0cm95XG4gICAgICAgKi9cbiAgICAgIHRoaXMudHJpZ2dlcignY29sb3JwaWNrZXJEZXN0cm95JywgY29sb3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSBjb2xvcnBpY2tlciB3aWRnZXQgaWYgaGlkZGVuLlxuICAgICAqIElmIHRoZSBjb2xvcnBpY2tlciBpcyBkaXNhYmxlZCB0aGlzIGNhbGwgd2lsbCBiZSBpZ25vcmVkLlxuICAgICAqXG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VyU2hvd1xuICAgICAqIEBwYXJhbSB7RXZlbnR9IFtlXVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzaG93JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdyhlKSB7XG4gICAgICB0aGlzLnBvcHVwSGFuZGxlci5zaG93KGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGVzIHRoZSBjb2xvcnBpY2tlciB3aWRnZXQuXG4gICAgICpcbiAgICAgKiBAZmlyZXMgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJIaWRlXG4gICAgICogQHBhcmFtIHtFdmVudH0gW2VdXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2hpZGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoaWRlKGUpIHtcbiAgICAgIHRoaXMucG9wdXBIYW5kbGVyLmhpZGUoZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgY29sb3JwaWNrZXIgYmV0d2VlbiB2aXNpYmxlIGFuZCBoaWRkZW4uXG4gICAgICpcbiAgICAgKiBAZmlyZXMgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJTaG93XG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VySGlkZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IFtlXVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd0b2dnbGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b2dnbGUoZSkge1xuICAgICAgdGhpcy5wb3B1cEhhbmRsZXIudG9nZ2xlKGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgY29sb3IgdmFsdWUgYXMgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3wqfSBbZGVmYXVsdFZhbHVlXVxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd8Kn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZ2V0VmFsdWUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG5cbiAgICAgIHZhciB2YWwgPSB0aGlzLmNvbG9ySGFuZGxlci5jb2xvcjtcblxuICAgICAgdmFsID0gdmFsIGluc3RhbmNlb2YgX0NvbG9ySXRlbTIuZGVmYXVsdCA/IHZhbCA6IGRlZmF1bHRWYWx1ZTtcblxuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIF9Db2xvckl0ZW0yLmRlZmF1bHQpIHtcbiAgICAgICAgcmV0dXJuIHZhbC5zdHJpbmcodGhpcy5mb3JtYXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIG1hbnVhbGx5XG4gICAgICpcbiAgICAgKiBAZmlyZXMgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJDaGFuZ2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xDb2xvcn0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3NldFZhbHVlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VmFsdWUodmFsKSB7XG4gICAgICBpZiAodGhpcy5pc0Rpc2FibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGNoID0gdGhpcy5jb2xvckhhbmRsZXI7XG5cbiAgICAgIGlmIChjaC5oYXNDb2xvcigpICYmICEhdmFsICYmIGNoLmNvbG9yLmVxdWFscyh2YWwpIHx8ICFjaC5oYXNDb2xvcigpICYmICF2YWwpIHtcbiAgICAgICAgLy8gc2FtZSBjb2xvciBvciBzdGlsbCBlbXB0eVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNoLmNvbG9yID0gdmFsID8gY2guY3JlYXRlQ29sb3IodmFsLCB0aGlzLm9wdGlvbnMuYXV0b0lucHV0RmFsbGJhY2spIDogbnVsbDtcblxuICAgICAgLyoqXG4gICAgICAgKiAoQ29sb3JwaWNrZXIpIFdoZW4gdGhlIGNvbG9yIGlzIHNldCBwcm9ncmFtbWF0aWNhbGx5IHdpdGggc2V0VmFsdWUoKS5cbiAgICAgICAqXG4gICAgICAgKiBAZXZlbnQgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJDaGFuZ2VcbiAgICAgICAqL1xuICAgICAgdGhpcy50cmlnZ2VyKCdjb2xvcnBpY2tlckNoYW5nZScsIGNoLmNvbG9yLCB2YWwpO1xuXG4gICAgICAvLyBmb3JjZSB1cGRhdGUgaWYgY29sb3IgaGFzIGNoYW5nZWQgdG8gZW1wdHlcbiAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgVUkgYW5kIHRoZSBpbnB1dCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIGludGVybmFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VyVXBkYXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3VwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIGlmICh0aGlzLmNvbG9ySGFuZGxlci5oYXNDb2xvcigpKSB7XG4gICAgICAgIHRoaXMuaW5wdXRIYW5kbGVyLnVwZGF0ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2xvckhhbmRsZXIuYXNzdXJlQ29sb3IoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZGRvbkhhbmRsZXIudXBkYXRlKCk7XG4gICAgICB0aGlzLnBpY2tlckhhbmRsZXIudXBkYXRlKCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogKENvbG9ycGlja2VyKSBGaXJlZCB3aGVuIHRoZSB3aWRnZXQgaXMgdXBkYXRlZC5cbiAgICAgICAqXG4gICAgICAgKiBAZXZlbnQgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJVcGRhdGVcbiAgICAgICAqL1xuICAgICAgdGhpcy50cmlnZ2VyKCdjb2xvcnBpY2tlclVwZGF0ZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIHdpZGdldCBhbmQgdGhlIGlucHV0IGlmIGFueVxuICAgICAqXG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VyRW5hYmxlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2VuYWJsZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuYWJsZSgpIHtcbiAgICAgIHRoaXMuaW5wdXRIYW5kbGVyLmVuYWJsZSgpO1xuICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5waWNrZXIucmVtb3ZlQ2xhc3MoJ2NvbG9ycGlja2VyLWRpc2FibGVkJyk7XG5cbiAgICAgIC8qKlxuICAgICAgICogKENvbG9ycGlja2VyKSBXaGVuIHRoZSB3aWRnZXQgaGFzIGJlZW4gZW5hYmxlZC5cbiAgICAgICAqXG4gICAgICAgKiBAZXZlbnQgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJFbmFibGVcbiAgICAgICAqL1xuICAgICAgdGhpcy50cmlnZ2VyKCdjb2xvcnBpY2tlckVuYWJsZScpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIHdpZGdldCBhbmQgdGhlIGlucHV0IGlmIGFueVxuICAgICAqXG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VyRGlzYWJsZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdkaXNhYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIHRoaXMuaW5wdXRIYW5kbGVyLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5waWNrZXIuYWRkQ2xhc3MoJ2NvbG9ycGlja2VyLWRpc2FibGVkJyk7XG5cbiAgICAgIC8qKlxuICAgICAgICogKENvbG9ycGlja2VyKSBXaGVuIHRoZSB3aWRnZXQgaGFzIGJlZW4gZGlzYWJsZWQuXG4gICAgICAgKlxuICAgICAgICogQGV2ZW50IENvbG9ycGlja2VyI2NvbG9ycGlja2VyRGlzYWJsZVxuICAgICAgICovXG4gICAgICB0aGlzLnRyaWdnZXIoJ2NvbG9ycGlja2VyRGlzYWJsZScpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdGFuY2UgaXMgZW5hYmxlZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc0VuYWJsZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0VuYWJsZWQoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNEaXNhYmxlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RhbmNlIGlzIGRpc2FibGVkXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2lzRGlzYWJsZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0Rpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPT09IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYSBDb2xvcnBpY2tlciBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudE5hbWVcbiAgICAgKiBAcGFyYW0gY29sb3JcbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAndHJpZ2dlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRyaWdnZXIoZXZlbnROYW1lKSB7XG4gICAgICB2YXIgY29sb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG4gICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAgICAgIHRoaXMuZWxlbWVudC50cmlnZ2VyKHtcbiAgICAgICAgdHlwZTogZXZlbnROYW1lLFxuICAgICAgICBjb2xvcnBpY2tlcjogdGhpcyxcbiAgICAgICAgY29sb3I6IGNvbG9yID8gY29sb3IgOiB0aGlzLmNvbG9yLFxuICAgICAgICB2YWx1ZTogdmFsdWUgPyB2YWx1ZSA6IHRoaXMuZ2V0VmFsdWUoKVxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENvbG9ycGlja2VyO1xufSgpO1xuXG4vKipcbiAqIENvbG9ycGlja2VyIGV4dGVuc2lvbiBjbGFzc2VzLCBpbmRleGVkIGJ5IGV4dGVuc2lvbiBuYW1lXG4gKlxuICogQHN0YXRpY1xuICogQHR5cGUge09iamVjdH0gYSBtYXAgYmV0d2VlbiB0aGUgZXh0ZW5zaW9uIG5hbWUgYW5kIGl0cyBjbGFzc1xuICovXG5cblxuQ29sb3JwaWNrZXIuZXh0ZW5zaW9ucyA9IF9leHRlbnNpb25zMi5kZWZhdWx0O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBDb2xvcnBpY2tlcjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUGFsZXR0ZSA9IGV4cG9ydHMuU3dhdGNoZXMgPSBleHBvcnRzLlByZXZpZXcgPSBleHBvcnRzLkRlYnVnZ2VyID0gdW5kZWZpbmVkO1xuXG52YXIgX0RlYnVnZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfRGVidWdnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfRGVidWdnZXIpO1xuXG52YXIgX1ByZXZpZXcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblxudmFyIF9QcmV2aWV3MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1ByZXZpZXcpO1xuXG52YXIgX1N3YXRjaGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cbnZhciBfU3dhdGNoZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfU3dhdGNoZXMpO1xuXG52YXIgX1BhbGV0dGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG52YXIgX1BhbGV0dGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfUGFsZXR0ZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuRGVidWdnZXIgPSBfRGVidWdnZXIyLmRlZmF1bHQ7XG5leHBvcnRzLlByZXZpZXcgPSBfUHJldmlldzIuZGVmYXVsdDtcbmV4cG9ydHMuU3dhdGNoZXMgPSBfU3dhdGNoZXMyLmRlZmF1bHQ7XG5leHBvcnRzLlBhbGV0dGUgPSBfUGFsZXR0ZTIuZGVmYXVsdDtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgJ2RlYnVnZ2VyJzogX0RlYnVnZ2VyMi5kZWZhdWx0LFxuICAncHJldmlldyc6IF9QcmV2aWV3Mi5kZWZhdWx0LFxuICAnc3dhdGNoZXMnOiBfU3dhdGNoZXMyLmRlZmF1bHQsXG4gICdwYWxldHRlJzogX1BhbGV0dGUyLmRlZmF1bHRcbn07XG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9O1xuXG52YXIgX0V4dGVuc2lvbjIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuXG52YXIgX0V4dGVuc2lvbjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9FeHRlbnNpb24yKTtcblxudmFyIF9qcXVlcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG52YXIgX2pxdWVyeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qcXVlcnkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbi8qKlxuICogRGVidWdnZXIgZXh0ZW5zaW9uIGNsYXNzXG4gKiBAYWxpYXMgRGVidWdnZXJFeHRlbnNpb25cbiAqIEBpZ25vcmVcbiAqL1xudmFyIERlYnVnZ2VyID0gZnVuY3Rpb24gKF9FeHRlbnNpb24pIHtcbiAgX2luaGVyaXRzKERlYnVnZ2VyLCBfRXh0ZW5zaW9uKTtcblxuICBmdW5jdGlvbiBEZWJ1Z2dlcihjb2xvcnBpY2tlcikge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEZWJ1Z2dlcik7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChEZWJ1Z2dlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKERlYnVnZ2VyKSkuY2FsbCh0aGlzLCBjb2xvcnBpY2tlciwgb3B0aW9ucykpO1xuXG4gICAgX3RoaXMuZXZlbnRDb3VudGVyID0gMDtcbiAgICBpZiAoX3RoaXMuY29sb3JwaWNrZXIuaW5wdXRIYW5kbGVyLmhhc0lucHV0KCkpIHtcbiAgICAgIF90aGlzLmNvbG9ycGlja2VyLmlucHV0SGFuZGxlci5pbnB1dC5vbignY2hhbmdlLmNvbG9ycGlja2VyLWV4dCcsIF9qcXVlcnkyLmRlZmF1bHQucHJveHkoX3RoaXMub25DaGFuZ2VJbnB1dCwgX3RoaXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBmaXJlcyBEZWJ1Z2dlckV4dGVuc2lvbiNjb2xvcnBpY2tlckRlYnVnXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAgICogQHBhcmFtIHsqfSBhcmdzXG4gICAqL1xuXG5cbiAgX2NyZWF0ZUNsYXNzKERlYnVnZ2VyLCBbe1xuICAgIGtleTogJ2xvZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvZyhldmVudE5hbWUpIHtcbiAgICAgIHZhciBfY29uc29sZTtcblxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmV2ZW50Q291bnRlciArPSAxO1xuXG4gICAgICB2YXIgbG9nTWVzc2FnZSA9ICcjJyArIHRoaXMuZXZlbnRDb3VudGVyICsgJzogQ29sb3JwaWNrZXIjJyArIHRoaXMuY29sb3JwaWNrZXIuaWQgKyAnIFsnICsgZXZlbnROYW1lICsgJ10nO1xuXG4gICAgICAoX2NvbnNvbGUgPSBjb25zb2xlKS5kZWJ1Zy5hcHBseShfY29uc29sZSwgW2xvZ01lc3NhZ2VdLmNvbmNhdChhcmdzKSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogV2hlbmV2ZXIgdGhlIGRlYnVnZ2VyIGxvZ3MgYW4gZXZlbnQsIHRoaXMgb3RoZXIgZXZlbnQgaXMgZW1pdHRlZC5cbiAgICAgICAqXG4gICAgICAgKiBAZXZlbnQgRGVidWdnZXJFeHRlbnNpb24jY29sb3JwaWNrZXJEZWJ1Z1xuICAgICAgICogQHR5cGUge29iamVjdH0gVGhlIGV2ZW50IG9iamVjdFxuICAgICAgICogQHByb3BlcnR5IHtDb2xvcnBpY2tlcn0gY29sb3JwaWNrZXIgVGhlIENvbG9ycGlja2VyIGluc3RhbmNlXG4gICAgICAgKiBAcHJvcGVydHkge0NvbG9ySXRlbX0gY29sb3IgVGhlIGNvbG9yIGluc3RhbmNlXG4gICAgICAgKiBAcHJvcGVydHkge3tkZWJ1Z2dlcjogRGVidWdnZXJFeHRlbnNpb24sIGV2ZW50TmFtZTogU3RyaW5nLCBsb2dBcmdzOiBBcnJheSwgbG9nTWVzc2FnZTogU3RyaW5nfX0gZGVidWdcbiAgICAgICAqICBUaGUgZGVidWcgaW5mb1xuICAgICAgICovXG4gICAgICB0aGlzLmNvbG9ycGlja2VyLmVsZW1lbnQudHJpZ2dlcih7XG4gICAgICAgIHR5cGU6ICdjb2xvcnBpY2tlckRlYnVnJyxcbiAgICAgICAgY29sb3JwaWNrZXI6IHRoaXMuY29sb3JwaWNrZXIsXG4gICAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgZGVidWc6IHtcbiAgICAgICAgICBkZWJ1Z2dlcjogdGhpcyxcbiAgICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFtZSxcbiAgICAgICAgICBsb2dBcmdzOiBhcmdzLFxuICAgICAgICAgIGxvZ01lc3NhZ2U6IGxvZ01lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVzb2x2ZUNvbG9yJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzb2x2ZUNvbG9yKGNvbG9yKSB7XG4gICAgICB2YXIgcmVhbENvbG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuXG4gICAgICB0aGlzLmxvZygncmVzb2x2ZUNvbG9yKCknLCBjb2xvciwgcmVhbENvbG9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkNyZWF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ3JlYXRlKGV2ZW50KSB7XG4gICAgICB0aGlzLmxvZygnY29sb3JwaWNrZXJDcmVhdGUnKTtcbiAgICAgIHJldHVybiBfZ2V0KERlYnVnZ2VyLnByb3RvdHlwZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKERlYnVnZ2VyLnByb3RvdHlwZSksICdvbkNyZWF0ZScsIHRoaXMpLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRGVzdHJveScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRGVzdHJveShldmVudCkge1xuICAgICAgdGhpcy5sb2coJ2NvbG9ycGlja2VyRGVzdHJveScpO1xuICAgICAgdGhpcy5ldmVudENvdW50ZXIgPSAwO1xuXG4gICAgICBpZiAodGhpcy5jb2xvcnBpY2tlci5pbnB1dEhhbmRsZXIuaGFzSW5wdXQoKSkge1xuICAgICAgICB0aGlzLmNvbG9ycGlja2VyLmlucHV0SGFuZGxlci5pbnB1dC5vZmYoJy5jb2xvcnBpY2tlci1leHQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9nZXQoRGVidWdnZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRGVidWdnZXIucHJvdG90eXBlKSwgJ29uRGVzdHJveScsIHRoaXMpLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uVXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25VcGRhdGUoZXZlbnQpIHtcbiAgICAgIHRoaXMubG9nKCdjb2xvcnBpY2tlclVwZGF0ZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBsaXN0ZW5zIENvbG9ycGlja2VyI2NoYW5nZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ29uQ2hhbmdlSW5wdXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZUlucHV0KGV2ZW50KSB7XG4gICAgICB0aGlzLmxvZygnaW5wdXQ6Y2hhbmdlLmNvbG9ycGlja2VyJywgZXZlbnQudmFsdWUsIGV2ZW50LmNvbG9yKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkNoYW5nZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICB0aGlzLmxvZygnY29sb3JwaWNrZXJDaGFuZ2UnLCBldmVudC52YWx1ZSwgZXZlbnQuY29sb3IpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uSW52YWxpZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uSW52YWxpZChldmVudCkge1xuICAgICAgdGhpcy5sb2coJ2NvbG9ycGlja2VySW52YWxpZCcsIGV2ZW50LnZhbHVlLCBldmVudC5jb2xvcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25IaWRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25IaWRlKGV2ZW50KSB7XG4gICAgICB0aGlzLmxvZygnY29sb3JwaWNrZXJIaWRlJyk7XG4gICAgICB0aGlzLmV2ZW50Q291bnRlciA9IDA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25TaG93JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25TaG93KGV2ZW50KSB7XG4gICAgICB0aGlzLmxvZygnY29sb3JwaWNrZXJTaG93Jyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25EaXNhYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25EaXNhYmxlKGV2ZW50KSB7XG4gICAgICB0aGlzLmxvZygnY29sb3JwaWNrZXJEaXNhYmxlJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25FbmFibGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkVuYWJsZShldmVudCkge1xuICAgICAgdGhpcy5sb2coJ2NvbG9ycGlja2VyRW5hYmxlJyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIERlYnVnZ2VyO1xufShfRXh0ZW5zaW9uMy5kZWZhdWx0KTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gRGVidWdnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cbnZhciBfRXh0ZW5zaW9uMiA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbnZhciBfRXh0ZW5zaW9uMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0V4dGVuc2lvbjIpO1xuXG52YXIgX2pxdWVyeSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbnZhciBfanF1ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2pxdWVyeSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuLyoqXG4gKiBDb2xvciBwcmV2aWV3IGV4dGVuc2lvblxuICogQGlnbm9yZVxuICovXG52YXIgUHJldmlldyA9IGZ1bmN0aW9uIChfRXh0ZW5zaW9uKSB7XG4gIF9pbmhlcml0cyhQcmV2aWV3LCBfRXh0ZW5zaW9uKTtcblxuICBmdW5jdGlvbiBQcmV2aWV3KGNvbG9ycGlja2VyKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFByZXZpZXcpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFByZXZpZXcuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihQcmV2aWV3KSkuY2FsbCh0aGlzLCBjb2xvcnBpY2tlciwgX2pxdWVyeTIuZGVmYXVsdC5leHRlbmQodHJ1ZSwge30sIHtcbiAgICAgIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cImNvbG9ycGlja2VyLWJhciBjb2xvcnBpY2tlci1wcmV2aWV3XCI+PGRpdiAvPjwvZGl2PicsXG4gICAgICBzaG93VGV4dDogdHJ1ZSxcbiAgICAgIGZvcm1hdDogY29sb3JwaWNrZXIuZm9ybWF0XG4gICAgfSwgb3B0aW9ucykpKTtcblxuICAgIF90aGlzLmVsZW1lbnQgPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoX3RoaXMub3B0aW9ucy50ZW1wbGF0ZSk7XG4gICAgX3RoaXMuZWxlbWVudElubmVyID0gX3RoaXMuZWxlbWVudC5maW5kKCdkaXYnKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUHJldmlldywgW3tcbiAgICBrZXk6ICdvbkNyZWF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ3JlYXRlKGV2ZW50KSB7XG4gICAgICBfZ2V0KFByZXZpZXcucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUHJldmlldy5wcm90b3R5cGUpLCAnb25DcmVhdGUnLCB0aGlzKS5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgIHRoaXMuY29sb3JwaWNrZXIucGlja2VyLmFwcGVuZCh0aGlzLmVsZW1lbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uVXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25VcGRhdGUoZXZlbnQpIHtcbiAgICAgIF9nZXQoUHJldmlldy5wcm90b3R5cGUuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihQcmV2aWV3LnByb3RvdHlwZSksICdvblVwZGF0ZScsIHRoaXMpLmNhbGwodGhpcywgZXZlbnQpO1xuXG4gICAgICBpZiAoIWV2ZW50LmNvbG9yKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudElubmVyLmNzcygnYmFja2dyb3VuZENvbG9yJywgbnVsbCkuY3NzKCdjb2xvcicsIG51bGwpLmh0bWwoJycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZWxlbWVudElubmVyLmNzcygnYmFja2dyb3VuZENvbG9yJywgZXZlbnQuY29sb3IudG9SZ2JTdHJpbmcoKSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1RleHQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50SW5uZXIuaHRtbChldmVudC5jb2xvci5zdHJpbmcodGhpcy5vcHRpb25zLmZvcm1hdCB8fCB0aGlzLmNvbG9ycGlja2VyLmZvcm1hdCkpO1xuXG4gICAgICAgIGlmIChldmVudC5jb2xvci5pc0RhcmsoKSAmJiBldmVudC5jb2xvci5hbHBoYSA+IDAuNSkge1xuICAgICAgICAgIHRoaXMuZWxlbWVudElubmVyLmNzcygnY29sb3InLCAnd2hpdGUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVsZW1lbnRJbm5lci5jc3MoJ2NvbG9yJywgJ2JsYWNrJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUHJldmlldztcbn0oX0V4dGVuc2lvbjMuZGVmYXVsdCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFByZXZpZXc7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH07XG5cbnZhciBfUGFsZXR0ZTIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG52YXIgX1BhbGV0dGUzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfUGFsZXR0ZTIpO1xuXG52YXIgX2pxdWVyeSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbnZhciBfanF1ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2pxdWVyeSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIGRlZmF1bHRzID0ge1xuICBiYXJUZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJjb2xvcnBpY2tlci1iYXIgY29sb3JwaWNrZXItc3dhdGNoZXNcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvcnBpY2tlci1zd2F0Y2hlcy0taW5uZXJcIj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+JyxcbiAgc3dhdGNoVGVtcGxhdGU6ICc8aSBjbGFzcz1cImNvbG9ycGlja2VyLXN3YXRjaFwiPjxpIGNsYXNzPVwiY29sb3JwaWNrZXItc3dhdGNoLS1pbm5lclwiPjwvaT48L2k+J1xufTtcblxuLyoqXG4gKiBDb2xvciBzd2F0Y2hlcyBleHRlbnNpb25cbiAqIEBpZ25vcmVcbiAqL1xuXG52YXIgU3dhdGNoZXMgPSBmdW5jdGlvbiAoX1BhbGV0dGUpIHtcbiAgX2luaGVyaXRzKFN3YXRjaGVzLCBfUGFsZXR0ZSk7XG5cbiAgZnVuY3Rpb24gU3dhdGNoZXMoY29sb3JwaWNrZXIpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3dhdGNoZXMpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFN3YXRjaGVzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoU3dhdGNoZXMpKS5jYWxsKHRoaXMsIGNvbG9ycGlja2VyLCBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdHMsIG9wdGlvbnMpKSk7XG5cbiAgICBfdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3dhdGNoZXMsIFt7XG4gICAga2V5OiAnaXNFbmFibGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGVuZ3RoKCkgPiAwO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uQ3JlYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DcmVhdGUoZXZlbnQpIHtcbiAgICAgIF9nZXQoU3dhdGNoZXMucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoU3dhdGNoZXMucHJvdG90eXBlKSwgJ29uQ3JlYXRlJywgdGhpcykuY2FsbCh0aGlzLCBldmVudCk7XG5cbiAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZWxlbWVudCA9ICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KSh0aGlzLm9wdGlvbnMuYmFyVGVtcGxhdGUpO1xuICAgICAgdGhpcy5sb2FkKCk7XG4gICAgICB0aGlzLmNvbG9ycGlja2VyLnBpY2tlci5hcHBlbmQodGhpcy5lbGVtZW50KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdsb2FkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgY29sb3JwaWNrZXIgPSB0aGlzLmNvbG9ycGlja2VyLFxuICAgICAgICAgIHN3YXRjaENvbnRhaW5lciA9IHRoaXMuZWxlbWVudC5maW5kKCcuY29sb3JwaWNrZXItc3dhdGNoZXMtLWlubmVyJyksXG4gICAgICAgICAgaXNBbGlhc2VkID0gdGhpcy5vcHRpb25zLm5hbWVzQXNWYWx1ZXMgPT09IHRydWUgJiYgIUFycmF5LmlzQXJyYXkodGhpcy5jb2xvcnMpO1xuXG4gICAgICBzd2F0Y2hDb250YWluZXIuZW1wdHkoKTtcblxuICAgICAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKHRoaXMuY29sb3JzLCBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgdmFyICRzd2F0Y2ggPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoX3RoaXMyLm9wdGlvbnMuc3dhdGNoVGVtcGxhdGUpLmF0dHIoJ2RhdGEtbmFtZScsIG5hbWUpLmF0dHIoJ2RhdGEtdmFsdWUnLCB2YWx1ZSkuYXR0cigndGl0bGUnLCBpc0FsaWFzZWQgPyBuYW1lICsgJzogJyArIHZhbHVlIDogdmFsdWUpLm9uKCdtb3VzZWRvd24uY29sb3JwaWNrZXIgdG91Y2hzdGFydC5jb2xvcnBpY2tlcicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgdmFyICRzdyA9ICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KSh0aGlzKTtcblxuICAgICAgICAgIC8vIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGNvbG9ycGlja2VyLnNldFZhbHVlKGlzQWxpYXNlZCA/ICRzdy5hdHRyKCdkYXRhLW5hbWUnKSA6ICRzdy5hdHRyKCdkYXRhLXZhbHVlJykpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc3dhdGNoLmZpbmQoJy5jb2xvcnBpY2tlci1zd2F0Y2gtLWlubmVyJykuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgdmFsdWUpO1xuXG4gICAgICAgIHN3YXRjaENvbnRhaW5lci5hcHBlbmQoJHN3YXRjaCk7XG4gICAgICB9KTtcblxuICAgICAgc3dhdGNoQ29udGFpbmVyLmFwcGVuZCgoMCwgX2pxdWVyeTIuZGVmYXVsdCkoJzxpIGNsYXNzPVwiY29sb3JwaWNrZXItY2xlYXJcIj48L2k+JykpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTd2F0Y2hlcztcbn0oX1BhbGV0dGUzLmRlZmF1bHQpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBTd2F0Y2hlcztcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfanF1ZXJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxudmFyIF9qcXVlcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfanF1ZXJ5KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiBDbGFzcyB0aGF0IGhhbmRsZXMgYWxsIGNvbmZpZ3VyZWQgc2xpZGVycyBvbiBtb3VzZSBvciB0b3VjaCBldmVudHMuXG4gKiBAaWdub3JlXG4gKi9cbnZhciBTbGlkZXJIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQHBhcmFtIHtDb2xvcnBpY2tlcn0gY29sb3JwaWNrZXJcbiAgICovXG4gIGZ1bmN0aW9uIFNsaWRlckhhbmRsZXIoY29sb3JwaWNrZXIpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2xpZGVySGFuZGxlcik7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Q29sb3JwaWNrZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnBpY2tlciA9IGNvbG9ycGlja2VyO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHsqfFN0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNsaWRlciA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQHR5cGUge3tsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyfX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMubW91c2VQb2ludGVyID0ge1xuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdmUgPSBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMuZGVmYXVsdE9uTW92ZSwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZXZlcnkgdGltZSBhIHNsaWRlciBndWlkZSBpcyBtb3ZlZFxuICAgKiBUaGUgc2NvcGUgb2YgXCJ0aGlzXCIgaXMgdGhlIFNsaWRlckhhbmRsZXIgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge2ludH0gdG9wXG4gICAqIEBwYXJhbSB7aW50fSBsZWZ0XG4gICAqL1xuXG5cbiAgX2NyZWF0ZUNsYXNzKFNsaWRlckhhbmRsZXIsIFt7XG4gICAga2V5OiAnZGVmYXVsdE9uTW92ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlZmF1bHRPbk1vdmUodG9wLCBsZWZ0KSB7XG4gICAgICBpZiAoIXRoaXMuY3VycmVudFNsaWRlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzbGlkZXIgPSB0aGlzLmN1cnJlbnRTbGlkZXIsXG4gICAgICAgICAgY3AgPSB0aGlzLmNvbG9ycGlja2VyLFxuICAgICAgICAgIGNoID0gY3AuY29sb3JIYW5kbGVyO1xuXG4gICAgICAvLyBDcmVhdGUgYSBjb2xvciBvYmplY3RcbiAgICAgIHZhciBjb2xvciA9ICFjaC5oYXNDb2xvcigpID8gY2guZ2V0RmFsbGJhY2tDb2xvcigpIDogY2guY29sb3IuZ2V0Q2xvbmUoKTtcblxuICAgICAgLy8gQWRqdXN0IHRoZSBndWlkZSBwb3NpdGlvblxuICAgICAgc2xpZGVyLmd1aWRlU3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xuICAgICAgc2xpZGVyLmd1aWRlU3R5bGUudG9wID0gdG9wICsgJ3B4JztcblxuICAgICAgLy8gQWRqdXN0IHRoZSBjb2xvclxuICAgICAgaWYgKHNsaWRlci5jYWxsTGVmdCkge1xuICAgICAgICBjb2xvcltzbGlkZXIuY2FsbExlZnRdKGxlZnQgLyBzbGlkZXIubWF4TGVmdCk7XG4gICAgICB9XG4gICAgICBpZiAoc2xpZGVyLmNhbGxUb3ApIHtcbiAgICAgICAgY29sb3Jbc2xpZGVyLmNhbGxUb3BdKHRvcCAvIHNsaWRlci5tYXhUb3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdGhlIG5ldyBjb2xvclxuICAgICAgY3Auc2V0VmFsdWUoY29sb3IpO1xuICAgICAgY3AucG9wdXBIYW5kbGVyLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmluZHMgdGhlIGNvbG9ycGlja2VyIHNsaWRlcnMgdG8gdGhlIG1vdXNlL3RvdWNoIGV2ZW50c1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdiaW5kJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYmluZCgpIHtcbiAgICAgIHZhciBzbGlkZXJzID0gdGhpcy5jb2xvcnBpY2tlci5vcHRpb25zLmhvcml6b250YWwgPyB0aGlzLmNvbG9ycGlja2VyLm9wdGlvbnMuc2xpZGVyc0hvcnogOiB0aGlzLmNvbG9ycGlja2VyLm9wdGlvbnMuc2xpZGVycztcblxuICAgICAgdmFyIHNsaWRlckNsYXNzZXMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgc2xpZGVyTmFtZSBpbiBzbGlkZXJzKSB7XG4gICAgICAgIGlmICghc2xpZGVycy5oYXNPd25Qcm9wZXJ0eShzbGlkZXJOYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2xpZGVyQ2xhc3Nlcy5wdXNoKHNsaWRlcnNbc2xpZGVyTmFtZV0uc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbG9ycGlja2VyLnBpY2tlci5maW5kKHNsaWRlckNsYXNzZXMuam9pbignLCAnKSkub24oJ21vdXNlZG93bi5jb2xvcnBpY2tlciB0b3VjaHN0YXJ0LmNvbG9ycGlja2VyJywgX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLnByZXNzZWQsIHRoaXMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbmJpbmRzIGFueSBldmVudCBib3VuZCBieSB0aGlzIGhhbmRsZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAndW5iaW5kJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMuY29sb3JwaWNrZXIucGlja2VyKS5vZmYoe1xuICAgICAgICAnbW91c2Vtb3ZlLmNvbG9ycGlja2VyJzogX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLm1vdmVkLCB0aGlzKSxcbiAgICAgICAgJ3RvdWNobW92ZS5jb2xvcnBpY2tlcic6IF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5tb3ZlZCwgdGhpcyksXG4gICAgICAgICdtb3VzZXVwLmNvbG9ycGlja2VyJzogX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLnJlbGVhc2VkLCB0aGlzKSxcbiAgICAgICAgJ3RvdWNoZW5kLmNvbG9ycGlja2VyJzogX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLnJlbGVhc2VkLCB0aGlzKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdHJpZ2dlcmVkIHdoZW4gY2xpY2tpbmcgaW4gb25lIG9mIHRoZSBjb2xvciBhZGp1c3RtZW50IGJhcnNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI21vdXNlbW92ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncHJlc3NlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHByZXNzZWQoZSkge1xuICAgICAgaWYgKHRoaXMuY29sb3JwaWNrZXIuaXNEaXNhYmxlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29sb3JwaWNrZXIubGFzdEV2ZW50LmFsaWFzID0gJ3ByZXNzZWQnO1xuICAgICAgdGhpcy5jb2xvcnBpY2tlci5sYXN0RXZlbnQuZSA9IGU7XG5cbiAgICAgIGlmICghZS5wYWdlWCAmJiAhZS5wYWdlWSAmJiBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMpIHtcbiAgICAgICAgZS5wYWdlWCA9IGUub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VYO1xuICAgICAgICBlLnBhZ2VZID0gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICB9XG4gICAgICAvLyBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICB2YXIgdGFyZ2V0ID0gKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGUudGFyZ2V0KTtcblxuICAgICAgLy8gZGV0ZWN0IHRoZSBzbGlkZXIgYW5kIHNldCB0aGUgbGltaXRzIGFuZCBjYWxsYmFja3NcbiAgICAgIHZhciB6b25lID0gdGFyZ2V0LmNsb3Nlc3QoJ2RpdicpO1xuXG4gICAgICB2YXIgc2xpZGVycyA9IHRoaXMuY29sb3JwaWNrZXIub3B0aW9ucy5ob3Jpem9udGFsID8gdGhpcy5jb2xvcnBpY2tlci5vcHRpb25zLnNsaWRlcnNIb3J6IDogdGhpcy5jb2xvcnBpY2tlci5vcHRpb25zLnNsaWRlcnM7XG5cbiAgICAgIGlmICh6b25lLmlzKCcuY29sb3JwaWNrZXInKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudFNsaWRlciA9IG51bGw7XG5cbiAgICAgIGZvciAodmFyIHNsaWRlck5hbWUgaW4gc2xpZGVycykge1xuICAgICAgICBpZiAoIXNsaWRlcnMuaGFzT3duUHJvcGVydHkoc2xpZGVyTmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzbGlkZXIgPSBzbGlkZXJzW3NsaWRlck5hbWVdO1xuXG4gICAgICAgIGlmICh6b25lLmlzKHNsaWRlci5zZWxlY3RvcikpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTbGlkZXIgPSBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh7fSwgc2xpZGVyLCB7IG5hbWU6IHNsaWRlck5hbWUgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoc2xpZGVyLmNoaWxkU2VsZWN0b3IgIT09IHVuZGVmaW5lZCAmJiB6b25lLmlzKHNsaWRlci5jaGlsZFNlbGVjdG9yKSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFNsaWRlciA9IF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHt9LCBzbGlkZXIsIHsgbmFtZTogc2xpZGVyTmFtZSB9KTtcbiAgICAgICAgICB6b25lID0gem9uZS5wYXJlbnQoKTsgLy8gem9uZS5wYXJlbnRzKHNsaWRlci5zZWxlY3RvcikuZmlyc3QoKSA/XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGd1aWRlID0gem9uZS5maW5kKCcuY29sb3JwaWNrZXItZ3VpZGUnKS5nZXQoMCk7XG5cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTbGlkZXIgPT09IG51bGwgfHwgZ3VpZGUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgb2Zmc2V0ID0gem9uZS5vZmZzZXQoKTtcblxuICAgICAgLy8gcmVmZXJlbmNlIHRvIGd1aWRlJ3Mgc3R5bGVcbiAgICAgIHRoaXMuY3VycmVudFNsaWRlci5ndWlkZVN0eWxlID0gZ3VpZGUuc3R5bGU7XG4gICAgICB0aGlzLmN1cnJlbnRTbGlkZXIubGVmdCA9IGUucGFnZVggLSBvZmZzZXQubGVmdDtcbiAgICAgIHRoaXMuY3VycmVudFNsaWRlci50b3AgPSBlLnBhZ2VZIC0gb2Zmc2V0LnRvcDtcbiAgICAgIHRoaXMubW91c2VQb2ludGVyID0ge1xuICAgICAgICBsZWZ0OiBlLnBhZ2VYLFxuICAgICAgICB0b3A6IGUucGFnZVlcbiAgICAgIH07XG5cbiAgICAgIC8vIFRPRE86IGZpeCBtb3Zpbmcgb3V0c2lkZSB0aGUgcGlja2VyIG1ha2VzIHRoZSBndWlkZXMgdG8ga2VlcCBtb3ZpbmcuIFRoZSBldmVudCBuZWVkcyB0byBiZSBib3VuZCB0byB0aGUgd2luZG93LlxuICAgICAgLyoqXG4gICAgICAgKiAod2luZG93LmRvY3VtZW50KSBUcmlnZ2VyZWQgb24gbW91c2Vkb3duIGZvciB0aGUgZG9jdW1lbnQgb2JqZWN0LFxuICAgICAgICogc28gdGhlIGNvbG9yIGFkanVzdG1lbnQgZ3VpZGUgaXMgbW92ZWQgdG8gdGhlIGNsaWNrZWQgcG9zaXRpb24uXG4gICAgICAgKlxuICAgICAgICogQGV2ZW50IENvbG9ycGlja2VyI21vdXNlbW92ZVxuICAgICAgICovXG4gICAgICAoMCwgX2pxdWVyeTIuZGVmYXVsdCkodGhpcy5jb2xvcnBpY2tlci5waWNrZXIpLm9uKHtcbiAgICAgICAgJ21vdXNlbW92ZS5jb2xvcnBpY2tlcic6IF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5tb3ZlZCwgdGhpcyksXG4gICAgICAgICd0b3VjaG1vdmUuY29sb3JwaWNrZXInOiBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMubW92ZWQsIHRoaXMpLFxuICAgICAgICAnbW91c2V1cC5jb2xvcnBpY2tlcic6IF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5yZWxlYXNlZCwgdGhpcyksXG4gICAgICAgICd0b3VjaGVuZC5jb2xvcnBpY2tlcic6IF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5yZWxlYXNlZCwgdGhpcylcbiAgICAgIH0pLnRyaWdnZXIoJ21vdXNlbW92ZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRyaWdnZXJlZCB3aGVuIGRyYWdnaW5nIGEgZ3VpZGUgaW5zaWRlIG9uZSBvZiB0aGUgY29sb3IgYWRqdXN0bWVudCBiYXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ21vdmVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbW92ZWQoZSkge1xuICAgICAgdGhpcy5jb2xvcnBpY2tlci5sYXN0RXZlbnQuYWxpYXMgPSAnbW92ZWQnO1xuICAgICAgdGhpcy5jb2xvcnBpY2tlci5sYXN0RXZlbnQuZSA9IGU7XG5cbiAgICAgIGlmICghZS5wYWdlWCAmJiAhZS5wYWdlWSAmJiBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMpIHtcbiAgICAgICAgZS5wYWdlWCA9IGUub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VYO1xuICAgICAgICBlLnBhZ2VZID0gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICB9XG5cbiAgICAgIC8vIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnRzIHNjcm9sbGluZyBvbiBtb2JpbGVcblxuICAgICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLmN1cnJlbnRTbGlkZXIubWF4TGVmdCwgdGhpcy5jdXJyZW50U2xpZGVyLmxlZnQgKyAoKGUucGFnZVggfHwgdGhpcy5tb3VzZVBvaW50ZXIubGVmdCkgLSB0aGlzLm1vdXNlUG9pbnRlci5sZWZ0KSkpO1xuXG4gICAgICB2YXIgdG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5jdXJyZW50U2xpZGVyLm1heFRvcCwgdGhpcy5jdXJyZW50U2xpZGVyLnRvcCArICgoZS5wYWdlWSB8fCB0aGlzLm1vdXNlUG9pbnRlci50b3ApIC0gdGhpcy5tb3VzZVBvaW50ZXIudG9wKSkpO1xuXG4gICAgICB0aGlzLm9uTW92ZSh0b3AsIGxlZnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRyaWdnZXJlZCB3aGVuIHJlbGVhc2luZyB0aGUgY2xpY2sgaW4gb25lIG9mIHRoZSBjb2xvciBhZGp1c3RtZW50IGJhcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncmVsZWFzZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlZChlKSB7XG4gICAgICB0aGlzLmNvbG9ycGlja2VyLmxhc3RFdmVudC5hbGlhcyA9ICdyZWxlYXNlZCc7XG4gICAgICB0aGlzLmNvbG9ycGlja2VyLmxhc3RFdmVudC5lID0gZTtcblxuICAgICAgLy8gZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIC8vIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMuY29sb3JwaWNrZXIucGlja2VyKS5vZmYoe1xuICAgICAgICAnbW91c2Vtb3ZlLmNvbG9ycGlja2VyJzogdGhpcy5tb3ZlZCxcbiAgICAgICAgJ3RvdWNobW92ZS5jb2xvcnBpY2tlcic6IHRoaXMubW92ZWQsXG4gICAgICAgICdtb3VzZXVwLmNvbG9ycGlja2VyJzogdGhpcy5yZWxlYXNlZCxcbiAgICAgICAgJ3RvdWNoZW5kLmNvbG9ycGlja2VyJzogdGhpcy5yZWxlYXNlZFxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNsaWRlckhhbmRsZXI7XG59KCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFNsaWRlckhhbmRsZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcblxuLyoqKi8gfSksXG4vKiAxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX2pxdWVyeSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbnZhciBfanF1ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2pxdWVyeSk7XG5cbnZhciBfb3B0aW9ucyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbnZhciBfb3B0aW9uczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vcHRpb25zKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiBIYW5kbGVzIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgVUkgb2YgdGhlIGNvbG9ycGlja2VyIHBvcHVwOiBzaG93LCBoaWRlLCBwb3NpdGlvbiwuLi5cbiAqIEBpZ25vcmVcbiAqL1xudmFyIFBvcHVwSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29sb3JwaWNrZXJ9IGNvbG9ycGlja2VyXG4gICAqIEBwYXJhbSB7V2luZG93fSByb290XG4gICAqL1xuICBmdW5jdGlvbiBQb3B1cEhhbmRsZXIoY29sb3JwaWNrZXIsIHJvb3QpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9wdXBIYW5kbGVyKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtXaW5kb3d9XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Q29sb3JwaWNrZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnBpY2tlciA9IGNvbG9ycGlja2VyO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtqUXVlcnl9XG4gICAgICovXG4gICAgdGhpcy5wb3BvdmVyVGFyZ2V0ID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7alF1ZXJ5fVxuICAgICAqL1xuICAgIHRoaXMucG9wb3ZlclRpcCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlLCB0aGUgbGF0ZXN0IGNsaWNrIHdhcyBpbnNpZGUgdGhlIHBvcG92ZXJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmNsaWNraW5nID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5oaWRkaW5nID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5zaG93aW5nID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge2pRdWVyeXxmYWxzZX1cbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoUG9wdXBIYW5kbGVyLCBbe1xuICAgIGtleTogJ2JpbmQnLFxuXG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyB0aGUgZGlmZmVyZW50IGNvbG9ycGlja2VyIGVsZW1lbnRzIHRvIHRoZSBmb2N1cy9tb3VzZS90b3VjaCBldmVudHMgc28gaXQgcmVhY3RzIGluIG9yZGVyIHRvIHNob3cgb3JcbiAgICAgKiBoaWRlIHRoZSBjb2xvcnBpY2tlciBwb3B1cCBhY2NvcmRpbmdseS4gSXQgYWxzbyBhZGRzIHRoZSBwcm9wZXIgY2xhc3Nlcy5cbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gYmluZCgpIHtcbiAgICAgIHZhciBjcCA9IHRoaXMuY29sb3JwaWNrZXI7XG5cbiAgICAgIGlmIChjcC5vcHRpb25zLmlubGluZSkge1xuICAgICAgICBjcC5waWNrZXIuYWRkQ2xhc3MoJ2NvbG9ycGlja2VyLWlubGluZSBjb2xvcnBpY2tlci12aXNpYmxlJyk7XG4gICAgICAgIHJldHVybjsgLy8gbm8gbmVlZCB0byBiaW5kIHNob3cvaGlkZSBldmVudHMgZm9yIGlubGluZSBlbGVtZW50c1xuICAgICAgfVxuXG4gICAgICBjcC5waWNrZXIuYWRkQ2xhc3MoJ2NvbG9ycGlja2VyLXBvcHVwIGNvbG9ycGlja2VyLWhpZGRlbicpO1xuXG4gICAgICAvLyB0aGVyZSBpcyBubyBpbnB1dCBvciBhZGRvblxuICAgICAgaWYgKCF0aGlzLmhhc0lucHV0ICYmICF0aGlzLmhhc0FkZG9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIEJvb3RzdHJhcCA0IHBvcG92ZXJcbiAgICAgIGlmIChjcC5vcHRpb25zLnBvcG92ZXIpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVQb3BvdmVyKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGJpbmQgYWRkb24gc2hvdy9oaWRlIGV2ZW50c1xuICAgICAgaWYgKHRoaXMuaGFzQWRkb24pIHtcbiAgICAgICAgLy8gZW5hYmxlIGZvY3VzIG9uIGFkZG9uc1xuICAgICAgICBpZiAoIXRoaXMuYWRkb24uYXR0cigndGFiaW5kZXgnKSkge1xuICAgICAgICAgIHRoaXMuYWRkb24uYXR0cigndGFiaW5kZXgnLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkb24ub24oe1xuICAgICAgICAgICdtb3VzZWRvd24uY29sb3JwaWNrZXIgdG91Y2hzdGFydC5jb2xvcnBpY2tlcic6IF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy50b2dnbGUsIHRoaXMpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkb24ub24oe1xuICAgICAgICAgICdmb2N1cy5jb2xvcnBpY2tlcic6IF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5zaG93LCB0aGlzKVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFkZG9uLm9uKHtcbiAgICAgICAgICAnZm9jdXNvdXQuY29sb3JwaWNrZXInOiBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMuaGlkZSwgdGhpcylcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGJpbmQgaW5wdXQgc2hvdy9oaWRlIGV2ZW50c1xuICAgICAgaWYgKHRoaXMuaGFzSW5wdXQgJiYgIXRoaXMuaGFzQWRkb24pIHtcbiAgICAgICAgdGhpcy5pbnB1dC5vbih7XG4gICAgICAgICAgJ21vdXNlZG93bi5jb2xvcnBpY2tlciB0b3VjaHN0YXJ0LmNvbG9ycGlja2VyJzogX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLnNob3csIHRoaXMpLFxuICAgICAgICAgICdmb2N1cy5jb2xvcnBpY2tlcic6IF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5zaG93LCB0aGlzKVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmlucHV0Lm9uKHtcbiAgICAgICAgICAnZm9jdXNvdXQuY29sb3JwaWNrZXInOiBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMuaGlkZSwgdGhpcylcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlcG9zaXRpb24gcG9wdXAgb24gd2luZG93IHJlc2l6ZVxuICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMucm9vdCkub24oJ3Jlc2l6ZS5jb2xvcnBpY2tlcicsIF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5yZXBvc2l0aW9uLCB0aGlzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5iaW5kcyBhbnkgZXZlbnQgYm91bmQgYnkgdGhpcyBoYW5kbGVyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3VuYmluZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVuYmluZCgpIHtcbiAgICAgIGlmICh0aGlzLmhhc0lucHV0KSB7XG4gICAgICAgIHRoaXMuaW5wdXQub2ZmKHtcbiAgICAgICAgICAnbW91c2Vkb3duLmNvbG9ycGlja2VyIHRvdWNoc3RhcnQuY29sb3JwaWNrZXInOiBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMuc2hvdywgdGhpcyksXG4gICAgICAgICAgJ2ZvY3VzLmNvbG9ycGlja2VyJzogX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLnNob3csIHRoaXMpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlucHV0Lm9mZih7XG4gICAgICAgICAgJ2ZvY3Vzb3V0LmNvbG9ycGlja2VyJzogX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLmhpZGUsIHRoaXMpXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oYXNBZGRvbikge1xuICAgICAgICB0aGlzLmFkZG9uLm9mZih7XG4gICAgICAgICAgJ21vdXNlZG93bi5jb2xvcnBpY2tlciB0b3VjaHN0YXJ0LmNvbG9ycGlja2VyJzogX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLnRvZ2dsZSwgdGhpcylcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkb24ub2ZmKHtcbiAgICAgICAgICAnZm9jdXMuY29sb3JwaWNrZXInOiBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMuc2hvdywgdGhpcylcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkb24ub2ZmKHtcbiAgICAgICAgICAnZm9jdXNvdXQuY29sb3JwaWNrZXInOiBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMuaGlkZSwgdGhpcylcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBvcG92ZXJUYXJnZXQpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyVGFyZ2V0LnBvcG92ZXIoJ2Rpc3Bvc2UnKTtcbiAgICAgIH1cblxuICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMucm9vdCkub2ZmKCdyZXNpemUuY29sb3JwaWNrZXInLCBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMucmVwb3NpdGlvbiwgdGhpcykpO1xuICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMucm9vdC5kb2N1bWVudCkub2ZmKCdtb3VzZWRvd24uY29sb3JwaWNrZXIgdG91Y2hzdGFydC5jb2xvcnBpY2tlcicsIF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5oaWRlLCB0aGlzKSk7XG4gICAgICAoMCwgX2pxdWVyeTIuZGVmYXVsdCkodGhpcy5yb290LmRvY3VtZW50KS5vZmYoJ21vdXNlZG93bi5jb2xvcnBpY2tlciB0b3VjaHN0YXJ0LmNvbG9ycGlja2VyJywgX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLm9uQ2xpY2tpbmdJbnNpZGUsIHRoaXMpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdpc0NsaWNraW5nSW5zaWRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNDbGlja2luZ0luc2lkZShlKSB7XG4gICAgICBpZiAoIWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5pc09ySXNJbnNpZGUodGhpcy5wb3BvdmVyVGlwLCBlLmN1cnJlbnRUYXJnZXQpIHx8IHRoaXMuaXNPcklzSW5zaWRlKHRoaXMucG9wb3ZlclRpcCwgZS50YXJnZXQpIHx8IHRoaXMuaXNPcklzSW5zaWRlKHRoaXMuY29sb3JwaWNrZXIucGlja2VyLCBlLmN1cnJlbnRUYXJnZXQpIHx8IHRoaXMuaXNPcklzSW5zaWRlKHRoaXMuY29sb3JwaWNrZXIucGlja2VyLCBlLnRhcmdldCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaXNPcklzSW5zaWRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNPcklzSW5zaWRlKGNvbnRhaW5lciwgZWxlbWVudCkge1xuICAgICAgaWYgKCFjb250YWluZXIgfHwgIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50ID0gKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGVsZW1lbnQpO1xuXG4gICAgICByZXR1cm4gZWxlbWVudC5pcyhjb250YWluZXIpIHx8IGNvbnRhaW5lci5maW5kKGVsZW1lbnQpLmxlbmd0aCA+IDA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25DbGlja2luZ0luc2lkZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2xpY2tpbmdJbnNpZGUoZSkge1xuICAgICAgdGhpcy5jbGlja2luZyA9IHRoaXMuaXNDbGlja2luZ0luc2lkZShlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjcmVhdGVQb3BvdmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlUG9wb3ZlcigpIHtcbiAgICAgIHZhciBjcCA9IHRoaXMuY29sb3JwaWNrZXI7XG5cbiAgICAgIHRoaXMucG9wb3ZlclRhcmdldCA9IHRoaXMuaGFzQWRkb24gPyB0aGlzLmFkZG9uIDogdGhpcy5pbnB1dDtcblxuICAgICAgY3AucGlja2VyLmFkZENsYXNzKCdjb2xvcnBpY2tlci1icy1wb3BvdmVyLWNvbnRlbnQnKTtcblxuICAgICAgdGhpcy5wb3BvdmVyVGFyZ2V0LnBvcG92ZXIoX2pxdWVyeTIuZGVmYXVsdC5leHRlbmQodHJ1ZSwge30sIF9vcHRpb25zMi5kZWZhdWx0LnBvcG92ZXIsIGNwLm9wdGlvbnMucG9wb3ZlciwgeyB0cmlnZ2VyOiAnbWFudWFsJywgY29udGVudDogY3AucGlja2VyLCBodG1sOiB0cnVlIH0pKTtcblxuICAgICAgdGhpcy5wb3BvdmVyVGlwID0gKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMucG9wb3ZlclRhcmdldC5wb3BvdmVyKCdnZXRUaXBFbGVtZW50JykuZGF0YSgnYnMucG9wb3ZlcicpLnRpcCk7XG4gICAgICB0aGlzLnBvcG92ZXJUaXAuYWRkQ2xhc3MoJ2NvbG9ycGlja2VyLWJzLXBvcG92ZXInKTtcblxuICAgICAgdGhpcy5wb3BvdmVyVGFyZ2V0Lm9uKCdzaG93bi5icy5wb3BvdmVyJywgX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLmZpcmVTaG93LCB0aGlzKSk7XG4gICAgICB0aGlzLnBvcG92ZXJUYXJnZXQub24oJ2hpZGRlbi5icy5wb3BvdmVyJywgX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLmZpcmVIaWRlLCB0aGlzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHdpZGdldCBpcyBub3QgaW5zaWRlIGEgY29udGFpbmVyIG9yIGlubGluZSwgcmVhcnJhbmdlcyBpdHMgcG9zaXRpb24gcmVsYXRpdmUgdG8gaXRzIGVsZW1lbnQgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtFdmVudH0gW2VdXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncmVwb3NpdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlcG9zaXRpb24oZSkge1xuICAgICAgaWYgKHRoaXMucG9wb3ZlclRhcmdldCAmJiB0aGlzLmlzVmlzaWJsZSgpKSB7XG4gICAgICAgIHRoaXMucG9wb3ZlclRhcmdldC5wb3BvdmVyKCd1cGRhdGUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBjb2xvcnBpY2tlciBiZXR3ZWVuIHZpc2libGUgb3IgaGlkZGVuXG4gICAgICpcbiAgICAgKiBAZmlyZXMgQ29sb3JwaWNrZXIjY29sb3JwaWNrZXJTaG93XG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VySGlkZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IFtlXVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd0b2dnbGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b2dnbGUoZSkge1xuICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgdGhpcy5oaWRlKGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSBjb2xvcnBpY2tlciB3aWRnZXQgaWYgaGlkZGVuLlxuICAgICAqXG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VyU2hvd1xuICAgICAqIEBwYXJhbSB7RXZlbnR9IFtlXVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzaG93JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdyhlKSB7XG4gICAgICBpZiAodGhpcy5pc1Zpc2libGUoKSB8fCB0aGlzLnNob3dpbmcgfHwgdGhpcy5oaWRkaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zaG93aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuaGlkZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jbGlja2luZyA9IGZhbHNlO1xuXG4gICAgICB2YXIgY3AgPSB0aGlzLmNvbG9ycGlja2VyO1xuXG4gICAgICBjcC5sYXN0RXZlbnQuYWxpYXMgPSAnc2hvdyc7XG4gICAgICBjcC5sYXN0RXZlbnQuZSA9IGU7XG5cbiAgICAgIC8vIFByZXZlbnQgc2hvd2luZyBicm93c2VyIG5hdGl2ZSBIVE1MNSBjb2xvcnBpY2tlclxuICAgICAgaWYgKGUgJiYgKCF0aGlzLmhhc0lucHV0IHx8IHRoaXMuaW5wdXQuYXR0cigndHlwZScpID09PSAnY29sb3InKSAmJiBlICYmIGUucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBpdCdzIGEgcG9wb3ZlciwgYWRkIGV2ZW50IHRvIHRoZSBkb2N1bWVudCB0byBoaWRlIHRoZSBwaWNrZXIgd2hlbiBjbGlja2luZyBvdXRzaWRlIG9mIGl0XG4gICAgICBpZiAodGhpcy5pc1BvcG92ZXIpIHtcbiAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMucm9vdCkub24oJ3Jlc2l6ZS5jb2xvcnBpY2tlcicsIF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5yZXBvc2l0aW9uLCB0aGlzKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCB2aXNpYmxlIGNsYXNzIGJlZm9yZSBwb3BvdmVyIGlzIHNob3duXG4gICAgICBjcC5waWNrZXIuYWRkQ2xhc3MoJ2NvbG9ycGlja2VyLXZpc2libGUnKS5yZW1vdmVDbGFzcygnY29sb3JwaWNrZXItaGlkZGVuJyk7XG5cbiAgICAgIGlmICh0aGlzLnBvcG92ZXJUYXJnZXQpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyVGFyZ2V0LnBvcG92ZXIoJ3Nob3cnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlyZVNob3coKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdmaXJlU2hvdycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpcmVTaG93KCkge1xuICAgICAgdGhpcy5oaWRkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dpbmcgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMuaXNQb3BvdmVyKSB7XG4gICAgICAgIC8vIEFkZCBldmVudCB0byBoaWRlIG9uIG91dHNpZGUgY2xpY2tcbiAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMucm9vdC5kb2N1bWVudCkub24oJ21vdXNlZG93bi5jb2xvcnBpY2tlciB0b3VjaHN0YXJ0LmNvbG9ycGlja2VyJywgX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLmhpZGUsIHRoaXMpKTtcbiAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMucm9vdC5kb2N1bWVudCkub24oJ21vdXNlZG93bi5jb2xvcnBpY2tlciB0b3VjaHN0YXJ0LmNvbG9ycGlja2VyJywgX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLm9uQ2xpY2tpbmdJbnNpZGUsIHRoaXMpKTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiAoQ29sb3JwaWNrZXIpIFdoZW4gc2hvdygpIGlzIGNhbGxlZCBhbmQgdGhlIHdpZGdldCBjYW4gYmUgc2hvd24uXG4gICAgICAgKlxuICAgICAgICogQGV2ZW50IENvbG9ycGlja2VyI2NvbG9ycGlja2VyU2hvd1xuICAgICAgICovXG4gICAgICB0aGlzLmNvbG9ycGlja2VyLnRyaWdnZXIoJ2NvbG9ycGlja2VyU2hvdycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGVzIHRoZSBjb2xvcnBpY2tlciB3aWRnZXQuXG4gICAgICogSGlkZSBpcyBwcmV2ZW50ZWQgd2hlbiBpdCBpcyB0cmlnZ2VyZWQgYnkgYW4gZXZlbnQgd2hvc2UgdGFyZ2V0IGVsZW1lbnQgaGFzIGJlZW4gY2xpY2tlZC90b3VjaGVkLlxuICAgICAqXG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VySGlkZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IFtlXVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdoaWRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGlkZShlKSB7XG4gICAgICBpZiAodGhpcy5pc0hpZGRlbigpIHx8IHRoaXMuc2hvd2luZyB8fCB0aGlzLmhpZGRpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3AgPSB0aGlzLmNvbG9ycGlja2VyLFxuICAgICAgICAgIGNsaWNraW5nID0gdGhpcy5jbGlja2luZyB8fCB0aGlzLmlzQ2xpY2tpbmdJbnNpZGUoZSk7XG5cbiAgICAgIHRoaXMuaGlkZGluZyA9IHRydWU7XG4gICAgICB0aGlzLnNob3dpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2xpY2tpbmcgPSBmYWxzZTtcblxuICAgICAgY3AubGFzdEV2ZW50LmFsaWFzID0gJ2hpZGUnO1xuICAgICAgY3AubGFzdEV2ZW50LmUgPSBlO1xuXG4gICAgICAvLyBUT0RPOiBmaXggaGF2aW5nIHRvIGNsaWNrIHR3aWNlIG91dHNpZGUgd2hlbiBsb3NpbmcgZm9jdXMgYW5kIGxhc3QgMiBjbGlja3Mgd2hlcmUgaW5zaWRlIHRoZSBjb2xvcnBpY2tlclxuXG4gICAgICAvLyBQcmV2ZW50IGhpZGUgaWYgdHJpZ2dlcmVkIGJ5IGFuIGV2ZW50IGFuZCBhbiBlbGVtZW50IGluc2lkZSB0aGUgY29sb3JwaWNrZXIgaGFzIGJlZW4gY2xpY2tlZC90b3VjaGVkXG4gICAgICBpZiAoY2xpY2tpbmcpIHtcbiAgICAgICAgdGhpcy5oaWRkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucG9wb3ZlclRhcmdldCkge1xuICAgICAgICB0aGlzLnBvcG92ZXJUYXJnZXQucG9wb3ZlcignaGlkZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maXJlSGlkZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2ZpcmVIaWRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmlyZUhpZGUoKSB7XG4gICAgICB0aGlzLmhpZGRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd2luZyA9IGZhbHNlO1xuXG4gICAgICB2YXIgY3AgPSB0aGlzLmNvbG9ycGlja2VyO1xuXG4gICAgICAvLyBhZGQgaGlkZGVuIGNsYXNzIGFmdGVyIHBvcG92ZXIgaXMgaGlkZGVuXG4gICAgICBjcC5waWNrZXIuYWRkQ2xhc3MoJ2NvbG9ycGlja2VyLWhpZGRlbicpLnJlbW92ZUNsYXNzKCdjb2xvcnBpY2tlci12aXNpYmxlJyk7XG5cbiAgICAgIC8vIFVuYmluZCB3aW5kb3cgYW5kIGRvY3VtZW50IGV2ZW50cywgc2luY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBrZWVwIHRoZW0gd2hpbGUgdGhlIHBvcHVwIGlzIGhpZGRlblxuICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMucm9vdCkub2ZmKCdyZXNpemUuY29sb3JwaWNrZXInLCBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMucmVwb3NpdGlvbiwgdGhpcykpO1xuICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXMucm9vdC5kb2N1bWVudCkub2ZmKCdtb3VzZWRvd24uY29sb3JwaWNrZXIgdG91Y2hzdGFydC5jb2xvcnBpY2tlcicsIF9qcXVlcnkyLmRlZmF1bHQucHJveHkodGhpcy5oaWRlLCB0aGlzKSk7XG4gICAgICAoMCwgX2pxdWVyeTIuZGVmYXVsdCkodGhpcy5yb290LmRvY3VtZW50KS5vZmYoJ21vdXNlZG93bi5jb2xvcnBpY2tlciB0b3VjaHN0YXJ0LmNvbG9ycGlja2VyJywgX2pxdWVyeTIuZGVmYXVsdC5wcm94eSh0aGlzLm9uQ2xpY2tpbmdJbnNpZGUsIHRoaXMpKTtcblxuICAgICAgLyoqXG4gICAgICAgKiAoQ29sb3JwaWNrZXIpIFdoZW4gaGlkZSgpIGlzIGNhbGxlZCBhbmQgdGhlIHdpZGdldCBjYW4gYmUgaGlkZGVuLlxuICAgICAgICpcbiAgICAgICAqIEBldmVudCBDb2xvcnBpY2tlciNjb2xvcnBpY2tlckhpZGVcbiAgICAgICAqL1xuICAgICAgY3AudHJpZ2dlcignY29sb3JwaWNrZXJIaWRlJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZm9jdXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICAgIGlmICh0aGlzLmhhc0FkZG9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZG9uLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5oYXNJbnB1dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29sb3JwaWNrZXIgZWxlbWVudCBoYXMgdGhlIGNvbG9ycGlja2VyLXZpc2libGUgY2xhc3MgYW5kIG5vdCB0aGUgY29sb3JwaWNrZXItaGlkZGVuIG9uZS5cbiAgICAgKiBGYWxzZSBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaXNWaXNpYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNWaXNpYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3JwaWNrZXIucGlja2VyLmhhc0NsYXNzKCdjb2xvcnBpY2tlci12aXNpYmxlJykgJiYgIXRoaXMuY29sb3JwaWNrZXIucGlja2VyLmhhc0NsYXNzKCdjb2xvcnBpY2tlci1oaWRkZW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbG9ycGlja2VyIGVsZW1lbnQgaGFzIHRoZSBjb2xvcnBpY2tlci1oaWRkZW4gY2xhc3MgYW5kIG5vdCB0aGUgY29sb3JwaWNrZXItdmlzaWJsZSBvbmUuXG4gICAgICogRmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2lzSGlkZGVuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNIaWRkZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xvcnBpY2tlci5waWNrZXIuaGFzQ2xhc3MoJ2NvbG9ycGlja2VyLWhpZGRlbicpICYmICF0aGlzLmNvbG9ycGlja2VyLnBpY2tlci5oYXNDbGFzcygnY29sb3JwaWNrZXItdmlzaWJsZScpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2lucHV0JyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbG9ycGlja2VyLmlucHV0SGFuZGxlci5pbnB1dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdoYXNJbnB1dCcsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xvcnBpY2tlci5pbnB1dEhhbmRsZXIuaGFzSW5wdXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEByZXR1cm5zIHtqUXVlcnl8ZmFsc2V9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2FkZG9uJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbG9ycGlja2VyLmFkZG9uSGFuZGxlci5hZGRvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdoYXNBZGRvbicsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xvcnBpY2tlci5hZGRvbkhhbmRsZXIuaGFzQWRkb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc1BvcG92ZXInLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmNvbG9ycGlja2VyLm9wdGlvbnMuaW5saW5lICYmICEhdGhpcy5wb3BvdmVyVGlwO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQb3B1cEhhbmRsZXI7XG59KCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFBvcHVwSGFuZGxlcjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xuXG4vKioqLyB9KSxcbi8qIDE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfanF1ZXJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxudmFyIF9qcXVlcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfanF1ZXJ5KTtcblxudmFyIF9Db2xvckl0ZW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG52YXIgX0NvbG9ySXRlbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Db2xvckl0ZW0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4vKipcbiAqIEhhbmRsZXMgZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZSBjb2xvcnBpY2tlciBpbnB1dFxuICogQGlnbm9yZVxuICovXG52YXIgSW5wdXRIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQHBhcmFtIHtDb2xvcnBpY2tlcn0gY29sb3JwaWNrZXJcbiAgICovXG4gIGZ1bmN0aW9uIElucHV0SGFuZGxlcihjb2xvcnBpY2tlcikge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJbnB1dEhhbmRsZXIpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0NvbG9ycGlja2VyfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JwaWNrZXIgPSBjb2xvcnBpY2tlcjtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7alF1ZXJ5fGZhbHNlfVxuICAgICAqL1xuICAgIHRoaXMuaW5wdXQgPSB0aGlzLmNvbG9ycGlja2VyLmVsZW1lbnQuaXMoJ2lucHV0JykgPyB0aGlzLmNvbG9ycGlja2VyLmVsZW1lbnQgOiB0aGlzLmNvbG9ycGlja2VyLm9wdGlvbnMuaW5wdXQgPyB0aGlzLmNvbG9ycGlja2VyLmVsZW1lbnQuZmluZCh0aGlzLmNvbG9ycGlja2VyLm9wdGlvbnMuaW5wdXQpIDogZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pbnB1dCAmJiB0aGlzLmlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pbnB1dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRWYWx1ZSgpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKElucHV0SGFuZGxlciwgW3tcbiAgICBrZXk6ICdiaW5kJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYmluZCgpIHtcbiAgICAgIGlmICghdGhpcy5oYXNJbnB1dCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wdXQub24oe1xuICAgICAgICAna2V5dXAuY29sb3JwaWNrZXInOiBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMub25rZXl1cCwgdGhpcylcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pbnB1dC5vbih7XG4gICAgICAgICdjaGFuZ2UuY29sb3JwaWNrZXInOiBfanF1ZXJ5Mi5kZWZhdWx0LnByb3h5KHRoaXMub25jaGFuZ2UsIHRoaXMpXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd1bmJpbmQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bmJpbmQoKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzSW5wdXQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlucHV0Lm9mZignLmNvbG9ycGlja2VyJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2luaXRWYWx1ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9pbml0VmFsdWUoKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzSW5wdXQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWwgPSAnJztcblxuICAgICAgW1xuICAgICAgLy8gY2FuZGlkYXRlczpcbiAgICAgIHRoaXMuaW5wdXQudmFsKCksIHRoaXMuaW5wdXQuZGF0YSgnY29sb3InKSwgdGhpcy5pbnB1dC5hdHRyKCdkYXRhLWNvbG9yJyldLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpZiAoaXRlbSAmJiB2YWwgPT09ICcnKSB7XG4gICAgICAgICAgdmFsID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBfQ29sb3JJdGVtMi5kZWZhdWx0KSB7XG4gICAgICAgIHZhbCA9IHRoaXMuZ2V0Rm9ybWF0dGVkQ29sb3IodmFsLnN0cmluZyh0aGlzLmNvbG9ycGlja2VyLmZvcm1hdCkpO1xuICAgICAgfSBlbHNlIGlmICghKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnIHx8IHZhbCBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICAgICAgdmFsID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW5wdXQucHJvcCgndmFsdWUnLCB2YWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbG9yIHN0cmluZyBmcm9tIHRoZSBpbnB1dCB2YWx1ZS5cbiAgICAgKiBJZiB0aGVyZSBpcyBubyBpbnB1dCB0aGUgcmV0dXJuIHZhbHVlIGlzIGZhbHNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ3xib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdnZXRWYWx1ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgICAgaWYgKCF0aGlzLmhhc0lucHV0KCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5pbnB1dC52YWwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgaW5wdXQgZWxlbWVudCBpcyBwcmVzZW50LCBpdCB1cGRhdGVzIHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IGNvbG9yIG9iamVjdCBjb2xvciBzdHJpbmcuXG4gICAgICogSWYgdGhlIHZhbHVlIGlzIGNoYW5nZWQsIHRoaXMgbWV0aG9kIGZpcmVzIGEgXCJjaGFuZ2VcIiBldmVudCBvbiB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB2YWxcbiAgICAgKlxuICAgICAqIEBmaXJlcyBDb2xvcnBpY2tlciNjaGFuZ2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2V0VmFsdWUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRWYWx1ZSh2YWwpIHtcbiAgICAgIGlmICghdGhpcy5oYXNJbnB1dCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGlucHV0VmFsID0gdGhpcy5pbnB1dC5wcm9wKCd2YWx1ZScpO1xuXG4gICAgICB2YWwgPSB2YWwgPyB2YWwgOiAnJztcblxuICAgICAgaWYgKHZhbCA9PT0gKGlucHV0VmFsID8gaW5wdXRWYWwgOiAnJykpIHtcbiAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdmFsdWUgb3IgdHJpZ2dlciBhbnkgZXZlbnQgaWYgbm90aGluZyBjaGFuZ2VkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbnB1dC5wcm9wKCd2YWx1ZScsIHZhbCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogKElucHV0KSBUcmlnZ2VyZWQgb24gdGhlIGlucHV0IGVsZW1lbnQgd2hlbiBhIG5ldyBjb2xvciBpcyBzZWxlY3RlZC5cbiAgICAgICAqXG4gICAgICAgKiBAZXZlbnQgQ29sb3JwaWNrZXIjY2hhbmdlXG4gICAgICAgKi9cbiAgICAgIHRoaXMuaW5wdXQudHJpZ2dlcih7XG4gICAgICAgIHR5cGU6ICdjaGFuZ2UnLFxuICAgICAgICBjb2xvcnBpY2tlcjogdGhpcy5jb2xvcnBpY2tlcixcbiAgICAgICAgY29sb3I6IHRoaXMuY29sb3JwaWNrZXIuY29sb3IsXG4gICAgICAgIHZhbHVlOiB2YWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGZvcm1hdHRlZCBjb2xvciBzdHJpbmcsIHdpdGggdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhcHBsaWVkXG4gICAgICogKGUuZy4gdXNlSGFzaFByZWZpeClcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfG51bGx9IHZhbFxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ31cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZ2V0Rm9ybWF0dGVkQ29sb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRDb2xvcigpIHtcbiAgICAgIHZhciB2YWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG5cbiAgICAgIHZhbCA9IHZhbCA/IHZhbCA6IHRoaXMuY29sb3JwaWNrZXIuY29sb3JIYW5kbGVyLmdldENvbG9yU3RyaW5nKCk7XG5cbiAgICAgIGlmICghdmFsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgdmFsID0gdGhpcy5jb2xvcnBpY2tlci5jb2xvckhhbmRsZXIucmVzb2x2ZUNvbG9yRGVsZWdhdGUodmFsLCBmYWxzZSk7XG5cbiAgICAgIGlmICh0aGlzLmNvbG9ycGlja2VyLm9wdGlvbnMudXNlSGFzaFByZWZpeCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoL14jL2csICcnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHdpZGdldCBoYXMgYW4gYXNzb2NpYXRlZCBpbnB1dCBlbGVtZW50LCBmYWxzZSBvdGhlcndpc2VcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaGFzSW5wdXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNJbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0ICE9PSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IGV4aXN0cyBhbmQgaXMgZGlzYWJsZWRcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaXNFbmFibGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzSW5wdXQoKSAmJiAhdGhpcy5pc0Rpc2FibGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCBleGlzdHMgYW5kIGlzIGRpc2FibGVkXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2lzRGlzYWJsZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0Rpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzSW5wdXQoKSAmJiB0aGlzLmlucHV0LnByb3AoJ2Rpc2FibGVkJykgPT09IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGlucHV0IGlmIGFueVxuICAgICAqXG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VyRGlzYWJsZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdkaXNhYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc0lucHV0KCkpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIGlucHV0IGlmIGFueVxuICAgICAqXG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VyRW5hYmxlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2VuYWJsZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuYWJsZSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc0lucHV0KCkpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyBzZXRWYWx1ZSB3aXRoIHRoZSBjdXJyZW50IGludGVybmFsIGNvbG9yIHZhbHVlXG4gICAgICpcbiAgICAgKiBAZmlyZXMgQ29sb3JwaWNrZXIjY2hhbmdlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3VwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIGlmICghdGhpcy5oYXNJbnB1dCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29sb3JwaWNrZXIub3B0aW9ucy5hdXRvSW5wdXRGYWxsYmFjayA9PT0gZmFsc2UgJiYgdGhpcy5jb2xvcnBpY2tlci5jb2xvckhhbmRsZXIuaXNJbnZhbGlkQ29sb3IoKSkge1xuICAgICAgICAvLyBwcmV2ZW50IHVwZGF0ZSBpZiBjb2xvciBpcyBpbnZhbGlkLCBhdXRvSW5wdXRGYWxsYmFjayBpcyBkaXNhYmxlZCBhbmQgdGhlIGxhc3QgZXZlbnQgaXMga2V5dXAuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmdldEZvcm1hdHRlZENvbG9yKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRyaWdnZXJlZCB3aGVuIHRoZSBpbnB1dCBoYXMgY2hhbmdlZCwgc28gdGhlIGNvbG9ycGlja2VyIGdldHMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdvbmNoYW5nZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uY2hhbmdlKGUpIHtcbiAgICAgIHRoaXMuY29sb3JwaWNrZXIubGFzdEV2ZW50LmFsaWFzID0gJ2lucHV0LmNoYW5nZSc7XG4gICAgICB0aGlzLmNvbG9ycGlja2VyLmxhc3RFdmVudC5lID0gZTtcblxuICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsdWUoKTtcblxuICAgICAgaWYgKHZhbCAhPT0gZS52YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbG9ycGlja2VyLnNldFZhbHVlKHZhbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdHJpZ2dlcmVkIGFmdGVyIGEga2V5Ym9hcmQga2V5IGhhcyBiZWVuIHJlbGVhc2VkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ29ua2V5dXAnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbmtleXVwKGUpIHtcbiAgICAgIHRoaXMuY29sb3JwaWNrZXIubGFzdEV2ZW50LmFsaWFzID0gJ2lucHV0LmtleXVwJztcbiAgICAgIHRoaXMuY29sb3JwaWNrZXIubGFzdEV2ZW50LmUgPSBlO1xuXG4gICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZSgpO1xuXG4gICAgICBpZiAodmFsICE9PSBlLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29sb3JwaWNrZXIuc2V0VmFsdWUodmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSW5wdXRIYW5kbGVyO1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBJbnB1dEhhbmRsZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgY29sb3JTdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBjb252ZXJ0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5cbnZhciBfc2xpY2UgPSBbXS5zbGljZTtcblxudmFyIHNraXBwZWRNb2RlbHMgPSBbXG5cdC8vIHRvIGJlIGhvbmVzdCwgSSBkb24ndCByZWFsbHkgZmVlbCBsaWtlIGtleXdvcmQgYmVsb25ncyBpbiBjb2xvciBjb252ZXJ0LCBidXQgZWguXG5cdCdrZXl3b3JkJyxcblxuXHQvLyBncmF5IGNvbmZsaWN0cyB3aXRoIHNvbWUgbWV0aG9kIG5hbWVzLCBhbmQgaGFzIGl0cyBvd24gbWV0aG9kIGRlZmluZWQuXG5cdCdncmF5JyxcblxuXHQvLyBzaG91bGRuJ3QgcmVhbGx5IGJlIGluIGNvbG9yLWNvbnZlcnQgZWl0aGVyLi4uXG5cdCdoZXgnXG5dO1xuXG52YXIgaGFzaGVkTW9kZWxLZXlzID0ge307XG5PYmplY3Qua2V5cyhjb252ZXJ0KS5mb3JFYWNoKGZ1bmN0aW9uIChtb2RlbCkge1xuXHRoYXNoZWRNb2RlbEtleXNbX3NsaWNlLmNhbGwoY29udmVydFttb2RlbF0ubGFiZWxzKS5zb3J0KCkuam9pbignJyldID0gbW9kZWw7XG59KTtcblxudmFyIGxpbWl0ZXJzID0ge307XG5cbmZ1bmN0aW9uIENvbG9yKG9iaiwgbW9kZWwpIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIENvbG9yKSkge1xuXHRcdHJldHVybiBuZXcgQ29sb3Iob2JqLCBtb2RlbCk7XG5cdH1cblxuXHRpZiAobW9kZWwgJiYgbW9kZWwgaW4gc2tpcHBlZE1vZGVscykge1xuXHRcdG1vZGVsID0gbnVsbDtcblx0fVxuXG5cdGlmIChtb2RlbCAmJiAhKG1vZGVsIGluIGNvbnZlcnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG1vZGVsOiAnICsgbW9kZWwpO1xuXHR9XG5cblx0dmFyIGk7XG5cdHZhciBjaGFubmVscztcblxuXHRpZiAob2JqID09IG51bGwpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuXHRcdHRoaXMubW9kZWwgPSAncmdiJztcblx0XHR0aGlzLmNvbG9yID0gWzAsIDAsIDBdO1xuXHRcdHRoaXMudmFscGhhID0gMTtcblx0fSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBDb2xvcikge1xuXHRcdHRoaXMubW9kZWwgPSBvYmoubW9kZWw7XG5cdFx0dGhpcy5jb2xvciA9IG9iai5jb2xvci5zbGljZSgpO1xuXHRcdHRoaXMudmFscGhhID0gb2JqLnZhbHBoYTtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuXHRcdHZhciByZXN1bHQgPSBjb2xvclN0cmluZy5nZXQob2JqKTtcblx0XHRpZiAocmVzdWx0ID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBjb2xvciBmcm9tIHN0cmluZzogJyArIG9iaik7XG5cdFx0fVxuXG5cdFx0dGhpcy5tb2RlbCA9IHJlc3VsdC5tb2RlbDtcblx0XHRjaGFubmVscyA9IGNvbnZlcnRbdGhpcy5tb2RlbF0uY2hhbm5lbHM7XG5cdFx0dGhpcy5jb2xvciA9IHJlc3VsdC52YWx1ZS5zbGljZSgwLCBjaGFubmVscyk7XG5cdFx0dGhpcy52YWxwaGEgPSB0eXBlb2YgcmVzdWx0LnZhbHVlW2NoYW5uZWxzXSA9PT0gJ251bWJlcicgPyByZXN1bHQudmFsdWVbY2hhbm5lbHNdIDogMTtcblx0fSBlbHNlIGlmIChvYmoubGVuZ3RoKSB7XG5cdFx0dGhpcy5tb2RlbCA9IG1vZGVsIHx8ICdyZ2InO1xuXHRcdGNoYW5uZWxzID0gY29udmVydFt0aGlzLm1vZGVsXS5jaGFubmVscztcblx0XHR2YXIgbmV3QXJyID0gX3NsaWNlLmNhbGwob2JqLCAwLCBjaGFubmVscyk7XG5cdFx0dGhpcy5jb2xvciA9IHplcm9BcnJheShuZXdBcnIsIGNoYW5uZWxzKTtcblx0XHR0aGlzLnZhbHBoYSA9IHR5cGVvZiBvYmpbY2hhbm5lbHNdID09PSAnbnVtYmVyJyA/IG9ialtjaGFubmVsc10gOiAxO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdudW1iZXInKSB7XG5cdFx0Ly8gdGhpcyBpcyBhbHdheXMgUkdCIC0gY2FuIGJlIGNvbnZlcnRlZCBsYXRlciBvbi5cblx0XHRvYmogJj0gMHhGRkZGRkY7XG5cdFx0dGhpcy5tb2RlbCA9ICdyZ2InO1xuXHRcdHRoaXMuY29sb3IgPSBbXG5cdFx0XHQob2JqID4+IDE2KSAmIDB4RkYsXG5cdFx0XHQob2JqID4+IDgpICYgMHhGRixcblx0XHRcdG9iaiAmIDB4RkZcblx0XHRdO1xuXHRcdHRoaXMudmFscGhhID0gMTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLnZhbHBoYSA9IDE7XG5cblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cdFx0aWYgKCdhbHBoYScgaW4gb2JqKSB7XG5cdFx0XHRrZXlzLnNwbGljZShrZXlzLmluZGV4T2YoJ2FscGhhJyksIDEpO1xuXHRcdFx0dGhpcy52YWxwaGEgPSB0eXBlb2Ygb2JqLmFscGhhID09PSAnbnVtYmVyJyA/IG9iai5hbHBoYSA6IDA7XG5cdFx0fVxuXG5cdFx0dmFyIGhhc2hlZEtleXMgPSBrZXlzLnNvcnQoKS5qb2luKCcnKTtcblx0XHRpZiAoIShoYXNoZWRLZXlzIGluIGhhc2hlZE1vZGVsS2V5cykpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHBhcnNlIGNvbG9yIGZyb20gb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkob2JqKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5tb2RlbCA9IGhhc2hlZE1vZGVsS2V5c1toYXNoZWRLZXlzXTtcblxuXHRcdHZhciBsYWJlbHMgPSBjb252ZXJ0W3RoaXMubW9kZWxdLmxhYmVscztcblx0XHR2YXIgY29sb3IgPSBbXTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb2xvci5wdXNoKG9ialtsYWJlbHNbaV1dKTtcblx0XHR9XG5cblx0XHR0aGlzLmNvbG9yID0gemVyb0FycmF5KGNvbG9yKTtcblx0fVxuXG5cdC8vIHBlcmZvcm0gbGltaXRhdGlvbnMgKGNsYW1waW5nLCBldGMuKVxuXHRpZiAobGltaXRlcnNbdGhpcy5tb2RlbF0pIHtcblx0XHRjaGFubmVscyA9IGNvbnZlcnRbdGhpcy5tb2RlbF0uY2hhbm5lbHM7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspIHtcblx0XHRcdHZhciBsaW1pdCA9IGxpbWl0ZXJzW3RoaXMubW9kZWxdW2ldO1xuXHRcdFx0aWYgKGxpbWl0KSB7XG5cdFx0XHRcdHRoaXMuY29sb3JbaV0gPSBsaW1pdCh0aGlzLmNvbG9yW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aGlzLnZhbHBoYSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHRoaXMudmFscGhhKSk7XG5cblx0aWYgKE9iamVjdC5mcmVlemUpIHtcblx0XHRPYmplY3QuZnJlZXplKHRoaXMpO1xuXHR9XG59XG5cbkNvbG9yLnByb3RvdHlwZSA9IHtcblx0dG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdGhpcy5zdHJpbmcoKTtcblx0fSxcblxuXHR0b0pTT046IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdGhpc1t0aGlzLm1vZGVsXSgpO1xuXHR9LFxuXG5cdHN0cmluZzogZnVuY3Rpb24gKHBsYWNlcykge1xuXHRcdHZhciBzZWxmID0gdGhpcy5tb2RlbCBpbiBjb2xvclN0cmluZy50byA/IHRoaXMgOiB0aGlzLnJnYigpO1xuXHRcdHNlbGYgPSBzZWxmLnJvdW5kKHR5cGVvZiBwbGFjZXMgPT09ICdudW1iZXInID8gcGxhY2VzIDogMSk7XG5cdFx0dmFyIGFyZ3MgPSBzZWxmLnZhbHBoYSA9PT0gMSA/IHNlbGYuY29sb3IgOiBzZWxmLmNvbG9yLmNvbmNhdCh0aGlzLnZhbHBoYSk7XG5cdFx0cmV0dXJuIGNvbG9yU3RyaW5nLnRvW3NlbGYubW9kZWxdKGFyZ3MpO1xuXHR9LFxuXG5cdHBlcmNlbnRTdHJpbmc6IGZ1bmN0aW9uIChwbGFjZXMpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXMucmdiKCkucm91bmQodHlwZW9mIHBsYWNlcyA9PT0gJ251bWJlcicgPyBwbGFjZXMgOiAxKTtcblx0XHR2YXIgYXJncyA9IHNlbGYudmFscGhhID09PSAxID8gc2VsZi5jb2xvciA6IHNlbGYuY29sb3IuY29uY2F0KHRoaXMudmFscGhhKTtcblx0XHRyZXR1cm4gY29sb3JTdHJpbmcudG8ucmdiLnBlcmNlbnQoYXJncyk7XG5cdH0sXG5cblx0YXJyYXk6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdGhpcy52YWxwaGEgPT09IDEgPyB0aGlzLmNvbG9yLnNsaWNlKCkgOiB0aGlzLmNvbG9yLmNvbmNhdCh0aGlzLnZhbHBoYSk7XG5cdH0sXG5cblx0b2JqZWN0OiBmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdHZhciBjaGFubmVscyA9IGNvbnZlcnRbdGhpcy5tb2RlbF0uY2hhbm5lbHM7XG5cdFx0dmFyIGxhYmVscyA9IGNvbnZlcnRbdGhpcy5tb2RlbF0ubGFiZWxzO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsczsgaSsrKSB7XG5cdFx0XHRyZXN1bHRbbGFiZWxzW2ldXSA9IHRoaXMuY29sb3JbaV07XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudmFscGhhICE9PSAxKSB7XG5cdFx0XHRyZXN1bHQuYWxwaGEgPSB0aGlzLnZhbHBoYTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdHVuaXRBcnJheTogZnVuY3Rpb24gKCkge1xuXHRcdHZhciByZ2IgPSB0aGlzLnJnYigpLmNvbG9yO1xuXHRcdHJnYlswXSAvPSAyNTU7XG5cdFx0cmdiWzFdIC89IDI1NTtcblx0XHRyZ2JbMl0gLz0gMjU1O1xuXG5cdFx0aWYgKHRoaXMudmFscGhhICE9PSAxKSB7XG5cdFx0XHRyZ2IucHVzaCh0aGlzLnZhbHBoYSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJnYjtcblx0fSxcblxuXHR1bml0T2JqZWN0OiBmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIHJnYiA9IHRoaXMucmdiKCkub2JqZWN0KCk7XG5cdFx0cmdiLnIgLz0gMjU1O1xuXHRcdHJnYi5nIC89IDI1NTtcblx0XHRyZ2IuYiAvPSAyNTU7XG5cblx0XHRpZiAodGhpcy52YWxwaGEgIT09IDEpIHtcblx0XHRcdHJnYi5hbHBoYSA9IHRoaXMudmFscGhhO1xuXHRcdH1cblxuXHRcdHJldHVybiByZ2I7XG5cdH0sXG5cblx0cm91bmQ6IGZ1bmN0aW9uIChwbGFjZXMpIHtcblx0XHRwbGFjZXMgPSBNYXRoLm1heChwbGFjZXMgfHwgMCwgMCk7XG5cdFx0cmV0dXJuIG5ldyBDb2xvcih0aGlzLmNvbG9yLm1hcChyb3VuZFRvUGxhY2UocGxhY2VzKSkuY29uY2F0KHRoaXMudmFscGhhKSwgdGhpcy5tb2RlbCk7XG5cdH0sXG5cblx0YWxwaGE6IGZ1bmN0aW9uICh2YWwpIHtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcih0aGlzLmNvbG9yLmNvbmNhdChNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB2YWwpKSksIHRoaXMubW9kZWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnZhbHBoYTtcblx0fSxcblxuXHQvLyByZ2Jcblx0cmVkOiBnZXRzZXQoJ3JnYicsIDAsIG1heGZuKDI1NSkpLFxuXHRncmVlbjogZ2V0c2V0KCdyZ2InLCAxLCBtYXhmbigyNTUpKSxcblx0Ymx1ZTogZ2V0c2V0KCdyZ2InLCAyLCBtYXhmbigyNTUpKSxcblxuXHRodWU6IGdldHNldChbJ2hzbCcsICdoc3YnLCAnaHNsJywgJ2h3YicsICdoY2cnXSwgMCwgZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gKCh2YWwgJSAzNjApICsgMzYwKSAlIDM2MDsgfSksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYnJhY2Utc3R5bGVcblxuXHRzYXR1cmF0aW9ubDogZ2V0c2V0KCdoc2wnLCAxLCBtYXhmbigxMDApKSxcblx0bGlnaHRuZXNzOiBnZXRzZXQoJ2hzbCcsIDIsIG1heGZuKDEwMCkpLFxuXG5cdHNhdHVyYXRpb252OiBnZXRzZXQoJ2hzdicsIDEsIG1heGZuKDEwMCkpLFxuXHR2YWx1ZTogZ2V0c2V0KCdoc3YnLCAyLCBtYXhmbigxMDApKSxcblxuXHRjaHJvbWE6IGdldHNldCgnaGNnJywgMSwgbWF4Zm4oMTAwKSksXG5cdGdyYXk6IGdldHNldCgnaGNnJywgMiwgbWF4Zm4oMTAwKSksXG5cblx0d2hpdGU6IGdldHNldCgnaHdiJywgMSwgbWF4Zm4oMTAwKSksXG5cdHdibGFjazogZ2V0c2V0KCdod2InLCAyLCBtYXhmbigxMDApKSxcblxuXHRjeWFuOiBnZXRzZXQoJ2NteWsnLCAwLCBtYXhmbigxMDApKSxcblx0bWFnZW50YTogZ2V0c2V0KCdjbXlrJywgMSwgbWF4Zm4oMTAwKSksXG5cdHllbGxvdzogZ2V0c2V0KCdjbXlrJywgMiwgbWF4Zm4oMTAwKSksXG5cdGJsYWNrOiBnZXRzZXQoJ2NteWsnLCAzLCBtYXhmbigxMDApKSxcblxuXHR4OiBnZXRzZXQoJ3h5eicsIDAsIG1heGZuKDEwMCkpLFxuXHR5OiBnZXRzZXQoJ3h5eicsIDEsIG1heGZuKDEwMCkpLFxuXHR6OiBnZXRzZXQoJ3h5eicsIDIsIG1heGZuKDEwMCkpLFxuXG5cdGw6IGdldHNldCgnbGFiJywgMCwgbWF4Zm4oMTAwKSksXG5cdGE6IGdldHNldCgnbGFiJywgMSksXG5cdGI6IGdldHNldCgnbGFiJywgMiksXG5cblx0a2V5d29yZDogZnVuY3Rpb24gKHZhbCkge1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gbmV3IENvbG9yKHZhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnZlcnRbdGhpcy5tb2RlbF0ua2V5d29yZCh0aGlzLmNvbG9yKTtcblx0fSxcblxuXHRoZXg6IGZ1bmN0aW9uICh2YWwpIHtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcih2YWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2xvclN0cmluZy50by5oZXgodGhpcy5yZ2IoKS5yb3VuZCgpLmNvbG9yKTtcblx0fSxcblxuXHRyZ2JOdW1iZXI6IGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgcmdiID0gdGhpcy5yZ2IoKS5jb2xvcjtcblx0XHRyZXR1cm4gKChyZ2JbMF0gJiAweEZGKSA8PCAxNikgfCAoKHJnYlsxXSAmIDB4RkYpIDw8IDgpIHwgKHJnYlsyXSAmIDB4RkYpO1xuXHR9LFxuXG5cdGx1bWlub3NpdHk6IGZ1bmN0aW9uICgpIHtcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG5cdFx0dmFyIHJnYiA9IHRoaXMucmdiKCkuY29sb3I7XG5cblx0XHR2YXIgbHVtID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZ2IubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjaGFuID0gcmdiW2ldIC8gMjU1O1xuXHRcdFx0bHVtW2ldID0gKGNoYW4gPD0gMC4wMzkyOCkgPyBjaGFuIC8gMTIuOTIgOiBNYXRoLnBvdygoKGNoYW4gKyAwLjA1NSkgLyAxLjA1NSksIDIuNCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDAuMjEyNiAqIGx1bVswXSArIDAuNzE1MiAqIGx1bVsxXSArIDAuMDcyMiAqIGx1bVsyXTtcblx0fSxcblxuXHRjb250cmFzdDogZnVuY3Rpb24gKGNvbG9yMikge1xuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jY29udHJhc3QtcmF0aW9kZWZcblx0XHR2YXIgbHVtMSA9IHRoaXMubHVtaW5vc2l0eSgpO1xuXHRcdHZhciBsdW0yID0gY29sb3IyLmx1bWlub3NpdHkoKTtcblxuXHRcdGlmIChsdW0xID4gbHVtMikge1xuXHRcdFx0cmV0dXJuIChsdW0xICsgMC4wNSkgLyAobHVtMiArIDAuMDUpO1xuXHRcdH1cblxuXHRcdHJldHVybiAobHVtMiArIDAuMDUpIC8gKGx1bTEgKyAwLjA1KTtcblx0fSxcblxuXHRsZXZlbDogZnVuY3Rpb24gKGNvbG9yMikge1xuXHRcdHZhciBjb250cmFzdFJhdGlvID0gdGhpcy5jb250cmFzdChjb2xvcjIpO1xuXHRcdGlmIChjb250cmFzdFJhdGlvID49IDcuMSkge1xuXHRcdFx0cmV0dXJuICdBQUEnO1xuXHRcdH1cblxuXHRcdHJldHVybiAoY29udHJhc3RSYXRpbyA+PSA0LjUpID8gJ0FBJyA6ICcnO1xuXHR9LFxuXG5cdGlzRGFyazogZnVuY3Rpb24gKCkge1xuXHRcdC8vIFlJUSBlcXVhdGlvbiBmcm9tIGh0dHA6Ly8yNHdheXMub3JnLzIwMTAvY2FsY3VsYXRpbmctY29sb3ItY29udHJhc3Rcblx0XHR2YXIgcmdiID0gdGhpcy5yZ2IoKS5jb2xvcjtcblx0XHR2YXIgeWlxID0gKHJnYlswXSAqIDI5OSArIHJnYlsxXSAqIDU4NyArIHJnYlsyXSAqIDExNCkgLyAxMDAwO1xuXHRcdHJldHVybiB5aXEgPCAxMjg7XG5cdH0sXG5cblx0aXNMaWdodDogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiAhdGhpcy5pc0RhcmsoKTtcblx0fSxcblxuXHRuZWdhdGU6IGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgcmdiID0gdGhpcy5yZ2IoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuXHRcdFx0cmdiLmNvbG9yW2ldID0gMjU1IC0gcmdiLmNvbG9yW2ldO1xuXHRcdH1cblx0XHRyZXR1cm4gcmdiO1xuXHR9LFxuXG5cdGxpZ2h0ZW46IGZ1bmN0aW9uIChyYXRpbykge1xuXHRcdHZhciBoc2wgPSB0aGlzLmhzbCgpO1xuXHRcdGhzbC5jb2xvclsyXSArPSBoc2wuY29sb3JbMl0gKiByYXRpbztcblx0XHRyZXR1cm4gaHNsO1xuXHR9LFxuXG5cdGRhcmtlbjogZnVuY3Rpb24gKHJhdGlvKSB7XG5cdFx0dmFyIGhzbCA9IHRoaXMuaHNsKCk7XG5cdFx0aHNsLmNvbG9yWzJdIC09IGhzbC5jb2xvclsyXSAqIHJhdGlvO1xuXHRcdHJldHVybiBoc2w7XG5cdH0sXG5cblx0c2F0dXJhdGU6IGZ1bmN0aW9uIChyYXRpbykge1xuXHRcdHZhciBoc2wgPSB0aGlzLmhzbCgpO1xuXHRcdGhzbC5jb2xvclsxXSArPSBoc2wuY29sb3JbMV0gKiByYXRpbztcblx0XHRyZXR1cm4gaHNsO1xuXHR9LFxuXG5cdGRlc2F0dXJhdGU6IGZ1bmN0aW9uIChyYXRpbykge1xuXHRcdHZhciBoc2wgPSB0aGlzLmhzbCgpO1xuXHRcdGhzbC5jb2xvclsxXSAtPSBoc2wuY29sb3JbMV0gKiByYXRpbztcblx0XHRyZXR1cm4gaHNsO1xuXHR9LFxuXG5cdHdoaXRlbjogZnVuY3Rpb24gKHJhdGlvKSB7XG5cdFx0dmFyIGh3YiA9IHRoaXMuaHdiKCk7XG5cdFx0aHdiLmNvbG9yWzFdICs9IGh3Yi5jb2xvclsxXSAqIHJhdGlvO1xuXHRcdHJldHVybiBod2I7XG5cdH0sXG5cblx0YmxhY2tlbjogZnVuY3Rpb24gKHJhdGlvKSB7XG5cdFx0dmFyIGh3YiA9IHRoaXMuaHdiKCk7XG5cdFx0aHdiLmNvbG9yWzJdICs9IGh3Yi5jb2xvclsyXSAqIHJhdGlvO1xuXHRcdHJldHVybiBod2I7XG5cdH0sXG5cblx0Z3JheXNjYWxlOiBmdW5jdGlvbiAoKSB7XG5cdFx0Ly8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmF5c2NhbGUjQ29udmVydGluZ19jb2xvcl90b19ncmF5c2NhbGVcblx0XHR2YXIgcmdiID0gdGhpcy5yZ2IoKS5jb2xvcjtcblx0XHR2YXIgdmFsID0gcmdiWzBdICogMC4zICsgcmdiWzFdICogMC41OSArIHJnYlsyXSAqIDAuMTE7XG5cdFx0cmV0dXJuIENvbG9yLnJnYih2YWwsIHZhbCwgdmFsKTtcblx0fSxcblxuXHRmYWRlOiBmdW5jdGlvbiAocmF0aW8pIHtcblx0XHRyZXR1cm4gdGhpcy5hbHBoYSh0aGlzLnZhbHBoYSAtICh0aGlzLnZhbHBoYSAqIHJhdGlvKSk7XG5cdH0sXG5cblx0b3BhcXVlcjogZnVuY3Rpb24gKHJhdGlvKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWxwaGEodGhpcy52YWxwaGEgKyAodGhpcy52YWxwaGEgKiByYXRpbykpO1xuXHR9LFxuXG5cdHJvdGF0ZTogZnVuY3Rpb24gKGRlZ3JlZXMpIHtcblx0XHR2YXIgaHNsID0gdGhpcy5oc2woKTtcblx0XHR2YXIgaHVlID0gaHNsLmNvbG9yWzBdO1xuXHRcdGh1ZSA9IChodWUgKyBkZWdyZWVzKSAlIDM2MDtcblx0XHRodWUgPSBodWUgPCAwID8gMzYwICsgaHVlIDogaHVlO1xuXHRcdGhzbC5jb2xvclswXSA9IGh1ZTtcblx0XHRyZXR1cm4gaHNsO1xuXHR9LFxuXG5cdG1peDogZnVuY3Rpb24gKG1peGluQ29sb3IsIHdlaWdodCkge1xuXHRcdC8vIHBvcnRlZCBmcm9tIHNhc3MgaW1wbGVtZW50YXRpb24gaW4gQ1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zYXNzL2xpYnNhc3MvYmxvYi8wZTZiNGEyODUwMDkyMzU2YWEzZWNlMDdjNmIyNDlmMDIyMWNhY2VkL2Z1bmN0aW9ucy5jcHAjTDIwOVxuXHRcdGlmICghbWl4aW5Db2xvciB8fCAhbWl4aW5Db2xvci5yZ2IpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgdG8gXCJtaXhcIiB3YXMgbm90IGEgQ29sb3IgaW5zdGFuY2UsIGJ1dCByYXRoZXIgYW4gaW5zdGFuY2Ugb2YgJyArIHR5cGVvZiBtaXhpbkNvbG9yKTtcblx0XHR9XG5cdFx0dmFyIGNvbG9yMSA9IG1peGluQ29sb3IucmdiKCk7XG5cdFx0dmFyIGNvbG9yMiA9IHRoaXMucmdiKCk7XG5cdFx0dmFyIHAgPSB3ZWlnaHQgPT09IHVuZGVmaW5lZCA/IDAuNSA6IHdlaWdodDtcblxuXHRcdHZhciB3ID0gMiAqIHAgLSAxO1xuXHRcdHZhciBhID0gY29sb3IxLmFscGhhKCkgLSBjb2xvcjIuYWxwaGEoKTtcblxuXHRcdHZhciB3MSA9ICgoKHcgKiBhID09PSAtMSkgPyB3IDogKHcgKyBhKSAvICgxICsgdyAqIGEpKSArIDEpIC8gMi4wO1xuXHRcdHZhciB3MiA9IDEgLSB3MTtcblxuXHRcdHJldHVybiBDb2xvci5yZ2IoXG5cdFx0XHRcdHcxICogY29sb3IxLnJlZCgpICsgdzIgKiBjb2xvcjIucmVkKCksXG5cdFx0XHRcdHcxICogY29sb3IxLmdyZWVuKCkgKyB3MiAqIGNvbG9yMi5ncmVlbigpLFxuXHRcdFx0XHR3MSAqIGNvbG9yMS5ibHVlKCkgKyB3MiAqIGNvbG9yMi5ibHVlKCksXG5cdFx0XHRcdGNvbG9yMS5hbHBoYSgpICogcCArIGNvbG9yMi5hbHBoYSgpICogKDEgLSBwKSk7XG5cdH1cbn07XG5cbi8vIG1vZGVsIGNvbnZlcnNpb24gbWV0aG9kcyBhbmQgc3RhdGljIGNvbnN0cnVjdG9yc1xuT2JqZWN0LmtleXMoY29udmVydCkuZm9yRWFjaChmdW5jdGlvbiAobW9kZWwpIHtcblx0aWYgKHNraXBwZWRNb2RlbHMuaW5kZXhPZihtb2RlbCkgIT09IC0xKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGNoYW5uZWxzID0gY29udmVydFttb2RlbF0uY2hhbm5lbHM7XG5cblx0Ly8gY29udmVyc2lvbiBtZXRob2RzXG5cdENvbG9yLnByb3RvdHlwZVttb2RlbF0gPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKHRoaXMubW9kZWwgPT09IG1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gbmV3IENvbG9yKHRoaXMpO1xuXHRcdH1cblxuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gbmV3IENvbG9yKGFyZ3VtZW50cywgbW9kZWwpO1xuXHRcdH1cblxuXHRcdHZhciBuZXdBbHBoYSA9IHR5cGVvZiBhcmd1bWVudHNbY2hhbm5lbHNdID09PSAnbnVtYmVyJyA/IGNoYW5uZWxzIDogdGhpcy52YWxwaGE7XG5cdFx0cmV0dXJuIG5ldyBDb2xvcihhc3NlcnRBcnJheShjb252ZXJ0W3RoaXMubW9kZWxdW21vZGVsXS5yYXcodGhpcy5jb2xvcikpLmNvbmNhdChuZXdBbHBoYSksIG1vZGVsKTtcblx0fTtcblxuXHQvLyAnc3RhdGljJyBjb25zdHJ1Y3Rpb24gbWV0aG9kc1xuXHRDb2xvclttb2RlbF0gPSBmdW5jdGlvbiAoY29sb3IpIHtcblx0XHRpZiAodHlwZW9mIGNvbG9yID09PSAnbnVtYmVyJykge1xuXHRcdFx0Y29sb3IgPSB6ZXJvQXJyYXkoX3NsaWNlLmNhbGwoYXJndW1lbnRzKSwgY2hhbm5lbHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IENvbG9yKGNvbG9yLCBtb2RlbCk7XG5cdH07XG59KTtcblxuZnVuY3Rpb24gcm91bmRUbyhudW0sIHBsYWNlcykge1xuXHRyZXR1cm4gTnVtYmVyKG51bS50b0ZpeGVkKHBsYWNlcykpO1xufVxuXG5mdW5jdGlvbiByb3VuZFRvUGxhY2UocGxhY2VzKSB7XG5cdHJldHVybiBmdW5jdGlvbiAobnVtKSB7XG5cdFx0cmV0dXJuIHJvdW5kVG8obnVtLCBwbGFjZXMpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRzZXQobW9kZWwsIGNoYW5uZWwsIG1vZGlmaWVyKSB7XG5cdG1vZGVsID0gQXJyYXkuaXNBcnJheShtb2RlbCkgPyBtb2RlbCA6IFttb2RlbF07XG5cblx0bW9kZWwuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuXHRcdChsaW1pdGVyc1ttXSB8fCAobGltaXRlcnNbbV0gPSBbXSkpW2NoYW5uZWxdID0gbW9kaWZpZXI7XG5cdH0pO1xuXG5cdG1vZGVsID0gbW9kZWxbMF07XG5cblx0cmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcblx0XHR2YXIgcmVzdWx0O1xuXG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcblx0XHRcdGlmIChtb2RpZmllcikge1xuXHRcdFx0XHR2YWwgPSBtb2RpZmllcih2YWwpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXN1bHQgPSB0aGlzW21vZGVsXSgpO1xuXHRcdFx0cmVzdWx0LmNvbG9yW2NoYW5uZWxdID0gdmFsO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRyZXN1bHQgPSB0aGlzW21vZGVsXSgpLmNvbG9yW2NoYW5uZWxdO1xuXHRcdGlmIChtb2RpZmllcikge1xuXHRcdFx0cmVzdWx0ID0gbW9kaWZpZXIocmVzdWx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufVxuXG5mdW5jdGlvbiBtYXhmbihtYXgpIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh2KSB7XG5cdFx0cmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKG1heCwgdikpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnRBcnJheSh2YWwpIHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdO1xufVxuXG5mdW5jdGlvbiB6ZXJvQXJyYXkoYXJyLCBsZW5ndGgpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdGlmICh0eXBlb2YgYXJyW2ldICE9PSAnbnVtYmVyJykge1xuXHRcdFx0YXJyW2ldID0gMDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yO1xuXG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLyogTUlUIGxpY2Vuc2UgKi9cbnZhciBjb2xvck5hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciBzd2l6emxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cbnZhciByZXZlcnNlTmFtZXMgPSB7fTtcblxuLy8gY3JlYXRlIGEgbGlzdCBvZiByZXZlcnNlIGNvbG9yIG5hbWVzXG5mb3IgKHZhciBuYW1lIGluIGNvbG9yTmFtZXMpIHtcblx0aWYgKGNvbG9yTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcblx0XHRyZXZlcnNlTmFtZXNbY29sb3JOYW1lc1tuYW1lXV0gPSBuYW1lO1xuXHR9XG59XG5cbnZhciBjcyA9IG1vZHVsZS5leHBvcnRzID0ge1xuXHR0bzoge30sXG5cdGdldDoge31cbn07XG5cbmNzLmdldCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcblx0dmFyIHByZWZpeCA9IHN0cmluZy5zdWJzdHJpbmcoMCwgMykudG9Mb3dlckNhc2UoKTtcblx0dmFyIHZhbDtcblx0dmFyIG1vZGVsO1xuXHRzd2l0Y2ggKHByZWZpeCkge1xuXHRcdGNhc2UgJ2hzbCc6XG5cdFx0XHR2YWwgPSBjcy5nZXQuaHNsKHN0cmluZyk7XG5cdFx0XHRtb2RlbCA9ICdoc2wnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnaHdiJzpcblx0XHRcdHZhbCA9IGNzLmdldC5od2Ioc3RyaW5nKTtcblx0XHRcdG1vZGVsID0gJ2h3Yic7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dmFsID0gY3MuZ2V0LnJnYihzdHJpbmcpO1xuXHRcdFx0bW9kZWwgPSAncmdiJztcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0aWYgKCF2YWwpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHJldHVybiB7bW9kZWw6IG1vZGVsLCB2YWx1ZTogdmFsfTtcbn07XG5cbmNzLmdldC5yZ2IgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG5cdGlmICghc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgYWJiciA9IC9eIyhbYS1mMC05XXszLDR9KSQvaTtcblx0dmFyIGhleCA9IC9eIyhbYS1mMC05XXs2fSkoW2EtZjAtOV17Mn0pPyQvaTtcblx0dmFyIHJnYmEgPSAvXnJnYmE/XFwoXFxzKihbKy1dP1xcZCspXFxzKixcXHMqKFsrLV0/XFxkKylcXHMqLFxccyooWystXT9cXGQrKVxccyooPzosXFxzKihbKy1dP1tcXGRcXC5dKylcXHMqKT9cXCkkLztcblx0dmFyIHBlciA9IC9ecmdiYT9cXChcXHMqKFsrLV0/W1xcZFxcLl0rKVxcJVxccyosXFxzKihbKy1dP1tcXGRcXC5dKylcXCVcXHMqLFxccyooWystXT9bXFxkXFwuXSspXFwlXFxzKig/OixcXHMqKFsrLV0/W1xcZFxcLl0rKVxccyopP1xcKSQvO1xuXHR2YXIga2V5d29yZCA9IC8oXFxEKykvO1xuXG5cdHZhciByZ2IgPSBbMCwgMCwgMCwgMV07XG5cdHZhciBtYXRjaDtcblx0dmFyIGk7XG5cdHZhciBoZXhBbHBoYTtcblxuXHRpZiAobWF0Y2ggPSBzdHJpbmcubWF0Y2goaGV4KSkge1xuXHRcdGhleEFscGhhID0gbWF0Y2hbMl07XG5cdFx0bWF0Y2ggPSBtYXRjaFsxXTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcblx0XHRcdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9zbGljZS12cy1zdWJzdHItdnMtc3Vic3RyaW5nLW1ldGhvZHMtbG9uZy1zdHJpbmcvMTlcblx0XHRcdHZhciBpMiA9IGkgKiAyO1xuXHRcdFx0cmdiW2ldID0gcGFyc2VJbnQobWF0Y2guc2xpY2UoaTIsIGkyICsgMiksIDE2KTtcblx0XHR9XG5cblx0XHRpZiAoaGV4QWxwaGEpIHtcblx0XHRcdHJnYlszXSA9IE1hdGgucm91bmQoKHBhcnNlSW50KGhleEFscGhhLCAxNikgLyAyNTUpICogMTAwKSAvIDEwMDtcblx0XHR9XG5cdH0gZWxzZSBpZiAobWF0Y2ggPSBzdHJpbmcubWF0Y2goYWJicikpIHtcblx0XHRtYXRjaCA9IG1hdGNoWzFdO1xuXHRcdGhleEFscGhhID0gbWF0Y2hbM107XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cdFx0XHRyZ2JbaV0gPSBwYXJzZUludChtYXRjaFtpXSArIG1hdGNoW2ldLCAxNik7XG5cdFx0fVxuXG5cdFx0aWYgKGhleEFscGhhKSB7XG5cdFx0XHRyZ2JbM10gPSBNYXRoLnJvdW5kKChwYXJzZUludChoZXhBbHBoYSArIGhleEFscGhhLCAxNikgLyAyNTUpICogMTAwKSAvIDEwMDtcblx0XHR9XG5cdH0gZWxzZSBpZiAobWF0Y2ggPSBzdHJpbmcubWF0Y2gocmdiYSkpIHtcblx0XHRmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cdFx0XHRyZ2JbaV0gPSBwYXJzZUludChtYXRjaFtpICsgMV0sIDApO1xuXHRcdH1cblxuXHRcdGlmIChtYXRjaFs0XSkge1xuXHRcdFx0cmdiWzNdID0gcGFyc2VGbG9hdChtYXRjaFs0XSk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKHBlcikpIHtcblx0XHRmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cdFx0XHRyZ2JbaV0gPSBNYXRoLnJvdW5kKHBhcnNlRmxvYXQobWF0Y2hbaSArIDFdKSAqIDIuNTUpO1xuXHRcdH1cblxuXHRcdGlmIChtYXRjaFs0XSkge1xuXHRcdFx0cmdiWzNdID0gcGFyc2VGbG9hdChtYXRjaFs0XSk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKGtleXdvcmQpKSB7XG5cdFx0aWYgKG1hdGNoWzFdID09PSAndHJhbnNwYXJlbnQnKSB7XG5cdFx0XHRyZXR1cm4gWzAsIDAsIDAsIDBdO1xuXHRcdH1cblxuXHRcdHJnYiA9IGNvbG9yTmFtZXNbbWF0Y2hbMV1dO1xuXG5cdFx0aWYgKCFyZ2IpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJnYlszXSA9IDE7XG5cblx0XHRyZXR1cm4gcmdiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xuXHRcdHJnYltpXSA9IGNsYW1wKHJnYltpXSwgMCwgMjU1KTtcblx0fVxuXHRyZ2JbM10gPSBjbGFtcChyZ2JbM10sIDAsIDEpO1xuXG5cdHJldHVybiByZ2I7XG59O1xuXG5jcy5nZXQuaHNsID0gZnVuY3Rpb24gKHN0cmluZykge1xuXHRpZiAoIXN0cmluZykge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIGhzbCA9IC9eaHNsYT9cXChcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKykoPzpkZWcpP1xccyosXFxzKihbKy1dP1tcXGRcXC5dKyklXFxzKixcXHMqKFsrLV0/W1xcZFxcLl0rKSVcXHMqKD86LFxccyooWystXT9bXFxkXFwuXSspXFxzKik/XFwpJC87XG5cdHZhciBtYXRjaCA9IHN0cmluZy5tYXRjaChoc2wpO1xuXG5cdGlmIChtYXRjaCkge1xuXHRcdHZhciBhbHBoYSA9IHBhcnNlRmxvYXQobWF0Y2hbNF0pO1xuXHRcdHZhciBoID0gKHBhcnNlRmxvYXQobWF0Y2hbMV0pICsgMzYwKSAlIDM2MDtcblx0XHR2YXIgcyA9IGNsYW1wKHBhcnNlRmxvYXQobWF0Y2hbMl0pLCAwLCAxMDApO1xuXHRcdHZhciBsID0gY2xhbXAocGFyc2VGbG9hdChtYXRjaFszXSksIDAsIDEwMCk7XG5cdFx0dmFyIGEgPSBjbGFtcChpc05hTihhbHBoYSkgPyAxIDogYWxwaGEsIDAsIDEpO1xuXG5cdFx0cmV0dXJuIFtoLCBzLCBsLCBhXTtcblx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuY3MuZ2V0Lmh3YiA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcblx0aWYgKCFzdHJpbmcpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciBod2IgPSAvXmh3YlxcKFxccyooWystXT9cXGQqW1xcLl0/XFxkKykoPzpkZWcpP1xccyosXFxzKihbKy1dP1tcXGRcXC5dKyklXFxzKixcXHMqKFsrLV0/W1xcZFxcLl0rKSVcXHMqKD86LFxccyooWystXT9bXFxkXFwuXSspXFxzKik/XFwpJC87XG5cdHZhciBtYXRjaCA9IHN0cmluZy5tYXRjaChod2IpO1xuXG5cdGlmIChtYXRjaCkge1xuXHRcdHZhciBhbHBoYSA9IHBhcnNlRmxvYXQobWF0Y2hbNF0pO1xuXHRcdHZhciBoID0gKChwYXJzZUZsb2F0KG1hdGNoWzFdKSAlIDM2MCkgKyAzNjApICUgMzYwO1xuXHRcdHZhciB3ID0gY2xhbXAocGFyc2VGbG9hdChtYXRjaFsyXSksIDAsIDEwMCk7XG5cdFx0dmFyIGIgPSBjbGFtcChwYXJzZUZsb2F0KG1hdGNoWzNdKSwgMCwgMTAwKTtcblx0XHR2YXIgYSA9IGNsYW1wKGlzTmFOKGFscGhhKSA/IDEgOiBhbHBoYSwgMCwgMSk7XG5cdFx0cmV0dXJuIFtoLCB3LCBiLCBhXTtcblx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuY3MudG8uaGV4ID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgcmdiYSA9IHN3aXp6bGUoYXJndW1lbnRzKTtcblxuXHRyZXR1cm4gKFxuXHRcdCcjJyArXG5cdFx0aGV4RG91YmxlKHJnYmFbMF0pICtcblx0XHRoZXhEb3VibGUocmdiYVsxXSkgK1xuXHRcdGhleERvdWJsZShyZ2JhWzJdKSArXG5cdFx0KHJnYmFbM10gPCAxXG5cdFx0XHQ/IChoZXhEb3VibGUoTWF0aC5yb3VuZChyZ2JhWzNdICogMjU1KSkpXG5cdFx0XHQ6ICcnKVxuXHQpO1xufTtcblxuY3MudG8ucmdiID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgcmdiYSA9IHN3aXp6bGUoYXJndW1lbnRzKTtcblxuXHRyZXR1cm4gcmdiYS5sZW5ndGggPCA0IHx8IHJnYmFbM10gPT09IDFcblx0XHQ/ICdyZ2IoJyArIE1hdGgucm91bmQocmdiYVswXSkgKyAnLCAnICsgTWF0aC5yb3VuZChyZ2JhWzFdKSArICcsICcgKyBNYXRoLnJvdW5kKHJnYmFbMl0pICsgJyknXG5cdFx0OiAncmdiYSgnICsgTWF0aC5yb3VuZChyZ2JhWzBdKSArICcsICcgKyBNYXRoLnJvdW5kKHJnYmFbMV0pICsgJywgJyArIE1hdGgucm91bmQocmdiYVsyXSkgKyAnLCAnICsgcmdiYVszXSArICcpJztcbn07XG5cbmNzLnRvLnJnYi5wZXJjZW50ID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgcmdiYSA9IHN3aXp6bGUoYXJndW1lbnRzKTtcblxuXHR2YXIgciA9IE1hdGgucm91bmQocmdiYVswXSAvIDI1NSAqIDEwMCk7XG5cdHZhciBnID0gTWF0aC5yb3VuZChyZ2JhWzFdIC8gMjU1ICogMTAwKTtcblx0dmFyIGIgPSBNYXRoLnJvdW5kKHJnYmFbMl0gLyAyNTUgKiAxMDApO1xuXG5cdHJldHVybiByZ2JhLmxlbmd0aCA8IDQgfHwgcmdiYVszXSA9PT0gMVxuXHRcdD8gJ3JnYignICsgciArICclLCAnICsgZyArICclLCAnICsgYiArICclKSdcblx0XHQ6ICdyZ2JhKCcgKyByICsgJyUsICcgKyBnICsgJyUsICcgKyBiICsgJyUsICcgKyByZ2JhWzNdICsgJyknO1xufTtcblxuY3MudG8uaHNsID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgaHNsYSA9IHN3aXp6bGUoYXJndW1lbnRzKTtcblx0cmV0dXJuIGhzbGEubGVuZ3RoIDwgNCB8fCBoc2xhWzNdID09PSAxXG5cdFx0PyAnaHNsKCcgKyBoc2xhWzBdICsgJywgJyArIGhzbGFbMV0gKyAnJSwgJyArIGhzbGFbMl0gKyAnJSknXG5cdFx0OiAnaHNsYSgnICsgaHNsYVswXSArICcsICcgKyBoc2xhWzFdICsgJyUsICcgKyBoc2xhWzJdICsgJyUsICcgKyBoc2xhWzNdICsgJyknO1xufTtcblxuLy8gaHdiIGlzIGEgYml0IGRpZmZlcmVudCB0aGFuIHJnYihhKSAmIGhzbChhKSBzaW5jZSB0aGVyZSBpcyBubyBhbHBoYSBzcGVjaWZpYyBzeW50YXhcbi8vIChod2IgaGF2ZSBhbHBoYSBvcHRpb25hbCAmIDEgaXMgZGVmYXVsdCB2YWx1ZSlcbmNzLnRvLmh3YiA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIGh3YmEgPSBzd2l6emxlKGFyZ3VtZW50cyk7XG5cblx0dmFyIGEgPSAnJztcblx0aWYgKGh3YmEubGVuZ3RoID49IDQgJiYgaHdiYVszXSAhPT0gMSkge1xuXHRcdGEgPSAnLCAnICsgaHdiYVszXTtcblx0fVxuXG5cdHJldHVybiAnaHdiKCcgKyBod2JhWzBdICsgJywgJyArIGh3YmFbMV0gKyAnJSwgJyArIGh3YmFbMl0gKyAnJScgKyBhICsgJyknO1xufTtcblxuY3MudG8ua2V5d29yZCA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0cmV0dXJuIHJldmVyc2VOYW1lc1tyZ2Iuc2xpY2UoMCwgMyldO1xufTtcblxuLy8gaGVscGVyc1xuZnVuY3Rpb24gY2xhbXAobnVtLCBtaW4sIG1heCkge1xuXHRyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobWluLCBudW0pLCBtYXgpO1xufVxuXG5mdW5jdGlvbiBoZXhEb3VibGUobnVtKSB7XG5cdHZhciBzdHIgPSBudW0udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdHJldHVybiAoc3RyLmxlbmd0aCA8IDIpID8gJzAnICsgc3RyIDogc3RyO1xufVxuXG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzQXJyYXlpc2ggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcblxudmFyIGNvbmNhdCA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQ7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbnZhciBzd2l6emxlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzd2l6emxlKGFyZ3MpIHtcblx0dmFyIHJlc3VsdHMgPSBbXTtcblxuXHRmb3IgKHZhciBpID0gMCwgbGVuID0gYXJncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdHZhciBhcmcgPSBhcmdzW2ldO1xuXG5cdFx0aWYgKGlzQXJyYXlpc2goYXJnKSkge1xuXHRcdFx0Ly8gaHR0cDovL2pzcGVyZi5jb20vamF2YXNjcmlwdC1hcnJheS1jb25jYXQtdnMtcHVzaC85OFxuXHRcdFx0cmVzdWx0cyA9IGNvbmNhdC5jYWxsKHJlc3VsdHMsIHNsaWNlLmNhbGwoYXJnKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdHMucHVzaChhcmcpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuc3dpenpsZS53cmFwID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGZuKHN3aXp6bGUoYXJndW1lbnRzKSk7XG5cdH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0FycmF5aXNoKG9iaikge1xuXHRpZiAoIW9iaikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiBvYmogaW5zdGFuY2VvZiBBcnJheSB8fCBBcnJheS5pc0FycmF5KG9iaikgfHxcblx0XHQob2JqLmxlbmd0aCA+PSAwICYmIG9iai5zcGxpY2UgaW5zdGFuY2VvZiBGdW5jdGlvbik7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNvbnZlcnNpb25zID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbnZhciByb3V0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xuXG52YXIgY29udmVydCA9IHt9O1xuXG52YXIgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5mdW5jdGlvbiB3cmFwUmF3KGZuKSB7XG5cdHZhciB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoYXJncykge1xuXHRcdGlmIChhcmdzID09PSB1bmRlZmluZWQgfHwgYXJncyA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGFyZ3M7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZm4oYXJncyk7XG5cdH07XG5cblx0Ly8gcHJlc2VydmUgLmNvbnZlcnNpb24gcHJvcGVydHkgaWYgdGhlcmUgaXMgb25lXG5cdGlmICgnY29udmVyc2lvbicgaW4gZm4pIHtcblx0XHR3cmFwcGVkRm4uY29udmVyc2lvbiA9IGZuLmNvbnZlcnNpb247XG5cdH1cblxuXHRyZXR1cm4gd3JhcHBlZEZuO1xufVxuXG5mdW5jdGlvbiB3cmFwUm91bmRlZChmbikge1xuXHR2YXIgd3JhcHBlZEZuID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0XHRpZiAoYXJncyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3MgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBhcmdzO1xuXHRcdH1cblxuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdFx0fVxuXG5cdFx0dmFyIHJlc3VsdCA9IGZuKGFyZ3MpO1xuXG5cdFx0Ly8gd2UncmUgYXNzdW1pbmcgdGhlIHJlc3VsdCBpcyBhbiBhcnJheSBoZXJlLlxuXHRcdC8vIHNlZSBub3RpY2UgaW4gY29udmVyc2lvbnMuanM7IGRvbid0IHVzZSBib3ggdHlwZXNcblx0XHQvLyBpbiBjb252ZXJzaW9uIGZ1bmN0aW9ucy5cblx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGZvciAodmFyIGxlbiA9IHJlc3VsdC5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0cmVzdWx0W2ldID0gTWF0aC5yb3VuZChyZXN1bHRbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0Ly8gcHJlc2VydmUgLmNvbnZlcnNpb24gcHJvcGVydHkgaWYgdGhlcmUgaXMgb25lXG5cdGlmICgnY29udmVyc2lvbicgaW4gZm4pIHtcblx0XHR3cmFwcGVkRm4uY29udmVyc2lvbiA9IGZuLmNvbnZlcnNpb247XG5cdH1cblxuXHRyZXR1cm4gd3JhcHBlZEZuO1xufVxuXG5tb2RlbHMuZm9yRWFjaChmdW5jdGlvbiAoZnJvbU1vZGVsKSB7XG5cdGNvbnZlcnRbZnJvbU1vZGVsXSA9IHt9O1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdjaGFubmVscycsIHt2YWx1ZTogY29udmVyc2lvbnNbZnJvbU1vZGVsXS5jaGFubmVsc30pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFtmcm9tTW9kZWxdLCAnbGFiZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmxhYmVsc30pO1xuXG5cdHZhciByb3V0ZXMgPSByb3V0ZShmcm9tTW9kZWwpO1xuXHR2YXIgcm91dGVNb2RlbHMgPSBPYmplY3Qua2V5cyhyb3V0ZXMpO1xuXG5cdHJvdXRlTW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKHRvTW9kZWwpIHtcblx0XHR2YXIgZm4gPSByb3V0ZXNbdG9Nb2RlbF07XG5cblx0XHRjb252ZXJ0W2Zyb21Nb2RlbF1bdG9Nb2RlbF0gPSB3cmFwUm91bmRlZChmbik7XG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdLnJhdyA9IHdyYXBSYXcoZm4pO1xuXHR9KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG5cblxuLyoqKi8gfSksXG4vKiAyMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgY29udmVyc2lvbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXG4vKlxuXHR0aGlzIGZ1bmN0aW9uIHJvdXRlcyBhIG1vZGVsIHRvIGFsbCBvdGhlciBtb2RlbHMuXG5cblx0YWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSByb3V0ZWQgaGF2ZSBhIHByb3BlcnR5IGAuY29udmVyc2lvbmAgYXR0YWNoZWRcblx0dG8gdGhlIHJldHVybmVkIHN5bnRoZXRpYyBmdW5jdGlvbi4gVGhpcyBwcm9wZXJ0eSBpcyBhbiBhcnJheVxuXHRvZiBzdHJpbmdzLCBlYWNoIHdpdGggdGhlIHN0ZXBzIGluIGJldHdlZW4gdGhlICdmcm9tJyBhbmQgJ3RvJ1xuXHRjb2xvciBtb2RlbHMgKGluY2x1c2l2ZSkuXG5cblx0Y29udmVyc2lvbnMgdGhhdCBhcmUgbm90IHBvc3NpYmxlIHNpbXBseSBhcmUgbm90IGluY2x1ZGVkLlxuKi9cblxuZnVuY3Rpb24gYnVpbGRHcmFwaCgpIHtcblx0dmFyIGdyYXBoID0ge307XG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9vYmplY3Qta2V5cy12cy1mb3ItaW4td2l0aC1jbG9zdXJlLzNcblx0dmFyIG1vZGVscyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zKTtcblxuXHRmb3IgKHZhciBsZW4gPSBtb2RlbHMubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0Z3JhcGhbbW9kZWxzW2ldXSA9IHtcblx0XHRcdC8vIGh0dHA6Ly9qc3BlcmYuY29tLzEtdnMtaW5maW5pdHlcblx0XHRcdC8vIG1pY3JvLW9wdCwgYnV0IHRoaXMgaXMgc2ltcGxlLlxuXHRcdFx0ZGlzdGFuY2U6IC0xLFxuXHRcdFx0cGFyZW50OiBudWxsXG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBncmFwaDtcbn1cblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQnJlYWR0aC1maXJzdF9zZWFyY2hcbmZ1bmN0aW9uIGRlcml2ZUJGUyhmcm9tTW9kZWwpIHtcblx0dmFyIGdyYXBoID0gYnVpbGRHcmFwaCgpO1xuXHR2YXIgcXVldWUgPSBbZnJvbU1vZGVsXTsgLy8gdW5zaGlmdCAtPiBxdWV1ZSAtPiBwb3BcblxuXHRncmFwaFtmcm9tTW9kZWxdLmRpc3RhbmNlID0gMDtcblxuXHR3aGlsZSAocXVldWUubGVuZ3RoKSB7XG5cdFx0dmFyIGN1cnJlbnQgPSBxdWV1ZS5wb3AoKTtcblx0XHR2YXIgYWRqYWNlbnRzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnNbY3VycmVudF0pO1xuXG5cdFx0Zm9yICh2YXIgbGVuID0gYWRqYWNlbnRzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0dmFyIGFkamFjZW50ID0gYWRqYWNlbnRzW2ldO1xuXHRcdFx0dmFyIG5vZGUgPSBncmFwaFthZGphY2VudF07XG5cblx0XHRcdGlmIChub2RlLmRpc3RhbmNlID09PSAtMSkge1xuXHRcdFx0XHRub2RlLmRpc3RhbmNlID0gZ3JhcGhbY3VycmVudF0uZGlzdGFuY2UgKyAxO1xuXHRcdFx0XHRub2RlLnBhcmVudCA9IGN1cnJlbnQ7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoYWRqYWNlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBncmFwaDtcbn1cblxuZnVuY3Rpb24gbGluayhmcm9tLCB0bykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGFyZ3MpIHtcblx0XHRyZXR1cm4gdG8oZnJvbShhcmdzKSk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIHdyYXBDb252ZXJzaW9uKHRvTW9kZWwsIGdyYXBoKSB7XG5cdHZhciBwYXRoID0gW2dyYXBoW3RvTW9kZWxdLnBhcmVudCwgdG9Nb2RlbF07XG5cdHZhciBmbiA9IGNvbnZlcnNpb25zW2dyYXBoW3RvTW9kZWxdLnBhcmVudF1bdG9Nb2RlbF07XG5cblx0dmFyIGN1ciA9IGdyYXBoW3RvTW9kZWxdLnBhcmVudDtcblx0d2hpbGUgKGdyYXBoW2N1cl0ucGFyZW50KSB7XG5cdFx0cGF0aC51bnNoaWZ0KGdyYXBoW2N1cl0ucGFyZW50KTtcblx0XHRmbiA9IGxpbmsoY29udmVyc2lvbnNbZ3JhcGhbY3VyXS5wYXJlbnRdW2N1cl0sIGZuKTtcblx0XHRjdXIgPSBncmFwaFtjdXJdLnBhcmVudDtcblx0fVxuXG5cdGZuLmNvbnZlcnNpb24gPSBwYXRoO1xuXHRyZXR1cm4gZm47XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZyb21Nb2RlbCkge1xuXHR2YXIgZ3JhcGggPSBkZXJpdmVCRlMoZnJvbU1vZGVsKTtcblx0dmFyIGNvbnZlcnNpb24gPSB7fTtcblxuXHR2YXIgbW9kZWxzID0gT2JqZWN0LmtleXMoZ3JhcGgpO1xuXHRmb3IgKHZhciBsZW4gPSBtb2RlbHMubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0dmFyIHRvTW9kZWwgPSBtb2RlbHNbaV07XG5cdFx0dmFyIG5vZGUgPSBncmFwaFt0b01vZGVsXTtcblxuXHRcdGlmIChub2RlLnBhcmVudCA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gbm8gcG9zc2libGUgY29udmVyc2lvbiwgb3IgdGhpcyBub2RlIGlzIHRoZSBzb3VyY2UgbW9kZWwuXG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb252ZXJzaW9uW3RvTW9kZWxdID0gd3JhcENvbnZlcnNpb24odG9Nb2RlbCwgZ3JhcGgpO1xuXHR9XG5cblx0cmV0dXJuIGNvbnZlcnNpb247XG59O1xuXG5cblxuLyoqKi8gfSksXG4vKiAyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX2pxdWVyeSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbnZhciBfanF1ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2pxdWVyeSk7XG5cbnZhciBfQ29sb3JJdGVtID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblxudmFyIF9Db2xvckl0ZW0yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfQ29sb3JJdGVtKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiBIYW5kbGVzIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgY29sb3JwaWNrZXIgY29sb3JcbiAqIEBpZ25vcmVcbiAqL1xudmFyIENvbG9ySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29sb3JwaWNrZXJ9IGNvbG9ycGlja2VyXG4gICAqL1xuICBmdW5jdGlvbiBDb2xvckhhbmRsZXIoY29sb3JwaWNrZXIpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29sb3JIYW5kbGVyKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtDb2xvcnBpY2tlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycGlja2VyID0gY29sb3JwaWNrZXI7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgeyp8U3RyaW5nfENvbG9ySXRlbX1cbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoQ29sb3JIYW5kbGVyLCBbe1xuICAgIGtleTogJ2JpbmQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBiaW5kKCkge1xuICAgICAgLy8gaWYgdGhlIGNvbG9yIG9wdGlvbiBpcyBzZXRcbiAgICAgIGlmICh0aGlzLmNvbG9ycGlja2VyLm9wdGlvbnMuY29sb3IpIHtcbiAgICAgICAgdGhpcy5jb2xvciA9IHRoaXMuY3JlYXRlQ29sb3IodGhpcy5jb2xvcnBpY2tlci5vcHRpb25zLmNvbG9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiBlbGVtZW50W2NvbG9yXSBpcyBlbXB0eSBhbmQgdGhlIGlucHV0IGhhcyBhIHZhbHVlXG4gICAgICBpZiAoIXRoaXMuY29sb3IgJiYgISF0aGlzLmNvbG9ycGlja2VyLmlucHV0SGFuZGxlci5nZXRWYWx1ZSgpKSB7XG4gICAgICAgIHRoaXMuY29sb3IgPSB0aGlzLmNyZWF0ZUNvbG9yKHRoaXMuY29sb3JwaWNrZXIuaW5wdXRIYW5kbGVyLmdldFZhbHVlKCksIHRoaXMuY29sb3JwaWNrZXIub3B0aW9ucy5hdXRvSW5wdXRGYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAndW5iaW5kJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgICAgdGhpcy5jb2xvcnBpY2tlci5lbGVtZW50LnJlbW92ZURhdGEoJ2NvbG9yJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY29sb3Igc3RyaW5nIGZyb20gdGhlIGlucHV0IHZhbHVlIG9yIHRoZSAnZGF0YS1jb2xvcicgYXR0cmlidXRlIG9mIHRoZSBpbnB1dCBvciBlbGVtZW50LlxuICAgICAqIElmIGVtcHR5LCBpdCByZXR1cm5zIHRoZSBkZWZhdWx0VmFsdWUgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ3wqfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdnZXRDb2xvclN0cmluZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbG9yU3RyaW5nKCkge1xuICAgICAgaWYgKCF0aGlzLmhhc0NvbG9yKCkpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb2xvci5zdHJpbmcodGhpcy5mb3JtYXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbG9yIHZhbHVlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xDb2xvckl0ZW19IHZhbFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzZXRDb2xvclN0cmluZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldENvbG9yU3RyaW5nKHZhbCkge1xuICAgICAgdmFyIGNvbG9yID0gdmFsID8gdGhpcy5jcmVhdGVDb2xvcih2YWwpIDogbnVsbDtcblxuICAgICAgdGhpcy5jb2xvciA9IGNvbG9yID8gY29sb3IgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgY29sb3IgdXNpbmcgdGhlIHdpZGdldCBpbnN0YW5jZSBvcHRpb25zIChmYWxsYmFja0NvbG9yLCBmb3JtYXQpLlxuICAgICAqXG4gICAgICogQGZpcmVzIENvbG9ycGlja2VyI2NvbG9ycGlja2VySW52YWxpZFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmYWxsYmFja09uSW52YWxpZFxuICAgICAqIEByZXR1cm5zIHtDb2xvckl0ZW19XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2NyZWF0ZUNvbG9yJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlQ29sb3IodmFsKSB7XG4gICAgICB2YXIgZmFsbGJhY2tPbkludmFsaWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG5cbiAgICAgIHZhciBjb2xvciA9IG5ldyBfQ29sb3JJdGVtMi5kZWZhdWx0KHRoaXMucmVzb2x2ZUNvbG9yRGVsZWdhdGUodmFsKSwgdGhpcy5mb3JtYXQpO1xuXG4gICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICBpZiAoZmFsbGJhY2tPbkludmFsaWQpIHtcbiAgICAgICAgICBjb2xvciA9IHRoaXMuZ2V0RmFsbGJhY2tDb2xvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIChDb2xvcnBpY2tlcikgRmlyZWQgd2hlbiB0aGUgY29sb3IgaXMgaW52YWxpZCBhbmQgdGhlIGZhbGxiYWNrIGNvbG9yIGlzIGdvaW5nIHRvIGJlIHVzZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBldmVudCBDb2xvcnBpY2tlciNjb2xvcnBpY2tlckludmFsaWRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sb3JwaWNrZXIudHJpZ2dlcignY29sb3JwaWNrZXJJbnZhbGlkJywgY29sb3IsIHZhbCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5pc0FscGhhRW5hYmxlZCgpKSB7XG4gICAgICAgIC8vIEFscGhhIGlzIGRpc2FibGVkXG4gICAgICAgIGNvbG9yLmFscGhhID0gMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldEZhbGxiYWNrQ29sb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGYWxsYmFja0NvbG9yKCkge1xuICAgICAgaWYgKHRoaXMuZmFsbGJhY2sgJiYgdGhpcy5mYWxsYmFjayA9PT0gdGhpcy5jb2xvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvcjtcbiAgICAgIH1cblxuICAgICAgdmFyIGZhbGxiYWNrID0gdGhpcy5yZXNvbHZlQ29sb3JEZWxlZ2F0ZSh0aGlzLmZhbGxiYWNrKTtcblxuICAgICAgdmFyIGNvbG9yID0gbmV3IF9Db2xvckl0ZW0yLmRlZmF1bHQoZmFsbGJhY2ssIHRoaXMuZm9ybWF0KTtcblxuICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZmFsbGJhY2sgY29sb3IgaXMgaW52YWxpZC4gRmFsbGluZyBiYWNrIHRvIHRoZSBwcmV2aW91cyBjb2xvciBvciBibGFjayBpZiBhbnkuJyk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yID8gdGhpcy5jb2xvciA6IG5ldyBfQ29sb3JJdGVtMi5kZWZhdWx0KCcjMDAwMDAwJywgdGhpcy5mb3JtYXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29sb3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge0NvbG9ySXRlbX1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnYXNzdXJlQ29sb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhc3N1cmVDb2xvcigpIHtcbiAgICAgIGlmICghdGhpcy5oYXNDb2xvcigpKSB7XG4gICAgICAgIHRoaXMuY29sb3IgPSB0aGlzLmdldEZhbGxiYWNrQ29sb3IoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29sb3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZWdhdGVzIHRoZSBjb2xvciByZXNvbHV0aW9uIHRvIHRoZSBjb2xvcnBpY2tlciBleHRlbnNpb25zLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd8Kn0gY29sb3JcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlYWxDb2xvciBpZiB0cnVlLCB0aGUgY29sb3Igc2hvdWxkIHJlc29sdmUgaW50byBhIHJlYWwgKG5vdCBuYW1lZCkgY29sb3IgY29kZVxuICAgICAqIEByZXR1cm5zIHtDb2xvckl0ZW18U3RyaW5nfCp8bnVsbH1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncmVzb2x2ZUNvbG9yRGVsZWdhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNvbHZlQ29sb3JEZWxlZ2F0ZShjb2xvcikge1xuICAgICAgdmFyIHJlYWxDb2xvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcblxuICAgICAgdmFyIGV4dFJlc29sdmVkQ29sb3IgPSBmYWxzZTtcblxuICAgICAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKHRoaXMuY29sb3JwaWNrZXIuZXh0ZW5zaW9ucywgZnVuY3Rpb24gKG5hbWUsIGV4dCkge1xuICAgICAgICBpZiAoZXh0UmVzb2x2ZWRDb2xvciAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAvLyBza2lwIGlmIHJlc29sdmVkXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV4dFJlc29sdmVkQ29sb3IgPSBleHQucmVzb2x2ZUNvbG9yKGNvbG9yLCByZWFsQ29sb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBleHRSZXNvbHZlZENvbG9yID8gZXh0UmVzb2x2ZWRDb2xvciA6IGNvbG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIGNvbG9yIG9iamVjdCwgdGhhdCBpdCBpcyB2YWxpZCBhbmQgaXQgaXMgbm90IGEgZmFsbGJhY2tcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaXNJbnZhbGlkQ29sb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0ludmFsaWRDb2xvcigpIHtcbiAgICAgIHJldHVybiAhdGhpcy5oYXNDb2xvcigpIHx8ICF0aGlzLmNvbG9yLmlzVmFsaWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHVzZUFscGhhIG9wdGlvbiBpcyBleGFjdGx5IHRydWUsIGZhbHNlIG90aGVyd2lzZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc0FscGhhRW5hYmxlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzQWxwaGFFbmFibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3JwaWNrZXIub3B0aW9ucy51c2VBbHBoYSAhPT0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGNvbG9yIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBDb2xvciwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdoYXNDb2xvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0NvbG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3IgaW5zdGFuY2VvZiBfQ29sb3JJdGVtMi5kZWZhdWx0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2ZhbGxiYWNrJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbG9ycGlja2VyLm9wdGlvbnMuZmFsbGJhY2tDb2xvciA/IHRoaXMuY29sb3JwaWNrZXIub3B0aW9ucy5mYWxsYmFja0NvbG9yIDogdGhpcy5oYXNDb2xvcigpID8gdGhpcy5jb2xvciA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge1N0cmluZ3xudWxsfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdmb3JtYXQnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgaWYgKHRoaXMuY29sb3JwaWNrZXIub3B0aW9ucy5mb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JwaWNrZXIub3B0aW9ucy5mb3JtYXQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmhhc0NvbG9yKCkgJiYgdGhpcy5jb2xvci5oYXNUcmFuc3BhcmVuY3koKSAmJiB0aGlzLmNvbG9yLmZvcm1hdC5tYXRjaCgvXmhleC8pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQWxwaGFFbmFibGVkKCkgPyAncmdiYScgOiAnaGV4JztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGFzQ29sb3IoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvci5mb3JtYXQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAncmdiJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb2xvciBnZXR0ZXJcbiAgICAgKlxuICAgICAqIEB0eXBlIHtDb2xvckl0ZW18bnVsbH1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY29sb3InLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3JwaWNrZXIuZWxlbWVudC5kYXRhKCdjb2xvcicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvbG9yIHNldHRlclxuICAgICAqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBwYXJhbSB7Q29sb3JJdGVtfG51bGx9IHZhbHVlXG4gICAgICovXG4gICAgLFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICB0aGlzLmNvbG9ycGlja2VyLmVsZW1lbnQuZGF0YSgnY29sb3InLCB2YWx1ZSk7XG5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIF9Db2xvckl0ZW0yLmRlZmF1bHQgJiYgdGhpcy5jb2xvcnBpY2tlci5vcHRpb25zLmZvcm1hdCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIC8vIElmIGZvcm1hdCBpcyAnYXV0bycsIHVzZSB0aGUgZmlyc3QgcGFyc2VkIG9uZSBmcm9tIG5vdyBvblxuICAgICAgICB0aGlzLmNvbG9ycGlja2VyLm9wdGlvbnMuZm9ybWF0ID0gdGhpcy5jb2xvci5mb3JtYXQ7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENvbG9ySGFuZGxlcjtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gQ29sb3JIYW5kbGVyO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG5cbi8qKiovIH0pLFxuLyogMjMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9qcXVlcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG52YXIgX2pxdWVyeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qcXVlcnkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4vKipcbiAqIEhhbmRsZXMgZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZSBjb2xvcnBpY2tlciBVSVxuICogQGlnbm9yZVxuICovXG52YXIgUGlja2VySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29sb3JwaWNrZXJ9IGNvbG9ycGlja2VyXG4gICAqL1xuICBmdW5jdGlvbiBQaWNrZXJIYW5kbGVyKGNvbG9ycGlja2VyKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBpY2tlckhhbmRsZXIpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0NvbG9ycGlja2VyfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JwaWNrZXIgPSBjb2xvcnBpY2tlcjtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7alF1ZXJ5fVxuICAgICAqL1xuICAgIHRoaXMucGlja2VyID0gbnVsbDtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQaWNrZXJIYW5kbGVyLCBbe1xuICAgIGtleTogJ2JpbmQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBiaW5kKCkge1xuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSB7alF1ZXJ5fEhUTUxFbGVtZW50fVxuICAgICAgICovXG4gICAgICB2YXIgcGlja2VyID0gdGhpcy5waWNrZXIgPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkodGhpcy5vcHRpb25zLnRlbXBsYXRlKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21DbGFzcykge1xuICAgICAgICBwaWNrZXIuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmN1c3RvbUNsYXNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ob3Jpem9udGFsKSB7XG4gICAgICAgIHBpY2tlci5hZGRDbGFzcygnY29sb3JwaWNrZXItaG9yaXpvbnRhbCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc3VwcG9ydHNBbHBoYUJhcigpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy51c2VBbHBoYSA9IHRydWU7XG4gICAgICAgIHBpY2tlci5hZGRDbGFzcygnY29sb3JwaWNrZXItd2l0aC1hbHBoYScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnVzZUFscGhhID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnYXR0YWNoJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYXR0YWNoKCkge1xuICAgICAgLy8gSW5qZWN0IHRoZSBjb2xvcnBpY2tlciBlbGVtZW50IGludG8gdGhlIERPTVxuICAgICAgdmFyIHBpY2tlclBhcmVudCA9IHRoaXMuY29sb3JwaWNrZXIuY29udGFpbmVyID8gdGhpcy5jb2xvcnBpY2tlci5jb250YWluZXIgOiBudWxsO1xuXG4gICAgICBpZiAocGlja2VyUGFyZW50KSB7XG4gICAgICAgIHRoaXMucGlja2VyLmFwcGVuZFRvKHBpY2tlclBhcmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAndW5iaW5kJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgICAgdGhpcy5waWNrZXIucmVtb3ZlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX3N1cHBvcnRzQWxwaGFCYXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfc3VwcG9ydHNBbHBoYUJhcigpIHtcbiAgICAgIHJldHVybiAodGhpcy5vcHRpb25zLnVzZUFscGhhIHx8IHRoaXMuY29sb3JwaWNrZXIuY29sb3JIYW5kbGVyLmhhc0NvbG9yKCkgJiYgdGhpcy5jb2xvci5oYXNUcmFuc3BhcmVuY3koKSkgJiYgdGhpcy5vcHRpb25zLnVzZUFscGhhICE9PSBmYWxzZSAmJiAoIXRoaXMub3B0aW9ucy5mb3JtYXQgfHwgdGhpcy5vcHRpb25zLmZvcm1hdCAmJiAhdGhpcy5vcHRpb25zLmZvcm1hdC5tYXRjaCgvXmhleChbMzZdKT8kL2kpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIHRoZSBjb2xvciBhZGp1c3RtZW50IGJhcnMgdXNpbmcgdGhlIGN1cnJlbnQgY29sb3Igb2JqZWN0IGluZm9ybWF0aW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd1cGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICBpZiAoIXRoaXMuY29sb3JwaWNrZXIuY29sb3JIYW5kbGVyLmhhc0NvbG9yKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmVydGljYWwgPSB0aGlzLm9wdGlvbnMuaG9yaXpvbnRhbCAhPT0gdHJ1ZSxcbiAgICAgICAgICBzbGlkZXIgPSB2ZXJ0aWNhbCA/IHRoaXMub3B0aW9ucy5zbGlkZXJzIDogdGhpcy5vcHRpb25zLnNsaWRlcnNIb3J6O1xuXG4gICAgICB2YXIgc2F0dXJhdGlvbkd1aWRlID0gdGhpcy5waWNrZXIuZmluZCgnLmNvbG9ycGlja2VyLXNhdHVyYXRpb24gLmNvbG9ycGlja2VyLWd1aWRlJyksXG4gICAgICAgICAgaHVlR3VpZGUgPSB0aGlzLnBpY2tlci5maW5kKCcuY29sb3JwaWNrZXItaHVlIC5jb2xvcnBpY2tlci1ndWlkZScpLFxuICAgICAgICAgIGFscGhhR3VpZGUgPSB0aGlzLnBpY2tlci5maW5kKCcuY29sb3JwaWNrZXItYWxwaGEgLmNvbG9ycGlja2VyLWd1aWRlJyk7XG5cbiAgICAgIHZhciBoc3ZhID0gdGhpcy5jb2xvci50b0hzdmFSYXRpbygpO1xuXG4gICAgICAvLyBTZXQgZ3VpZGVzIHBvc2l0aW9uXG4gICAgICBpZiAoaHVlR3VpZGUubGVuZ3RoKSB7XG4gICAgICAgIGh1ZUd1aWRlLmNzcyh2ZXJ0aWNhbCA/ICd0b3AnIDogJ2xlZnQnLCAodmVydGljYWwgPyBzbGlkZXIuaHVlLm1heFRvcCA6IHNsaWRlci5odWUubWF4TGVmdCkgKiAoMSAtIGhzdmEuaCkpO1xuICAgICAgfVxuICAgICAgaWYgKGFscGhhR3VpZGUubGVuZ3RoKSB7XG4gICAgICAgIGFscGhhR3VpZGUuY3NzKHZlcnRpY2FsID8gJ3RvcCcgOiAnbGVmdCcsICh2ZXJ0aWNhbCA/IHNsaWRlci5hbHBoYS5tYXhUb3AgOiBzbGlkZXIuYWxwaGEubWF4TGVmdCkgKiAoMSAtIGhzdmEuYSkpO1xuICAgICAgfVxuICAgICAgaWYgKHNhdHVyYXRpb25HdWlkZS5sZW5ndGgpIHtcbiAgICAgICAgc2F0dXJhdGlvbkd1aWRlLmNzcyh7XG4gICAgICAgICAgJ3RvcCc6IHNsaWRlci5zYXR1cmF0aW9uLm1heFRvcCAtIGhzdmEudiAqIHNsaWRlci5zYXR1cmF0aW9uLm1heFRvcCxcbiAgICAgICAgICAnbGVmdCc6IGhzdmEucyAqIHNsaWRlci5zYXR1cmF0aW9uLm1heExlZnRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBzYXR1cmF0aW9uIGh1ZSBiYWNrZ3JvdW5kXG4gICAgICB0aGlzLnBpY2tlci5maW5kKCcuY29sb3JwaWNrZXItc2F0dXJhdGlvbicpLmNzcygnYmFja2dyb3VuZENvbG9yJywgdGhpcy5jb2xvci5nZXRDbG9uZUh1ZU9ubHkoKS50b0hleFN0cmluZygpKTsgLy8gd2Ugb25seSBuZWVkIGh1ZVxuXG4gICAgICAvLyBTZXQgYWxwaGEgY29sb3IgZ3JhZGllbnRcbiAgICAgIHZhciBoZXhDb2xvciA9IHRoaXMuY29sb3IudG9IZXhTdHJpbmcoKTtcblxuICAgICAgdmFyIGFscGhhQmcgPSAnJztcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ob3Jpem9udGFsKSB7XG4gICAgICAgIGFscGhhQmcgPSAnbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAnICsgaGV4Q29sb3IgKyAnIDAlLCB0cmFuc3BhcmVudCAxMDAlKSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbHBoYUJnID0gJ2xpbmVhci1ncmFkaWVudCh0byBib3R0b20sICcgKyBoZXhDb2xvciArICcgMCUsIHRyYW5zcGFyZW50IDEwMCUpJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5waWNrZXIuZmluZCgnLmNvbG9ycGlja2VyLWFscGhhLWNvbG9yJykuY3NzKCdiYWNrZ3JvdW5kJywgYWxwaGFCZyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb3B0aW9ucycsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xvcnBpY2tlci5vcHRpb25zO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbG9yJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbG9ycGlja2VyLmNvbG9ySGFuZGxlci5jb2xvcjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUGlja2VySGFuZGxlcjtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUGlja2VySGFuZGxlcjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xuXG4vKioqLyB9KSxcbi8qIDI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qKlxuICogSGFuZGxlcyBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGNvbG9ycGlja2VyIGFkZG9uXG4gKiBAaWdub3JlXG4gKi9cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxudmFyIEFkZG9uSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29sb3JwaWNrZXJ9IGNvbG9ycGlja2VyXG4gICAqL1xuICBmdW5jdGlvbiBBZGRvbkhhbmRsZXIoY29sb3JwaWNrZXIpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQWRkb25IYW5kbGVyKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtDb2xvcnBpY2tlcn1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycGlja2VyID0gY29sb3JwaWNrZXI7XG4gICAgLyoqXG4gICAgICogQHR5cGUge2pRdWVyeX1cbiAgICAgKi9cbiAgICB0aGlzLmFkZG9uID0gbnVsbDtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhBZGRvbkhhbmRsZXIsIFt7XG4gICAga2V5OiAnaGFzQWRkb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNBZGRvbigpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuYWRkb247XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnYmluZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJpbmQoKSB7XG4gICAgICAvKipcbiAgICAgICAqIEB0eXBlIHsqfGpRdWVyeX1cbiAgICAgICAqL1xuICAgICAgdGhpcy5hZGRvbiA9IHRoaXMuY29sb3JwaWNrZXIub3B0aW9ucy5hZGRvbiA/IHRoaXMuY29sb3JwaWNrZXIuZWxlbWVudC5maW5kKHRoaXMuY29sb3JwaWNrZXIub3B0aW9ucy5hZGRvbikgOiBudWxsO1xuXG4gICAgICBpZiAodGhpcy5hZGRvbiAmJiB0aGlzLmFkZG9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBub3QgZm91bmRcbiAgICAgICAgdGhpcy5hZGRvbiA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAndW5iaW5kJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgICAgaWYgKHRoaXMuaGFzQWRkb24oKSkge1xuICAgICAgICB0aGlzLmFkZG9uLm9mZignLmNvbG9ycGlja2VyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIGFkZG9uIGVsZW1lbnQgaXMgcHJlc2VudCwgaXRzIGJhY2tncm91bmQgY29sb3IgaXMgdXBkYXRlZFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd1cGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICBpZiAoIXRoaXMuY29sb3JwaWNrZXIuY29sb3JIYW5kbGVyLmhhc0NvbG9yKCkgfHwgIXRoaXMuaGFzQWRkb24oKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjb2xvclN0ciA9IHRoaXMuY29sb3JwaWNrZXIuY29sb3JIYW5kbGVyLmdldENvbG9yU3RyaW5nKCk7XG5cbiAgICAgIHZhciBzdHlsZXMgPSB7ICdiYWNrZ3JvdW5kJzogY29sb3JTdHIgfTtcblxuICAgICAgdmFyIGljbiA9IHRoaXMuYWRkb24uZmluZCgnaScpLmVxKDApO1xuXG4gICAgICBpZiAoaWNuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWNuLmNzcyhzdHlsZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hZGRvbi5jc3Moc3R5bGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQWRkb25IYW5kbGVyO1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBBZGRvbkhhbmRsZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcblxuLyoqKi8gfSlcbi8qKioqKiovIF0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib290c3RyYXAtY29sb3JwaWNrZXIuanMubWFwXG59LmNhbGwod2luZG93LCBmYWxzZSwgZmFsc2UpKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93W1wialF1ZXJ5XCJdOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBpbml0Q29sb3JQaWNrZXJzIGZyb20gJ0BhcHAvdXRpbHMvY29sb3JwaWNrZXInO1xuaW1wb3J0IFRyYW5zbGF0YWJsZUNob2ljZSBmcm9tICdAY29tcG9uZW50cy9mb3JtL3RyYW5zbGF0YWJsZS1jaG9pY2UnO1xuaW1wb3J0IFRyYW5zbGF0YWJsZUlucHV0IGZyb20gJ0Bjb21wb25lbnRzL3RyYW5zbGF0YWJsZS1pbnB1dCc7XG5pbXBvcnQgRm9ybU1hcCBmcm9tICdAcGFnZXMvb3JkZXItc3RhdGVzL2Zvcm0tbWFwJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4kKCgpID0+IHtcbiAgaW5pdENvbG9yUGlja2VycygpO1xuICBuZXcgVHJhbnNsYXRhYmxlSW5wdXQoKTtcbiAgbmV3IFRyYW5zbGF0YWJsZUNob2ljZSgpO1xuXG4gIGxldCB0ZW1wbGF0ZVByZXZpZXdXaW5kb3cgPSBudWxsO1xuICBmdW5jdGlvbiB2aWV3VGVtcGxhdGVzKCR1cmkpIHtcbiAgICBpZiAodGVtcGxhdGVQcmV2aWV3V2luZG93ICE9IG51bGwgJiYgIXRlbXBsYXRlUHJldmlld1dpbmRvdy5jbG9zZWQpIHtcbiAgICAgIHRlbXBsYXRlUHJldmlld1dpbmRvdy5jbG9zZSgpO1xuICAgIH1cbiAgICB0ZW1wbGF0ZVByZXZpZXdXaW5kb3cgPSB3aW5kb3cub3BlbihcbiAgICAgICR1cmksXG4gICAgICAndHBsX3ZpZXdpbmcnLFxuICAgICAgJ3Rvb2xiYXI9MCwnXG4gICAgICArICdsb2NhdGlvbj0wLCdcbiAgICAgICsgJ2RpcmVjdG9yaWVzPTAsJ1xuICAgICAgKyAnc3RhdGZyPW5vLCdcbiAgICAgICsgJ21lbnViYXI9MCwnXG4gICAgICArICdzY3JvbGxiYXJzPXllcywnXG4gICAgICArICdyZXNpemFibGU9eWVzLCdcbiAgICAgICsgJ3dpZHRoPTUyMCwnXG4gICAgICArICdoZWlnaHQ9NDAwLCdcbiAgICAgICsgJ3RvcD01MCwnXG4gICAgICArICdsZWZ0PTMwMCcsXG4gICAgKTtcbiAgICB0ZW1wbGF0ZVByZXZpZXdXaW5kb3cuZm9jdXMoKTtcbiAgfVxuXG4gICQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgICBpZiAoISQoRm9ybU1hcC5zZW5kRW1haWxTZWxlY3RvcikuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICQoRm9ybU1hcC5tYWlsVGVtcGxhdGVTZWxlY3RvcikuaGlkZSgpO1xuICAgIH1cbiAgICAkKGRvY3VtZW50KS5vbignY2hhbmdlJywgRm9ybU1hcC5zZW5kRW1haWxTZWxlY3RvciwgKCkgPT4ge1xuICAgICAgJChGb3JtTWFwLm1haWxUZW1wbGF0ZVNlbGVjdG9yKS5zbGlkZVRvZ2dsZSgpO1xuICAgIH0pO1xuXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgRm9ybU1hcC5tYWlsVGVtcGxhdGVQcmV2aWV3LCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0ICRlbGVtZW50ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgIGNvbnN0ICRzZWxlY3QgPSAkZWxlbWVudC5jbG9zZXN0KCcuZm9ybS1ncm91cCcpLmZpbmQoJ3NlbGVjdC50cmFuc2xhdGFibGVfY2hvaWNlOnZpc2libGUnKTtcbiAgICAgIGNvbnN0ICR1cmkgPSAkc2VsZWN0LmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpLmF0dHIoJ2RhdGEtcHJldmlldycpO1xuXG4gICAgICB2aWV3VGVtcGxhdGVzKCR1cmkpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==

Youez - 2016 - github.com/yon3zu
LinuXploit