@digitransit-component/digitransit-component-autosuggest-panel 8.0.0 → 8.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.development.js +2 -2
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +4 -4
package/lib/index.development.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("classnames"),require("prop-types"),require("react"),require("react-i18next"),require("react-sortablejs"),require("@digitransit-component/digitransit-component-autosuggest"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("i18next")):"function"==typeof define&&define.amd?define(["exports","classnames","prop-types","react","react-i18next","react-sortablejs","@digitransit-component/digitransit-component-autosuggest","@digitransit-component/digitransit-component-icon","lodash/isEmpty","i18next"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-autosuggest-panel"]={},e.cx,e.PropTypes,e.React,e.reactI18next,e.reactSortablejs,e.DTAutosuggest,e.Icon,e.isEmpty,e.i18next)}(this,(function(e,t,n,o,i,r,s,a,l,u){"use strict";function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=c(t),d=c(n),f=c(o),g=c(s),h=c(a),y=c(l);function m(e){return m="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},m(e)}function v(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=m(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==m(t)?t:t+""}function b(e,t,n){return(t=v(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(e,t){if(null==e)return{};var n,o,i=function(e,t){if(null==e)return{};var n={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(-1!==t.indexOf(o))continue;n[o]=e[o]}return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function S(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var w,x,O={};var I,P,k={};function j(){if(P)return I;P=1;var e=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],o=!0,i=!1,r=void 0;try{for(var s,a=e[Symbol.iterator]();!(o=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{!o&&a.return&&a.return()}finally{if(i)throw r}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};return I=function(t){var n=t.data,o=t.multiSection;function i(t){var i=e(t,2),r=i[0],s=i[1];return o?null===s||s===n[r]-1?null===(r=function(e){for(null===e?e=0:e++;e<n.length&&0===n[e];)e++;return e===n.length?null:e}(r))?[null,null]:[r,0]:[r,s+1]:0===n||s===n-1?[null,null]:null===s?[null,0]:[null,s+1]}return{next:i,prev:function(t){var i=e(t,2),r=i[0],s=i[1];return o?null===s||0===s?null===(r=function(e){for(null===e?e=n.length-1:e--;e>=0&&0===n[e];)e--;return-1===e?null:e}(r))?[null,null]:[r,n[r]-1]:[r,s-1]:0===n||0===s?[null,null]:null===s?[null,n-1]:[null,s-1]},isLast:function(e){return null===i(e)[1]}}}}var C,E,R,M={exports:{}};function D(){if(E)return C;E=1;var e=Object.prototype.propertyIsEnumerable;function t(t){var n=Object.getOwnPropertyNames(t);return Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t))),n.filter((function(n){return e.call(t,n)}))}return C=Object.assign||function(e,n){for(var o,i,r=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){o=arguments[s],i=t(Object(o));for(var a=0;a<i.length;a++)r[i[a]]=o[i[a]]}return r},C}function T(){return R||(R=1,function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],o=!0,i=!1,r=void 0;try{for(var s,a=e[Symbol.iterator]();!(o=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{!o&&a.return&&a.return()}finally{if(i)throw r}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function o(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i,r=D(),s=(i=r)&&i.__esModule?i:{default:i},a=function(e){return e};t.default=function(e){var t=Array.isArray(e)&&2===e.length?e:[e,null],i=n(t,2),r=i[0],l=i[1];return function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];var u=n.map((function(e){return r[e]})).filter(a);return"string"==typeof u[0]||"function"==typeof l?{key:e,className:l?l.apply(void 0,o(u)):u.join(" ")}:{key:e,style:s.default.apply(void 0,[{}].concat(o(u)))}}},e.exports=t.default}(M,M.exports)),M.exports}var A,F,N={},q={};function V(){return A||(A=1,function(e){function t(e){return t="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},t(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(e===n)return!1;var i=Object.keys(e),r=Object.keys(n);if(i.length!==r.length)return!0;var s,a,l={};for(s=0,a=o.length;s<a;s++)l[o[s]]=!0;for(s=0,a=i.length;s<a;s++){var u=i[s],c=e[u],p=n[u];if(c!==p){if(!l[u]||null===c||null===p||"object"!==t(c)||"object"!==t(p))return!0;var d=Object.keys(c),f=Object.keys(p);if(d.length!==f.length)return!0;for(var g=0,h=d.length;g<h;g++){var y=d[g];if(c[y]!==p[y])return!0}}}return!1}}(q)),q}function L(){return F||(F=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==s(e)&&"function"!=typeof e)return{default:e};var t=r();if(t&&t.has(e))return t.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var a=o?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=e[i]}n.default=e,t&&t.set(e,n);return n}(f.default),n=i(d.default),o=i(V());function i(e){return e&&e.__esModule?e:{default:e}}function r(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return r=function(){return e},e}function s(e){return s="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},s(e)}function a(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function l(e){return function(){var t,n=u(e);if(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()){var o=u(this).constructor;t=Reflect.construct(n,arguments,o)}else t=n.apply(this,arguments);return function(e,t){if(t&&("object"===s(t)||"function"==typeof t))return t;return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,t)}}function u(e){return u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},u(e)}function c(e,t){return c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},c(e,t)}var p=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(u,e);var n,i,r,s=l(u);function u(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),s.apply(this,arguments)}return n=u,i=[{key:"shouldComponentUpdate",value:function(e){return(0,o.default)(e,this.props)}},{key:"render",value:function(){var e=this.props,n=e.section,o=e.renderSectionTitle,i=e.theme,r=e.sectionKeyPrefix,s=o(n);return s?t.default.createElement("div",i("".concat(r,"title"),"sectionTitle"),s):null}}],i&&a(n.prototype,i),r&&a(n,r),u}(t.Component);e.default=p,function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(p,"propTypes",{section:n.default.any.isRequired,renderSectionTitle:n.default.func.isRequired,theme:n.default.func.isRequired,sectionKeyPrefix:n.default.string.isRequired})}(N)),N}var H,K,U,z={},B={};function Z(){return H||(H=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==s(e)&&"function"!=typeof e)return{default:e};var t=r();if(t&&t.has(e))return t.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var a=o?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=e[i]}n.default=e,t&&t.set(e,n);return n}(f.default),n=i(d.default),o=i(V());function i(e){return e&&e.__esModule?e:{default:e}}function r(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return r=function(){return e},e}function s(e){return s="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},s(e)}function a(){return a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},a.apply(this,arguments)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function u(e,t){if(null==e)return{};var n,o,i=function(e,t){if(null==e)return{};var n,o,i={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function c(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function p(e){return function(){var t,n=h(e);if(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()){var o=h(this).constructor;t=Reflect.construct(n,arguments,o)}else t=n.apply(this,arguments);return function(e,t){if(t&&("object"===s(t)||"function"==typeof t))return t;return g(e)}(this,t)}}function g(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}function y(e,t){return y=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},y(e,t)}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var v=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&y(e,t)}(d,e);var n,i,r,s=p(d);function d(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,d);for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return m(g(e=s.call.apply(s,[this].concat(n))),"storeItemReference",(function(t){null!==t&&(e.item=t)})),m(g(e),"onMouseEnter",(function(t){var n=e.props,o=n.sectionIndex,i=n.itemIndex;e.props.onMouseEnter(t,{sectionIndex:o,itemIndex:i})})),m(g(e),"onMouseLeave",(function(t){var n=e.props,o=n.sectionIndex,i=n.itemIndex;e.props.onMouseLeave(t,{sectionIndex:o,itemIndex:i})})),m(g(e),"onMouseDown",(function(t){var n=e.props,o=n.sectionIndex,i=n.itemIndex;e.props.onMouseDown(t,{sectionIndex:o,itemIndex:i})})),m(g(e),"onClick",(function(t){var n=e.props,o=n.sectionIndex,i=n.itemIndex;e.props.onClick(t,{sectionIndex:o,itemIndex:i})})),e}return n=d,i=[{key:"shouldComponentUpdate",value:function(e){return(0,o.default)(e,this.props,["renderItemData"])}},{key:"render",value:function(){var e=this.props,n=e.isHighlighted,o=e.item,i=e.renderItem,r=e.renderItemData,s=u(e,["isHighlighted","item","renderItem","renderItemData"]);return delete s.sectionIndex,delete s.itemIndex,"function"==typeof s.onMouseEnter&&(s.onMouseEnter=this.onMouseEnter),"function"==typeof s.onMouseLeave&&(s.onMouseLeave=this.onMouseLeave),"function"==typeof s.onMouseDown&&(s.onMouseDown=this.onMouseDown),"function"==typeof s.onClick&&(s.onClick=this.onClick),t.default.createElement("li",a({role:"option"},s,{ref:this.storeItemReference}),i(o,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){m(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({isHighlighted:n},r)))}}],i&&c(n.prototype,i),r&&c(n,r),d}(t.Component);e.default=v,m(v,"propTypes",{sectionIndex:n.default.number,isHighlighted:n.default.bool.isRequired,itemIndex:n.default.number.isRequired,item:n.default.any.isRequired,renderItem:n.default.func.isRequired,renderItemData:n.default.object.isRequired,onMouseEnter:n.default.func,onMouseLeave:n.default.func,onMouseDown:n.default.func,onClick:n.default.func})}(B)),B}function W(){return K||(K=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==a(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var r=o?Object.getOwnPropertyDescriptor(e,i):null;r&&(r.get||r.set)?Object.defineProperty(n,i,r):n[i]=e[i]}n.default=e,t&&t.set(e,n);return n}(f.default),n=r(d.default),o=r(Z()),i=r(V());function r(e){return e&&e.__esModule?e:{default:e}}function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}function a(e){return a="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},a(e)}function l(){return l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},l.apply(this,arguments)}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function c(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function p(e){return function(){var t,n=h(e);if(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()){var o=h(this).constructor;t=Reflect.construct(n,arguments,o)}else t=n.apply(this,arguments);return function(e,t){if(t&&("object"===a(t)||"function"==typeof t))return t;return g(e)}(this,t)}}function g(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}function y(e,t){return y=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},y(e,t)}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var v=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&y(e,t)}(d,e);var n,r,s,a=p(d);function d(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,d);for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return m(g(e=a.call.apply(a,[this].concat(n))),"storeHighlightedItemReference",(function(t){e.props.onHighlightedItemChange(null===t?null:t.item)})),e}return n=d,r=[{key:"shouldComponentUpdate",value:function(e){return(0,i.default)(e,this.props,["itemProps"])}},{key:"render",value:function(){var e=this,n=this.props,i=n.items,r=n.itemProps,s=n.renderItem,a=n.renderItemData,c=n.sectionIndex,p=n.highlightedItemIndex,d=n.getItemId,f=n.theme,g=n.keyPrefix,h=null===c?g:"".concat(g,"section-").concat(c,"-"),y="function"==typeof r;return t.default.createElement("ul",l({role:"listbox"},f("".concat(h,"items-list"),"itemsList")),i.map((function(n,i){var g=0===i,v=i===p,b="".concat(h,"item-").concat(i),_=y?r({sectionIndex:c,itemIndex:i}):r,S=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){m(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({id:d(c,i),"aria-selected":v},f(b,"item",g&&"itemFirst",v&&"itemHighlighted"),{},_);return v&&(S.ref=e.storeHighlightedItemReference),t.default.createElement(o.default,l({},S,{sectionIndex:c,isHighlighted:v,itemIndex:i,item:n,renderItem:s,renderItemData:a}))})))}}],r&&c(n.prototype,r),s&&c(n,s),d}(t.Component);e.default=v,m(v,"propTypes",{items:n.default.array.isRequired,itemProps:n.default.oneOfType([n.default.object,n.default.func]),renderItem:n.default.func.isRequired,renderItemData:n.default.object.isRequired,sectionIndex:n.default.number,highlightedItemIndex:n.default.number,onHighlightedItemChange:n.default.func.isRequired,getItemId:n.default.func.isRequired,theme:n.default.func.isRequired,keyPrefix:n.default.string.isRequired}),m(v,"defaultProps",{sectionIndex:null})}(z)),z}function Q(){return U||(U=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==h(e)&&"function"!=typeof e)return{default:e};var t=l();if(t&&t.has(e))return t.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var r=o?Object.getOwnPropertyDescriptor(e,i):null;r&&(r.get||r.set)?Object.defineProperty(n,i,r):n[i]=e[i]}n.default=e,t&&t.set(e,n);return n}(f.default),n=a(d.default),o=a(j()),i=a(T()),r=a(L()),s=a(W());function a(e){return e&&e.__esModule?e:{default:e}}function l(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return l=function(){return e},e}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){S(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],o=!0,i=!1,r=void 0;try{for(var s,a=e[Symbol.iterator]();!(o=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw r}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return g(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return g(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function h(e){return h="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},h(e)}function y(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function m(e){return function(){var t,n=b(e);if(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()){var o=b(this).constructor;t=Reflect.construct(n,arguments,o)}else t=n.apply(this,arguments);return function(e,t){if(t&&("object"===h(t)||"function"==typeof t))return t;return v(e)}(this,t)}}function v(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function _(e,t){return _=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},_(e,t)}function S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w={},x=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_(e,t)}(d,e);var n,a,l,u=m(d);function d(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,d),S(v(t=u.call(this,e)),"storeInputReference",(function(e){null!==e&&(t.input=e);var n=t.props.inputProps.ref;n&&("function"==typeof n?n(e):"object"===h(n)&&Object.prototype.hasOwnProperty.call(n,"current")&&(n.current=e))})),S(v(t),"storeItemsContainerReference",(function(e){null!==e&&(t.itemsContainer=e)})),S(v(t),"onHighlightedItemChange",(function(e){t.highlightedItem=e})),S(v(t),"getItemId",(function(e,n){if(null===n)return null;var o=t.props.id,i=null===e?"":"section-".concat(e);return"react-autowhatever-".concat(o,"-").concat(i,"-item-").concat(n)})),S(v(t),"onFocus",(function(e){var n=t.props.inputProps;t.setState({isInputFocused:!0}),n.onFocus&&n.onFocus(e)})),S(v(t),"onBlur",(function(e){var n=t.props.inputProps;t.setState({isInputFocused:!1}),n.onBlur&&n.onBlur(e)})),S(v(t),"onKeyDown",(function(e){var n=t.props,o=n.inputProps,i=n.highlightedSectionIndex,r=n.highlightedItemIndex,s=e.keyCode;switch(s){case 40:case 38:var a=40===s?"next":"prev",l=p(t.sectionIterator[a]([i,r]),2),u=l[0],c=l[1];o.onKeyDown(e,{newHighlightedSectionIndex:u,newHighlightedItemIndex:c});break;default:o.onKeyDown(e,{highlightedSectionIndex:i,highlightedItemIndex:r})}})),t.highlightedItem=null,t.state={isInputFocused:!1},t.setSectionsItems(e),t.setSectionIterator(e),t.setTheme(e),t}return n=d,a=[{key:"componentDidMount",value:function(){this.ensureHighlightedItemIsVisible()}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.items!==this.props.items&&this.setSectionsItems(e),e.items===this.props.items&&e.multiSection===this.props.multiSection||this.setSectionIterator(e),e.theme!==this.props.theme&&this.setTheme(e)}},{key:"componentDidUpdate",value:function(){this.ensureHighlightedItemIsVisible()}},{key:"setSectionsItems",value:function(e){e.multiSection&&(this.sectionsItems=e.items.map((function(t){return e.getSectionItems(t)})),this.sectionsLengths=this.sectionsItems.map((function(e){return e.length})),this.allSectionsAreEmpty=this.sectionsLengths.every((function(e){return 0===e})))}},{key:"setSectionIterator",value:function(e){this.sectionIterator=(0,o.default)({multiSection:e.multiSection,data:e.multiSection?this.sectionsLengths:e.items.length})}},{key:"setTheme",value:function(e){this.theme=(0,i.default)(e.theme)}},{key:"renderSections",value:function(){var e=this;if(this.allSectionsAreEmpty)return null;var n=this.theme,o=this.props,i=o.id,a=o.items,l=o.renderItem,u=o.renderItemData,c=o.renderSectionTitle,p=o.highlightedSectionIndex,d=o.highlightedItemIndex,f=o.itemProps;return a.map((function(o,a){var g="react-autowhatever-".concat(i,"-"),h="".concat(g,"section-").concat(a,"-"),y=0===a;return t.default.createElement("div",n("".concat(h,"container"),"sectionContainer",y&&"sectionContainerFirst"),t.default.createElement(r.default,{section:o,renderSectionTitle:c,theme:n,sectionKeyPrefix:h}),t.default.createElement(s.default,{items:e.sectionsItems[a],itemProps:f,renderItem:l,renderItemData:u,sectionIndex:a,highlightedItemIndex:p===a?d:null,onHighlightedItemChange:e.onHighlightedItemChange,getItemId:e.getItemId,theme:n,keyPrefix:g,ref:e.storeItemsListReference}))}))}},{key:"renderItems",value:function(){var e=this.props.items;if(0===e.length)return null;var n=this.theme,o=this.props,i=o.id,r=o.renderItem,a=o.renderItemData,l=o.highlightedSectionIndex,u=o.highlightedItemIndex,c=o.itemProps;return t.default.createElement(s.default,{items:e,itemProps:c,renderItem:r,renderItemData:a,highlightedItemIndex:null===l?u:null,onHighlightedItemChange:this.onHighlightedItemChange,getItemId:this.getItemId,theme:n,keyPrefix:"react-autowhatever-".concat(i,"-")})}},{key:"ensureHighlightedItemIsVisible",value:function(){var e=this.highlightedItem;if(e){var t=this.itemsContainer,n=e.offsetParent===t?e.offsetTop:e.offsetTop-t.offsetTop,o=t.scrollTop;n<o?o=n:n+e.offsetHeight>o+t.offsetHeight&&(o=n+e.offsetHeight-t.offsetHeight),o!==t.scrollTop&&(t.scrollTop=o)}}},{key:"render",value:function(){var e=this.theme,n=this.props,o=n.id,i=n.multiSection,r=n.renderInputComponent,s=n.renderItemsContainer,a=n.highlightedSectionIndex,l=n.highlightedItemIndex,u=this.state.isInputFocused,p=i?this.renderSections():this.renderItems(),d=null!==p,f=this.getItemId(a,l),g="react-autowhatever-".concat(o),h=c({role:"combobox","aria-haspopup":"listbox","aria-owns":g,"aria-expanded":d},e("react-autowhatever-".concat(o,"-container"),"container",d&&"containerOpen"),{},this.props.containerProps),y=r(c({type:"text",value:"",autoComplete:"off","aria-autocomplete":"list","aria-controls":g,"aria-activedescendant":f},e("react-autowhatever-".concat(o,"-input"),"input",d&&"inputOpen",u&&"inputFocused"),{},this.props.inputProps,{onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.props.inputProps.onKeyDown&&this.onKeyDown,ref:this.storeInputReference})),m=s({containerProps:c({id:g,role:"listbox"},e("react-autowhatever-".concat(o,"-items-container"),"itemsContainer",d&&"itemsContainerOpen"),{ref:this.storeItemsContainerReference}),children:p});return t.default.createElement("div",h,y,m)}}],a&&y(n.prototype,a),l&&y(n,l),d}(t.Component);e.default=x,S(x,"propTypes",{id:n.default.string,multiSection:n.default.bool,renderInputComponent:n.default.func,renderItemsContainer:n.default.func,items:n.default.array.isRequired,renderItem:n.default.func,renderItemData:n.default.object,renderSectionTitle:n.default.func,getSectionItems:n.default.func,containerProps:n.default.object,inputProps:n.default.object,itemProps:n.default.oneOfType([n.default.object,n.default.func]),highlightedSectionIndex:n.default.number,highlightedItemIndex:n.default.number,theme:n.default.oneOfType([n.default.object,n.default.array])}),S(x,"defaultProps",{id:"1",multiSection:!1,renderInputComponent:function(e){return t.default.createElement("input",e)},renderItemsContainer:function(e){var n=e.containerProps,o=e.children;return t.default.createElement("div",n,o)},renderItem:function(){throw new Error("`renderItem` must be provided")},renderItemData:w,renderSectionTitle:function(){throw new Error("`renderSectionTitle` must be provided")},getSectionItems:function(){throw new Error("`getSectionItems` must be provided")},containerProps:w,inputProps:w,itemProps:w,highlightedSectionIndex:null,highlightedItemIndex:null,theme:{container:"react-autowhatever__container",containerOpen:"react-autowhatever__container--open",input:"react-autowhatever__input",inputOpen:"react-autowhatever__input--open",inputFocused:"react-autowhatever__input--focused",itemsContainer:"react-autowhatever__items-container",itemsContainerOpen:"react-autowhatever__items-container--open",itemsList:"react-autowhatever__items-list",item:"react-autowhatever__item",itemFirst:"react-autowhatever__item--first",itemHighlighted:"react-autowhatever__item--highlighted",sectionContainer:"react-autowhatever__section-container",sectionContainerFirst:"react-autowhatever__section-container--first",sectionTitle:"react-autowhatever__section-title"}})}(k)),k}var Y,$,X,J,G={};function ee(){return $||($=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==l(e)&&"function"!=typeof e)return{default:e};var t=a();if(t&&t.has(e))return t.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var r=o?Object.getOwnPropertyDescriptor(e,i):null;r&&(r.get||r.set)?Object.defineProperty(n,i,r):n[i]=e[i]}n.default=e,t&&t.set(e,n);return n}(f.default),n=s(d.default),o=s(x?w:(x=1,w=function(e,t){if(e===t)return!0;if(!e||!t)return!1;var n=e.length;if(t.length!==n)return!1;for(var o=0;o<n;o++)if(e[o]!==t[o])return!1;return!0})),i=s(Q()),r=(Y||(Y=1,Object.defineProperty(G,"__esModule",{value:!0}),G.mapToAutowhateverTheme=G.defaultTheme=void 0,G.defaultTheme={container:"react-autosuggest__container",containerOpen:"react-autosuggest__container--open",input:"react-autosuggest__input",inputOpen:"react-autosuggest__input--open",inputFocused:"react-autosuggest__input--focused",suggestionsContainer:"react-autosuggest__suggestions-container",suggestionsContainerOpen:"react-autosuggest__suggestions-container--open",suggestionsList:"react-autosuggest__suggestions-list",suggestion:"react-autosuggest__suggestion",suggestionFirst:"react-autosuggest__suggestion--first",suggestionHighlighted:"react-autosuggest__suggestion--highlighted",sectionContainer:"react-autosuggest__section-container",sectionContainerFirst:"react-autosuggest__section-container--first",sectionTitle:"react-autosuggest__section-title"},G.mapToAutowhateverTheme=function(e){var t={};for(var n in e)switch(n){case"suggestionsContainer":t.itemsContainer=e[n];break;case"suggestionsContainerOpen":t.itemsContainerOpen=e[n];break;case"suggestion":t.item=e[n];break;case"suggestionFirst":t.itemFirst=e[n];break;case"suggestionHighlighted":t.itemHighlighted=e[n];break;case"suggestionsList":t.itemsList=e[n];break;default:t[n]=e[n]}return t}),G);function s(e){return e&&e.__esModule?e:{default:e}}function a(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return a=function(){return e},e}function l(e){return l="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},l(e)}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){v(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function g(e){return function(){var t,n=y(e);if(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()){var o=y(this).constructor;t=Reflect.construct(n,arguments,o)}else t=n.apply(this,arguments);return function(e,t){if(t&&("object"===l(t)||"function"==typeof t))return t;return h(e)}(this,t)}}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function y(e){return y=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},y(e)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var b=function(){return!0},_="suggestions-revealed",S="input-focused",O="input-changed",I="escape-pressed",P=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&m(e,t)}(u,e);var n,s,a,l=g(u);function u(e){var t,n=e.alwaysRenderSuggestions;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),v(h(t=l.call(this)),"onDocumentMouseDown",(function(e){t.justClickedOnSuggestionsContainer=!1;for(var n=e.detail&&e.detail.target||e.target;null!==n&&n!==document;){if(n.getAttribute&&null!==n.getAttribute("data-suggestion-index"))return;if(n===t.suggestionsContainer)return void(t.justClickedOnSuggestionsContainer=!0);n=n.parentNode}})),v(h(t),"storeAutowhateverRef",(function(e){null!==e&&(t.autowhatever=e)})),v(h(t),"onSuggestionMouseEnter",(function(e,n){var o=n.sectionIndex,i=n.itemIndex;t.updateHighlightedSuggestion(o,i),e.target===t.pressedSuggestion&&(t.justSelectedSuggestion=!0),t.justMouseEntered=!0,setTimeout((function(){t.justMouseEntered=!1}))})),v(h(t),"highlightFirstSuggestion",(function(){t.updateHighlightedSuggestion(t.props.multiSection?0:null,0)})),v(h(t),"onDocumentMouseUp",(function(){t.pressedSuggestion&&!t.justSelectedSuggestion&&t.input.focus(),t.pressedSuggestion=null})),v(h(t),"onSuggestionMouseDown",(function(e){t.justSelectedSuggestion||(t.justSelectedSuggestion=!0,t.pressedSuggestion=e.target)})),v(h(t),"onSuggestionsClearRequested",(function(){var e=t.props.onSuggestionsClearRequested;e&&e()})),v(h(t),"onSuggestionSelected",(function(e,n){var o=t.props,i=o.alwaysRenderSuggestions,r=o.onSuggestionSelected,s=o.onSuggestionsFetchRequested;r&&r(e,n);var a=t.props.shouldKeepSuggestionsOnSelect(n.suggestion);i||a?s({value:n.suggestionValue,reason:"suggestion-selected"}):t.onSuggestionsClearRequested(),t.resetHighlightedSuggestion()})),v(h(t),"onSuggestionClick",(function(e){var n=t.props,o=n.alwaysRenderSuggestions,i=n.focusInputOnSuggestionClick,r=t.getSuggestionIndices(t.findSuggestionElement(e.target)),s=r.sectionIndex,a=r.suggestionIndex,l=t.getSuggestion(s,a),u=t.props.getSuggestionValue(l);t.maybeCallOnChange(e,u,"click"),t.onSuggestionSelected(e,{suggestion:l,suggestionValue:u,suggestionIndex:a,sectionIndex:s,method:"click"});var c=t.props.shouldKeepSuggestionsOnSelect(l);o||c||t.closeSuggestions(),!0===i?t.input.focus():t.onBlur(),setTimeout((function(){t.justSelectedSuggestion=!1}))})),v(h(t),"onBlur",(function(){var e=t.props,n=e.inputProps,o=e.shouldRenderSuggestions,i=n.value,r=n.onBlur,s=t.getHighlightedSuggestion(),a=o(i,"input-blurred");t.setState({isFocused:!1,highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null,isCollapsed:!a}),r&&r(t.blurEvent,{highlightedSuggestion:s})})),v(h(t),"onSuggestionMouseLeave",(function(e){t.resetHighlightedSuggestion(!1),t.justSelectedSuggestion&&e.target===t.pressedSuggestion&&(t.justSelectedSuggestion=!1)})),v(h(t),"onSuggestionTouchStart",(function(){t.justSelectedSuggestion=!0})),v(h(t),"onSuggestionTouchMove",(function(){t.justSelectedSuggestion=!1,t.pressedSuggestion=null,t.input.focus()})),v(h(t),"itemProps",(function(e){return{"data-section-index":e.sectionIndex,"data-suggestion-index":e.itemIndex,onMouseEnter:t.onSuggestionMouseEnter,onMouseLeave:t.onSuggestionMouseLeave,onMouseDown:t.onSuggestionMouseDown,onTouchStart:t.onSuggestionTouchStart,onTouchMove:t.onSuggestionTouchMove,onClick:t.onSuggestionClick}})),v(h(t),"renderSuggestionsContainer",(function(e){var n=e.containerProps,o=e.children;return(0,t.props.renderSuggestionsContainer)({containerProps:n,children:o,query:t.getQuery()})})),t.state={isFocused:!1,isCollapsed:!n,highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null},t.justPressedUpDown=!1,t.justMouseEntered=!1,t.pressedSuggestion=null,t}return n=u,s=[{key:"componentDidMount",value:function(){document.addEventListener("mousedown",this.onDocumentMouseDown),document.addEventListener("mouseup",this.onDocumentMouseUp),this.input=this.autowhatever.input,this.suggestionsContainer=this.autowhatever.itemsContainer}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){var t=0===this.state.highlightedSuggestionIndex&&this.props.highlightFirstSuggestion&&!e.highlightFirstSuggestion;(0,o.default)(e.suggestions,this.props.suggestions)?e.highlightFirstSuggestion&&e.suggestions.length>0&&!1===this.justPressedUpDown&&!1===this.justMouseEntered?this.highlightFirstSuggestion():t&&this.resetHighlightedSuggestion():this.willRenderSuggestions(e,"suggestions-updated")?(this.state.isCollapsed&&!this.justSelectedSuggestion&&this.revealSuggestions(),t&&this.resetHighlightedSuggestion()):this.resetHighlightedSuggestion()}},{key:"componentDidUpdate",value:function(e,t){var n=this.props,i=n.suggestions,r=n.onSuggestionHighlighted,s=n.highlightFirstSuggestion;if(!(0,o.default)(i,e.suggestions)&&i.length>0&&s)this.highlightFirstSuggestion();else if(r){var a=this.getHighlightedSuggestion();a!=t.highlightedSuggestion&&r({suggestion:a})}}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.onDocumentMouseDown),document.removeEventListener("mouseup",this.onDocumentMouseUp)}},{key:"updateHighlightedSuggestion",value:function(e,t,n){var o=this;this.setState((function(i){var r=i.valueBeforeUpDown;return null===t?r=null:null===r&&void 0!==n&&(r=n),{highlightedSectionIndex:e,highlightedSuggestionIndex:t,highlightedSuggestion:null===t?null:o.getSuggestion(e,t),valueBeforeUpDown:r}}))}},{key:"resetHighlightedSuggestion",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.setState((function(t){var n=t.valueBeforeUpDown;return{highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:e?null:n}}))}},{key:"revealSuggestions",value:function(){this.setState({isCollapsed:!1})}},{key:"closeSuggestions",value:function(){this.setState({highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null,isCollapsed:!0})}},{key:"getSuggestion",value:function(e,t){var n=this.props,o=n.suggestions,i=n.multiSection,r=n.getSectionSuggestions;return i?r(o[e])[t]:o[t]}},{key:"getHighlightedSuggestion",value:function(){var e=this.state,t=e.highlightedSectionIndex,n=e.highlightedSuggestionIndex;return null===n?null:this.getSuggestion(t,n)}},{key:"getSuggestionValueByIndex",value:function(e,t){return(0,this.props.getSuggestionValue)(this.getSuggestion(e,t))}},{key:"getSuggestionIndices",value:function(e){var t=e.getAttribute("data-section-index"),n=e.getAttribute("data-suggestion-index");return{sectionIndex:"string"==typeof t?parseInt(t,10):null,suggestionIndex:parseInt(n,10)}}},{key:"findSuggestionElement",value:function(e){var t=e;do{if(t.getAttribute&&null!==t.getAttribute("data-suggestion-index"))return t;t=t.parentNode}while(null!==t);throw console.error("Clicked element:",e),new Error("Couldn't find suggestion element")}},{key:"maybeCallOnChange",value:function(e,t,n){var o=this.props.inputProps,i=o.value,r=o.onChange;t!==i&&r(e,{newValue:t,method:n})}},{key:"willRenderSuggestions",value:function(e,t){var n=e.suggestions,o=e.inputProps,i=e.shouldRenderSuggestions,r=o.value;return n.length>0&&i(r,t)}},{key:"getQuery",value:function(){var e=this.props.inputProps.value,t=this.state.valueBeforeUpDown;return(null===t?e:t).trim()}},{key:"render",value:function(){var e=this,n=this.props,o=n.suggestions,s=n.renderInputComponent,a=n.onSuggestionsFetchRequested,l=n.renderSuggestion,u=n.inputProps,p=n.multiSection,d=n.renderSectionTitle,f=n.id,g=n.getSectionSuggestions,h=n.theme,y=n.getSuggestionValue,m=n.alwaysRenderSuggestions,v=n.highlightFirstSuggestion,w=n.containerProps,x=this.state,P=x.isFocused,k=x.isCollapsed,j=x.highlightedSectionIndex,C=x.highlightedSuggestionIndex,E=x.valueBeforeUpDown,R=m?b:this.props.shouldRenderSuggestions,M=u.value,D=u.onFocus,T=u.onKeyDown,A=this.willRenderSuggestions(this.props,"render"),F=m||P&&!k&&A,N=F?o:[],q=c({},u,{onFocus:function(t){if(!e.justSelectedSuggestion&&!e.justClickedOnSuggestionsContainer){var n=R(M,S);e.setState({isFocused:!0,isCollapsed:!n}),D&&D(t),n&&a({value:M,reason:S})}},onBlur:function(t){e.justClickedOnSuggestionsContainer?e.input.focus():(e.blurEvent=t,e.justSelectedSuggestion||(e.onBlur(),e.onSuggestionsClearRequested()))},onChange:function(t){var n=t.target.value,o=R(n,O);e.maybeCallOnChange(t,n,"type"),e.suggestionsContainer&&(e.suggestionsContainer.scrollTop=0),e.setState(c({},v?{}:{highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null},{valueBeforeUpDown:null,isCollapsed:!o})),o?a({value:n,reason:O}):e.onSuggestionsClearRequested()},onKeyDown:function(t,n){var i=t.keyCode;switch(i){case 40:case 38:if(k)R(M,_)&&(a({value:M,reason:_}),e.revealSuggestions(),t.preventDefault());else if(o.length>0){var r,s=n.newHighlightedSectionIndex,l=n.newHighlightedItemIndex;r=null===l?null===E?M:E:e.getSuggestionValueByIndex(s,l),e.updateHighlightedSuggestion(s,l,M),e.maybeCallOnChange(t,r,40===i?"down":"up"),t.preventDefault()}e.justPressedUpDown=!0,setTimeout((function(){e.justPressedUpDown=!1}));break;case 13:if(229===t.keyCode)break;var u=e.getHighlightedSuggestion();if(F&&!m&&e.closeSuggestions(),null!=u){t.preventDefault();var c=y(u);e.maybeCallOnChange(t,c,"enter"),e.onSuggestionSelected(t,{suggestion:u,suggestionValue:c,suggestionIndex:C,sectionIndex:j,method:"enter"}),e.justSelectedSuggestion=!0,setTimeout((function(){e.justSelectedSuggestion=!1}))}break;case 27:F&&t.preventDefault();var p=F&&!m;null===E?p||(e.maybeCallOnChange(t,"","escape"),R("",I)?a({value:"",reason:I}):e.onSuggestionsClearRequested()):e.maybeCallOnChange(t,E,"escape"),p?(e.onSuggestionsClearRequested(),e.closeSuggestions()):e.resetHighlightedSuggestion()}T&&T(t)}}),V={query:this.getQuery()};return t.default.createElement(i.default,{multiSection:p,items:N,renderInputComponent:s,renderItemsContainer:this.renderSuggestionsContainer,renderItem:l,renderItemData:V,renderSectionTitle:d,getSectionItems:g,highlightedSectionIndex:j,highlightedItemIndex:C,containerProps:w,inputProps:q,itemProps:this.itemProps,theme:(0,r.mapToAutowhateverTheme)(h),id:f,ref:this.storeAutowhateverRef})}}],s&&p(n.prototype,s),a&&p(n,a),u}(t.Component);e.default=P,v(P,"propTypes",{suggestions:n.default.array.isRequired,onSuggestionsFetchRequested:function(e,t){var n=e[t];if("function"!=typeof n)throw new Error("'onSuggestionsFetchRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsFetchRequestedProp")},onSuggestionsClearRequested:function(e,t){var n=e[t];if(!1===e.alwaysRenderSuggestions&&"function"!=typeof n)throw new Error("'onSuggestionsClearRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsClearRequestedProp")},shouldKeepSuggestionsOnSelect:n.default.func,onSuggestionSelected:n.default.func,onSuggestionHighlighted:n.default.func,renderInputComponent:n.default.func,renderSuggestionsContainer:n.default.func,getSuggestionValue:n.default.func.isRequired,renderSuggestion:n.default.func.isRequired,inputProps:function(e,t){var n=e[t];if(!n)throw new Error("'inputProps' must be passed.");if(!Object.prototype.hasOwnProperty.call(n,"value"))throw new Error("'inputProps' must have 'value'.");if(!Object.prototype.hasOwnProperty.call(n,"onChange"))throw new Error("'inputProps' must have 'onChange'.")},shouldRenderSuggestions:n.default.func,alwaysRenderSuggestions:n.default.bool,multiSection:n.default.bool,renderSectionTitle:function(e,t){var n=e[t];if(!0===e.multiSection&&"function"!=typeof n)throw new Error("'renderSectionTitle' must be implemented. See: https://github.com/moroshko/react-autosuggest#renderSectionTitleProp")},getSectionSuggestions:function(e,t){var n=e[t];if(!0===e.multiSection&&"function"!=typeof n)throw new Error("'getSectionSuggestions' must be implemented. See: https://github.com/moroshko/react-autosuggest#getSectionSuggestionsProp")},focusInputOnSuggestionClick:n.default.bool,highlightFirstSuggestion:n.default.bool,theme:n.default.object,id:n.default.string,containerProps:n.default.object}),v(P,"defaultProps",{renderSuggestionsContainer:function(e){var n=e.containerProps,o=e.children;return t.default.createElement("div",n,o)},shouldRenderSuggestions:function(e){return e.trim().length>0},alwaysRenderSuggestions:!1,multiSection:!1,shouldKeepSuggestionsOnSelect:function(){return!1},focusInputOnSuggestionClick:!0,highlightFirstSuggestion:!1,theme:r.defaultTheme,id:"1",containerProps:{}})}(O)),O}var te=S(J?X:(J=1,X=ee().default));function ne(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&o.firstChild?o.insertBefore(i,o.firstChild):o.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}var oe={"combobox-container":"select_combobox-container__0lRpm","left-column":"select_left-column__cSrMR","combobox-label":"select_combobox-label__F9Ayd",container:"select_container__yrA-N",suggestion:"select_suggestion__b05iD",suggestionHighlighted:"select_suggestionHighlighted__ZFPWo",suggestionsContainerOpen:"select_suggestionsContainerOpen__9wcJ5",input:"select_input__pK5vk"};ne(".select_combobox-container__0lRpm {\n background-color: #fff;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 50px;\n justify-content: space-between;\n flex-grow: 1; }\n .select_combobox-container__0lRpm:focus-within {\n border-color: #007ac9; }\n .select_combobox-container__0lRpm .select_left-column__cSrMR {\n display: flex;\n flex-direction: column;\n width: 100%; }\n\n.select_combobox-label__F9Ayd {\n font-size: 12px;\n line-height: 20px;\n color: #666;\n letter-spacing: -0.48px;\n margin-left: 12px;\n margin-top: 4px; }\n\n.select_container__yrA-N {\n position: relative; }\n .select_container__yrA-N .select_suggestion__b05iD {\n font-size: 15px;\n line-height: 49px;\n height: 50px;\n padding: 0 0 0 12px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500; }\n .select_container__yrA-N .select_suggestionHighlighted__ZFPWo {\n font-size: 15px;\n font-weight: 500;\n background: #f2f5f7; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 {\n position: absolute;\n background-color: #fff;\n z-index: 20;\n max-height: 250px;\n overflow-x: hidden;\n overflow-y: scroll;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid;\n top: 35px;\n width: calc(100% + 45px); }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 ul {\n padding: 0;\n margin: 0; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 li:not(:last-child) {\n border-bottom: 1px solid #ddd; }\n .select_container__yrA-N .select_input__pK5vk {\n -webkit-appearance: none;\n appearance: none;\n margin: -4px 0 0 0;\n padding-left: 12px;\n border: none;\n height: 26px;\n background: #fff;\n font-weight: 500;\n box-shadow: none;\n font-size: 15px;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.6px;\n color: #333; }\n .select_container__yrA-N .select_input__pK5vk:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n .select_container__yrA-N .select_input__pK5vk:read-only {\n cursor: pointer;\n background: #fff; }\n");const ie=["ref"],re=({value:e,getDisplay:t,options:n,onSlackTimeSelected:i,viaPointIndex:r,id:s,label:a,icon:l})=>{const[u,c]=o.useState(t(e)),[p,d]=o.useState(!1);o.useEffect((()=>c(t(e))),[e]);const g=o.useRef(null),h=Math.floor(e/600);o.useLayoutEffect((()=>{p&&g.current&&(g.current.scrollTop=50*h)}),[e,p]);const y=`${s}-input`,m=`${s}-label`;return f.default.createElement("label",{className:oe["combobox-container"],htmlFor:y},f.default.createElement("span",{className:oe["left-column"]},f.default.createElement("span",{className:oe["combobox-label"],id:m},a),f.default.createElement(te,{id:s,suggestions:n,getSuggestionValue:e=>e.value,renderSuggestion:e=>e.displayName,onSuggestionsFetchRequested:()=>null,shouldRenderSuggestions:()=>!0,focusInputOnSuggestionClick:!1,onSuggestionsClearRequested:()=>null,inputProps:{value:u,onChange:(t,{newValue:n,method:o})=>{switch(o){case"enter":case"click":i(n,r);break;case"escape":c(e)}},onFocus:()=>{d(!0)},onBlur:()=>{d(!1)},id:y,"aria-labelledby":m,"aria-autocomplete":"none",readOnly:!0},renderSuggestionsContainer:({containerProps:e,children:t})=>{const{ref:n}=e,o=_(e,ie);return f.default.createElement("div",Object.assign({tabIndex:"-1"},o,{ref:e=>{e&&(g.current=e,n(e))}}),t)},theme:oe})),l)};"production"!==process.env.NODE_ENV&&(re.propTypes={value:d.default.number.isRequired,onSlackTimeSelected:d.default.func.isRequired,getDisplay:d.default.func.isRequired,options:d.default.arrayOf(d.default.shape({displayName:d.default.string.isRequired,value:d.default.number.isRequired}).isRequired).isRequired,id:d.default.string.isRequired,label:d.default.node.isRequired,icon:d.default.node.isRequired,viaPointIndex:d.default.number.isRequired});const se=u.createInstance({fallbackLng:"fi",resources:{de:{translation:{"add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Setze Umsteigezeit für Zwischenziel {{index}}","add-via-duration-button-label-close":"Schließe Umsteigezeit-Auswahl für Zwischenziel {{index}}","add-via-duration-button-label-open":"Öffne Umsteigezeit-Auswahl für Zwischenziel {{index}}","minute-short":"min","remove-via-button-label":"Entferne Zwischenziel {{index}}","swap-order-button-label":"Tausche Start mit Ziel","via-point":"Zwischenziel","via-point-index":"Zwischenziel {{index}}","viapoint-slack-amount":"Umsteigezeit"}},en:{translation:{"add-via-button-label":"Add via point","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}","minute-short":"min","remove-via-button-label":"Remove via point {{index}}","swap-order-button-label":"Reverse origin and destination","via-point":"Via point","via-point-index":"Via point {{index}}","viapoint-slack-amount":"Stop duration"}},fi:{translation:{"add-via-button-label":"Lisää välipiste","add-via-duration-button-label":"Aseta välipisteelle {{index}} pysähdyksen kesto","add-via-duration-button-label-close":"Avaa välipisteen {{index}} pysähdyksen kesto valitsin","add-via-duration-button-label-open":"Sulje välipisteen {{index}} pysähdyksen kesto valitsin","minute-short":"min","remove-via-button-label":"Poista välipiste {{index}}","swap-order-button-label":"Käännä reitin suunta vastakkaiseksi","via-point":"Välipiste","via-point-index":"Välipiste {{index}}","viapoint-slack-amount":"Pysähdyksen kesto"}},pl:{translation:{"add-via-button-label":"Dodaj punkt pośredni","add-via-duration-button-label":"Wybierz czas postoju dla punktu {{index}}","add-via-duration-button-label-close":"Zamknij wybornik czasu postoju w punkcie {{index}}","add-via-duration-button-label-open":"Otwórz wybornik czasu postoju w punkcie {{index}}","minute-short":"min.","remove-via-button-label":"Usuń punkt pośredni {{index}}","swap-order-button-label":"Odwróć początek i cel","via-point":"Punkt pośredni","via-point-index":"Punkt pośredni {{index}}","viapoint-slack-amount":"Czas postoju"}},sv:{translation:{"add-via-button-label":"Lägg till viapunkt","add-via-duration-button-label":"Ställ in varaktighet för viapunkten {{index}}","add-via-duration-button-label-close":"Stäng väljaren för varaktighet vid via-punkten {{index}}","add-via-duration-button-label-open":"Öppna väljaren för varaktighet vid via-punkten {{index}}","minute-short":"min","remove-via-button-label":"Ta bort viapunkt {{index}}","swap-order-button-label":"Sväng ruttens riktning till den motsatta","via-point":"Via punkt","via-point-index":"Via punkt {{index}}","viapoint-slack-amount":"Stoppets varaktighet"}}},defaultNS:"translation",react:{useSuspense:!0}});se.init();var ae={"autosuggest-panel":"styles_autosuggest-panel__meNwd","autosuggest-searchpanel-text":"styles_autosuggest-searchpanel-text__-VQTg","origin-input-container":"styles_origin-input-container__p4Qik","destination-input-container":"styles_destination-input-container__jBY4I",row:"styles_row__1GhCD","viapoints-container":"styles_viapoints-container__FYp7K","viapoint-container":"styles_viapoint-container__8yh1M","light-gray-background":"styles_light-gray-background__4fyZs","viapoint-before":"styles_viapoint-before__t4saF","viapoint-input-container":"styles_viapoint-input-container__uZx95","viapoint-1":"styles_viapoint-1__8Mna8",viapoint:"styles_viapoint__vUO9L","viapoint-2":"styles_viapoint-2__-OoUa","viapoint-3":"styles_viapoint-3__vvivE","viapoint-4":"styles_viapoint-4__jS9k1","viapoint-5":"styles_viapoint-5__J4V5N","viapoint-slack-time":"styles_viapoint-slack-time__Xpo0G","select-wrapper":"styles_select-wrapper__1usZw","via-point-button-container":"styles_via-point-button-container__cI2JI","input-viapoint-slack-container":"styles_input-viapoint-slack-container__TNgVy","itinerary-search-control":"styles_itinerary-search-control__cEL1X",opposite:"styles_opposite__zQQhd","add-via-point":"styles_add-via-point__E-gGB","add-via-point-slack":"styles_add-via-point-slack__GKjFf","remove-via-point":"styles_remove-via-point__e9DMQ","combobox-icon":"styles_combobox-icon__d3k1e","time-input-icon":"styles_time-input-icon__M8dmw","rectangle-container":"styles_rectangle-container__AdbAA",rectangle:"styles_rectangle__1IO7E","search-panel-whitespace":"styles_search-panel-whitespace__Luhwx"};ne(".styles_autosuggest-panel__meNwd {\n width: 100%; }\n\n.styles_autosuggest-searchpanel-text__-VQTg {\n font-size: 24px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.8px;\n color: #333;\n line-height: 1;\n margin-bottom: 17px;\n margin-top: unset; }\n @media screen and (min-width: 768px) {\n .styles_autosuggest-searchpanel-text__-VQTg {\n letter-spacing: -0.8px;\n line-height: 27px;\n margin-bottom: 21px; } }\n\n.styles_origin-input-container__p4Qik,\n.styles_destination-input-container__jBY4I {\n display: flex;\n flex: 1 0 100%; }\n .styles_origin-input-container__p4Qik input[type='text'],\n .styles_destination-input-container__jBY4I input[type='text'] {\n margin: 0; }\n\n.styles_row__1GhCD {\n display: flex;\n flex-direction: row; }\n\n.styles_viapoints-container__FYp7K {\n display: flex;\n flex-direction: column; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M {\n display: flex;\n flex: 1 0 100%;\n min-height: 50px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:first-child {\n margin-top: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:not(:first-child) {\n margin-top: 3px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:last-child {\n margin-bottom: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs {\n display: flex;\n padding: 3px 0;\n flex-direction: column;\n background: #f2f5f7;\n border-radius: 5px;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF {\n display: flex;\n min-width: 27px;\n justify-content: center;\n align-items: center; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF svg {\n fill: #888;\n height: 20px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 {\n display: flex;\n align-items: center;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 input[type='text'] {\n margin: 0; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-1__8Mna8 > div.styles_viapoint__vUO9L {\n z-index: 15; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-2__-OoUa > div.styles_viapoint__vUO9L {\n z-index: 14; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-3__vvivE > div.styles_viapoint__vUO9L {\n z-index: 13; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-4__jS9k1 > div.styles_viapoint__vUO9L {\n z-index: 12; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-5__J4V5N > div.styles_viapoint__vUO9L {\n z-index: 11; }\n\n.styles_viapoint-slack-time__Xpo0G {\n font-size: 13px;\n font-weight: normal;\n letter-spacing: -0.36px;\n color: #333;\n padding-left: 27px;\n padding-top: 12px;\n padding-bottom: 10px; }\n\n.styles_select-wrapper__1usZw {\n display: flex;\n height: 50px;\n margin-top: 9px;\n padding-left: 27px;\n padding-right: 47px; }\n\n.styles_via-point-button-container__cI2JI {\n display: flex; }\n .styles_via-point-button-container__cI2JI > div:nth-child(1) {\n order: 1;\n border-left: none; }\n .styles_via-point-button-container__cI2JI > div:nth-child(2) {\n order: 2;\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n\n.styles_input-viapoint-slack-container__TNgVy {\n display: flex;\n flex-direction: column; }\n\n.styles_itinerary-search-control__cEL1X {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n max-height: 50px;\n min-width: var(--width); }\n .styles_itinerary-search-control__cEL1X + .styles_itinerary-search-control__cEL1X {\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd svg {\n width: 19px;\n height: 17px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB svg {\n width: 20px;\n height: 22px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 47px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf svg {\n width: 18px;\n height: 19px; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n max-height: 44px;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ svg {\n width: 14px;\n height: 14px; }\n\n.styles_combobox-icon__d3k1e {\n color: var(--color);\n border-left: solid #888 1px;\n height: 35px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw {\n padding: 9px 13px 0 13px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw svg {\n width: 18px;\n height: 19px; }\n\n.styles_rectangle-container__AdbAA {\n display: block;\n position: relative;\n height: 9px;\n z-index: 19; }\n .styles_rectangle-container__AdbAA .styles_rectangle__1IO7E {\n position: absolute;\n width: 4px;\n height: 21px;\n border-radius: 2px;\n background-color: #ddd;\n margin-left: 25px;\n margin-top: -5px; }\n\n.styles_search-panel-whitespace__Luhwx {\n min-width: 40px; }\n");const le=["children","className","enabled","onClick","onKeyPress","wide"],ue=()=>({}),ce=e=>{if(void 0===e||y.default(e))return!0;const t=Object.keys(e);return 1===t.length||2===t.length&&t.includes("locationSlack")},pe=e=>{let{children:t,className:n,enabled:o,onClick:i,onKeyPress:r,wide:s}=e,a=_(e,le);return f.default.createElement("div",{className:ae["itinerary-search-control"],style:{"--width":s?"47px":"40px"}},i&&o&&f.default.createElement("div",Object.assign({},a,{className:n,onClick:i,onKeyPress:r,role:"button",tabIndex:"0"}),t))},de=(e,t,n=!1)=>{const o=e.indexOf(t);return o>-1&&e.splice(o,1),n?e.map((e=>e>t?e-1:e)):e},fe=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},ge=e=>e&&e.address||e&&e.gps&&e.ready&&"Nykyinen sijainti"||"",he=e=>e&&!0===e.gps?"position":"location";"production"!==process.env.NODE_ENV&&(pe.propTypes={children:d.default.node,className:d.default.string.isRequired,enabled:d.default.bool.isRequired,onClick:d.default.func.isRequired,onKeyPress:d.default.func.isRequired,wide:d.default.bool}),pe.defaultProps={children:void 0,wide:!1};const ye="production"!==process.env.NODE_ENV?d.default.shape({address:d.default.string,lat:d.default.number,lon:d.default.number,locationSlack:d.default.number}):{};class me extends f.default.Component{constructor(e){super(e),b(this,"storeReference",(e=>{this.setState((t=>({refs:[...t.refs,e]})))})),b(this,"handleFocusChange",(()=>{const{destination:e}=this.props;e&&e.lat||this.state.refs[1].focus()})),b(this,"updateViaPoints",(e=>{0!==e.length?this.props.updateViaPoints(e.filter((e=>!ce(e)))):this.props.updateViaPoints([])})),b(this,"handleToggleViaPointSlackClick",(e=>{const{activeSlackInputs:t}=this.state;this.setState({activeSlackInputs:t.includes(e)?de(t,e):t.concat([e])})})),b(this,"handleViaPointSlackTimeSelected",((e,t)=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"EditViaPointStopDuration",category:"ItinerarySettings",name:e/60});const{viaPoints:n}=this.props;n[t].locationSlack=Number.parseInt(e,10),this.updateViaPoints(n)})),b(this,"handleViaPointLocationSelected",((e,t)=>{this.props.handleViaPointLocationSelected(e,t)})),b(this,"handleRemoveViaPointClick",(e=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"RemoveJourneyViaPoint",category:"ItinerarySettings",name:null});const{activeSlackInputs:t}=this.state,{viaPoints:n}=this.props;n.splice(e,1),this.setState({activeSlackInputs:de(t,e,!0)},(()=>this.updateViaPoints(n)))})),b(this,"handleAddViaPointClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"AddJourneyViaPoint",category:"ItinerarySettings",name:"QuickSettingsButton"});const{viaPoints:e}=this.props;e.push({}),this.setState(this.state)})),b(this,"handleSwapOrderClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"SwitchJourneyStartAndEndPointOrder",category:"ItinerarySettings",name:null});const{viaPoints:e}=this.props;e.reverse(),this.props.swapOrder()})),b(this,"getSlackDisplay",(e=>`${e/60} ${this.props.t("minute-short",{lng:this.props.lang})}`)),this.state={activeSlackInputs:[],refs:[]}}render(){const{origin:e,searchPanelText:t,searchContext:n,disableAutoFocus:o,viaPoints:i,originMobileLabel:s,destinationMobileLabel:a,fontWeights:l,onFocusChange:u,showSwapControl:c,showViapointControl:d,t:y,lang:m}=this.props,{activeSlackInputs:v}=this.state,b=(e=>{const t=[];for(let n=0;n<=9;n++){const o=10*n;t.push({displayName:`${o} ${e("minute-short")}`,value:60*o})}return t})(y),_=(e,t=0)=>e&&e.locationSlack||t,S=e=>v.includes(e);return f.default.createElement("div",{className:p.default(ae["autosuggest-panel"],this.props.isMobile&&"small"),style:{"--color":`${this.props.color}`,"--font-weight-medium":l.medium}}," ",t?f.default.createElement("div",null,f.default.createElement("h1",{className:ae["autosuggest-searchpanel-text"]}," ",t)):null,f.default.createElement("div",{className:ae["origin-input-container"]},f.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"origin",autoFocus:!0!==o&&(!this.props.isMobile&&!e.lat),storeRef:this.storeReference,refPoint:this.props.refPoint,className:he(e),placeholder:this.props.originPlaceHolder,value:ge(e),searchContext:n,getAutoSuggestIcons:this.props.getAutoSuggestIcons,onSelect:this.props.onSelect,onClear:this.props.onClear,focusChange:u||this.handleFocusChange,lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,mobileLabel:s,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(c||d)&&f.default.createElement(pe,{className:ae.opposite,enabled:c,onClick:()=>this.handleSwapOrderClick(),onKeyPress:e=>fe(e)&&this.handleSwapOrderClick(),"aria-label":y("swap-order-button-label",{lng:m})},f.default.createElement(h.default,{img:"opposite",color:this.props.color}))),0===i.length&&f.default.createElement("div",{className:ae["rectangle-container"]},f.default.createElement("div",{className:ae.rectangle})),f.default.createElement(r.ReactSortable,{className:ae["viapoints-container"],list:i,handle:`.${ae["viapoint-before"]}`,animation:200,disabled:i.length<=1,setList:e=>{const t=e.filter((e=>!ce(e)));t.length>0&&this.props.updateViaPoints(t)}},i.map(((e,t)=>f.default.createElement("div",{className:p.default(ae["viapoint-container"]),key:`viapoint-${t}`},f.default.createElement("div",{className:ae["light-gray-background"]},f.default.createElement("div",{className:ae.row},f.default.createElement("div",{className:ae["viapoint-before"],style:i.length>1?{cursor:"move"}:{}},i.length>1&&f.default.createElement(h.default,{img:"ellipsis",rotate:90,color:this.props.color})),f.default.createElement("div",{className:`${ae["viapoint-input-container"]} ${ae[`viapoint-${t+1}`]}`},f.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker-via",id:"via-point",ariaLabel:y("via-point-index",{index:t+1,lng:m}),autoFocus:!0!==o&&!this.props.isMobile,placeholder:"via-point",className:"viapoint",searchContext:n,refPoint:this.props.refPoint,value:e&&e.address||"",onSelect:this.props.onSelect,onClear:this.props.onClear,handleViaPoints:e=>this.handleViaPointLocationSelected(e,t),lang:this.props.lang,sources:this.props.sources,targets:["Stops","Stations"],filterResults:this.props.filterResults,getAutoSuggestIcons:this.props.getAutoSuggestIcons,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll})),this.props.showSlackControl&&f.default.createElement(pe,{className:ae["add-via-point-slack"],enabled:this.props.showViapointControl,onClick:()=>this.handleToggleViaPointSlackClick(t),onKeyPress:e=>fe(e)&&this.handleToggleViaPointSlackClick(t),"aria-label":y(S(t)?"add-via-duration-button-label-open":"add-via-duration-button-label-close",{index:t+1,lng:m}),wide:!0},f.default.createElement(h.default,{img:"time",color:this.props.color}))),!S(t)&&i[t]&&i[t].locationSlack>0&&f.default.createElement("span",{className:ae["viapoint-slack-time"]},`${y("viapoint-slack-amount",{lng:m})}: ${this.getSlackDisplay(i[t].locationSlack)}`),f.default.createElement("div",{className:p.default(ae["input-viapoint-slack-container"],!S(t)&&"collapsed")},f.default.createElement("div",{className:ae["select-wrapper"]},f.default.createElement(re,{id:`viapoint-slack-${t}`,label:y("viapoint-slack-amount",{lng:m}),options:b,value:_(i[t]),getDisplay:this.getSlackDisplay,viaPointIndex:t,icon:f.default.createElement("span",{className:`${ae["combobox-icon"]} ${ae["time-input-icon"]}`},f.default.createElement(h.default,{img:"time",color:this.props.color})),onSlackTimeSelected:this.handleViaPointSlackTimeSelected})))),f.default.createElement(pe,{className:ae["remove-via-point"],enabled:this.props.showViapointControl,onClick:()=>this.handleRemoveViaPointClick(t),onKeyPress:e=>fe(e)&&this.handleRemoveViaPointClick(t),"aria-label":y("remove-via-button-label",{index:t+1,lng:m})},f.default.createElement(h.default,{img:"trash",color:this.props.color})))))),f.default.createElement("div",{className:ae["destination-input-container"]},f.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"destination",autoFocus:!0!==o&&(!this.props.isMobile&&!Number.isNaN(e.lat)),storeRef:this.storeReference,placeholder:this.props.destinationPlaceHolder,className:he(this.props.destination),getAutoSuggestIcons:this.props.getAutoSuggestIcons,searchContext:n,onSelect:this.props.onSelect,onClear:this.props.onClear,refPoint:this.props.refPoint,value:ge(this.props.destination),lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,mobileLabel:a,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(c||d)&&f.default.createElement(pe,{className:p.default(ae["add-via-point"],ae.more,i.length>4&&"collapsed"),enabled:d&&0===i.length,onClick:()=>this.handleAddViaPointClick(),onKeyPress:e=>fe(e)&&this.handleAddViaPointClick(),"aria-label":y("add-via-button-label",{lng:m})},f.default.createElement(h.default,{img:"viapoint",width:1.25,height:1.375,color:this.props.color}))))}}b(me,"defaultProps",{origin:void 0,destination:void 0,viaPoints:[],originPlaceHolder:"give-origin",destinationPlaceHolder:"give-destination",swapOrder:void 0,updateViaPoints:()=>{},searchPanelText:void 0,sources:[],targets:[],filterResults:void 0,onClear:void 0,getAutoSuggestIcons:void 0,refPoint:void 0,addAnalyticsEvent:void 0,disableAutoFocus:!1,isMobile:!1,handleViaPointLocationSelected:void 0,color:"#007ac9",hoverColor:"#0062a1",originMobileLabel:null,destinationMobileLabel:null,modeSet:void 0,modeIconColors:void 0,fontWeights:{medium:500},showScroll:!1,onFocusChange:void 0,isEmbedded:!1,showSwapControl:!1,showViapointControl:!1,showSlackControl:!1}),"production"!==process.env.NODE_ENV&&(me.propTypes={appElement:d.default.string.isRequired,origin:ye,destination:ye,originPlaceHolder:d.default.string,destinationPlaceHolder:d.default.string,viaPoints:d.default.arrayOf(ye),updateViaPoints:d.default.func,handleViaPointLocationSelected:d.default.func,swapOrder:d.default.func,searchPanelText:d.default.string,searchContext:d.default.shape({URL_PELIAS:d.default.string}).isRequired,onSelect:d.default.func.isRequired,onClear:d.default.func,addAnalyticsEvent:d.default.func,lang:d.default.string.isRequired,disableAutoFocus:d.default.bool,sources:d.default.arrayOf(d.default.string),targets:d.default.arrayOf(d.default.string),filterResults:d.default.func,isMobile:d.default.bool,color:d.default.string,hoverColor:d.default.string,originMobileLabel:d.default.string,destinationMobileLabel:d.default.string,refPoint:ye,modeSet:d.default.string,modeIconColors:d.default.objectOf(d.default.string),getAutoSuggestIcons:d.default.objectOf(d.default.func),fontWeights:d.default.shape({medium:d.default.number}),showScroll:d.default.bool,onFocusChange:d.default.func,isEmbedded:d.default.bool,showSwapControl:d.default.bool,showViapointControl:d.default.bool,showSlackControl:d.default.bool,t:d.default.func.isRequired});const ve=i.withTranslation()(me);e.default=e=>f.default.createElement(i.I18nextProvider,{i18n:se},f.default.createElement(ve,e)),e.getEmptyViaPointPlaceHolder=ue,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3NlY3Rpb24taXRlcmF0b3IvZGlzdC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC10aGVtZWFibGUvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtdGhlbWVhYmxlL2Rpc3QvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b3N1Z2dlc3QvZGlzdC9jb21wYXJlT2JqZWN0cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvc3VnZ2VzdC9kaXN0L1NlY3Rpb25UaXRsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvc3VnZ2VzdC9kaXN0L0l0ZW0uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b3N1Z2dlc3QvZGlzdC9JdGVtTGlzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvc3VnZ2VzdC9kaXN0L0F1dG93aGF0ZXZlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvc3VnZ2VzdC9kaXN0L0F1dG9zdWdnZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3NoYWxsb3ctZXF1YWwvYXJyYXlzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWF1dG9zdWdnZXN0L2Rpc3QvdGhlbWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b3N1Z2dlc3QvZGlzdC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi9zcmMvaGVscGVycy9TZWxlY3QuanMiLCIuLi9zcmMvaGVscGVycy90cmFuc2xhdGlvbnMuanMiLCIuLi9zcmMvaGVscGVycy9pMThuLmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIi4vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qc1wiO1xuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHtcbiAgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9O1xuICB2YXIgbyxcbiAgICByLFxuICAgIGkgPSBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtcbiAgICBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pO1xuICB9XG4gIHJldHVybiBpO1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9zbGljZWRUb0FycmF5ID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkgeyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9IHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgcmV0dXJuIGFycjsgfSBlbHNlIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHsgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTsgfSBlbHNlIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH0gfTsgfSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBkYXRhID0gX3JlZi5kYXRhO1xuICB2YXIgbXVsdGlTZWN0aW9uID0gX3JlZi5tdWx0aVNlY3Rpb247XG5cbiAgZnVuY3Rpb24gbmV4dE5vbkVtcHR5U2VjdGlvbkluZGV4KHNlY3Rpb25JbmRleCkge1xuICAgIGlmIChzZWN0aW9uSW5kZXggPT09IG51bGwpIHtcbiAgICAgIHNlY3Rpb25JbmRleCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlY3Rpb25JbmRleCsrO1xuICAgIH1cblxuICAgIHdoaWxlIChzZWN0aW9uSW5kZXggPCBkYXRhLmxlbmd0aCAmJiBkYXRhW3NlY3Rpb25JbmRleF0gPT09IDApIHtcbiAgICAgIHNlY3Rpb25JbmRleCsrO1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uSW5kZXggPT09IGRhdGEubGVuZ3RoID8gbnVsbCA6IHNlY3Rpb25JbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXZOb25FbXB0eVNlY3Rpb25JbmRleChzZWN0aW9uSW5kZXgpIHtcbiAgICBpZiAoc2VjdGlvbkluZGV4ID09PSBudWxsKSB7XG4gICAgICBzZWN0aW9uSW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlY3Rpb25JbmRleC0tO1xuICAgIH1cblxuICAgIHdoaWxlIChzZWN0aW9uSW5kZXggPj0gMCAmJiBkYXRhW3NlY3Rpb25JbmRleF0gPT09IDApIHtcbiAgICAgIHNlY3Rpb25JbmRleC0tO1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uSW5kZXggPT09IC0xID8gbnVsbCA6IHNlY3Rpb25JbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHQocG9zaXRpb24pIHtcbiAgICB2YXIgX3Bvc2l0aW9uID0gX3NsaWNlZFRvQXJyYXkocG9zaXRpb24sIDIpO1xuXG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IF9wb3NpdGlvblswXTtcbiAgICB2YXIgaXRlbUluZGV4ID0gX3Bvc2l0aW9uWzFdO1xuXG5cbiAgICBpZiAobXVsdGlTZWN0aW9uKSB7XG4gICAgICBpZiAoaXRlbUluZGV4ID09PSBudWxsIHx8IGl0ZW1JbmRleCA9PT0gZGF0YVtzZWN0aW9uSW5kZXhdIC0gMSkge1xuICAgICAgICBzZWN0aW9uSW5kZXggPSBuZXh0Tm9uRW1wdHlTZWN0aW9uSW5kZXgoc2VjdGlvbkluZGV4KTtcblxuICAgICAgICBpZiAoc2VjdGlvbkluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbc2VjdGlvbkluZGV4LCAwXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtzZWN0aW9uSW5kZXgsIGl0ZW1JbmRleCArIDFdO1xuICAgIH1cblxuICAgIGlmIChkYXRhID09PSAwIHx8IGl0ZW1JbmRleCA9PT0gZGF0YSAtIDEpIHtcbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1JbmRleCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtudWxsLCAwXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW251bGwsIGl0ZW1JbmRleCArIDFdO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJldihwb3NpdGlvbikge1xuICAgIHZhciBfcG9zaXRpb24yID0gX3NsaWNlZFRvQXJyYXkocG9zaXRpb24sIDIpO1xuXG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IF9wb3NpdGlvbjJbMF07XG4gICAgdmFyIGl0ZW1JbmRleCA9IF9wb3NpdGlvbjJbMV07XG5cblxuICAgIGlmIChtdWx0aVNlY3Rpb24pIHtcbiAgICAgIGlmIChpdGVtSW5kZXggPT09IG51bGwgfHwgaXRlbUluZGV4ID09PSAwKSB7XG4gICAgICAgIHNlY3Rpb25JbmRleCA9IHByZXZOb25FbXB0eVNlY3Rpb25JbmRleChzZWN0aW9uSW5kZXgpO1xuXG4gICAgICAgIGlmIChzZWN0aW9uSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtzZWN0aW9uSW5kZXgsIGRhdGFbc2VjdGlvbkluZGV4XSAtIDFdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW3NlY3Rpb25JbmRleCwgaXRlbUluZGV4IC0gMV07XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgPT09IDAgfHwgaXRlbUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICAgIH1cblxuICAgIGlmIChpdGVtSW5kZXggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBbbnVsbCwgZGF0YSAtIDFdO1xuICAgIH1cblxuICAgIHJldHVybiBbbnVsbCwgaXRlbUluZGV4IC0gMV07XG4gIH1cblxuICBmdW5jdGlvbiBpc0xhc3QocG9zaXRpb24pIHtcbiAgICByZXR1cm4gbmV4dChwb3NpdGlvbilbMV0gPT09IG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5leHQ6IG5leHQsXG4gICAgcHJldjogcHJldixcbiAgICBpc0xhc3Q6IGlzTGFzdFxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gVG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIG93bkVudW1lcmFibGVLZXlzKG9iaikge1xuXHR2YXIga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaik7XG5cblx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopKTtcblx0fVxuXG5cdHJldHVybiBrZXlzLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG5cdFx0cmV0dXJuIHByb3BJc0VudW1lcmFibGUuY2FsbChvYmosIGtleSk7XG5cdH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIga2V5cztcblx0dmFyIHRvID0gVG9PYmplY3QodGFyZ2V0KTtcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBhcmd1bWVudHNbc107XG5cdFx0a2V5cyA9IG93bkVudW1lcmFibGVLZXlzKE9iamVjdChmcm9tKSk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRvW2tleXNbaV1dID0gZnJvbVtrZXlzW2ldXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9zbGljZWRUb0FycmF5ID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbJ3JldHVybiddKSBfaVsncmV0dXJuJ10oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9IHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgcmV0dXJuIGFycjsgfSBlbHNlIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHsgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTsgfSBlbHNlIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZScpOyB9IH07IH0pKCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxudmFyIF9vYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBfb2JqZWN0QXNzaWduMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29iamVjdEFzc2lnbik7XG5cbnZhciB0cnV0aHkgPSBmdW5jdGlvbiB0cnV0aHkoeCkge1xuICByZXR1cm4geDtcbn07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgX3JlZiA9IEFycmF5LmlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGlucHV0IDogW2lucHV0LCBudWxsXTtcblxuICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKTtcblxuICB2YXIgdGhlbWUgPSBfcmVmMlswXTtcbiAgdmFyIGNsYXNzTmFtZURlY29yYXRvciA9IF9yZWYyWzFdO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG5hbWVzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgbmFtZXNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBzdHlsZXMgPSBuYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGVtZVtuYW1lXTtcbiAgICB9KS5maWx0ZXIodHJ1dGh5KTtcblxuICAgIHJldHVybiB0eXBlb2Ygc3R5bGVzWzBdID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2xhc3NOYW1lRGVjb3JhdG9yID09PSAnZnVuY3Rpb24nID8geyBrZXk6IGtleSwgY2xhc3NOYW1lOiBjbGFzc05hbWVEZWNvcmF0b3IgPyBjbGFzc05hbWVEZWNvcmF0b3IuYXBwbHkodW5kZWZpbmVkLCBfdG9Db25zdW1hYmxlQXJyYXkoc3R5bGVzKSkgOiBzdHlsZXMuam9pbignICcpIH0gOiB7IGtleToga2V5LCBzdHlsZTogX29iamVjdEFzc2lnbjJbJ2RlZmF1bHQnXS5hcHBseSh1bmRlZmluZWQsIFt7fV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdHlsZXMpKSkgfTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBjb21wYXJlT2JqZWN0cztcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBjb21wYXJlT2JqZWN0cyhvYmpBLCBvYmpCKSB7XG4gIHZhciBrZXlzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBbXTtcblxuICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBhS2V5cyA9IE9iamVjdC5rZXlzKG9iakEpO1xuICB2YXIgYktleXMgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBrZXlzTWFwID0ge307XG4gIHZhciBpLCBsZW47XG5cbiAgZm9yIChpID0gMCwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGtleXNNYXBba2V5c1tpXV0gPSB0cnVlO1xuICB9XG5cbiAgZm9yIChpID0gMCwgbGVuID0gYUtleXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIga2V5ID0gYUtleXNbaV07XG4gICAgdmFyIGFWYWx1ZSA9IG9iakFba2V5XTtcbiAgICB2YXIgYlZhbHVlID0gb2JqQltrZXldO1xuXG4gICAgaWYgKGFWYWx1ZSA9PT0gYlZhbHVlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWtleXNNYXBba2V5XSB8fCBhVmFsdWUgPT09IG51bGwgfHwgYlZhbHVlID09PSBudWxsIHx8IF90eXBlb2YoYVZhbHVlKSAhPT0gJ29iamVjdCcgfHwgX3R5cGVvZihiVmFsdWUpICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGFWYWx1ZUtleXMgPSBPYmplY3Qua2V5cyhhVmFsdWUpO1xuICAgIHZhciBiVmFsdWVLZXlzID0gT2JqZWN0LmtleXMoYlZhbHVlKTtcblxuICAgIGlmIChhVmFsdWVLZXlzLmxlbmd0aCAhPT0gYlZhbHVlS2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIG4gPSAwLCBsZW5ndGggPSBhVmFsdWVLZXlzLmxlbmd0aDsgbiA8IGxlbmd0aDsgbisrKSB7XG4gICAgICB2YXIgYVZhbHVlS2V5ID0gYVZhbHVlS2V5c1tuXTtcblxuICAgICAgaWYgKGFWYWx1ZVthVmFsdWVLZXldICE9PSBiVmFsdWVbYVZhbHVlS2V5XSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5cbnZhciBfY29tcGFyZU9iamVjdHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBhcmVPYmplY3RzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpOyBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IHJldHVybiBjYWNoZTsgfTsgcmV0dXJuIGNhY2hlOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeyB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDsgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOyB9IGVsc2UgeyBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgU2VjdGlvblRpdGxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTZWN0aW9uVGl0bGUsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU2VjdGlvblRpdGxlKTtcblxuICBmdW5jdGlvbiBTZWN0aW9uVGl0bGUoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlY3Rpb25UaXRsZSk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU2VjdGlvblRpdGxlLCBbe1xuICAgIGtleTogXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgICAgcmV0dXJuICgwLCBfY29tcGFyZU9iamVjdHNbXCJkZWZhdWx0XCJdKShuZXh0UHJvcHMsIHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBzZWN0aW9uID0gX3RoaXMkcHJvcHMuc2VjdGlvbixcbiAgICAgICAgICByZW5kZXJTZWN0aW9uVGl0bGUgPSBfdGhpcyRwcm9wcy5yZW5kZXJTZWN0aW9uVGl0bGUsXG4gICAgICAgICAgdGhlbWUgPSBfdGhpcyRwcm9wcy50aGVtZSxcbiAgICAgICAgICBzZWN0aW9uS2V5UHJlZml4ID0gX3RoaXMkcHJvcHMuc2VjdGlvbktleVByZWZpeDtcbiAgICAgIHZhciBzZWN0aW9uVGl0bGUgPSByZW5kZXJTZWN0aW9uVGl0bGUoc2VjdGlvbik7XG5cbiAgICAgIGlmICghc2VjdGlvblRpdGxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImRpdlwiLCB0aGVtZShcIlwiLmNvbmNhdChzZWN0aW9uS2V5UHJlZml4LCBcInRpdGxlXCIpLCAnc2VjdGlvblRpdGxlJyksIHNlY3Rpb25UaXRsZSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNlY3Rpb25UaXRsZTtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gU2VjdGlvblRpdGxlO1xuXG5fZGVmaW5lUHJvcGVydHkoU2VjdGlvblRpdGxlLCBcInByb3BUeXBlc1wiLCB7XG4gIHNlY3Rpb246IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmFueS5pc1JlcXVpcmVkLFxuICByZW5kZXJTZWN0aW9uVGl0bGU6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdGhlbWU6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMuaXNSZXF1aXJlZCxcbiAgc2VjdGlvbktleVByZWZpeDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uc3RyaW5nLmlzUmVxdWlyZWRcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xuXG52YXIgX2NvbXBhcmVPYmplY3RzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wYXJlT2JqZWN0c1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDsgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTsgX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyByZXR1cm4gY2FjaGU7IH07IHJldHVybiBjYWNoZTsgfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgX3R5cGVvZihvYmopICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgeyByZXR1cm4geyBcImRlZmF1bHRcIjogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCk7IGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgeyByZXR1cm4gY2FjaGUuZ2V0KG9iaik7IH0gdmFyIG5ld09iaiA9IHt9OyB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7IGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTsgfSBlbHNlIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqW1wiZGVmYXVsdFwiXSA9IG9iajsgaWYgKGNhY2hlKSB7IGNhY2hlLnNldChvYmosIG5ld09iaik7IH0gcmV0dXJuIG5ld09iajsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbnZhciBJdGVtID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhJdGVtLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEl0ZW0pO1xuXG4gIGZ1bmN0aW9uIEl0ZW0oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEl0ZW0pO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdG9yZUl0ZW1SZWZlcmVuY2VcIiwgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtICE9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLml0ZW0gPSBpdGVtO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTW91c2VFbnRlclwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHNlY3Rpb25JbmRleCA9IF90aGlzJHByb3BzLnNlY3Rpb25JbmRleCxcbiAgICAgICAgICBpdGVtSW5kZXggPSBfdGhpcyRwcm9wcy5pdGVtSW5kZXg7XG5cbiAgICAgIF90aGlzLnByb3BzLm9uTW91c2VFbnRlcihldmVudCwge1xuICAgICAgICBzZWN0aW9uSW5kZXg6IHNlY3Rpb25JbmRleCxcbiAgICAgICAgaXRlbUluZGV4OiBpdGVtSW5kZXhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTW91c2VMZWF2ZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBzZWN0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuc2VjdGlvbkluZGV4LFxuICAgICAgICAgIGl0ZW1JbmRleCA9IF90aGlzJHByb3BzMi5pdGVtSW5kZXg7XG5cbiAgICAgIF90aGlzLnByb3BzLm9uTW91c2VMZWF2ZShldmVudCwge1xuICAgICAgICBzZWN0aW9uSW5kZXg6IHNlY3Rpb25JbmRleCxcbiAgICAgICAgaXRlbUluZGV4OiBpdGVtSW5kZXhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTW91c2VEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHNlY3Rpb25JbmRleCA9IF90aGlzJHByb3BzMy5zZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaXRlbUluZGV4ID0gX3RoaXMkcHJvcHMzLml0ZW1JbmRleDtcblxuICAgICAgX3RoaXMucHJvcHMub25Nb3VzZURvd24oZXZlbnQsIHtcbiAgICAgICAgc2VjdGlvbkluZGV4OiBzZWN0aW9uSW5kZXgsXG4gICAgICAgIGl0ZW1JbmRleDogaXRlbUluZGV4XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsaWNrXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHNlY3Rpb25JbmRleCA9IF90aGlzJHByb3BzNC5zZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaXRlbUluZGV4ID0gX3RoaXMkcHJvcHM0Lml0ZW1JbmRleDtcblxuICAgICAgX3RoaXMucHJvcHMub25DbGljayhldmVudCwge1xuICAgICAgICBzZWN0aW9uSW5kZXg6IHNlY3Rpb25JbmRleCxcbiAgICAgICAgaXRlbUluZGV4OiBpdGVtSW5kZXhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEl0ZW0sIFt7XG4gICAga2V5OiBcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb21wYXJlT2JqZWN0c1tcImRlZmF1bHRcIl0pKG5leHRQcm9wcywgdGhpcy5wcm9wcywgWydyZW5kZXJJdGVtRGF0YSddKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzSGlnaGxpZ2h0ZWQgPSBfdGhpcyRwcm9wczUuaXNIaWdobGlnaHRlZCxcbiAgICAgICAgICBpdGVtID0gX3RoaXMkcHJvcHM1Lml0ZW0sXG4gICAgICAgICAgcmVuZGVySXRlbSA9IF90aGlzJHByb3BzNS5yZW5kZXJJdGVtLFxuICAgICAgICAgIHJlbmRlckl0ZW1EYXRhID0gX3RoaXMkcHJvcHM1LnJlbmRlckl0ZW1EYXRhLFxuICAgICAgICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczUsIFtcImlzSGlnaGxpZ2h0ZWRcIiwgXCJpdGVtXCIsIFwicmVuZGVySXRlbVwiLCBcInJlbmRlckl0ZW1EYXRhXCJdKTtcblxuICAgICAgZGVsZXRlIHJlc3RQcm9wcy5zZWN0aW9uSW5kZXg7XG4gICAgICBkZWxldGUgcmVzdFByb3BzLml0ZW1JbmRleDtcblxuICAgICAgaWYgKHR5cGVvZiByZXN0UHJvcHMub25Nb3VzZUVudGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3RQcm9wcy5vbk1vdXNlRW50ZXIgPSB0aGlzLm9uTW91c2VFbnRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByZXN0UHJvcHMub25Nb3VzZUxlYXZlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3RQcm9wcy5vbk1vdXNlTGVhdmUgPSB0aGlzLm9uTW91c2VMZWF2ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByZXN0UHJvcHMub25Nb3VzZURvd24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzdFByb3BzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByZXN0UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXN0UHJvcHMub25DbGljayA9IHRoaXMub25DbGljaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJvbGU6IFwib3B0aW9uXCJcbiAgICAgIH0sIHJlc3RQcm9wcywge1xuICAgICAgICByZWY6IHRoaXMuc3RvcmVJdGVtUmVmZXJlbmNlXG4gICAgICB9KSwgcmVuZGVySXRlbShpdGVtLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgaXNIaWdobGlnaHRlZDogaXNIaWdobGlnaHRlZFxuICAgICAgfSwgcmVuZGVySXRlbURhdGEpKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEl0ZW07XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEl0ZW07XG5cbl9kZWZpbmVQcm9wZXJ0eShJdGVtLCBcInByb3BUeXBlc1wiLCB7XG4gIHNlY3Rpb25JbmRleDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0ubnVtYmVyLFxuICBpc0hpZ2hsaWdodGVkOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5ib29sLmlzUmVxdWlyZWQsXG4gIGl0ZW1JbmRleDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0ubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGl0ZW06IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmFueS5pc1JlcXVpcmVkLFxuICByZW5kZXJJdGVtOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLmlzUmVxdWlyZWQsXG4gIHJlbmRlckl0ZW1EYXRhOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcbiAgb25Nb3VzZUVudGVyOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLFxuICBvbk1vdXNlTGVhdmU6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIG9uTW91c2VEb3duOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLFxuICBvbkNsaWNrOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3JlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcblxudmFyIF9wcm9wVHlwZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcblxudmFyIF9JdGVtID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9JdGVtXCIpKTtcblxudmFyIF9jb21wYXJlT2JqZWN0cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29tcGFyZU9iamVjdHNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyBpZiAodHlwZW9mIFdlYWtNYXAgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7IHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgcmV0dXJuIGNhY2hlOyB9OyByZXR1cm4gY2FjaGU7IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBpZiAob2JqID09PSBudWxsIHx8IF90eXBlb2Yob2JqKSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHsgcmV0dXJuIHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9IHZhciBjYWNoZSA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpOyBpZiAoY2FjaGUgJiYgY2FjaGUuaGFzKG9iaikpIHsgcmV0dXJuIGNhY2hlLmdldChvYmopOyB9IHZhciBuZXdPYmogPSB7fTsgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7IHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsOyBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7IH0gZWxzZSB7IG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSB9IG5ld09ialtcImRlZmF1bHRcIl0gPSBvYmo7IGlmIChjYWNoZSkgeyBjYWNoZS5zZXQob2JqLCBuZXdPYmopOyB9IHJldHVybiBuZXdPYmo7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgSXRlbXNMaXN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhJdGVtc0xpc3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoSXRlbXNMaXN0KTtcblxuICBmdW5jdGlvbiBJdGVtc0xpc3QoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEl0ZW1zTGlzdCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0b3JlSGlnaGxpZ2h0ZWRJdGVtUmVmZXJlbmNlXCIsIGZ1bmN0aW9uIChoaWdobGlnaHRlZEl0ZW0pIHtcbiAgICAgIF90aGlzLnByb3BzLm9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlKGhpZ2hsaWdodGVkSXRlbSA9PT0gbnVsbCA/IG51bGwgOiBoaWdobGlnaHRlZEl0ZW0uaXRlbSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoSXRlbXNMaXN0LCBbe1xuICAgIGtleTogXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgICAgcmV0dXJuICgwLCBfY29tcGFyZU9iamVjdHNbXCJkZWZhdWx0XCJdKShuZXh0UHJvcHMsIHRoaXMucHJvcHMsIFsnaXRlbVByb3BzJ10pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgICBpdGVtUHJvcHMgPSBfdGhpcyRwcm9wcy5pdGVtUHJvcHMsXG4gICAgICAgICAgcmVuZGVySXRlbSA9IF90aGlzJHByb3BzLnJlbmRlckl0ZW0sXG4gICAgICAgICAgcmVuZGVySXRlbURhdGEgPSBfdGhpcyRwcm9wcy5yZW5kZXJJdGVtRGF0YSxcbiAgICAgICAgICBzZWN0aW9uSW5kZXggPSBfdGhpcyRwcm9wcy5zZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJdGVtSW5kZXggPSBfdGhpcyRwcm9wcy5oaWdobGlnaHRlZEl0ZW1JbmRleCxcbiAgICAgICAgICBnZXRJdGVtSWQgPSBfdGhpcyRwcm9wcy5nZXRJdGVtSWQsXG4gICAgICAgICAgdGhlbWUgPSBfdGhpcyRwcm9wcy50aGVtZSxcbiAgICAgICAgICBrZXlQcmVmaXggPSBfdGhpcyRwcm9wcy5rZXlQcmVmaXg7XG4gICAgICB2YXIgc2VjdGlvblByZWZpeCA9IHNlY3Rpb25JbmRleCA9PT0gbnVsbCA/IGtleVByZWZpeCA6IFwiXCIuY29uY2F0KGtleVByZWZpeCwgXCJzZWN0aW9uLVwiKS5jb25jYXQoc2VjdGlvbkluZGV4LCBcIi1cIik7XG4gICAgICB2YXIgaXNJdGVtUHJvcHNGdW5jdGlvbiA9IHR5cGVvZiBpdGVtUHJvcHMgPT09ICdmdW5jdGlvbic7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInVsXCIsIF9leHRlbmRzKHtcbiAgICAgICAgcm9sZTogXCJsaXN0Ym94XCJcbiAgICAgIH0sIHRoZW1lKFwiXCIuY29uY2F0KHNlY3Rpb25QcmVmaXgsIFwiaXRlbXMtbGlzdFwiKSwgJ2l0ZW1zTGlzdCcpKSwgaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtLCBpdGVtSW5kZXgpIHtcbiAgICAgICAgdmFyIGlzRmlyc3QgPSBpdGVtSW5kZXggPT09IDA7XG4gICAgICAgIHZhciBpc0hpZ2hsaWdodGVkID0gaXRlbUluZGV4ID09PSBoaWdobGlnaHRlZEl0ZW1JbmRleDtcbiAgICAgICAgdmFyIGl0ZW1LZXkgPSBcIlwiLmNvbmNhdChzZWN0aW9uUHJlZml4LCBcIml0ZW0tXCIpLmNvbmNhdChpdGVtSW5kZXgpO1xuICAgICAgICB2YXIgaXRlbVByb3BzT2JqID0gaXNJdGVtUHJvcHNGdW5jdGlvbiA/IGl0ZW1Qcm9wcyh7XG4gICAgICAgICAgc2VjdGlvbkluZGV4OiBzZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaXRlbUluZGV4OiBpdGVtSW5kZXhcbiAgICAgICAgfSkgOiBpdGVtUHJvcHM7XG5cbiAgICAgICAgdmFyIGFsbEl0ZW1Qcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIGlkOiBnZXRJdGVtSWQoc2VjdGlvbkluZGV4LCBpdGVtSW5kZXgpLFxuICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogaXNIaWdobGlnaHRlZFxuICAgICAgICB9LCB0aGVtZShpdGVtS2V5LCAnaXRlbScsIGlzRmlyc3QgJiYgJ2l0ZW1GaXJzdCcsIGlzSGlnaGxpZ2h0ZWQgJiYgJ2l0ZW1IaWdobGlnaHRlZCcpLCB7fSwgaXRlbVByb3BzT2JqKTtcblxuICAgICAgICBpZiAoaXNIaWdobGlnaHRlZCkge1xuICAgICAgICAgIGFsbEl0ZW1Qcm9wcy5yZWYgPSBfdGhpczIuc3RvcmVIaWdobGlnaHRlZEl0ZW1SZWZlcmVuY2U7XG4gICAgICAgIH0gLy8gYGtleWAgaXMgcHJvdmlkZWQgYnkgdGhlbWUoKVxuXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1rZXkgKi9cblxuXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KF9JdGVtW1wiZGVmYXVsdFwiXSwgX2V4dGVuZHMoe30sIGFsbEl0ZW1Qcm9wcywge1xuICAgICAgICAgIHNlY3Rpb25JbmRleDogc2VjdGlvbkluZGV4LFxuICAgICAgICAgIGlzSGlnaGxpZ2h0ZWQ6IGlzSGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgaXRlbUluZGV4OiBpdGVtSW5kZXgsXG4gICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICByZW5kZXJJdGVtOiByZW5kZXJJdGVtLFxuICAgICAgICAgIHJlbmRlckl0ZW1EYXRhOiByZW5kZXJJdGVtRGF0YVxuICAgICAgICB9KSk7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QvanN4LWtleSAqL1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBJdGVtc0xpc3Q7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEl0ZW1zTGlzdDtcblxuX2RlZmluZVByb3BlcnR5KEl0ZW1zTGlzdCwgXCJwcm9wVHlwZXNcIiwge1xuICBpdGVtczogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uYXJyYXkuaXNSZXF1aXJlZCxcbiAgaXRlbVByb3BzOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vbmVPZlR5cGUoW19wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLm9iamVjdCwgX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuY10pLFxuICByZW5kZXJJdGVtOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLmlzUmVxdWlyZWQsXG4gIHJlbmRlckl0ZW1EYXRhOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcbiAgc2VjdGlvbkluZGV4OiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5udW1iZXIsXG4gIGhpZ2hsaWdodGVkSXRlbUluZGV4OiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5udW1iZXIsXG4gIG9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldEl0ZW1JZDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYy5pc1JlcXVpcmVkLFxuICB0aGVtZTogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYy5pc1JlcXVpcmVkLFxuICBrZXlQcmVmaXg6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLnN0cmluZy5pc1JlcXVpcmVkXG59KTtcblxuX2RlZmluZVByb3BlcnR5KEl0ZW1zTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBzZWN0aW9uSW5kZXg6IG51bGxcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xuXG52YXIgX3NlY3Rpb25JdGVyYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInNlY3Rpb24taXRlcmF0b3JcIikpO1xuXG52YXIgX3JlYWN0VGhlbWVhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicmVhY3QtdGhlbWVhYmxlXCIpKTtcblxudmFyIF9TZWN0aW9uVGl0bGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL1NlY3Rpb25UaXRsZVwiKSk7XG5cbnZhciBfSXRlbUxpc3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL0l0ZW1MaXN0XCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpOyBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IHJldHVybiBjYWNoZTsgfTsgcmV0dXJuIGNhY2hlOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeyB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDsgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOyB9IGVsc2UgeyBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obik7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbnZhciBkZWZhdWx0UmVuZGVySW5wdXRDb21wb25lbnQgPSBmdW5jdGlvbiBkZWZhdWx0UmVuZGVySW5wdXRDb21wb25lbnQocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBwcm9wcyk7XG59O1xuXG52YXIgZGVmYXVsdFJlbmRlckl0ZW1zQ29udGFpbmVyID0gZnVuY3Rpb24gZGVmYXVsdFJlbmRlckl0ZW1zQ29udGFpbmVyKF9yZWYpIHtcbiAgdmFyIGNvbnRhaW5lclByb3BzID0gX3JlZi5jb250YWluZXJQcm9wcyxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgY29udGFpbmVyUHJvcHMsIGNoaWxkcmVuKTtcbn07XG5cbnZhciBkZWZhdWx0VGhlbWUgPSB7XG4gIGNvbnRhaW5lcjogJ3JlYWN0LWF1dG93aGF0ZXZlcl9fY29udGFpbmVyJyxcbiAgY29udGFpbmVyT3BlbjogJ3JlYWN0LWF1dG93aGF0ZXZlcl9fY29udGFpbmVyLS1vcGVuJyxcbiAgaW5wdXQ6ICdyZWFjdC1hdXRvd2hhdGV2ZXJfX2lucHV0JyxcbiAgaW5wdXRPcGVuOiAncmVhY3QtYXV0b3doYXRldmVyX19pbnB1dC0tb3BlbicsXG4gIGlucHV0Rm9jdXNlZDogJ3JlYWN0LWF1dG93aGF0ZXZlcl9faW5wdXQtLWZvY3VzZWQnLFxuICBpdGVtc0NvbnRhaW5lcjogJ3JlYWN0LWF1dG93aGF0ZXZlcl9faXRlbXMtY29udGFpbmVyJyxcbiAgaXRlbXNDb250YWluZXJPcGVuOiAncmVhY3QtYXV0b3doYXRldmVyX19pdGVtcy1jb250YWluZXItLW9wZW4nLFxuICBpdGVtc0xpc3Q6ICdyZWFjdC1hdXRvd2hhdGV2ZXJfX2l0ZW1zLWxpc3QnLFxuICBpdGVtOiAncmVhY3QtYXV0b3doYXRldmVyX19pdGVtJyxcbiAgaXRlbUZpcnN0OiAncmVhY3QtYXV0b3doYXRldmVyX19pdGVtLS1maXJzdCcsXG4gIGl0ZW1IaWdobGlnaHRlZDogJ3JlYWN0LWF1dG93aGF0ZXZlcl9faXRlbS0taGlnaGxpZ2h0ZWQnLFxuICBzZWN0aW9uQ29udGFpbmVyOiAncmVhY3QtYXV0b3doYXRldmVyX19zZWN0aW9uLWNvbnRhaW5lcicsXG4gIHNlY3Rpb25Db250YWluZXJGaXJzdDogJ3JlYWN0LWF1dG93aGF0ZXZlcl9fc2VjdGlvbi1jb250YWluZXItLWZpcnN0JyxcbiAgc2VjdGlvblRpdGxlOiAncmVhY3QtYXV0b3doYXRldmVyX19zZWN0aW9uLXRpdGxlJ1xufTtcblxudmFyIEF1dG93aGF0ZXZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQXV0b3doYXRldmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEF1dG93aGF0ZXZlcik7XG5cbiAgZnVuY3Rpb24gQXV0b3doYXRldmVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEF1dG93aGF0ZXZlcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdG9yZUlucHV0UmVmZXJlbmNlXCIsIGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgaWYgKGlucHV0ICE9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICB9XG5cbiAgICAgIHZhciB1c2VyUmVmID0gX3RoaXMucHJvcHMuaW5wdXRQcm9wcy5yZWY7XG5cbiAgICAgIGlmICh1c2VyUmVmKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdXNlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHVzZXJSZWYoaW5wdXQpO1xuICAgICAgICB9IGVsc2UgaWYgKF90eXBlb2YodXNlclJlZikgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1c2VyUmVmLCAnY3VycmVudCcpKSB7XG4gICAgICAgICAgdXNlclJlZi5jdXJyZW50ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdG9yZUl0ZW1zQ29udGFpbmVyUmVmZXJlbmNlXCIsIGZ1bmN0aW9uIChpdGVtc0NvbnRhaW5lcikge1xuICAgICAgaWYgKGl0ZW1zQ29udGFpbmVyICE9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLml0ZW1zQ29udGFpbmVyID0gaXRlbXNDb250YWluZXI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25IaWdobGlnaHRlZEl0ZW1DaGFuZ2VcIiwgZnVuY3Rpb24gKGhpZ2hsaWdodGVkSXRlbSkge1xuICAgICAgX3RoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gaGlnaGxpZ2h0ZWRJdGVtO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImdldEl0ZW1JZFwiLCBmdW5jdGlvbiAoc2VjdGlvbkluZGV4LCBpdGVtSW5kZXgpIHtcbiAgICAgIGlmIChpdGVtSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBpZCA9IF90aGlzLnByb3BzLmlkO1xuICAgICAgdmFyIHNlY3Rpb24gPSBzZWN0aW9uSW5kZXggPT09IG51bGwgPyAnJyA6IFwic2VjdGlvbi1cIi5jb25jYXQoc2VjdGlvbkluZGV4KTtcbiAgICAgIHJldHVybiBcInJlYWN0LWF1dG93aGF0ZXZlci1cIi5jb25jYXQoaWQsIFwiLVwiKS5jb25jYXQoc2VjdGlvbiwgXCItaXRlbS1cIikuY29uY2F0KGl0ZW1JbmRleCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBpbnB1dFByb3BzID0gX3RoaXMucHJvcHMuaW5wdXRQcm9wcztcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0lucHV0Rm9jdXNlZDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlucHV0UHJvcHMub25Gb2N1cyAmJiBpbnB1dFByb3BzLm9uRm9jdXMoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQmx1clwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBpbnB1dFByb3BzID0gX3RoaXMucHJvcHMuaW5wdXRQcm9wcztcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0lucHV0Rm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBpbnB1dFByb3BzLm9uQmx1ciAmJiBpbnB1dFByb3BzLm9uQmx1cihldmVudCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaW5wdXRQcm9wcyA9IF90aGlzJHByb3BzLmlucHV0UHJvcHMsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBfdGhpcyRwcm9wcy5oaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleCA9IF90aGlzJHByb3BzLmhpZ2hsaWdodGVkSXRlbUluZGV4O1xuICAgICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuXG4gICAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgICAgY2FzZSA0MDogLy8gQXJyb3dEb3duXG5cbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBBcnJvd1VwXG4gICAgICAgICAgICB2YXIgbmV4dFByZXYgPSBrZXlDb2RlID09PSA0MCA/ICduZXh0JyA6ICdwcmV2JztcblxuICAgICAgICAgICAgdmFyIF90aGlzJHNlY3Rpb25JdGVyYXRvciA9IF90aGlzLnNlY3Rpb25JdGVyYXRvcltuZXh0UHJldl0oW2hpZ2hsaWdodGVkU2VjdGlvbkluZGV4LCBoaWdobGlnaHRlZEl0ZW1JbmRleF0pLFxuICAgICAgICAgICAgICAgIF90aGlzJHNlY3Rpb25JdGVyYXRvcjIgPSBfc2xpY2VkVG9BcnJheShfdGhpcyRzZWN0aW9uSXRlcmF0b3IsIDIpLFxuICAgICAgICAgICAgICAgIG5ld0hpZ2hsaWdodGVkU2VjdGlvbkluZGV4ID0gX3RoaXMkc2VjdGlvbkl0ZXJhdG9yMlswXSxcbiAgICAgICAgICAgICAgICBuZXdIaWdobGlnaHRlZEl0ZW1JbmRleCA9IF90aGlzJHNlY3Rpb25JdGVyYXRvcjJbMV07XG5cbiAgICAgICAgICAgIGlucHV0UHJvcHMub25LZXlEb3duKGV2ZW50LCB7XG4gICAgICAgICAgICAgIG5ld0hpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBuZXdIaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICAgICAgbmV3SGlnaGxpZ2h0ZWRJdGVtSW5kZXg6IG5ld0hpZ2hsaWdodGVkSXRlbUluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlucHV0UHJvcHMub25LZXlEb3duKGV2ZW50LCB7XG4gICAgICAgICAgICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleDogaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsXG4gICAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleDogaGlnaGxpZ2h0ZWRJdGVtSW5kZXhcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF90aGlzLmhpZ2hsaWdodGVkSXRlbSA9IG51bGw7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBpc0lucHV0Rm9jdXNlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgX3RoaXMuc2V0U2VjdGlvbnNJdGVtcyhwcm9wcyk7XG5cbiAgICBfdGhpcy5zZXRTZWN0aW9uSXRlcmF0b3IocHJvcHMpO1xuXG4gICAgX3RoaXMuc2V0VGhlbWUocHJvcHMpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEF1dG93aGF0ZXZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLmVuc3VyZUhpZ2hsaWdodGVkSXRlbUlzVmlzaWJsZSgpO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZSwgcmVhY3Qvc29ydC1jb21wXG5cbiAgfSwge1xuICAgIGtleTogXCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIGlmIChuZXh0UHJvcHMuaXRlbXMgIT09IHRoaXMucHJvcHMuaXRlbXMpIHtcbiAgICAgICAgdGhpcy5zZXRTZWN0aW9uc0l0ZW1zKG5leHRQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0UHJvcHMuaXRlbXMgIT09IHRoaXMucHJvcHMuaXRlbXMgfHwgbmV4dFByb3BzLm11bHRpU2VjdGlvbiAhPT0gdGhpcy5wcm9wcy5tdWx0aVNlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zZXRTZWN0aW9uSXRlcmF0b3IobmV4dFByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHRQcm9wcy50aGVtZSAhPT0gdGhpcy5wcm9wcy50aGVtZSkge1xuICAgICAgICB0aGlzLnNldFRoZW1lKG5leHRQcm9wcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB0aGlzLmVuc3VyZUhpZ2hsaWdodGVkSXRlbUlzVmlzaWJsZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRTZWN0aW9uc0l0ZW1zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFNlY3Rpb25zSXRlbXMocHJvcHMpIHtcbiAgICAgIGlmIChwcm9wcy5tdWx0aVNlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zZWN0aW9uc0l0ZW1zID0gcHJvcHMuaXRlbXMubWFwKGZ1bmN0aW9uIChzZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BzLmdldFNlY3Rpb25JdGVtcyhzZWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VjdGlvbnNMZW5ndGhzID0gdGhpcy5zZWN0aW9uc0l0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbXMpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbXMubGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hbGxTZWN0aW9uc0FyZUVtcHR5ID0gdGhpcy5zZWN0aW9uc0xlbmd0aHMuZXZlcnkoZnVuY3Rpb24gKGl0ZW1zQ291bnQpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbXNDb3VudCA9PT0gMDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFNlY3Rpb25JdGVyYXRvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTZWN0aW9uSXRlcmF0b3IocHJvcHMpIHtcbiAgICAgIHRoaXMuc2VjdGlvbkl0ZXJhdG9yID0gKDAsIF9zZWN0aW9uSXRlcmF0b3JbXCJkZWZhdWx0XCJdKSh7XG4gICAgICAgIG11bHRpU2VjdGlvbjogcHJvcHMubXVsdGlTZWN0aW9uLFxuICAgICAgICBkYXRhOiBwcm9wcy5tdWx0aVNlY3Rpb24gPyB0aGlzLnNlY3Rpb25zTGVuZ3RocyA6IHByb3BzLml0ZW1zLmxlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFRoZW1lXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFRoZW1lKHByb3BzKSB7XG4gICAgICB0aGlzLnRoZW1lID0gKDAsIF9yZWFjdFRoZW1lYWJsZVtcImRlZmF1bHRcIl0pKHByb3BzLnRoZW1lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyU2VjdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyU2VjdGlvbnMoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuYWxsU2VjdGlvbnNBcmVFbXB0eSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHRoZW1lID0gdGhpcy50aGVtZTtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICAgIHJlbmRlckl0ZW0gPSBfdGhpcyRwcm9wczIucmVuZGVySXRlbSxcbiAgICAgICAgICByZW5kZXJJdGVtRGF0YSA9IF90aGlzJHByb3BzMi5yZW5kZXJJdGVtRGF0YSxcbiAgICAgICAgICByZW5kZXJTZWN0aW9uVGl0bGUgPSBfdGhpcyRwcm9wczIucmVuZGVyU2VjdGlvblRpdGxlLFxuICAgICAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMyLmhpZ2hsaWdodGVkU2VjdGlvbkluZGV4LFxuICAgICAgICAgIGhpZ2hsaWdodGVkSXRlbUluZGV4ID0gX3RoaXMkcHJvcHMyLmhpZ2hsaWdodGVkSXRlbUluZGV4LFxuICAgICAgICAgIGl0ZW1Qcm9wcyA9IF90aGlzJHByb3BzMi5pdGVtUHJvcHM7XG4gICAgICByZXR1cm4gaXRlbXMubWFwKGZ1bmN0aW9uIChzZWN0aW9uLCBzZWN0aW9uSW5kZXgpIHtcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IFwicmVhY3QtYXV0b3doYXRldmVyLVwiLmNvbmNhdChpZCwgXCItXCIpO1xuICAgICAgICB2YXIgc2VjdGlvbktleVByZWZpeCA9IFwiXCIuY29uY2F0KGtleVByZWZpeCwgXCJzZWN0aW9uLVwiKS5jb25jYXQoc2VjdGlvbkluZGV4LCBcIi1cIik7XG4gICAgICAgIHZhciBpc0ZpcnN0U2VjdGlvbiA9IHNlY3Rpb25JbmRleCA9PT0gMDsgLy8gYGtleWAgaXMgcHJvdmlkZWQgYnkgdGhlbWUoKVxuXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1rZXkgKi9cblxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImRpdlwiLCB0aGVtZShcIlwiLmNvbmNhdChzZWN0aW9uS2V5UHJlZml4LCBcImNvbnRhaW5lclwiKSwgJ3NlY3Rpb25Db250YWluZXInLCBpc0ZpcnN0U2VjdGlvbiAmJiAnc2VjdGlvbkNvbnRhaW5lckZpcnN0JyksIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoX1NlY3Rpb25UaXRsZVtcImRlZmF1bHRcIl0sIHtcbiAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9uLFxuICAgICAgICAgIHJlbmRlclNlY3Rpb25UaXRsZTogcmVuZGVyU2VjdGlvblRpdGxlLFxuICAgICAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgICAgICBzZWN0aW9uS2V5UHJlZml4OiBzZWN0aW9uS2V5UHJlZml4XG4gICAgICAgIH0pLCAvKiNfX1BVUkVfXyovX3JlYWN0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KF9JdGVtTGlzdFtcImRlZmF1bHRcIl0sIHtcbiAgICAgICAgICBpdGVtczogX3RoaXMyLnNlY3Rpb25zSXRlbXNbc2VjdGlvbkluZGV4XSxcbiAgICAgICAgICBpdGVtUHJvcHM6IGl0ZW1Qcm9wcyxcbiAgICAgICAgICByZW5kZXJJdGVtOiByZW5kZXJJdGVtLFxuICAgICAgICAgIHJlbmRlckl0ZW1EYXRhOiByZW5kZXJJdGVtRGF0YSxcbiAgICAgICAgICBzZWN0aW9uSW5kZXg6IHNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleDogaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPT09IHNlY3Rpb25JbmRleCA/IGhpZ2hsaWdodGVkSXRlbUluZGV4IDogbnVsbCxcbiAgICAgICAgICBvbkhpZ2hsaWdodGVkSXRlbUNoYW5nZTogX3RoaXMyLm9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlLFxuICAgICAgICAgIGdldEl0ZW1JZDogX3RoaXMyLmdldEl0ZW1JZCxcbiAgICAgICAgICB0aGVtZTogdGhlbWUsXG4gICAgICAgICAga2V5UHJlZml4OiBrZXlQcmVmaXgsXG4gICAgICAgICAgcmVmOiBfdGhpczIuc3RvcmVJdGVtc0xpc3RSZWZlcmVuY2VcbiAgICAgICAgfSkpO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0L2pzeC1rZXkgKi9cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtcygpIHtcbiAgICAgIHZhciBpdGVtcyA9IHRoaXMucHJvcHMuaXRlbXM7XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciB0aGVtZSA9IHRoaXMudGhlbWU7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzMy5pZCxcbiAgICAgICAgICByZW5kZXJJdGVtID0gX3RoaXMkcHJvcHMzLnJlbmRlckl0ZW0sXG4gICAgICAgICAgcmVuZGVySXRlbURhdGEgPSBfdGhpcyRwcm9wczMucmVuZGVySXRlbURhdGEsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBfdGhpcyRwcm9wczMuaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJdGVtSW5kZXggPSBfdGhpcyRwcm9wczMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXgsXG4gICAgICAgICAgaXRlbVByb3BzID0gX3RoaXMkcHJvcHMzLml0ZW1Qcm9wcztcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KF9JdGVtTGlzdFtcImRlZmF1bHRcIl0sIHtcbiAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICBpdGVtUHJvcHM6IGl0ZW1Qcm9wcyxcbiAgICAgICAgcmVuZGVySXRlbTogcmVuZGVySXRlbSxcbiAgICAgICAgcmVuZGVySXRlbURhdGE6IHJlbmRlckl0ZW1EYXRhLFxuICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleDogaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPT09IG51bGwgPyBoaWdobGlnaHRlZEl0ZW1JbmRleCA6IG51bGwsXG4gICAgICAgIG9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlOiB0aGlzLm9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlLFxuICAgICAgICBnZXRJdGVtSWQ6IHRoaXMuZ2V0SXRlbUlkLFxuICAgICAgICB0aGVtZTogdGhlbWUsXG4gICAgICAgIGtleVByZWZpeDogXCJyZWFjdC1hdXRvd2hhdGV2ZXItXCIuY29uY2F0KGlkLCBcIi1cIilcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbnN1cmVIaWdobGlnaHRlZEl0ZW1Jc1Zpc2libGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5zdXJlSGlnaGxpZ2h0ZWRJdGVtSXNWaXNpYmxlKCkge1xuICAgICAgdmFyIGhpZ2hsaWdodGVkSXRlbSA9IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtO1xuXG4gICAgICBpZiAoIWhpZ2hsaWdodGVkSXRlbSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVtc0NvbnRhaW5lciA9IHRoaXMuaXRlbXNDb250YWluZXI7XG4gICAgICB2YXIgaXRlbU9mZnNldFJlbGF0aXZlVG9Db250YWluZXIgPSBoaWdobGlnaHRlZEl0ZW0ub2Zmc2V0UGFyZW50ID09PSBpdGVtc0NvbnRhaW5lciA/IGhpZ2hsaWdodGVkSXRlbS5vZmZzZXRUb3AgOiBoaWdobGlnaHRlZEl0ZW0ub2Zmc2V0VG9wIC0gaXRlbXNDb250YWluZXIub2Zmc2V0VG9wO1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IGl0ZW1zQ29udGFpbmVyLnNjcm9sbFRvcDsgLy8gVG9wIG9mIHRoZSB2aXNpYmxlIGFyZWFcblxuICAgICAgaWYgKGl0ZW1PZmZzZXRSZWxhdGl2ZVRvQ29udGFpbmVyIDwgc2Nyb2xsVG9wKSB7XG4gICAgICAgIC8vIEl0ZW0gaXMgb2ZmIHRoZSB0b3Agb2YgdGhlIHZpc2libGUgYXJlYVxuICAgICAgICBzY3JvbGxUb3AgPSBpdGVtT2Zmc2V0UmVsYXRpdmVUb0NvbnRhaW5lcjtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbU9mZnNldFJlbGF0aXZlVG9Db250YWluZXIgKyBoaWdobGlnaHRlZEl0ZW0ub2Zmc2V0SGVpZ2h0ID4gc2Nyb2xsVG9wICsgaXRlbXNDb250YWluZXIub2Zmc2V0SGVpZ2h0KSB7XG4gICAgICAgIC8vIEl0ZW0gaXMgb2ZmIHRoZSBib3R0b20gb2YgdGhlIHZpc2libGUgYXJlYVxuICAgICAgICBzY3JvbGxUb3AgPSBpdGVtT2Zmc2V0UmVsYXRpdmVUb0NvbnRhaW5lciArIGhpZ2hsaWdodGVkSXRlbS5vZmZzZXRIZWlnaHQgLSBpdGVtc0NvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IGl0ZW1zQ29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICBpdGVtc0NvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgdGhlbWUgPSB0aGlzLnRoZW1lO1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaWQgPSBfdGhpcyRwcm9wczQuaWQsXG4gICAgICAgICAgbXVsdGlTZWN0aW9uID0gX3RoaXMkcHJvcHM0Lm11bHRpU2VjdGlvbixcbiAgICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudCA9IF90aGlzJHByb3BzNC5yZW5kZXJJbnB1dENvbXBvbmVudCxcbiAgICAgICAgICByZW5kZXJJdGVtc0NvbnRhaW5lciA9IF90aGlzJHByb3BzNC5yZW5kZXJJdGVtc0NvbnRhaW5lcixcbiAgICAgICAgICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleCA9IF90aGlzJHByb3BzNC5oaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleCA9IF90aGlzJHByb3BzNC5oaWdobGlnaHRlZEl0ZW1JbmRleDtcbiAgICAgIHZhciBpc0lucHV0Rm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNJbnB1dEZvY3VzZWQ7XG4gICAgICB2YXIgcmVuZGVyZWRJdGVtcyA9IG11bHRpU2VjdGlvbiA/IHRoaXMucmVuZGVyU2VjdGlvbnMoKSA6IHRoaXMucmVuZGVySXRlbXMoKTtcbiAgICAgIHZhciBpc09wZW4gPSByZW5kZXJlZEl0ZW1zICE9PSBudWxsO1xuICAgICAgdmFyIGFyaWFBY3RpdmVkZXNjZW5kYW50ID0gdGhpcy5nZXRJdGVtSWQoaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsIGhpZ2hsaWdodGVkSXRlbUluZGV4KTtcbiAgICAgIHZhciBpdGVtc0NvbnRhaW5lcklkID0gXCJyZWFjdC1hdXRvd2hhdGV2ZXItXCIuY29uY2F0KGlkKTtcblxuICAgICAgdmFyIGNvbnRhaW5lclByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJvbGU6ICdjb21ib2JveCcsXG4gICAgICAgICdhcmlhLWhhc3BvcHVwJzogJ2xpc3Rib3gnLFxuICAgICAgICAnYXJpYS1vd25zJzogaXRlbXNDb250YWluZXJJZCxcbiAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBpc09wZW5cbiAgICAgIH0sIHRoZW1lKFwicmVhY3QtYXV0b3doYXRldmVyLVwiLmNvbmNhdChpZCwgXCItY29udGFpbmVyXCIpLCAnY29udGFpbmVyJywgaXNPcGVuICYmICdjb250YWluZXJPcGVuJyksIHt9LCB0aGlzLnByb3BzLmNvbnRhaW5lclByb3BzKTtcblxuICAgICAgdmFyIGlucHV0Q29tcG9uZW50ID0gcmVuZGVySW5wdXRDb21wb25lbnQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBhdXRvQ29tcGxldGU6ICdvZmYnLFxuICAgICAgICAnYXJpYS1hdXRvY29tcGxldGUnOiAnbGlzdCcsXG4gICAgICAgICdhcmlhLWNvbnRyb2xzJzogaXRlbXNDb250YWluZXJJZCxcbiAgICAgICAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IGFyaWFBY3RpdmVkZXNjZW5kYW50XG4gICAgICB9LCB0aGVtZShcInJlYWN0LWF1dG93aGF0ZXZlci1cIi5jb25jYXQoaWQsIFwiLWlucHV0XCIpLCAnaW5wdXQnLCBpc09wZW4gJiYgJ2lucHV0T3BlbicsIGlzSW5wdXRGb2N1c2VkICYmICdpbnB1dEZvY3VzZWQnKSwge30sIHRoaXMucHJvcHMuaW5wdXRQcm9wcywge1xuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uS2V5RG93biAmJiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgcmVmOiB0aGlzLnN0b3JlSW5wdXRSZWZlcmVuY2VcbiAgICAgIH0pKTtcbiAgICAgIHZhciBpdGVtc0NvbnRhaW5lciA9IHJlbmRlckl0ZW1zQ29udGFpbmVyKHtcbiAgICAgICAgY29udGFpbmVyUHJvcHM6IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIGlkOiBpdGVtc0NvbnRhaW5lcklkLFxuICAgICAgICAgIHJvbGU6ICdsaXN0Ym94J1xuICAgICAgICB9LCB0aGVtZShcInJlYWN0LWF1dG93aGF0ZXZlci1cIi5jb25jYXQoaWQsIFwiLWl0ZW1zLWNvbnRhaW5lclwiKSwgJ2l0ZW1zQ29udGFpbmVyJywgaXNPcGVuICYmICdpdGVtc0NvbnRhaW5lck9wZW4nKSwge1xuICAgICAgICAgIHJlZjogdGhpcy5zdG9yZUl0ZW1zQ29udGFpbmVyUmVmZXJlbmNlXG4gICAgICAgIH0pLFxuICAgICAgICBjaGlsZHJlbjogcmVuZGVyZWRJdGVtc1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImRpdlwiLCBjb250YWluZXJQcm9wcywgaW5wdXRDb21wb25lbnQsIGl0ZW1zQ29udGFpbmVyKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQXV0b3doYXRldmVyO1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBBdXRvd2hhdGV2ZXI7XG5cbl9kZWZpbmVQcm9wZXJ0eShBdXRvd2hhdGV2ZXIsIFwicHJvcFR5cGVzXCIsIHtcbiAgaWQ6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLnN0cmluZyxcbiAgLy8gVXNlZCBpbiBhcmlhLSogYXR0cmlidXRlcy4gSWYgbXVsdGlwbGUgQXV0b3doYXRldmVyJ3MgYXJlIHJlbmRlcmVkIG9uIGEgcGFnZSwgdGhleSBtdXN0IGhhdmUgdW5pcXVlIGlkcy5cbiAgbXVsdGlTZWN0aW9uOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5ib29sLFxuICAvLyBJbmRpY2F0ZXMgd2hldGhlciBhIG11bHRpIHNlY3Rpb24gbGF5b3V0IHNob3VsZCBiZSByZW5kZXJlZC5cbiAgcmVuZGVySW5wdXRDb21wb25lbnQ6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIC8vIFdoZW4gc3BlY2lmaWVkLCBpdCBpcyB1c2VkIHRvIHJlbmRlciB0aGUgaW5wdXQgZWxlbWVudC5cbiAgcmVuZGVySXRlbXNDb250YWluZXI6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIC8vIFJlbmRlcnMgdGhlIGl0ZW1zIGNvbnRhaW5lci5cbiAgaXRlbXM6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmFycmF5LmlzUmVxdWlyZWQsXG4gIC8vIEFycmF5IG9mIGl0ZW1zIG9yIHNlY3Rpb25zIHRvIHJlbmRlci5cbiAgcmVuZGVySXRlbTogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYyxcbiAgLy8gVGhpcyBmdW5jdGlvbiByZW5kZXJzIGEgc2luZ2xlIGl0ZW0uXG4gIHJlbmRlckl0ZW1EYXRhOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QsXG4gIC8vIEFyYml0cmFyeSBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gcmVuZGVySXRlbSgpXG4gIHJlbmRlclNlY3Rpb25UaXRsZTogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYyxcbiAgLy8gVGhpcyBmdW5jdGlvbiBnZXRzIGEgc2VjdGlvbiBhbmQgcmVuZGVycyBpdHMgdGl0bGUuXG4gIGdldFNlY3Rpb25JdGVtczogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYyxcbiAgLy8gVGhpcyBmdW5jdGlvbiBnZXRzIGEgc2VjdGlvbiBhbmQgcmV0dXJucyBpdHMgaXRlbXMsIHdoaWNoIHdpbGwgYmUgcGFzc2VkIGludG8gYHJlbmRlckl0ZW1gIGZvciByZW5kZXJpbmcuXG4gIGNvbnRhaW5lclByb3BzOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QsXG4gIC8vIEFyYml0cmFyeSBjb250YWluZXIgcHJvcHNcbiAgaW5wdXRQcm9wczogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0ub2JqZWN0LFxuICAvLyBBcmJpdHJhcnkgaW5wdXQgcHJvcHNcbiAgaXRlbVByb3BzOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vbmVPZlR5cGUoWy8vIEFyYml0cmFyeSBpdGVtIHByb3BzXG4gIF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLm9iamVjdCwgX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuY10pLFxuICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0ubnVtYmVyLFxuICAvLyBTZWN0aW9uIGluZGV4IG9mIHRoZSBoaWdobGlnaHRlZCBpdGVtXG4gIGhpZ2hsaWdodGVkSXRlbUluZGV4OiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5udW1iZXIsXG4gIC8vIEhpZ2hsaWdodGVkIGl0ZW0gaW5kZXggKHdpdGhpbiBhIHNlY3Rpb24pXG4gIHRoZW1lOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vbmVPZlR5cGUoWy8vIFN0eWxlcy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWFya2RhbGdsZWlzaC9yZWFjdC10aGVtZWFibGVcbiAgX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0ub2JqZWN0LCBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5hcnJheV0pXG59KTtcblxuX2RlZmluZVByb3BlcnR5KEF1dG93aGF0ZXZlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpZDogJzEnLFxuICBtdWx0aVNlY3Rpb246IGZhbHNlLFxuICByZW5kZXJJbnB1dENvbXBvbmVudDogZGVmYXVsdFJlbmRlcklucHV0Q29tcG9uZW50LFxuICByZW5kZXJJdGVtc0NvbnRhaW5lcjogZGVmYXVsdFJlbmRlckl0ZW1zQ29udGFpbmVyLFxuICByZW5kZXJJdGVtOiBmdW5jdGlvbiByZW5kZXJJdGVtKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYHJlbmRlckl0ZW1gIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfSxcbiAgcmVuZGVySXRlbURhdGE6IGVtcHR5T2JqZWN0LFxuICByZW5kZXJTZWN0aW9uVGl0bGU6IGZ1bmN0aW9uIHJlbmRlclNlY3Rpb25UaXRsZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ByZW5kZXJTZWN0aW9uVGl0bGVgIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfSxcbiAgZ2V0U2VjdGlvbkl0ZW1zOiBmdW5jdGlvbiBnZXRTZWN0aW9uSXRlbXMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdgZ2V0U2VjdGlvbkl0ZW1zYCBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gIH0sXG4gIGNvbnRhaW5lclByb3BzOiBlbXB0eU9iamVjdCxcbiAgaW5wdXRQcm9wczogZW1wdHlPYmplY3QsXG4gIGl0ZW1Qcm9wczogZW1wdHlPYmplY3QsXG4gIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICBoaWdobGlnaHRlZEl0ZW1JbmRleDogbnVsbCxcbiAgdGhlbWU6IGRlZmF1bHRUaGVtZVxufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5cbnZhciBfYXJyYXlzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwic2hhbGxvdy1lcXVhbC9hcnJheXNcIikpO1xuXG52YXIgX0F1dG93aGF0ZXZlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vQXV0b3doYXRldmVyXCIpKTtcblxudmFyIF90aGVtZSA9IHJlcXVpcmUoXCIuL3RoZW1lXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyBpZiAodHlwZW9mIFdlYWtNYXAgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7IHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgcmV0dXJuIGNhY2hlOyB9OyByZXR1cm4gY2FjaGU7IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBpZiAob2JqID09PSBudWxsIHx8IF90eXBlb2Yob2JqKSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHsgcmV0dXJuIHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9IHZhciBjYWNoZSA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpOyBpZiAoY2FjaGUgJiYgY2FjaGUuaGFzKG9iaikpIHsgcmV0dXJuIGNhY2hlLmdldChvYmopOyB9IHZhciBuZXdPYmogPSB7fTsgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7IHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsOyBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7IH0gZWxzZSB7IG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSB9IG5ld09ialtcImRlZmF1bHRcIl0gPSBvYmo7IGlmIChjYWNoZSkgeyBjYWNoZS5zZXQob2JqLCBuZXdPYmopOyB9IHJldHVybiBuZXdPYmo7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgYWx3YXlzVHJ1ZSA9IGZ1bmN0aW9uIGFsd2F5c1RydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIGRlZmF1bHRTaG91bGRSZW5kZXJTdWdnZXN0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRTaG91bGRSZW5kZXJTdWdnZXN0aW9ucyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XG59O1xuXG52YXIgZGVmYXVsdFJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyID0gZnVuY3Rpb24gZGVmYXVsdFJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyKF9yZWYpIHtcbiAgdmFyIGNvbnRhaW5lclByb3BzID0gX3JlZi5jb250YWluZXJQcm9wcyxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgY29udGFpbmVyUHJvcHMsIGNoaWxkcmVuKTtcbn07XG5cbnZhciBSRUFTT05fU1VHR0VTVElPTlNfUkVWRUFMRUQgPSAnc3VnZ2VzdGlvbnMtcmV2ZWFsZWQnO1xudmFyIFJFQVNPTl9TVUdHRVNUSU9OU19VUERBVEVEID0gJ3N1Z2dlc3Rpb25zLXVwZGF0ZWQnO1xudmFyIFJFQVNPTl9TVUdHRVNUSU9OX1NFTEVDVEVEID0gJ3N1Z2dlc3Rpb24tc2VsZWN0ZWQnO1xudmFyIFJFQVNPTl9JTlBVVF9GT0NVU0VEID0gJ2lucHV0LWZvY3VzZWQnO1xudmFyIFJFQVNPTl9JTlBVVF9DSEFOR0VEID0gJ2lucHV0LWNoYW5nZWQnO1xudmFyIFJFQVNPTl9JTlBVVF9CTFVSUkVEID0gJ2lucHV0LWJsdXJyZWQnO1xudmFyIFJFQVNPTl9FU0NBUEVfUFJFU1NFRCA9ICdlc2NhcGUtcHJlc3NlZCc7XG5cbnZhciBBdXRvc3VnZ2VzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQXV0b3N1Z2dlc3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQXV0b3N1Z2dlc3QpO1xuXG4gIGZ1bmN0aW9uIEF1dG9zdWdnZXN0KF9yZWYyKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIF9hbHdheXNSZW5kZXJTdWdnZXN0aW9ucyA9IF9yZWYyLmFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEF1dG9zdWdnZXN0KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Eb2N1bWVudE1vdXNlRG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLmp1c3RDbGlja2VkT25TdWdnZXN0aW9uc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgdmFyIG5vZGUgPSBldmVudC5kZXRhaWwgJiYgZXZlbnQuZGV0YWlsLnRhcmdldCB8fCAvLyBUaGlzIGlzIGZvciB0ZXN0aW5nIG9ubHkuIFBsZWFzZSBzaG93IG1lIGEgYmV0dGVyIHdheSB0byBlbXVsYXRlIHRoaXMuXG4gICAgICBldmVudC50YXJnZXQ7XG5cbiAgICAgIHdoaWxlIChub2RlICE9PSBudWxsICYmIG5vZGUgIT09IGRvY3VtZW50KSB7XG4gICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1zdWdnZXN0aW9uLWluZGV4JykgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBTdWdnZXN0aW9uIHdhcyBjbGlja2VkXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IF90aGlzLnN1Z2dlc3Rpb25zQ29udGFpbmVyKSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIGVsc2UgaW5zaWRlIHN1Z2dlc3Rpb25zIGNvbnRhaW5lciB3YXMgY2xpY2tlZFxuICAgICAgICAgIF90aGlzLmp1c3RDbGlja2VkT25TdWdnZXN0aW9uc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdG9yZUF1dG93aGF0ZXZlclJlZlwiLCBmdW5jdGlvbiAoYXV0b3doYXRldmVyKSB7XG4gICAgICBpZiAoYXV0b3doYXRldmVyICE9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLmF1dG93aGF0ZXZlciA9IGF1dG93aGF0ZXZlcjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblN1Z2dlc3Rpb25Nb3VzZUVudGVyXCIsIGZ1bmN0aW9uIChldmVudCwgX3JlZjMpIHtcbiAgICAgIHZhciBzZWN0aW9uSW5kZXggPSBfcmVmMy5zZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaXRlbUluZGV4ID0gX3JlZjMuaXRlbUluZGV4O1xuXG4gICAgICBfdGhpcy51cGRhdGVIaWdobGlnaHRlZFN1Z2dlc3Rpb24oc2VjdGlvbkluZGV4LCBpdGVtSW5kZXgpO1xuXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBfdGhpcy5wcmVzc2VkU3VnZ2VzdGlvbikge1xuICAgICAgICBfdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuanVzdE1vdXNlRW50ZXJlZCA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuanVzdE1vdXNlRW50ZXJlZCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnVwZGF0ZUhpZ2hsaWdodGVkU3VnZ2VzdGlvbihfdGhpcy5wcm9wcy5tdWx0aVNlY3Rpb24gPyAwIDogbnVsbCwgMCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Eb2N1bWVudE1vdXNlVXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByZXNzZWRTdWdnZXN0aW9uICYmICFfdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uKSB7XG4gICAgICAgIF90aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnByZXNzZWRTdWdnZXN0aW9uID0gbnVsbDtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblN1Z2dlc3Rpb25Nb3VzZURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBDaGVja2luZyBpZiB0aGlzLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gaXMgYWxyZWFkeSB0cnVlIHRvIG5vdCBkdXBsaWNhdGUgdG91Y2ggZXZlbnRzIGluIGNocm9tZVxuICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzk4MDkjaXNzdWVjb21tZW50LTQxMzk3ODQwNVxuICAgICAgaWYgKCFfdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uKSB7XG4gICAgICAgIF90aGlzLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSB0cnVlO1xuICAgICAgICBfdGhpcy5wcmVzc2VkU3VnZ2VzdGlvbiA9IGV2ZW50LnRhcmdldDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCA9IF90aGlzLnByb3BzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZDtcbiAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCAmJiBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblN1Z2dlc3Rpb25TZWxlY3RlZFwiLCBmdW5jdGlvbiAoZXZlbnQsIGRhdGEpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zID0gX3RoaXMkcHJvcHMuYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQgPSBfdGhpcyRwcm9wcy5vblN1Z2dlc3Rpb25TZWxlY3RlZCxcbiAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQgPSBfdGhpcyRwcm9wcy5vblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ7XG4gICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZCAmJiBvblN1Z2dlc3Rpb25TZWxlY3RlZChldmVudCwgZGF0YSk7XG5cbiAgICAgIHZhciBrZWVwU3VnZ2VzdGlvbnNPblNlbGVjdCA9IF90aGlzLnByb3BzLnNob3VsZEtlZXBTdWdnZXN0aW9uc09uU2VsZWN0KGRhdGEuc3VnZ2VzdGlvbik7XG5cbiAgICAgIGlmIChhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyB8fCBrZWVwU3VnZ2VzdGlvbnNPblNlbGVjdCkge1xuICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQoe1xuICAgICAgICAgIHZhbHVlOiBkYXRhLnN1Z2dlc3Rpb25WYWx1ZSxcbiAgICAgICAgICByZWFzb246IFJFQVNPTl9TVUdHRVNUSU9OX1NFTEVDVEVEXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkKCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnJlc2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25TdWdnZXN0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczIuYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrID0gX3RoaXMkcHJvcHMyLmZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljaztcblxuICAgICAgdmFyIF90aGlzJGdldFN1Z2dlc3Rpb25JbiA9IF90aGlzLmdldFN1Z2dlc3Rpb25JbmRpY2VzKF90aGlzLmZpbmRTdWdnZXN0aW9uRWxlbWVudChldmVudC50YXJnZXQpKSxcbiAgICAgICAgICBzZWN0aW9uSW5kZXggPSBfdGhpcyRnZXRTdWdnZXN0aW9uSW4uc2VjdGlvbkluZGV4LFxuICAgICAgICAgIHN1Z2dlc3Rpb25JbmRleCA9IF90aGlzJGdldFN1Z2dlc3Rpb25Jbi5zdWdnZXN0aW9uSW5kZXg7XG5cbiAgICAgIHZhciBjbGlja2VkU3VnZ2VzdGlvbiA9IF90aGlzLmdldFN1Z2dlc3Rpb24oc2VjdGlvbkluZGV4LCBzdWdnZXN0aW9uSW5kZXgpO1xuXG4gICAgICB2YXIgY2xpY2tlZFN1Z2dlc3Rpb25WYWx1ZSA9IF90aGlzLnByb3BzLmdldFN1Z2dlc3Rpb25WYWx1ZShjbGlja2VkU3VnZ2VzdGlvbik7XG5cbiAgICAgIF90aGlzLm1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCBjbGlja2VkU3VnZ2VzdGlvblZhbHVlLCAnY2xpY2snKTtcblxuICAgICAgX3RoaXMub25TdWdnZXN0aW9uU2VsZWN0ZWQoZXZlbnQsIHtcbiAgICAgICAgc3VnZ2VzdGlvbjogY2xpY2tlZFN1Z2dlc3Rpb24sXG4gICAgICAgIHN1Z2dlc3Rpb25WYWx1ZTogY2xpY2tlZFN1Z2dlc3Rpb25WYWx1ZSxcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4OiBzdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgIHNlY3Rpb25JbmRleDogc2VjdGlvbkluZGV4LFxuICAgICAgICBtZXRob2Q6ICdjbGljaydcbiAgICAgIH0pO1xuXG4gICAgICB2YXIga2VlcFN1Z2dlc3Rpb25zT25TZWxlY3QgPSBfdGhpcy5wcm9wcy5zaG91bGRLZWVwU3VnZ2VzdGlvbnNPblNlbGVjdChjbGlja2VkU3VnZ2VzdGlvbik7XG5cbiAgICAgIGlmICghKGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIHx8IGtlZXBTdWdnZXN0aW9uc09uU2VsZWN0KSkge1xuICAgICAgICBfdGhpcy5jbG9zZVN1Z2dlc3Rpb25zKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2sgPT09IHRydWUpIHtcbiAgICAgICAgX3RoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLm9uQmx1cigpO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbnB1dFByb3BzID0gX3RoaXMkcHJvcHMzLmlucHV0UHJvcHMsXG4gICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczMuc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFByb3BzLnZhbHVlLFxuICAgICAgICAgIG9uQmx1ciA9IGlucHV0UHJvcHMub25CbHVyO1xuXG4gICAgICB2YXIgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uID0gX3RoaXMuZ2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKCk7XG5cbiAgICAgIHZhciBzaG91bGRSZW5kZXIgPSBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucyh2YWx1ZSwgUkVBU09OX0lOUFVUX0JMVVJSRUQpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2UsXG4gICAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleDogbnVsbCxcbiAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uOiBudWxsLFxuICAgICAgICB2YWx1ZUJlZm9yZVVwRG93bjogbnVsbCxcbiAgICAgICAgaXNDb2xsYXBzZWQ6ICFzaG91bGRSZW5kZXJcbiAgICAgIH0pO1xuXG4gICAgICBvbkJsdXIgJiYgb25CbHVyKF90aGlzLmJsdXJFdmVudCwge1xuICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb246IGhpZ2hsaWdodGVkU3VnZ2VzdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25TdWdnZXN0aW9uTW91c2VMZWF2ZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLnJlc2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKGZhbHNlKTsgLy8gc2hvdWxkUmVzZXRWYWx1ZUJlZm9yZVVwRG93blxuXG5cbiAgICAgIGlmIChfdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uICYmIGV2ZW50LnRhcmdldCA9PT0gX3RoaXMucHJlc3NlZFN1Z2dlc3Rpb24pIHtcbiAgICAgICAgX3RoaXMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU3VnZ2VzdGlvblRvdWNoU3RhcnRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IHRydWU7IC8vIHRvZG86IGV2ZW50LnByZXZlbnREZWZhdWx0IHdoZW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yMDQzXG4gICAgICAvLyB0b2RvOiBnZXRzIHJlbGVhc2VkIHNvIG9uU3VnZ2VzdGlvbk1vdXNlRG93biB3b24ndCBmaXJlIGluIGNocm9tZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU3VnZ2VzdGlvblRvdWNoTW92ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgICBfdGhpcy5wcmVzc2VkU3VnZ2VzdGlvbiA9IG51bGw7XG5cbiAgICAgIF90aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaXRlbVByb3BzXCIsIGZ1bmN0aW9uIChfcmVmNCkge1xuICAgICAgdmFyIHNlY3Rpb25JbmRleCA9IF9yZWY0LnNlY3Rpb25JbmRleCxcbiAgICAgICAgICBpdGVtSW5kZXggPSBfcmVmNC5pdGVtSW5kZXg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGF0YS1zZWN0aW9uLWluZGV4Jzogc2VjdGlvbkluZGV4LFxuICAgICAgICAnZGF0YS1zdWdnZXN0aW9uLWluZGV4JzogaXRlbUluZGV4LFxuICAgICAgICBvbk1vdXNlRW50ZXI6IF90aGlzLm9uU3VnZ2VzdGlvbk1vdXNlRW50ZXIsXG4gICAgICAgIG9uTW91c2VMZWF2ZTogX3RoaXMub25TdWdnZXN0aW9uTW91c2VMZWF2ZSxcbiAgICAgICAgb25Nb3VzZURvd246IF90aGlzLm9uU3VnZ2VzdGlvbk1vdXNlRG93bixcbiAgICAgICAgb25Ub3VjaFN0YXJ0OiBfdGhpcy5vblN1Z2dlc3Rpb25Ub3VjaFN0YXJ0LFxuICAgICAgICBvblRvdWNoTW92ZTogX3RoaXMub25TdWdnZXN0aW9uVG91Y2hNb3ZlLFxuICAgICAgICBvbkNsaWNrOiBfdGhpcy5vblN1Z2dlc3Rpb25DbGlja1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lclwiLCBmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgIHZhciBjb250YWluZXJQcm9wcyA9IF9yZWY1LmNvbnRhaW5lclByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3JlZjUuY2hpbGRyZW47XG4gICAgICB2YXIgcmVuZGVyU3VnZ2VzdGlvbnNDb250YWluZXIgPSBfdGhpcy5wcm9wcy5yZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lcjtcbiAgICAgIHJldHVybiByZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lcih7XG4gICAgICAgIGNvbnRhaW5lclByb3BzOiBjb250YWluZXJQcm9wcyxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICBxdWVyeTogX3RoaXMuZ2V0UXVlcnkoKVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzRm9jdXNlZDogZmFsc2UsXG4gICAgICBpc0NvbGxhcHNlZDogIV9hbHdheXNSZW5kZXJTdWdnZXN0aW9ucyxcbiAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg6IG51bGwsXG4gICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb246IG51bGwsXG4gICAgICB2YWx1ZUJlZm9yZVVwRG93bjogbnVsbFxuICAgIH07XG4gICAgX3RoaXMuanVzdFByZXNzZWRVcERvd24gPSBmYWxzZTtcbiAgICBfdGhpcy5qdXN0TW91c2VFbnRlcmVkID0gZmFsc2U7XG4gICAgX3RoaXMucHJlc3NlZFN1Z2dlc3Rpb24gPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhBdXRvc3VnZ2VzdCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uRG9jdW1lbnRNb3VzZURvd24pO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Eb2N1bWVudE1vdXNlVXApO1xuICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuYXV0b3doYXRldmVyLmlucHV0O1xuICAgICAgdGhpcy5zdWdnZXN0aW9uc0NvbnRhaW5lciA9IHRoaXMuYXV0b3doYXRldmVyLml0ZW1zQ29udGFpbmVyO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZSwgcmVhY3Qvc29ydC1jb21wXG5cbiAgfSwge1xuICAgIGtleTogXCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIC8vIFdoZW4gaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uIGJlY29tZXMgZGVhY3RpdmF0ZWQsIGlmIHRoZSBmaXJzdCBzdWdnZXN0aW9uIHdhc1xuICAgICAgLy8gc2V0LCB3ZSBzaG91bGQgcmVzZXQgdGhlIHN1Z2dlc3Rpb24gYmFjayB0byB0aGUgdW5zZWxlY3RlZCBkZWZhdWx0IHN0YXRlLlxuICAgICAgdmFyIHNob3VsZFJlc2V0SGlnaGxpZ2h0aW5nID0gdGhpcy5zdGF0ZS5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9PT0gMCAmJiB0aGlzLnByb3BzLmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbiAmJiAhbmV4dFByb3BzLmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbjtcblxuICAgICAgaWYgKCgwLCBfYXJyYXlzW1wiZGVmYXVsdFwiXSkobmV4dFByb3BzLnN1Z2dlc3Rpb25zLCB0aGlzLnByb3BzLnN1Z2dlc3Rpb25zKSkge1xuICAgICAgICBpZiAobmV4dFByb3BzLmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbiAmJiBuZXh0UHJvcHMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLmp1c3RQcmVzc2VkVXBEb3duID09PSBmYWxzZSAmJiB0aGlzLmp1c3RNb3VzZUVudGVyZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgfSBlbHNlIGlmIChzaG91bGRSZXNldEhpZ2hsaWdodGluZykge1xuICAgICAgICAgIHRoaXMucmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMud2lsbFJlbmRlclN1Z2dlc3Rpb25zKG5leHRQcm9wcywgUkVBU09OX1NVR0dFU1RJT05TX1VQREFURUQpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUuaXNDb2xsYXBzZWQgJiYgIXRoaXMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZXZlYWxTdWdnZXN0aW9ucygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaG91bGRSZXNldEhpZ2hsaWdodGluZykge1xuICAgICAgICAgICAgdGhpcy5yZXNldEhpZ2hsaWdodGVkU3VnZ2VzdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgc3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczQuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgb25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQgPSBfdGhpcyRwcm9wczQub25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uID0gX3RoaXMkcHJvcHM0LmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbjtcblxuICAgICAgaWYgKCEoMCwgX2FycmF5c1tcImRlZmF1bHRcIl0pKHN1Z2dlc3Rpb25zLCBwcmV2UHJvcHMuc3VnZ2VzdGlvbnMpICYmIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uKSB7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9uU3VnZ2VzdGlvbkhpZ2hsaWdodGVkKSB7XG4gICAgICAgIHZhciBoaWdobGlnaHRlZFN1Z2dlc3Rpb24gPSB0aGlzLmdldEhpZ2hsaWdodGVkU3VnZ2VzdGlvbigpO1xuICAgICAgICB2YXIgcHJldkhpZ2hsaWdodGVkU3VnZ2VzdGlvbiA9IHByZXZTdGF0ZS5oaWdobGlnaHRlZFN1Z2dlc3Rpb247XG5cbiAgICAgICAgaWYgKGhpZ2hsaWdodGVkU3VnZ2VzdGlvbiAhPSBwcmV2SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKSB7XG4gICAgICAgICAgb25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQoe1xuICAgICAgICAgICAgc3VnZ2VzdGlvbjogaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uRG9jdW1lbnRNb3VzZURvd24pO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Eb2N1bWVudE1vdXNlVXApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVIaWdobGlnaHRlZFN1Z2dlc3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlSGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKHNlY3Rpb25JbmRleCwgc3VnZ2VzdGlvbkluZGV4LCBwcmV2VmFsdWUpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgdmFsdWVCZWZvcmVVcERvd24gPSBzdGF0ZS52YWx1ZUJlZm9yZVVwRG93bjtcblxuICAgICAgICBpZiAoc3VnZ2VzdGlvbkluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgdmFsdWVCZWZvcmVVcERvd24gPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlQmVmb3JlVXBEb3duID09PSBudWxsICYmIHR5cGVvZiBwcmV2VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdmFsdWVCZWZvcmVVcERvd24gPSBwcmV2VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBzZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg6IHN1Z2dlc3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb246IHN1Z2dlc3Rpb25JbmRleCA9PT0gbnVsbCA/IG51bGwgOiBfdGhpczIuZ2V0U3VnZ2VzdGlvbihzZWN0aW9uSW5kZXgsIHN1Z2dlc3Rpb25JbmRleCksXG4gICAgICAgICAgdmFsdWVCZWZvcmVVcERvd246IHZhbHVlQmVmb3JlVXBEb3duXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24oKSB7XG4gICAgICB2YXIgc2hvdWxkUmVzZXRWYWx1ZUJlZm9yZVVwRG93biA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciB2YWx1ZUJlZm9yZVVwRG93biA9IHN0YXRlLnZhbHVlQmVmb3JlVXBEb3duO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICAgICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4OiBudWxsLFxuICAgICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbjogbnVsbCxcbiAgICAgICAgICB2YWx1ZUJlZm9yZVVwRG93bjogc2hvdWxkUmVzZXRWYWx1ZUJlZm9yZVVwRG93biA/IG51bGwgOiB2YWx1ZUJlZm9yZVVwRG93blxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJldmVhbFN1Z2dlc3Rpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJldmVhbFN1Z2dlc3Rpb25zKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzQ29sbGFwc2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsb3NlU3VnZ2VzdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2VTdWdnZXN0aW9ucygpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleDogbnVsbCxcbiAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg6IG51bGwsXG4gICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbjogbnVsbCxcbiAgICAgICAgdmFsdWVCZWZvcmVVcERvd246IG51bGwsXG4gICAgICAgIGlzQ29sbGFwc2VkOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3VnZ2VzdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uKHNlY3Rpb25JbmRleCwgc3VnZ2VzdGlvbkluZGV4KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBzdWdnZXN0aW9ucyA9IF90aGlzJHByb3BzNS5zdWdnZXN0aW9ucyxcbiAgICAgICAgICBtdWx0aVNlY3Rpb24gPSBfdGhpcyRwcm9wczUubXVsdGlTZWN0aW9uLFxuICAgICAgICAgIGdldFNlY3Rpb25TdWdnZXN0aW9ucyA9IF90aGlzJHByb3BzNS5nZXRTZWN0aW9uU3VnZ2VzdGlvbnM7XG5cbiAgICAgIGlmIChtdWx0aVNlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGdldFNlY3Rpb25TdWdnZXN0aW9ucyhzdWdnZXN0aW9uc1tzZWN0aW9uSW5kZXhdKVtzdWdnZXN0aW9uSW5kZXhdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnNbc3VnZ2VzdGlvbkluZGV4XTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEhpZ2hsaWdodGVkU3VnZ2VzdGlvbigpIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZS5oaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9IF90aGlzJHN0YXRlLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4O1xuXG4gICAgICBpZiAoaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmdldFN1Z2dlc3Rpb24oaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3VnZ2VzdGlvblZhbHVlQnlJbmRleFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uVmFsdWVCeUluZGV4KHNlY3Rpb25JbmRleCwgc3VnZ2VzdGlvbkluZGV4KSB7XG4gICAgICB2YXIgZ2V0U3VnZ2VzdGlvblZhbHVlID0gdGhpcy5wcm9wcy5nZXRTdWdnZXN0aW9uVmFsdWU7XG4gICAgICByZXR1cm4gZ2V0U3VnZ2VzdGlvblZhbHVlKHRoaXMuZ2V0U3VnZ2VzdGlvbihzZWN0aW9uSW5kZXgsIHN1Z2dlc3Rpb25JbmRleCkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRTdWdnZXN0aW9uSW5kaWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uSW5kaWNlcyhzdWdnZXN0aW9uRWxlbWVudCkge1xuICAgICAgdmFyIHNlY3Rpb25JbmRleCA9IHN1Z2dlc3Rpb25FbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zZWN0aW9uLWluZGV4Jyk7XG4gICAgICB2YXIgc3VnZ2VzdGlvbkluZGV4ID0gc3VnZ2VzdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXN1Z2dlc3Rpb24taW5kZXgnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlY3Rpb25JbmRleDogdHlwZW9mIHNlY3Rpb25JbmRleCA9PT0gJ3N0cmluZycgPyBwYXJzZUludChzZWN0aW9uSW5kZXgsIDEwKSA6IG51bGwsXG4gICAgICAgIHN1Z2dlc3Rpb25JbmRleDogcGFyc2VJbnQoc3VnZ2VzdGlvbkluZGV4LCAxMClcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpbmRTdWdnZXN0aW9uRWxlbWVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5kU3VnZ2VzdGlvbkVsZW1lbnQoc3RhcnROb2RlKSB7XG4gICAgICB2YXIgbm9kZSA9IHN0YXJ0Tm9kZTtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3VnZ2VzdGlvbi1pbmRleCcpICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgfSB3aGlsZSAobm9kZSAhPT0gbnVsbCk7XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NsaWNrZWQgZWxlbWVudDonLCBzdGFydE5vZGUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBzdWdnZXN0aW9uIGVsZW1lbnRcIik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm1heWJlQ2FsbE9uQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCBuZXdWYWx1ZSwgbWV0aG9kKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkaW5wdXRQcm9wID0gdGhpcy5wcm9wcy5pbnB1dFByb3BzLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcHJvcHMkaW5wdXRQcm9wLnZhbHVlLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMkaW5wdXRQcm9wLm9uQ2hhbmdlO1xuXG4gICAgICBpZiAobmV3VmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIG9uQ2hhbmdlKGV2ZW50LCB7XG4gICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgIG1ldGhvZDogbWV0aG9kXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3aWxsUmVuZGVyU3VnZ2VzdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd2lsbFJlbmRlclN1Z2dlc3Rpb25zKHByb3BzLCByZWFzb24pIHtcbiAgICAgIHZhciBzdWdnZXN0aW9ucyA9IHByb3BzLnN1Z2dlc3Rpb25zLFxuICAgICAgICAgIGlucHV0UHJvcHMgPSBwcm9wcy5pbnB1dFByb3BzLFxuICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zID0gcHJvcHMuc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFByb3BzLnZhbHVlO1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnModmFsdWUsIHJlYXNvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFF1ZXJ5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFF1ZXJ5KCkge1xuICAgICAgdmFyIGlucHV0UHJvcHMgPSB0aGlzLnByb3BzLmlucHV0UHJvcHM7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFByb3BzLnZhbHVlO1xuICAgICAgdmFyIHZhbHVlQmVmb3JlVXBEb3duID0gdGhpcy5zdGF0ZS52YWx1ZUJlZm9yZVVwRG93bjtcbiAgICAgIHJldHVybiAodmFsdWVCZWZvcmVVcERvd24gPT09IG51bGwgPyB2YWx1ZSA6IHZhbHVlQmVmb3JlVXBEb3duKS50cmltKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgc3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczYuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQgPSBfdGhpcyRwcm9wczYucmVuZGVySW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkID0gX3RoaXMkcHJvcHM2Lm9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCxcbiAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uID0gX3RoaXMkcHJvcHM2LnJlbmRlclN1Z2dlc3Rpb24sXG4gICAgICAgICAgaW5wdXRQcm9wcyA9IF90aGlzJHByb3BzNi5pbnB1dFByb3BzLFxuICAgICAgICAgIG11bHRpU2VjdGlvbiA9IF90aGlzJHByb3BzNi5tdWx0aVNlY3Rpb24sXG4gICAgICAgICAgcmVuZGVyU2VjdGlvblRpdGxlID0gX3RoaXMkcHJvcHM2LnJlbmRlclNlY3Rpb25UaXRsZSxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzNi5pZCxcbiAgICAgICAgICBnZXRTZWN0aW9uU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczYuZ2V0U2VjdGlvblN1Z2dlc3Rpb25zLFxuICAgICAgICAgIHRoZW1lID0gX3RoaXMkcHJvcHM2LnRoZW1lLFxuICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZSA9IF90aGlzJHByb3BzNi5nZXRTdWdnZXN0aW9uVmFsdWUsXG4gICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczYuYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uID0gX3RoaXMkcHJvcHM2LmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbixcbiAgICAgICAgICBjb250YWluZXJQcm9wcyA9IF90aGlzJHByb3BzNi5jb250YWluZXJQcm9wcztcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHN0YXRlMi5pc0ZvY3VzZWQsXG4gICAgICAgICAgaXNDb2xsYXBzZWQgPSBfdGhpcyRzdGF0ZTIuaXNDb2xsYXBzZWQsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZTIuaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZTIuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgICAgdmFsdWVCZWZvcmVVcERvd24gPSBfdGhpcyRzdGF0ZTIudmFsdWVCZWZvcmVVcERvd247XG4gICAgICB2YXIgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMgPSBhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyA/IGFsd2F5c1RydWUgOiB0aGlzLnByb3BzLnNob3VsZFJlbmRlclN1Z2dlc3Rpb25zO1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRQcm9wcy52YWx1ZSxcbiAgICAgICAgICBfb25Gb2N1cyA9IGlucHV0UHJvcHMub25Gb2N1cyxcbiAgICAgICAgICBfb25LZXlEb3duID0gaW5wdXRQcm9wcy5vbktleURvd247XG4gICAgICB2YXIgd2lsbFJlbmRlclN1Z2dlc3Rpb25zID0gdGhpcy53aWxsUmVuZGVyU3VnZ2VzdGlvbnModGhpcy5wcm9wcywgJ3JlbmRlcicpO1xuICAgICAgdmFyIGlzT3BlbiA9IGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIHx8IGlzRm9jdXNlZCAmJiAhaXNDb2xsYXBzZWQgJiYgd2lsbFJlbmRlclN1Z2dlc3Rpb25zO1xuICAgICAgdmFyIGl0ZW1zID0gaXNPcGVuID8gc3VnZ2VzdGlvbnMgOiBbXTtcblxuICAgICAgdmFyIGF1dG93aGF0ZXZlcklucHV0UHJvcHMgPSBfb2JqZWN0U3ByZWFkKHt9LCBpbnB1dFByb3BzLCB7XG4gICAgICAgIG9uRm9jdXM6IGZ1bmN0aW9uIG9uRm9jdXMoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIV90aGlzMy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uICYmICFfdGhpczMuanVzdENsaWNrZWRPblN1Z2dlc3Rpb25zQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB2YXIgc2hvdWxkUmVuZGVyID0gc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnModmFsdWUsIFJFQVNPTl9JTlBVVF9GT0NVU0VEKTtcblxuICAgICAgICAgICAgX3RoaXMzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgaXNGb2N1c2VkOiB0cnVlLFxuICAgICAgICAgICAgICBpc0NvbGxhcHNlZDogIXNob3VsZFJlbmRlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIF9vbkZvY3VzICYmIF9vbkZvY3VzKGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKHNob3VsZFJlbmRlcikge1xuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICByZWFzb246IFJFQVNPTl9JTlBVVF9GT0NVU0VEXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25CbHVyOiBmdW5jdGlvbiBvbkJsdXIoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLmp1c3RDbGlja2VkT25TdWdnZXN0aW9uc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgX3RoaXMzLmlucHV0LmZvY3VzKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczMuYmx1ckV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgICBpZiAoIV90aGlzMy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICBfdGhpczMub25CbHVyKCk7XG5cbiAgICAgICAgICAgIF90aGlzMy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICB2YXIgc2hvdWxkUmVuZGVyID0gc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnModmFsdWUsIFJFQVNPTl9JTlBVVF9DSEFOR0VEKTtcblxuICAgICAgICAgIF90aGlzMy5tYXliZUNhbGxPbkNoYW5nZShldmVudCwgdmFsdWUsICd0eXBlJyk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMzLnN1Z2dlc3Rpb25zQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBfdGhpczMuc3VnZ2VzdGlvbnNDb250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczMuc2V0U3RhdGUoX29iamVjdFNwcmVhZCh7fSwgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uID8ge30gOiB7XG4gICAgICAgICAgICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleDogbnVsbCxcbiAgICAgICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4OiBudWxsLFxuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uOiBudWxsXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgdmFsdWVCZWZvcmVVcERvd246IG51bGwsXG4gICAgICAgICAgICBpc0NvbGxhcHNlZDogIXNob3VsZFJlbmRlclxuICAgICAgICAgIH0pKTtcblxuICAgICAgICAgIGlmIChzaG91bGRSZW5kZXIpIHtcbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCh7XG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgcmVhc29uOiBSRUFTT05fSU5QVVRfQ0hBTkdFRFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzMy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uS2V5RG93bjogZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50LCBkYXRhKSB7XG4gICAgICAgICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIDQwOiAvLyBBcnJvd0Rvd25cblxuICAgICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgICAgLy8gQXJyb3dVcFxuICAgICAgICAgICAgICBpZiAoaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnModmFsdWUsIFJFQVNPTl9TVUdHRVNUSU9OU19SRVZFQUxFRCkpIHtcbiAgICAgICAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiBSRUFTT05fU1VHR0VTVElPTlNfUkVWRUFMRURcbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICBfdGhpczMucmV2ZWFsU3VnZ2VzdGlvbnMoKTtcblxuICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gV2UgYWN0IG9uIHRoZSBrZXkuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3SGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBkYXRhLm5ld0hpZ2hsaWdodGVkU2VjdGlvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICBuZXdIaWdobGlnaHRlZEl0ZW1JbmRleCA9IGRhdGEubmV3SGlnaGxpZ2h0ZWRJdGVtSW5kZXg7XG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5ld0hpZ2hsaWdodGVkSXRlbUluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyB2YWx1ZUJlZm9yZVVwRG93biBjYW4gYmUgbnVsbCBpZiwgZm9yIGV4YW1wbGUsIHVzZXJcbiAgICAgICAgICAgICAgICAgIC8vIGhvdmVycyBvbiB0aGUgZmlyc3Qgc3VnZ2VzdGlvbiBhbmQgdGhlbiBwcmVzc2VkIFVwLlxuICAgICAgICAgICAgICAgICAgLy8gSWYgdGhhdCBoYXBwZW5zLCB1c2UgdGhlIG9yaWdpbmFsIGlucHV0IHZhbHVlLlxuICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSB2YWx1ZUJlZm9yZVVwRG93biA9PT0gbnVsbCA/IHZhbHVlIDogdmFsdWVCZWZvcmVVcERvd247XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gX3RoaXMzLmdldFN1Z2dlc3Rpb25WYWx1ZUJ5SW5kZXgobmV3SGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsIG5ld0hpZ2hsaWdodGVkSXRlbUluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBfdGhpczMudXBkYXRlSGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKG5ld0hpZ2hsaWdodGVkU2VjdGlvbkluZGV4LCBuZXdIaWdobGlnaHRlZEl0ZW1JbmRleCwgdmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgX3RoaXMzLm1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCBuZXdWYWx1ZSwga2V5Q29kZSA9PT0gNDAgPyAnZG93bicgOiAndXAnKTtcblxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFdlIGFjdCBvbiB0aGUga2V5LlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX3RoaXMzLmp1c3RQcmVzc2VkVXBEb3duID0gdHJ1ZTtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMzLmp1c3RQcmVzc2VkVXBEb3duID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIEVudGVyXG5cbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTZWUgIzM4OFxuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAyMjkpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBoaWdobGlnaHRlZFN1Z2dlc3Rpb24gPSBfdGhpczMuZ2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNPcGVuICYmICFhbHdheXNSZW5kZXJTdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgX3RoaXMzLmNsb3NlU3VnZ2VzdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgIHZhciBfbmV3VmFsdWUgPSBnZXRTdWdnZXN0aW9uVmFsdWUoaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgX3RoaXMzLm1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCBfbmV3VmFsdWUsICdlbnRlcicpO1xuXG4gICAgICAgICAgICAgICAgICBfdGhpczMub25TdWdnZXN0aW9uU2VsZWN0ZWQoZXZlbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbjogaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uVmFsdWU6IF9uZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkluZGV4OiBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbkluZGV4OiBoaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnZW50ZXInXG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgX3RoaXMzLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzMy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXNjYXBlXG5cbiAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAvLyBJZiBpbnB1dC50eXBlID09PSAnc2VhcmNoJywgdGhlIGJyb3dzZXIgY2xlYXJzIHRoZSBpbnB1dFxuICAgICAgICAgICAgICAgICAgLy8gd2hlbiBFc2NhcGUgaXMgcHJlc3NlZC4gV2Ugd2FudCB0byBkaXNhYmxlIHRoaXMgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgLy8gYmVoYXZpb3VyIHNvIHRoYXQsIHdoZW4gc3VnZ2VzdGlvbnMgYXJlIHNob3duLCB3ZSBqdXN0IGhpZGVcbiAgICAgICAgICAgICAgICAgIC8vIHRoZW0sIHdpdGhvdXQgY2xlYXJpbmcgdGhlIGlucHV0LlxuICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgd2lsbENsb3NlU3VnZ2VzdGlvbnMgPSBpc09wZW4gJiYgIWFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlQmVmb3JlVXBEb3duID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyBEaWRuJ3QgaW50ZXJhY3Qgd2l0aCBVcC9Eb3duXG4gICAgICAgICAgICAgICAgICBpZiAoIXdpbGxDbG9zZVN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfbmV3VmFsdWUyID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgX3RoaXMzLm1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCBfbmV3VmFsdWUyLCAnZXNjYXBlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zKF9uZXdWYWx1ZTIsIFJFQVNPTl9FU0NBUEVfUFJFU1NFRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF9uZXdWYWx1ZTIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IFJFQVNPTl9FU0NBUEVfUFJFU1NFRFxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBJbnRlcmFjdGVkIHdpdGggVXAvRG93blxuICAgICAgICAgICAgICAgICAgX3RoaXMzLm1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCB2YWx1ZUJlZm9yZVVwRG93biwgJ2VzY2FwZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh3aWxsQ2xvc2VTdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgX3RoaXMzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCgpO1xuXG4gICAgICAgICAgICAgICAgICBfdGhpczMuY2xvc2VTdWdnZXN0aW9ucygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBfdGhpczMucmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIF9vbktleURvd24gJiYgX29uS2V5RG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVuZGVyU3VnZ2VzdGlvbkRhdGEgPSB7XG4gICAgICAgIHF1ZXJ5OiB0aGlzLmdldFF1ZXJ5KClcbiAgICAgIH07XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChfQXV0b3doYXRldmVyW1wiZGVmYXVsdFwiXSwge1xuICAgICAgICBtdWx0aVNlY3Rpb246IG11bHRpU2VjdGlvbixcbiAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudDogcmVuZGVySW5wdXRDb21wb25lbnQsXG4gICAgICAgIHJlbmRlckl0ZW1zQ29udGFpbmVyOiB0aGlzLnJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyLFxuICAgICAgICByZW5kZXJJdGVtOiByZW5kZXJTdWdnZXN0aW9uLFxuICAgICAgICByZW5kZXJJdGVtRGF0YTogcmVuZGVyU3VnZ2VzdGlvbkRhdGEsXG4gICAgICAgIHJlbmRlclNlY3Rpb25UaXRsZTogcmVuZGVyU2VjdGlvblRpdGxlLFxuICAgICAgICBnZXRTZWN0aW9uSXRlbXM6IGdldFNlY3Rpb25TdWdnZXN0aW9ucyxcbiAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXg6IGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4LFxuICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleDogaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgIGNvbnRhaW5lclByb3BzOiBjb250YWluZXJQcm9wcyxcbiAgICAgICAgaW5wdXRQcm9wczogYXV0b3doYXRldmVySW5wdXRQcm9wcyxcbiAgICAgICAgaXRlbVByb3BzOiB0aGlzLml0ZW1Qcm9wcyxcbiAgICAgICAgdGhlbWU6ICgwLCBfdGhlbWUubWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSkodGhlbWUpLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIHJlZjogdGhpcy5zdG9yZUF1dG93aGF0ZXZlclJlZlxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEF1dG9zdWdnZXN0O1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBBdXRvc3VnZ2VzdDtcblxuX2RlZmluZVByb3BlcnR5KEF1dG9zdWdnZXN0LCBcInByb3BUeXBlc1wiLCB7XG4gIHN1Z2dlc3Rpb25zOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5hcnJheS5pc1JlcXVpcmVkLFxuICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ6IGZ1bmN0aW9uIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZChwcm9wcywgcHJvcE5hbWUpIHtcbiAgICB2YXIgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIidvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQnIG11c3QgYmUgaW1wbGVtZW50ZWQuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL21vcm9zaGtvL3JlYWN0LWF1dG9zdWdnZXN0I29uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZFByb3BcIik7XG4gICAgfVxuICB9LFxuICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ6IGZ1bmN0aW9uIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZChwcm9wcywgcHJvcE5hbWUpIHtcbiAgICB2YXIgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BzLmFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zID09PSBmYWxzZSAmJiB0eXBlb2Ygb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkJyBtdXN0IGJlIGltcGxlbWVudGVkLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3Jvc2hrby9yZWFjdC1hdXRvc3VnZ2VzdCNvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWRQcm9wXCIpO1xuICAgIH1cbiAgfSxcbiAgc2hvdWxkS2VlcFN1Z2dlc3Rpb25zT25TZWxlY3Q6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIG9uU3VnZ2VzdGlvblNlbGVjdGVkOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLFxuICBvblN1Z2dlc3Rpb25IaWdobGlnaHRlZDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYyxcbiAgcmVuZGVySW5wdXRDb21wb25lbnQ6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIHJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLFxuICBnZXRTdWdnZXN0aW9uVmFsdWU6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMuaXNSZXF1aXJlZCxcbiAgcmVuZGVyU3VnZ2VzdGlvbjogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYy5pc1JlcXVpcmVkLFxuICBpbnB1dFByb3BzOiBmdW5jdGlvbiBpbnB1dFByb3BzKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIHZhciBpbnB1dFByb3BzID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKCFpbnB1dFByb3BzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInaW5wdXRQcm9wcycgbXVzdCBiZSBwYXNzZWQuXCIpO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlucHV0UHJvcHMsICd2YWx1ZScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInaW5wdXRQcm9wcycgbXVzdCBoYXZlICd2YWx1ZScuXCIpO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlucHV0UHJvcHMsICdvbkNoYW5nZScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInaW5wdXRQcm9wcycgbXVzdCBoYXZlICdvbkNoYW5nZScuXCIpO1xuICAgIH1cbiAgfSxcbiAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5ib29sLFxuICBtdWx0aVNlY3Rpb246IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmJvb2wsXG4gIHJlbmRlclNlY3Rpb25UaXRsZTogZnVuY3Rpb24gcmVuZGVyU2VjdGlvblRpdGxlKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIHZhciByZW5kZXJTZWN0aW9uVGl0bGUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcHMubXVsdGlTZWN0aW9uID09PSB0cnVlICYmIHR5cGVvZiByZW5kZXJTZWN0aW9uVGl0bGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIidyZW5kZXJTZWN0aW9uVGl0bGUnIG11c3QgYmUgaW1wbGVtZW50ZWQuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL21vcm9zaGtvL3JlYWN0LWF1dG9zdWdnZXN0I3JlbmRlclNlY3Rpb25UaXRsZVByb3BcIik7XG4gICAgfVxuICB9LFxuICBnZXRTZWN0aW9uU3VnZ2VzdGlvbnM6IGZ1bmN0aW9uIGdldFNlY3Rpb25TdWdnZXN0aW9ucyhwcm9wcywgcHJvcE5hbWUpIHtcbiAgICB2YXIgZ2V0U2VjdGlvblN1Z2dlc3Rpb25zID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BzLm11bHRpU2VjdGlvbiA9PT0gdHJ1ZSAmJiB0eXBlb2YgZ2V0U2VjdGlvblN1Z2dlc3Rpb25zICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInZ2V0U2VjdGlvblN1Z2dlc3Rpb25zJyBtdXN0IGJlIGltcGxlbWVudGVkLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3Jvc2hrby9yZWFjdC1hdXRvc3VnZ2VzdCNnZXRTZWN0aW9uU3VnZ2VzdGlvbnNQcm9wXCIpO1xuICAgIH1cbiAgfSxcbiAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5ib29sLFxuICBoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb246IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmJvb2wsXG4gIHRoZW1lOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QsXG4gIGlkOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5zdHJpbmcsXG4gIGNvbnRhaW5lclByb3BzOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QgLy8gQXJiaXRyYXJ5IGNvbnRhaW5lciBwcm9wc1xuXG59KTtcblxuX2RlZmluZVByb3BlcnR5KEF1dG9zdWdnZXN0LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyOiBkZWZhdWx0UmVuZGVyU3VnZ2VzdGlvbnNDb250YWluZXIsXG4gIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zOiBkZWZhdWx0U2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMsXG4gIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zOiBmYWxzZSxcbiAgbXVsdGlTZWN0aW9uOiBmYWxzZSxcbiAgc2hvdWxkS2VlcFN1Z2dlc3Rpb25zT25TZWxlY3Q6IGZ1bmN0aW9uIHNob3VsZEtlZXBTdWdnZXN0aW9uc09uU2VsZWN0KCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrOiB0cnVlLFxuICBoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb246IGZhbHNlLFxuICB0aGVtZTogX3RoZW1lLmRlZmF1bHRUaGVtZSxcbiAgaWQ6ICcxJyxcbiAgY29udGFpbmVyUHJvcHM6IHt9XG59KTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbEFycmF5cyhhcnJBLCBhcnJCKSB7XG4gIGlmIChhcnJBID09PSBhcnJCKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWFyckEgfHwgIWFyckIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgbGVuID0gYXJyQS5sZW5ndGg7XG5cbiAgaWYgKGFyckIubGVuZ3RoICE9PSBsZW4pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFyckFbaV0gIT09IGFyckJbaV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaGFsbG93RXF1YWxBcnJheXM7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSA9IGV4cG9ydHMuZGVmYXVsdFRoZW1lID0gdm9pZCAwO1xudmFyIGRlZmF1bHRUaGVtZSA9IHtcbiAgY29udGFpbmVyOiAncmVhY3QtYXV0b3N1Z2dlc3RfX2NvbnRhaW5lcicsXG4gIGNvbnRhaW5lck9wZW46ICdyZWFjdC1hdXRvc3VnZ2VzdF9fY29udGFpbmVyLS1vcGVuJyxcbiAgaW5wdXQ6ICdyZWFjdC1hdXRvc3VnZ2VzdF9faW5wdXQnLFxuICBpbnB1dE9wZW46ICdyZWFjdC1hdXRvc3VnZ2VzdF9faW5wdXQtLW9wZW4nLFxuICBpbnB1dEZvY3VzZWQ6ICdyZWFjdC1hdXRvc3VnZ2VzdF9faW5wdXQtLWZvY3VzZWQnLFxuICBzdWdnZXN0aW9uc0NvbnRhaW5lcjogJ3JlYWN0LWF1dG9zdWdnZXN0X19zdWdnZXN0aW9ucy1jb250YWluZXInLFxuICBzdWdnZXN0aW9uc0NvbnRhaW5lck9wZW46ICdyZWFjdC1hdXRvc3VnZ2VzdF9fc3VnZ2VzdGlvbnMtY29udGFpbmVyLS1vcGVuJyxcbiAgc3VnZ2VzdGlvbnNMaXN0OiAncmVhY3QtYXV0b3N1Z2dlc3RfX3N1Z2dlc3Rpb25zLWxpc3QnLFxuICBzdWdnZXN0aW9uOiAncmVhY3QtYXV0b3N1Z2dlc3RfX3N1Z2dlc3Rpb24nLFxuICBzdWdnZXN0aW9uRmlyc3Q6ICdyZWFjdC1hdXRvc3VnZ2VzdF9fc3VnZ2VzdGlvbi0tZmlyc3QnLFxuICBzdWdnZXN0aW9uSGlnaGxpZ2h0ZWQ6ICdyZWFjdC1hdXRvc3VnZ2VzdF9fc3VnZ2VzdGlvbi0taGlnaGxpZ2h0ZWQnLFxuICBzZWN0aW9uQ29udGFpbmVyOiAncmVhY3QtYXV0b3N1Z2dlc3RfX3NlY3Rpb24tY29udGFpbmVyJyxcbiAgc2VjdGlvbkNvbnRhaW5lckZpcnN0OiAncmVhY3QtYXV0b3N1Z2dlc3RfX3NlY3Rpb24tY29udGFpbmVyLS1maXJzdCcsXG4gIHNlY3Rpb25UaXRsZTogJ3JlYWN0LWF1dG9zdWdnZXN0X19zZWN0aW9uLXRpdGxlJ1xufTtcbmV4cG9ydHMuZGVmYXVsdFRoZW1lID0gZGVmYXVsdFRoZW1lO1xuXG52YXIgbWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSA9IGZ1bmN0aW9uIG1hcFRvQXV0b3doYXRldmVyVGhlbWUodGhlbWUpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiB0aGVtZSkge1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICdzdWdnZXN0aW9uc0NvbnRhaW5lcic6XG4gICAgICAgIHJlc3VsdFsnaXRlbXNDb250YWluZXInXSA9IHRoZW1lW2tleV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4nOlxuICAgICAgICByZXN1bHRbJ2l0ZW1zQ29udGFpbmVyT3BlbiddID0gdGhlbWVba2V5XTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N1Z2dlc3Rpb24nOlxuICAgICAgICByZXN1bHRbJ2l0ZW0nXSA9IHRoZW1lW2tleV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdWdnZXN0aW9uRmlyc3QnOlxuICAgICAgICByZXN1bHRbJ2l0ZW1GaXJzdCddID0gdGhlbWVba2V5XTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N1Z2dlc3Rpb25IaWdobGlnaHRlZCc6XG4gICAgICAgIHJlc3VsdFsnaXRlbUhpZ2hsaWdodGVkJ10gPSB0aGVtZVtrZXldO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3VnZ2VzdGlvbnNMaXN0JzpcbiAgICAgICAgcmVzdWx0WydpdGVtc0xpc3QnXSA9IHRoZW1lW2tleV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXN1bHRba2V5XSA9IHRoZW1lW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydHMubWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSA9IG1hcFRvQXV0b3doYXRldmVyVGhlbWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9BdXRvc3VnZ2VzdCcpW1wiZGVmYXVsdFwiXTsiLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZUxheW91dEVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc2VsZWN0LnNjc3MnO1xuXG5jb25zdCBTZWxlY3QgPSAoe1xuICB2YWx1ZSxcbiAgZ2V0RGlzcGxheSxcbiAgb3B0aW9ucyxcbiAgb25TbGFja1RpbWVTZWxlY3RlZCxcbiAgdmlhUG9pbnRJbmRleCxcbiAgaWQsXG4gIGxhYmVsLFxuICBpY29uLFxufSkgPT4ge1xuICBjb25zdCBbZGlzcGxheVZhbHVlLCBjaGFuZ2VEaXNwbGF5VmFsdWVdID0gdXNlU3RhdGUoZ2V0RGlzcGxheSh2YWx1ZSkpO1xuICBjb25zdCBbb3BlbiwgY2hhbmdlT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBjaGFuZ2VEaXNwbGF5VmFsdWUoZ2V0RGlzcGxheSh2YWx1ZSkpLCBbdmFsdWVdKTtcbiAgY29uc3Qgc2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBzY3JvbGxJbmRleCA9IE1hdGguZmxvb3IodmFsdWUgLyA2MDApO1xuICBjb25zdCBlbGVtZW50SGVpZ2h0ID0gNTA7XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4gJiYgc2Nyb2xsUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNjcm9sbFJlZi5jdXJyZW50LnNjcm9sbFRvcCA9IGVsZW1lbnRIZWlnaHQgKiBzY3JvbGxJbmRleDtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgb3Blbl0pO1xuXG4gIGNvbnN0IGlucHV0SWQgPSBgJHtpZH0taW5wdXRgO1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcblxuICBjb25zdCBvbklucHV0Q2hhbmdlID0gKF8sIHsgbmV3VmFsdWUsIG1ldGhvZCB9KSA9PiB7XG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ2VudGVyJzpcbiAgICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgICAgb25TbGFja1RpbWVTZWxlY3RlZChuZXdWYWx1ZSwgdmlhUG9pbnRJbmRleCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgY2hhbmdlRGlzcGxheVZhbHVlKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1cCc6XG4gICAgICBjYXNlICdkb3duJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWwgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWNvbnRhaW5lciddfSBodG1sRm9yPXtpbnB1dElkfT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydsZWZ0LWNvbHVtbiddfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWxhYmVsJ119IGlkPXtsYWJlbElkfT5cbiAgICAgICAgICB7bGFiZWx9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPEF1dG9zdWdnZXN0XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIHN1Z2dlc3Rpb25zPXtvcHRpb25zfVxuICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17cyA9PiBzLnZhbHVlfVxuICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3MgPT4gcy5kaXNwbGF5TmFtZX1cbiAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9eygpID0+IG51bGx9XG4gICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRydWV9XG4gICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrPXtmYWxzZX1cbiAgICAgICAgICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ9eygpID0+IG51bGx9XG4gICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgdmFsdWU6IGRpc3BsYXlWYWx1ZSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBvbklucHV0Q2hhbmdlLFxuICAgICAgICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgICBjaGFuZ2VPcGVuKHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgICBjaGFuZ2VPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZDogaW5wdXRJZCxcbiAgICAgICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiBsYWJlbElkLFxuICAgICAgICAgICAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogJ25vbmUnLFxuICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgICAgfX1cbiAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lcj17KHsgY29udGFpbmVyUHJvcHMsIGNoaWxkcmVuIH0pID0+IHtcbiAgICAgICAgICAgIC8vIHNldCByZWZzIGZvciBhdXRvc3VnZ2VzdCBsaWJyYXJ5IGFuZCBzY3JvbGxiYXIgcG9zaXRpb25pbmdcbiAgICAgICAgICAgIGNvbnN0IHsgcmVmLCAuLi5vdGhlclJlZnMgfSA9IGNvbnRhaW5lclByb3BzO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVmID0gZWxlbSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgICAgICAgICAgc2Nyb2xsUmVmLmN1cnJlbnQgPSBlbGVtO1xuICAgICAgICAgICAgICAgIHJlZihlbGVtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXYgdGFiSW5kZXg9XCItMVwiIHsuLi5vdGhlclJlZnN9IHJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgIC8+XG4gICAgICA8L3NwYW4+XG4gICAgICB7aWNvbn1cbiAgICA8L2xhYmVsPlxuICApO1xufTtcblxuU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgb25TbGFja1RpbWVTZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0RGlzcGxheTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGRpc3BsYXlOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICkuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIGljb246IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIHZpYVBvaW50SW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0bDvGdlIFp3aXNjaGVuemllbCBoaW56dScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0emUgVW1zdGVpZ2V6ZWl0IGbDvHIgWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnU2NobGllw59lIFVtc3RlaWdlemVpdC1BdXN3YWhsIGbDvHIgWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICfDlmZmbmUgVW1zdGVpZ2V6ZWl0LUF1c3dhaGwgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdFbnRmZXJuZSBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdUYXVzY2hlIFN0YXJ0IG1pdCBaaWVsJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAndmlhcG9pbnQtc2xhY2stYW1vdW50JzogJ1Vtc3RlaWdlemVpdCcsXG4gICAgfSxcbiAgfSxcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICAncmVtb3ZlLXZpYS1idXR0b24tbGFiZWwnOiAnUmVtb3ZlIHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ1JldmVyc2Ugb3JpZ2luIGFuZCBkZXN0aW5hdGlvbicsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1ZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdTdG9wIGR1cmF0aW9uJyxcbiAgICB9LFxuICB9LFxuICBmaToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTGlzw6TDpCB2w6RsaXBpc3RlJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdBc2V0YSB2w6RsaXBpc3RlZWxsZSB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ1N1bGplIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdQb2lzdGEgdsOkbGlwaXN0ZSB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ0vDpMOkbm7DpCByZWl0aW4gc3V1bnRhIHZhc3Rha2thaXNla3NpJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1bDpGxpcGlzdGUge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnUHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICB9LFxuICB9LFxuICBwbDoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRG9kYWogcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdXeWJpZXJ6IGN6YXMgcG9zdG9qdSBkbGEgcHVua3R1IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3R3w7NyeiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdVc3XFhCBwdW5rdCBwb8WbcmVkbmkge3tpbmRleH19JyxcbiAgICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdPZHdyw7PEhyBwb2N6xIV0ZWsgaSBjZWwnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdQdW5rdCBwb8WbcmVkbmknLFxuICAgICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdQdW5rdCBwb8WbcmVkbmkge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnQ3phcyBwb3N0b2p1JyxcbiAgICB9LFxuICB9LFxuICBzdjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTMOkZ2cgdGlsbCB2aWFwdW5rdCcsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ1N0w6RuZyB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ8OWcHBuYSB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdUYSBib3J0IHZpYXB1bmt0IHt7aW5kZXh9fScsXG4gICAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnU3bDpG5nIHJ1dHRlbnMgcmlrdG5pbmcgdGlsbCBkZW4gbW90c2F0dGEnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWaWEgcHVua3QnLFxuICAgICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdWaWEgcHVua3Qge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnU3RvcHBldHMgdmFyYWt0aWdoZXQnLFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCJpbXBvcnQgeyBjcmVhdGVJbnN0YW5jZSB9IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XG5cbmNvbnN0IGkxOG4gPSBjcmVhdGVJbnN0YW5jZSh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICAvLyBkZWJ1ZzogdHJ1ZSxcbiAgcmVzb3VyY2VzOiB0cmFuc2xhdGlvbnMsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgcmVhY3Q6IHtcbiAgICB1c2VTdXNwZW5zZTogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5pMThuLmluaXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgaTE4bjtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJMThuZXh0UHJvdmlkZXIsIHdpdGhUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgUmVhY3RTb3J0YWJsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlanMnO1xuaW1wb3J0IERUQXV0b1N1Z2dlc3QgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJy4vaGVscGVycy9TZWxlY3QnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi9oZWxwZXJzL2kxOG4nO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuXG5leHBvcnQgY29uc3QgZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyID0gKCkgPT4gKHt9KTtcblxuY29uc3QgaXNWaWFQb2ludEVtcHR5ID0gdmlhUG9pbnQgPT4ge1xuICBpZiAodmlhUG9pbnQgPT09IHVuZGVmaW5lZCB8fCBpc0VtcHR5KHZpYVBvaW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2aWFQb2ludCk7XG4gIHJldHVybiAoXG4gICAga2V5cy5sZW5ndGggPT09IDEgfHwgKGtleXMubGVuZ3RoID09PSAyICYmIGtleXMuaW5jbHVkZXMoJ2xvY2F0aW9uU2xhY2snKSlcbiAgKTtcbn07XG5cbmNvbnN0IEl0aW5lcmFyeVNlYXJjaENvbnRyb2wgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBlbmFibGVkLFxuICBvbkNsaWNrLFxuICBvbktleVByZXNzLFxuICB3aWRlLFxuICAuLi5yZXN0XG59KSA9PiAoXG4gIDxkaXZcbiAgICBjbGFzc05hbWU9e3N0eWxlc1snaXRpbmVyYXJ5LXNlYXJjaC1jb250cm9sJ119XG4gICAgc3R5bGU9e3sgJy0td2lkdGgnOiB3aWRlID8gJzQ3cHgnIDogJzQwcHgnIH19XG4gID5cbiAgICB7b25DbGljayAmJiBlbmFibGVkICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbktleVByZXNzPXtvbktleVByZXNzfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5jb25zdCB1cGRhdGVWaWFQb2ludFNsYWNrID0gKFxuICBhY3RpdmVWaWFQb2ludFNsYWNrcyxcbiAgdXBkYXRlZFZpYVBvaW50SW5kZXgsXG4gIHZpYVBvaW50UmVtb3ZlZCA9IGZhbHNlLFxuKSA9PiB7XG4gIGNvbnN0IGZvdW5kQXRJbmRleCA9IGFjdGl2ZVZpYVBvaW50U2xhY2tzLmluZGV4T2YodXBkYXRlZFZpYVBvaW50SW5kZXgpO1xuICBpZiAoZm91bmRBdEluZGV4ID4gLTEpIHtcbiAgICBhY3RpdmVWaWFQb2ludFNsYWNrcy5zcGxpY2UoZm91bmRBdEluZGV4LCAxKTtcbiAgfVxuICByZXR1cm4gdmlhUG9pbnRSZW1vdmVkXG4gICAgPyBhY3RpdmVWaWFQb2ludFNsYWNrcy5tYXAodmFsdWUgPT5cbiAgICAgICAgdmFsdWUgPiB1cGRhdGVkVmlhUG9pbnRJbmRleCA/IHZhbHVlIC0gMSA6IHZhbHVlLFxuICAgICAgKVxuICAgIDogYWN0aXZlVmlhUG9pbnRTbGFja3M7XG59O1xuXG5jb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcbiAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IHZhbHVlID0gbG9jYXRpb24gPT5cbiAgKGxvY2F0aW9uICYmIGxvY2F0aW9uLmFkZHJlc3MpIHx8XG4gIChsb2NhdGlvbiAmJiBsb2NhdGlvbi5ncHMgJiYgbG9jYXRpb24ucmVhZHkgJiYgJ055a3lpbmVuIHNpamFpbnRpJykgfHxcbiAgJyc7XG5cbmNvbnN0IGdldExvY2F0aW9uVHlwZSA9IGxvY2F0aW9uID0+XG4gIGxvY2F0aW9uICYmIGxvY2F0aW9uLmdwcyA9PT0gdHJ1ZSA/ICdwb3NpdGlvbicgOiAnbG9jYXRpb24nO1xuXG5jb25zdCBnZXRTbGFja1RpbWVPcHRpb25zID0gdCA9PiB7XG4gIGNvbnN0IHRpbWVPcHRpb25zID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IDk7IGkrKykge1xuICAgIGNvbnN0IHZhbHVlSW5NaW51dGVzID0gaSAqIDEwO1xuICAgIHRpbWVPcHRpb25zLnB1c2goe1xuICAgICAgZGlzcGxheU5hbWU6IGAke3ZhbHVlSW5NaW51dGVzfSAke3QoJ21pbnV0ZS1zaG9ydCcpfWAsXG4gICAgICB2YWx1ZTogdmFsdWVJbk1pbnV0ZXMgKiA2MCxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdGltZU9wdGlvbnM7XG59O1xuXG5JdGluZXJhcnlTZWFyY2hDb250cm9sLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZW5hYmxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25LZXlQcmVzczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgd2lkZTogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5JdGluZXJhcnlTZWFyY2hDb250cm9sLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgd2lkZTogZmFsc2UsXG59O1xuXG4vKipcbiAqIFBhbmVsIHRoYXQgcmVuZGVycyB0d28gRFRBdXRvc3VnZ2VzdCBzZWFyY2ggZmllbGRzLCBpbmNsdWRpbmcgdmlhcG9pbnQgaGFuZGxpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqXG4gKiBjb25zdCBvcmlnaW4gPSB7XG4gKiAgbGF0OiA2MC4xNjkxOTYsXG4gKiAgbG9uOiAyNC45NTc2NzQsXG4gKiAgYWRkcmVzczogJ0FsZWtzYW50ZXJpbmthdHUsIEhlbHNpbmtpJyxcbiAqICBzZXQ6IHRydWUsXG4gKiAgcmVhZHk6IHRydWUsXG4gKiB9XG4gKlxuICogY29uc3QgZGVzdGluYXRpb24gPSB7XG4gKiAgIGxhdDogNjAuMTk5MDkzLFxuICogICBsb246IDI0Ljk0MDUzNixcbiAqICAgYWRkcmVzczogJ09wYXN0aW5zaWx0YSA2LCBIZWxzaW5raScsXG4gKiAgIHNldDogdHJ1ZSxcbiAqICAgcmVhZHk6IHRydWUsXG4gKiB9XG4gKiBvblNlbGVjdChpdGVtLCBpZCkge1xuICogIHJldHVybiBudWxsOyAgLy8gRGVmaW5lIHdoYXQgdG8gZG8gd2hlbiBhIHN1Z2dlc3Rpb24gaXMgYmVpbmcgc2VsZWN0ZWQuIE5vbmUgYnkgZGVmYXVsdC5cbiAqICB9XG4gKiBvbkNsZWFyKGlkKSB7XG4gKiAgcmV0dXJuIG51bGw7ICAvLyBEZWZpbmUgd2hhdCB0byBkbyB3aGVuIGEgc3VnZ2VzdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTm9uZSBieSBkZWZhdWx0LlxuICogfVxuICogY29uc3QgZ2V0QXV0b1N1Z2dlc3RJY29uczoge1xuICogICAvLyBDYWxsZWQgZm9yIGV2ZXJ5IGNpdHkgYmlrZSBzdGF0aW9uIHJlbmRlcmVkIGFzIGEgc2VhcmNoIHN1Z2dlc3Rpb24uIFNob3VsZCByZXR1cm4gdGhlIGljb24gYW5kXG4gKiAgIC8vIGNvbG9yIHVzZWQgZm9yIHRoYXQgc3RhdGlvbi4gVHdvIGljb25zIGFyZSBhdmFpbGFibGUsICdjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JyBhbmRpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQtc2Vjb25kYXJ5Jy5cbiAqICAgY2l0eWJpa2VzOiBzdGF0aW9uID0+IHtcbiAqICAgICAgcmV0dXJuIFsnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcsICcjZjJiNjJkJ107XG4gKiAgIH1cbiAqIH1cbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIExvY2F0aW9ucywgU3RvcHMsIFJvdXRlcywgVmVoaWNsZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSwgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIDxEVEF1dG9zdWdnZXN0UGFuZWxcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBvcmlnaW49e29yaWdpbn0gLy8gU2VsZWN0ZWQgb3JpZ2luIHBvaW50XG4gKiAgICBkZXN0aW5hdGlvbj17ZGVzdGluYXRpb259IC8vIFNlbGVjdGVkIGRlc3RpbmF0aW9uIHBvaW50XG4gKiAgICBvcmlnaW5QbGFjZUhvbGRlcj17J0dpdmUgb3JpZ2luJ30gLy8gT3B0aW9uYWwgR2l2ZSBzdHJpbmcgc2hvd24gaW5pdGlhbGx5IGluc2lkZSBvcmlnaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyPXsnR2l2ZSBkZXN0aW5hdGlvbid9IC8vIE9wdGlvbmFsIEdpdmUgc3RyaW5nIHNob3duIGluaXRhbGx5IGluc2lkZSBkZXN0aW5hdGlvbiBzZWFyY2ggZmllbGRcbiAqICAgIGluaXRpYWxWaWFQb2ludHM9e1tdfSAvLyBPcHRpb25hbC4gIElmIHNob3dWaWFwb2ludENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIHBhc3MgaW5pdGlhbCB2aWEgcG9pbnRzIHRvIHRoZSBwYW5lbC4gQ3VycmVudGx5IG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICB1cGRhdGVWaWFQb2ludHM9eygpID0+IHJldHVybiBbXX0gLy8gT3B0aW9uYWwuIElmIHNob3dWaWFwb2ludENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIGRlZmluZSBob3cgdG8gdXBkYXRlIHlvdXIgdmlhIHBvaW50IGxpc3Qgd2l0aCB0aGlzIGZ1bmN0aW9uLiBDdXJyZW5sdHkgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHN3YXBPcmRlcj17KCkgPT4gcmV0dXJuIG51bGx9IC8vIE9wdGlvbmFsLiBJZiBzaG93U3dhcENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIGRlZmluZSBob3cgdG8gc3dhcCBvcmRlciBvZiB5b3VyIHBvaW50cyAob3JpZ2luLCBkZXN0aW5hdGlvbiwgdmlhcG9pbnRzKS4gQ3VycmVudGx5IG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIG9uU2VsZWN0PXt0aGlzLm9uU2VsZWN0fVxuICogICAgb25DbGVhcj17dGhpcy5vbkNsZWFyfVxuICogICAgbGFuZz1cImZpXCIgLy8gRGVmaW5lIGxhbmd1YWdlIGZpIHN2IG9yIGVuLlxuICogICAgYWRkQW5hbHl0aWNzRXZlbnQ9e251bGx9IC8vIE9wdGlvbmFsLiB5b3UgY2FuIHJlY29yZCBhbiBhbmFseXRpY3MgZXZlbnQgaWYgeW91IHdpc2guIGlmIHBhc3NlZCwgY29tcG9uZW50IHdpbGwgcGFzcyBhbiBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lIHBhcmFtZXRlcnMgdG8gYWRkQW5hbHl0aWNzRXZlbnRcbiAqICAgIGRpc2FibGVBdXRvRm9jdXM9e2ZhbHNlfSAvLyBPcHRpb25hbC4gdXNlIHRoaXMgdG8gZGlzYWJsZSBhdXRvZm9jdXMgY29tcGxldGVseSBmcm9tIERUQXV0b3N1Z2dlc3RQYW5lbFxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgb3JpZ2luTW9iaWxlTGFiZWw9XCJPcmlnaW4gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIG9yaWdpbiBmaWVsZCBvbiBtb2JpbGUuXG4gKiAgICBkZXN0aW5hdGlvbk1vYmlsZUxhYmVsPVwiRGVzdGluYXRpb24gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGRlc3RpbmF0aW9uIGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGhhbmRsZUZvY3VzQ2hhbmdlPXsoKSA9PiB7fX0gLy8gT3B0aW9uYWwuIElmIGRlZmluZWQgb3ZlcnJpZGVzIGRlZmF1bHQgb25Gb2N1c0NoYW5nZSBiZWhhdmlvdXJcbiAqICAgIHNob3dTd2FwQ29udHJvbD17ZmFsc2V9IC8vIE9wdGlvbmFsLlxuICogICAgc2hvd1ZpYXBvaW50Q29udHJvbD17ZmFsc2V9IC8vIE9wdGlvbmFsLlxuICovXG5cbmNvbnN0IGxvY2F0aW9uU2hhcGUgPSBQcm9wVHlwZXMuc2hhcGUoe1xuICBhZGRyZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgbG9jYXRpb25TbGFjazogUHJvcFR5cGVzLm51bWJlcixcbn0pO1xuXG5jbGFzcyBEVEF1dG9zdWdnZXN0UGFuZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBvcmlnaW46IGxvY2F0aW9uU2hhcGUsXG4gICAgZGVzdGluYXRpb246IGxvY2F0aW9uU2hhcGUsXG4gICAgb3JpZ2luUGxhY2VIb2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVzdGluYXRpb25QbGFjZUhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB2aWFQb2ludHM6IFByb3BUeXBlcy5hcnJheU9mKGxvY2F0aW9uU2hhcGUpLFxuICAgIHVwZGF0ZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzd2FwT3JkZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNlYXJjaFBhbmVsVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hDb250ZXh0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgVVJMX1BFTElBUzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFkZEFuYWx5dGljc0V2ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgZmlsdGVyUmVzdWx0czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3JpZ2luTW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVzdGluYXRpb25Nb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWZQb2ludDogbG9jYXRpb25TaGFwZSxcbiAgICBtb2RlU2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1vZGVJY29uQ29sb3JzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgZ2V0QXV0b1N1Z2dlc3RJY29uczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5mdW5jKSxcbiAgICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpc0VtYmVkZGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzaG93U3dhcENvbnRyb2w6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dWaWFwb2ludENvbnRyb2w6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dTbGFja0NvbnRyb2w6IFByb3BUeXBlcy5ib29sLFxuICAgIHQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBvcmlnaW46IHVuZGVmaW5lZCxcbiAgICBkZXN0aW5hdGlvbjogdW5kZWZpbmVkLFxuICAgIHZpYVBvaW50czogW10sXG4gICAgb3JpZ2luUGxhY2VIb2xkZXI6ICdnaXZlLW9yaWdpbicsXG4gICAgZGVzdGluYXRpb25QbGFjZUhvbGRlcjogJ2dpdmUtZGVzdGluYXRpb24nLFxuICAgIHN3YXBPcmRlcjogdW5kZWZpbmVkLFxuICAgIHVwZGF0ZVZpYVBvaW50czogKCkgPT4ge30sXG4gICAgc2VhcmNoUGFuZWxUZXh0OiB1bmRlZmluZWQsXG4gICAgc291cmNlczogW10sXG4gICAgdGFyZ2V0czogW10sXG4gICAgZmlsdGVyUmVzdWx0czogdW5kZWZpbmVkLFxuICAgIG9uQ2xlYXI6IHVuZGVmaW5lZCxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiB1bmRlZmluZWQsXG4gICAgcmVmUG9pbnQ6IHVuZGVmaW5lZCxcbiAgICBhZGRBbmFseXRpY3NFdmVudDogdW5kZWZpbmVkLFxuICAgIGRpc2FibGVBdXRvRm9jdXM6IGZhbHNlLFxuICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICBoYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQ6IHVuZGVmaW5lZCxcbiAgICBjb2xvcjogJyMwMDdhYzknLFxuICAgIGhvdmVyQ29sb3I6ICcjMDA2MmExJyxcbiAgICBvcmlnaW5Nb2JpbGVMYWJlbDogbnVsbCxcbiAgICBkZXN0aW5hdGlvbk1vYmlsZUxhYmVsOiBudWxsLFxuICAgIG1vZGVTZXQ6IHVuZGVmaW5lZCxcbiAgICBtb2RlSWNvbkNvbG9yczogdW5kZWZpbmVkLFxuICAgIGZvbnRXZWlnaHRzOiB7XG4gICAgICBtZWRpdW06IDUwMCxcbiAgICB9LFxuICAgIHNob3dTY3JvbGw6IGZhbHNlLFxuICAgIG9uRm9jdXNDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgICBzaG93U3dhcENvbnRyb2w6IGZhbHNlLFxuICAgIHNob3dWaWFwb2ludENvbnRyb2w6IGZhbHNlLFxuICAgIHNob3dTbGFja0NvbnRyb2w6IGZhbHNlLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBhY3RpdmVTbGFja0lucHV0czogW10sXG4gICAgICByZWZzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgc3RvcmVSZWZlcmVuY2UgPSByZWYgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+ICh7IHJlZnM6IFsuLi5wcmV2U3RhdGUucmVmcywgcmVmXSB9KSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXNDaGFuZ2UgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBkZXN0aW5hdGlvbiB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIWRlc3RpbmF0aW9uIHx8ICFkZXN0aW5hdGlvbi5sYXQpIHtcbiAgICAgIHRoaXMuc3RhdGUucmVmc1sxXS5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVWaWFQb2ludHMgPSB2aWFQb2ludHMgPT4ge1xuICAgIGlmICh2aWFQb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnByb3BzLnVwZGF0ZVZpYVBvaW50cyhbXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvcHMudXBkYXRlVmlhUG9pbnRzKHZpYVBvaW50cy5maWx0ZXIodnAgPT4gIWlzVmlhUG9pbnRFbXB0eSh2cCkpKTtcbiAgfTtcblxuICBoYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2sgPSB2aWFQb2ludEluZGV4ID0+IHtcbiAgICBjb25zdCB7IGFjdGl2ZVNsYWNrSW5wdXRzIH0gPSB0aGlzLnN0YXRlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgYWN0aXZlU2xhY2tJbnB1dHM6IGFjdGl2ZVNsYWNrSW5wdXRzLmluY2x1ZGVzKHZpYVBvaW50SW5kZXgpXG4gICAgICAgID8gdXBkYXRlVmlhUG9pbnRTbGFjayhhY3RpdmVTbGFja0lucHV0cywgdmlhUG9pbnRJbmRleClcbiAgICAgICAgOiBhY3RpdmVTbGFja0lucHV0cy5jb25jYXQoW3ZpYVBvaW50SW5kZXhdKSxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVWaWFQb2ludFNsYWNrVGltZVNlbGVjdGVkID0gKHNsYWNrVGltZUluU2Vjb25kcywgaSkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KHtcbiAgICAgICAgYWN0aW9uOiAnRWRpdFZpYVBvaW50U3RvcER1cmF0aW9uJyxcbiAgICAgICAgY2F0ZWdvcnk6ICdJdGluZXJhcnlTZXR0aW5ncycsXG4gICAgICAgIG5hbWU6IHNsYWNrVGltZUluU2Vjb25kcyAvIDYwLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHsgdmlhUG9pbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgIHZpYVBvaW50c1tpXS5sb2NhdGlvblNsYWNrID0gTnVtYmVyLnBhcnNlSW50KHNsYWNrVGltZUluU2Vjb25kcywgMTApO1xuICAgIHRoaXMudXBkYXRlVmlhUG9pbnRzKHZpYVBvaW50cyk7XG4gIH07XG5cbiAgaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkID0gKHZpYVBvaW50TG9jYXRpb24sIGkpID0+IHtcbiAgICB0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZCh2aWFQb2ludExvY2F0aW9uLCBpKTtcbiAgfTtcblxuICBoYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrID0gdmlhUG9pbnRJbmRleCA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQoe1xuICAgICAgICBhY3Rpb246ICdSZW1vdmVKb3VybmV5VmlhUG9pbnQnLFxuICAgICAgICBjYXRlZ29yeTogJ0l0aW5lcmFyeVNldHRpbmdzJyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IGFjdGl2ZVNsYWNrSW5wdXRzIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdmlhUG9pbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgIHZpYVBvaW50cy5zcGxpY2UodmlhUG9pbnRJbmRleCwgMSk7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgYWN0aXZlU2xhY2tJbnB1dHM6IHVwZGF0ZVZpYVBvaW50U2xhY2soXG4gICAgICAgICAgYWN0aXZlU2xhY2tJbnB1dHMsXG4gICAgICAgICAgdmlhUG9pbnRJbmRleCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgICgpID0+IHRoaXMudXBkYXRlVmlhUG9pbnRzKHZpYVBvaW50cyksXG4gICAgKTtcbiAgfTtcblxuICBoYW5kbGVBZGRWaWFQb2ludENsaWNrID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KHtcbiAgICAgICAgYWN0aW9uOiAnQWRkSm91cm5leVZpYVBvaW50JyxcbiAgICAgICAgY2F0ZWdvcnk6ICdJdGluZXJhcnlTZXR0aW5ncycsXG4gICAgICAgIG5hbWU6ICdRdWlja1NldHRpbmdzQnV0dG9uJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHMucHVzaChnZXRFbXB0eVZpYVBvaW50UGxhY2VIb2xkZXIoKSk7XG4gICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIHN0YXRlIHNvIHRoYXQgcGxhY2VIb2xkZXIgd2lsbCBzaG93IHVwIGluIHBhbmVsLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hY2Nlc3Mtc3RhdGUtaW4tc2V0c3RhdGVcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGUpO1xuICB9O1xuXG4gIGhhbmRsZVN3YXBPcmRlckNsaWNrID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KHtcbiAgICAgICAgYWN0aW9uOiAnU3dpdGNoSm91cm5leVN0YXJ0QW5kRW5kUG9pbnRPcmRlcicsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHsgdmlhUG9pbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgIHZpYVBvaW50cy5yZXZlcnNlKCk7XG4gICAgdGhpcy5wcm9wcy5zd2FwT3JkZXIoKTtcbiAgfTtcblxuICBnZXRTbGFja0Rpc3BsYXkgPSBzbGFja0luU2Vjb25kcyA9PlxuICAgIGAke3NsYWNrSW5TZWNvbmRzIC8gNjB9ICR7dGhpcy5wcm9wcy50KCdtaW51dGUtc2hvcnQnLCB7XG4gICAgICBsbmc6IHRoaXMucHJvcHMubGFuZyxcbiAgICB9KX1gO1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBvcmlnaW4sXG4gICAgICBzZWFyY2hQYW5lbFRleHQsXG4gICAgICBzZWFyY2hDb250ZXh0LFxuICAgICAgZGlzYWJsZUF1dG9Gb2N1cyxcbiAgICAgIHZpYVBvaW50cyxcbiAgICAgIG9yaWdpbk1vYmlsZUxhYmVsLFxuICAgICAgZGVzdGluYXRpb25Nb2JpbGVMYWJlbCxcbiAgICAgIGZvbnRXZWlnaHRzLFxuICAgICAgb25Gb2N1c0NoYW5nZSxcbiAgICAgIHNob3dTd2FwQ29udHJvbCxcbiAgICAgIHNob3dWaWFwb2ludENvbnRyb2wsXG4gICAgICB0LFxuICAgICAgbGFuZzogbG5nLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgYWN0aXZlU2xhY2tJbnB1dHMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qgc2xhY2tUaW1lID0gZ2V0U2xhY2tUaW1lT3B0aW9ucyh0KTtcbiAgICBjb25zdCBkZWZhdWx0U2xhY2tUaW1lVmFsdWUgPSAwO1xuICAgIGNvbnN0IGdldFZpYVBvaW50U2xhY2tUaW1lT3JEZWZhdWx0ID0gKFxuICAgICAgdmlhUG9pbnQsXG4gICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0U2xhY2tUaW1lVmFsdWUsXG4gICAgKSA9PiAodmlhUG9pbnQgJiYgdmlhUG9pbnQubG9jYXRpb25TbGFjaykgfHwgZGVmYXVsdFZhbHVlO1xuICAgIGNvbnN0IGlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZSA9IGluZGV4ID0+XG4gICAgICBhY3RpdmVTbGFja0lucHV0cy5pbmNsdWRlcyhpbmRleCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1wYW5lbCddLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNtYWxsOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogYCR7dGhpcy5wcm9wcy5jb2xvcn1gLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgeycgJ31cbiAgICAgICAge3NlYXJjaFBhbmVsVGV4dCA/IChcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT17c3R5bGVzWydhdXRvc3VnZ2VzdC1zZWFyY2hwYW5lbC10ZXh0J119PlxuICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICB7c2VhcmNoUGFuZWxUZXh0fVxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ29yaWdpbi1pbnB1dC1jb250YWluZXInXX0+XG4gICAgICAgICAgPERUQXV0b1N1Z2dlc3RcbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGljb249XCJtYXBNYXJrZXJcIlxuICAgICAgICAgICAgaWQ9XCJvcmlnaW5cIlxuICAgICAgICAgICAgYXV0b0ZvY3VzPXtcbiAgICAgICAgICAgICAgZGlzYWJsZUF1dG9Gb2N1cyA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6ICF0aGlzLnByb3BzLmlzTW9iaWxlICYmICFvcmlnaW4ubGF0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdG9yZVJlZj17dGhpcy5zdG9yZVJlZmVyZW5jZX1cbiAgICAgICAgICAgIHJlZlBvaW50PXt0aGlzLnByb3BzLnJlZlBvaW50fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMb2NhdGlvblR5cGUob3JpZ2luKX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLm9yaWdpblBsYWNlSG9sZGVyfVxuICAgICAgICAgICAgdmFsdWU9e3ZhbHVlKG9yaWdpbil9XG4gICAgICAgICAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMucHJvcHMub25TZWxlY3R9XG4gICAgICAgICAgICBvbkNsZWFyPXt0aGlzLnByb3BzLm9uQ2xlYXJ9XG4gICAgICAgICAgICBmb2N1c0NoYW5nZT17b25Gb2N1c0NoYW5nZSB8fCB0aGlzLmhhbmRsZUZvY3VzQ2hhbmdlfVxuICAgICAgICAgICAgbGFuZz17dGhpcy5wcm9wcy5sYW5nfVxuICAgICAgICAgICAgc291cmNlcz17dGhpcy5wcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgdGFyZ2V0cz17dGhpcy5wcm9wcy50YXJnZXRzfVxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cz17dGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzfVxuICAgICAgICAgICAgaXNNb2JpbGU9e3RoaXMucHJvcHMuaXNNb2JpbGV9XG4gICAgICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgICAgIG1vYmlsZUxhYmVsPXtvcmlnaW5Nb2JpbGVMYWJlbH1cbiAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgbW9kZVNldD17dGhpcy5wcm9wcy5tb2RlU2V0fVxuICAgICAgICAgICAgbW9kZUljb25Db2xvcnM9e3RoaXMucHJvcHMubW9kZUljb25Db2xvcnN9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgICBpc0VtYmVkZGVkPXt0aGlzLnByb3BzLmlzRW1iZWRkZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7KHNob3dTd2FwQ29udHJvbCB8fCBzaG93VmlhcG9pbnRDb250cm9sKSAmJiAoXG4gICAgICAgICAgICA8SXRpbmVyYXJ5U2VhcmNoQ29udHJvbFxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5vcHBvc2l0ZX1cbiAgICAgICAgICAgICAgZW5hYmxlZD17c2hvd1N3YXBDb250cm9sfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZVN3YXBPcmRlckNsaWNrKCl9XG4gICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgdGhpcy5oYW5kbGVTd2FwT3JkZXJDbGljaygpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnLCB7IGxuZyB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gaW1nPVwib3Bwb3NpdGVcIiBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn0gLz5cbiAgICAgICAgICAgIDwvSXRpbmVyYXJ5U2VhcmNoQ29udHJvbD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3ZpYVBvaW50cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ3JlY3RhbmdsZS1jb250YWluZXInXX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJlY3RhbmdsZX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPFJlYWN0U29ydGFibGVcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1sndmlhcG9pbnRzLWNvbnRhaW5lciddfVxuICAgICAgICAgIGxpc3Q9e3ZpYVBvaW50c31cbiAgICAgICAgICBoYW5kbGU9e2AuJHtzdHlsZXNbJ3ZpYXBvaW50LWJlZm9yZSddfWB9XG4gICAgICAgICAgYW5pbWF0aW9uPXsyMDB9XG4gICAgICAgICAgZGlzYWJsZWQ9e3ZpYVBvaW50cy5sZW5ndGggPD0gMX1cbiAgICAgICAgICBzZXRMaXN0PXtpdGVtcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdWaWFQb2ludHMgPSBpdGVtcy5maWx0ZXIodnAgPT4gIWlzVmlhUG9pbnRFbXB0eSh2cCkpO1xuICAgICAgICAgICAgaWYgKG5ld1ZpYVBvaW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMudXBkYXRlVmlhUG9pbnRzKG5ld1ZpYVBvaW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt2aWFQb2ludHMubWFwKChvLCBpKSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goc3R5bGVzWyd2aWFwb2ludC1jb250YWluZXInXSl9XG4gICAgICAgICAgICAgIGtleT17YHZpYXBvaW50LSR7aX1gfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2xpZ2h0LWdyYXktYmFja2dyb3VuZCddfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWyd2aWFwb2ludC1iZWZvcmUnXX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3ZpYVBvaW50cy5sZW5ndGggPiAxID8geyBjdXJzb3I6ICdtb3ZlJyB9IDoge319XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt2aWFQb2ludHMubGVuZ3RoID4gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGltZz1cImVsbGlwc2lzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZT17OTB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgICAgICAgICAgYCR7c3R5bGVzWyd2aWFwb2ludC1pbnB1dC1jb250YWluZXInXX0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlc1tgdmlhcG9pbnQtJHtpICsgMX1gXVxuICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8RFRBdXRvU3VnZ2VzdFxuICAgICAgICAgICAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwibWFwTWFya2VyLXZpYVwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ2aWEtcG9pbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD17dCgndmlhLXBvaW50LWluZGV4Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG5nLFxuICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9Gb2N1cz17XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzID09PSB0cnVlID8gZmFsc2UgOiAhdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInZpYS1wb2ludFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidmlhcG9pbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgcmVmUG9pbnQ9e3RoaXMucHJvcHMucmVmUG9pbnR9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9eyhvICYmIG8uYWRkcmVzcykgfHwgJyd9XG4gICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMucHJvcHMub25TZWxlY3R9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGVhcj17dGhpcy5wcm9wcy5vbkNsZWFyfVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVZpYVBvaW50cz17aXRlbSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQoaXRlbSwgaSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZz17dGhpcy5wcm9wcy5sYW5nfVxuICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXM9e3RoaXMucHJvcHMuc291cmNlc31cbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzPXtbJ1N0b3BzJywgJ1N0YXRpb25zJ119XG4gICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUmVzdWx0cz17dGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzfVxuICAgICAgICAgICAgICAgICAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e3RoaXMucHJvcHMuZ2V0QXV0b1N1Z2dlc3RJY29uc31cbiAgICAgICAgICAgICAgICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yPXt0aGlzLnByb3BzLmhvdmVyQ29sb3J9XG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICAgICAgICAgICAgbW9kZVNldD17dGhpcy5wcm9wcy5tb2RlU2V0fVxuICAgICAgICAgICAgICAgICAgICAgIG1vZGVJY29uQ29sb3JzPXt0aGlzLnByb3BzLm1vZGVJY29uQ29sb3JzfVxuICAgICAgICAgICAgICAgICAgICAgIHNob3dTY3JvbGw9e3RoaXMucHJvcHMuc2hvd1Njcm9sbH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuc2hvd1NsYWNrQ29udHJvbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxJdGluZXJhcnlTZWFyY2hDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2FkZC12aWEtcG9pbnQtc2xhY2snXX1cbiAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkPXt0aGlzLnByb3BzLnNob3dWaWFwb2ludENvbnRyb2x9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2soaSl9XG4gICAgICAgICAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVRvZ2dsZVZpYVBvaW50U2xhY2tDbGljayhpKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlKGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5kZXg6IGkgKyAxLCBsbmcgfSxcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIHdpZGVcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGltZz1cInRpbWVcIiBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7IWlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZShpKSAmJlxuICAgICAgICAgICAgICAgICAgdmlhUG9pbnRzW2ldICYmXG4gICAgICAgICAgICAgICAgICB2aWFQb2ludHNbaV0ubG9jYXRpb25TbGFjayA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1sndmlhcG9pbnQtc2xhY2stdGltZSddfT57YCR7dChcbiAgICAgICAgICAgICAgICAgICAgICAndmlhcG9pbnQtc2xhY2stYW1vdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsbmcsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKX06ICR7dGhpcy5nZXRTbGFja0Rpc3BsYXkoXG4gICAgICAgICAgICAgICAgICAgICAgdmlhUG9pbnRzW2ldLmxvY2F0aW9uU2xhY2ssXG4gICAgICAgICAgICAgICAgICAgICl9YH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goc3R5bGVzWydpbnB1dC12aWFwb2ludC1zbGFjay1jb250YWluZXInXSwge1xuICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6ICFpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUoaSksXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydzZWxlY3Qtd3JhcHBlciddfT5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgdmlhcG9pbnQtc2xhY2stJHtpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e3QoJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3NsYWNrVGltZX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Z2V0VmlhUG9pbnRTbGFja1RpbWVPckRlZmF1bHQodmlhUG9pbnRzW2ldKX1cbiAgICAgICAgICAgICAgICAgICAgICBnZXREaXNwbGF5PXt0aGlzLmdldFNsYWNrRGlzcGxheX1cbiAgICAgICAgICAgICAgICAgICAgICB2aWFQb2ludEluZGV4PXtpfVxuICAgICAgICAgICAgICAgICAgICAgIGljb249e1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtzdHlsZXNbJ2NvbWJvYm94LWljb24nXX0gJHtzdHlsZXNbJ3RpbWUtaW5wdXQtaWNvbiddfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGltZz1cInRpbWVcIiBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb25TbGFja1RpbWVTZWxlY3RlZD17dGhpcy5oYW5kbGVWaWFQb2ludFNsYWNrVGltZVNlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8SXRpbmVyYXJ5U2VhcmNoQ29udHJvbFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydyZW1vdmUtdmlhLXBvaW50J119XG4gICAgICAgICAgICAgICAgZW5hYmxlZD17dGhpcy5wcm9wcy5zaG93VmlhcG9pbnRDb250cm9sfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayhpKX1cbiAgICAgICAgICAgICAgICBvbktleVByZXNzPXtlID0+XG4gICAgICAgICAgICAgICAgICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiZcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayhpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCcsIHtcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBpICsgMSxcbiAgICAgICAgICAgICAgICAgIGxuZyxcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIGltZz1cInRyYXNoXCIgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9IC8+XG4gICAgICAgICAgICAgIDwvSXRpbmVyYXJ5U2VhcmNoQ29udHJvbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1JlYWN0U29ydGFibGU+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Rlc3RpbmF0aW9uLWlucHV0LWNvbnRhaW5lciddfT5cbiAgICAgICAgICA8RFRBdXRvU3VnZ2VzdFxuICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgaWNvbj1cIm1hcE1hcmtlclwiXG4gICAgICAgICAgICBpZD1cImRlc3RpbmF0aW9uXCJcbiAgICAgICAgICAgIGF1dG9Gb2N1cz17XG4gICAgICAgICAgICAgIGRpc2FibGVBdXRvRm9jdXMgPT09IHRydWVcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5wcm9wcy5pc01vYmlsZSAmJiAhTnVtYmVyLmlzTmFOKG9yaWdpbi5sYXQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdG9yZVJlZj17dGhpcy5zdG9yZVJlZmVyZW5jZX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLmRlc3RpbmF0aW9uUGxhY2VIb2xkZXJ9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2dldExvY2F0aW9uVHlwZSh0aGlzLnByb3BzLmRlc3RpbmF0aW9uKX1cbiAgICAgICAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e3RoaXMucHJvcHMuZ2V0QXV0b1N1Z2dlc3RJY29uc31cbiAgICAgICAgICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gICAgICAgICAgICBvblNlbGVjdD17dGhpcy5wcm9wcy5vblNlbGVjdH1cbiAgICAgICAgICAgIG9uQ2xlYXI9e3RoaXMucHJvcHMub25DbGVhcn1cbiAgICAgICAgICAgIHJlZlBvaW50PXt0aGlzLnByb3BzLnJlZlBvaW50fVxuICAgICAgICAgICAgdmFsdWU9e3ZhbHVlKHRoaXMucHJvcHMuZGVzdGluYXRpb24pfVxuICAgICAgICAgICAgbGFuZz17dGhpcy5wcm9wcy5sYW5nfVxuICAgICAgICAgICAgc291cmNlcz17dGhpcy5wcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgdGFyZ2V0cz17dGhpcy5wcm9wcy50YXJnZXRzfVxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cz17dGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzfVxuICAgICAgICAgICAgaXNNb2JpbGU9e3RoaXMucHJvcHMuaXNNb2JpbGV9XG4gICAgICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgICAgIG1vYmlsZUxhYmVsPXtkZXN0aW5hdGlvbk1vYmlsZUxhYmVsfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICBtb2RlSWNvbkNvbG9ycz17dGhpcy5wcm9wcy5tb2RlSWNvbkNvbG9yc31cbiAgICAgICAgICAgIHNob3dTY3JvbGw9e3RoaXMucHJvcHMuc2hvd1Njcm9sbH1cbiAgICAgICAgICAgIGlzRW1iZWRkZWQ9e3RoaXMucHJvcHMuaXNFbWJlZGRlZH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHsoc2hvd1N3YXBDb250cm9sIHx8IHNob3dWaWFwb2ludENvbnRyb2wpICYmIChcbiAgICAgICAgICAgIDxJdGluZXJhcnlTZWFyY2hDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goc3R5bGVzWydhZGQtdmlhLXBvaW50J10sIHN0eWxlcy5tb3JlLCB7XG4gICAgICAgICAgICAgICAgY29sbGFwc2VkOiB2aWFQb2ludHMubGVuZ3RoID4gNCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIGVuYWJsZWQ9e3Nob3dWaWFwb2ludENvbnRyb2wgJiYgdmlhUG9pbnRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVBZGRWaWFQb2ludENsaWNrKCl9XG4gICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgdGhpcy5oYW5kbGVBZGRWaWFQb2ludENsaWNrKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdhZGQtdmlhLWJ1dHRvbi1sYWJlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICAgIGltZz1cInZpYXBvaW50XCJcbiAgICAgICAgICAgICAgICB3aWR0aD17MS4yNX1cbiAgICAgICAgICAgICAgICBoZWlnaHQ9ezEuMzc1fVxuICAgICAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBEVEF1dG9zdWdnZXN0UGFuZWxXaXRoVHJhbnNsYXRpb24gPSB3aXRoVHJhbnNsYXRpb24oKShEVEF1dG9zdWdnZXN0UGFuZWwpO1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgPEkxOG5leHRQcm92aWRlciBpMThuPXtpMThufT5cbiAgICAgIDxEVEF1dG9zdWdnZXN0UGFuZWxXaXRoVHJhbnNsYXRpb24gey4uLnByb3BzfSAvPlxuICAgIDwvSTE4bmV4dFByb3ZpZGVyPlxuICApO1xufTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJ0b1Byb3BlcnR5S2V5IiwidCIsImkiLCJyIiwiZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJpbmRleE9mIiwib2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiX3NsaWNlZFRvQXJyYXkiLCJhcnIiLCJBcnJheSIsImlzQXJyYXkiLCJfYXJyIiwiX24iLCJfZCIsIl9lIiwidW5kZWZpbmVkIiwiX3MiLCJfaSIsIm5leHQiLCJkb25lIiwicHVzaCIsImVyciIsInNsaWNlSXRlcmF0b3IiLCJkaXN0IiwiX3JlZiIsImRhdGEiLCJtdWx0aVNlY3Rpb24iLCJwb3NpdGlvbiIsIl9wb3NpdGlvbiIsInNlY3Rpb25JbmRleCIsIml0ZW1JbmRleCIsIm5leHROb25FbXB0eVNlY3Rpb25JbmRleCIsInByZXYiLCJfcG9zaXRpb24yIiwicHJldk5vbkVtcHR5U2VjdGlvbkluZGV4IiwiaXNMYXN0IiwicHJvcElzRW51bWVyYWJsZSIsIm93bkVudW1lcmFibGVLZXlzIiwib2JqIiwia2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJjb25jYXQiLCJmaWx0ZXIiLCJrZXkiLCJvYmplY3RBc3NpZ24iLCJhc3NpZ24iLCJ0YXJnZXQiLCJzb3VyY2UiLCJmcm9tIiwidG8iLCJ2YWwiLCJUb09iamVjdCIsInMiLCJhcmd1bWVudHMiLCJleHBvcnRzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYXJyMiIsIl9vYmplY3RBc3NpZ24iLCJyZXF1aXJlJCQwIiwiX29iamVjdEFzc2lnbjIiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInRydXRoeSIsIngiLCJpbnB1dCIsIl9yZWYyIiwidGhlbWUiLCJjbGFzc05hbWVEZWNvcmF0b3IiLCJfbGVuIiwibmFtZXMiLCJfa2V5Iiwic3R5bGVzIiwibWFwIiwibmFtZSIsImNsYXNzTmFtZSIsImFwcGx5Iiwiam9pbiIsInN0eWxlIiwibW9kdWxlIiwib2JqQSIsIm9iakIiLCJhS2V5cyIsImJLZXlzIiwibGVuIiwia2V5c01hcCIsImFWYWx1ZSIsImJWYWx1ZSIsImFWYWx1ZUtleXMiLCJiVmFsdWVLZXlzIiwiYVZhbHVlS2V5IiwiX3JlYWN0IiwiY2FjaGUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJkZXNjIiwic2V0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUkJDEiLCJfY29tcGFyZU9iamVjdHMiLCJyZXF1aXJlJCQyIiwiV2Vha01hcCIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiX2NyZWF0ZVN1cGVyIiwiRGVyaXZlZCIsInJlc3VsdCIsIlN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsInNoYW0iLCJQcm94eSIsIkRhdGUiLCJ0b1N0cmluZyIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJOZXdUYXJnZXQiLCJ0aGlzIiwic2VsZiIsIlJlZmVyZW5jZUVycm9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwic2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9zZXRQcm90b3R5cGVPZiIsInAiLCJTZWN0aW9uVGl0bGUiLCJfQ29tcG9uZW50Iiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY3JlYXRlIiwiX2luaGVyaXRzIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfc3VwZXIiLCJpbnN0YW5jZSIsIl9jbGFzc0NhbGxDaGVjayIsIm5leHRQcm9wcyIsIl90aGlzJHByb3BzIiwic2VjdGlvbiIsInJlbmRlclNlY3Rpb25UaXRsZSIsInNlY3Rpb25LZXlQcmVmaXgiLCJzZWN0aW9uVGl0bGUiLCJjcmVhdGVFbGVtZW50IiwiQ29tcG9uZW50IiwiYW55IiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJzdHJpbmciLCJfZXh0ZW5kcyIsIm93bktleXMiLCJvYmplY3QiLCJlbnVtZXJhYmxlT25seSIsInN5bWJvbHMiLCJzeW0iLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsInNvdXJjZVN5bWJvbEtleXMiLCJJdGVtIiwiX3RoaXMiLCJhcmdzIiwiaXRlbSIsImV2ZW50Iiwib25Nb3VzZUVudGVyIiwiX3RoaXMkcHJvcHMyIiwib25Nb3VzZUxlYXZlIiwiX3RoaXMkcHJvcHMzIiwib25Nb3VzZURvd24iLCJfdGhpcyRwcm9wczQiLCJvbkNsaWNrIiwiX3RoaXMkcHJvcHM1IiwiaXNIaWdobGlnaHRlZCIsInJlbmRlckl0ZW0iLCJyZW5kZXJJdGVtRGF0YSIsInJlc3RQcm9wcyIsInJvbGUiLCJyZWYiLCJzdG9yZUl0ZW1SZWZlcmVuY2UiLCJmb3JFYWNoIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfb2JqZWN0U3ByZWFkIiwibnVtYmVyIiwiYm9vbCIsIl9JdGVtIiwicmVxdWlyZSQkMyIsIkl0ZW1zTGlzdCIsImhpZ2hsaWdodGVkSXRlbSIsIm9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlIiwiX3RoaXMyIiwiaXRlbXMiLCJpdGVtUHJvcHMiLCJoaWdobGlnaHRlZEl0ZW1JbmRleCIsImdldEl0ZW1JZCIsImtleVByZWZpeCIsInNlY3Rpb25QcmVmaXgiLCJpc0l0ZW1Qcm9wc0Z1bmN0aW9uIiwiaXNGaXJzdCIsIml0ZW1LZXkiLCJpdGVtUHJvcHNPYmoiLCJhbGxJdGVtUHJvcHMiLCJpZCIsInN0b3JlSGlnaGxpZ2h0ZWRJdGVtUmVmZXJlbmNlIiwiYXJyYXkiLCJvbmVPZlR5cGUiLCJfc2VjdGlvbkl0ZXJhdG9yIiwiX3JlYWN0VGhlbWVhYmxlIiwiX1NlY3Rpb25UaXRsZSIsInJlcXVpcmUkJDQiLCJfSXRlbUxpc3QiLCJyZXF1aXJlJCQ1IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwibWluTGVuIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJzbGljZSIsInRlc3QiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiZW1wdHlPYmplY3QiLCJBdXRvd2hhdGV2ZXIiLCJ1c2VyUmVmIiwiaW5wdXRQcm9wcyIsImN1cnJlbnQiLCJpdGVtc0NvbnRhaW5lciIsInNldFN0YXRlIiwiaXNJbnB1dEZvY3VzZWQiLCJvbkZvY3VzIiwib25CbHVyIiwiaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgiLCJrZXlDb2RlIiwibmV4dFByZXYiLCJfdGhpcyRzZWN0aW9uSXRlcmF0b3IyIiwic2VjdGlvbkl0ZXJhdG9yIiwibmV3SGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgiLCJuZXdIaWdobGlnaHRlZEl0ZW1JbmRleCIsIm9uS2V5RG93biIsInN0YXRlIiwic2V0U2VjdGlvbnNJdGVtcyIsInNldFNlY3Rpb25JdGVyYXRvciIsInNldFRoZW1lIiwiZW5zdXJlSGlnaGxpZ2h0ZWRJdGVtSXNWaXNpYmxlIiwic2VjdGlvbnNJdGVtcyIsImdldFNlY3Rpb25JdGVtcyIsInNlY3Rpb25zTGVuZ3RocyIsImFsbFNlY3Rpb25zQXJlRW1wdHkiLCJldmVyeSIsIml0ZW1zQ291bnQiLCJpc0ZpcnN0U2VjdGlvbiIsInN0b3JlSXRlbXNMaXN0UmVmZXJlbmNlIiwiaXRlbU9mZnNldFJlbGF0aXZlVG9Db250YWluZXIiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRUb3AiLCJzY3JvbGxUb3AiLCJvZmZzZXRIZWlnaHQiLCJyZW5kZXJJbnB1dENvbXBvbmVudCIsInJlbmRlckl0ZW1zQ29udGFpbmVyIiwicmVuZGVyZWRJdGVtcyIsInJlbmRlclNlY3Rpb25zIiwicmVuZGVySXRlbXMiLCJpc09wZW4iLCJhcmlhQWN0aXZlZGVzY2VuZGFudCIsIml0ZW1zQ29udGFpbmVySWQiLCJjb250YWluZXJQcm9wcyIsImlucHV0Q29tcG9uZW50IiwidHlwZSIsImF1dG9Db21wbGV0ZSIsInN0b3JlSW5wdXRSZWZlcmVuY2UiLCJzdG9yZUl0ZW1zQ29udGFpbmVyUmVmZXJlbmNlIiwiY2hpbGRyZW4iLCJFcnJvciIsImNvbnRhaW5lciIsImNvbnRhaW5lck9wZW4iLCJpbnB1dE9wZW4iLCJpbnB1dEZvY3VzZWQiLCJpdGVtc0NvbnRhaW5lck9wZW4iLCJpdGVtc0xpc3QiLCJpdGVtRmlyc3QiLCJpdGVtSGlnaGxpZ2h0ZWQiLCJzZWN0aW9uQ29udGFpbmVyIiwic2VjdGlvbkNvbnRhaW5lckZpcnN0IiwiX2FycmF5cyIsImFycmF5cyIsImFyckEiLCJhcnJCIiwiX0F1dG93aGF0ZXZlciIsIl90aGVtZSIsIm1hcFRvQXV0b3doYXRldmVyVGhlbWUiLCJkZWZhdWx0VGhlbWUiLCJzdWdnZXN0aW9uc0NvbnRhaW5lciIsInN1Z2dlc3Rpb25zQ29udGFpbmVyT3BlbiIsInN1Z2dlc3Rpb25zTGlzdCIsInN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uRmlyc3QiLCJzdWdnZXN0aW9uSGlnaGxpZ2h0ZWQiLCJhbHdheXNUcnVlIiwiUkVBU09OX1NVR0dFU1RJT05TX1JFVkVBTEVEIiwiUkVBU09OX0lOUFVUX0ZPQ1VTRUQiLCJSRUFTT05fSU5QVVRfQ0hBTkdFRCIsIlJFQVNPTl9FU0NBUEVfUFJFU1NFRCIsIkF1dG9zdWdnZXN0IiwiX2Fsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIiwiYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMiLCJqdXN0Q2xpY2tlZE9uU3VnZ2VzdGlvbnNDb250YWluZXIiLCJub2RlIiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJnZXRBdHRyaWJ1dGUiLCJwYXJlbnROb2RlIiwiYXV0b3doYXRldmVyIiwiX3JlZjMiLCJ1cGRhdGVIaWdobGlnaHRlZFN1Z2dlc3Rpb24iLCJwcmVzc2VkU3VnZ2VzdGlvbiIsImp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24iLCJqdXN0TW91c2VFbnRlcmVkIiwic2V0VGltZW91dCIsImZvY3VzIiwib25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkIiwib25TdWdnZXN0aW9uU2VsZWN0ZWQiLCJvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQiLCJrZWVwU3VnZ2VzdGlvbnNPblNlbGVjdCIsInNob3VsZEtlZXBTdWdnZXN0aW9uc09uU2VsZWN0Iiwic3VnZ2VzdGlvblZhbHVlIiwicmVhc29uIiwicmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24iLCJmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2siLCJfdGhpcyRnZXRTdWdnZXN0aW9uSW4iLCJnZXRTdWdnZXN0aW9uSW5kaWNlcyIsImZpbmRTdWdnZXN0aW9uRWxlbWVudCIsInN1Z2dlc3Rpb25JbmRleCIsImNsaWNrZWRTdWdnZXN0aW9uIiwiZ2V0U3VnZ2VzdGlvbiIsImNsaWNrZWRTdWdnZXN0aW9uVmFsdWUiLCJnZXRTdWdnZXN0aW9uVmFsdWUiLCJtYXliZUNhbGxPbkNoYW5nZSIsIm1ldGhvZCIsImNsb3NlU3VnZ2VzdGlvbnMiLCJzaG91bGRSZW5kZXJTdWdnZXN0aW9ucyIsImhpZ2hsaWdodGVkU3VnZ2VzdGlvbiIsImdldEhpZ2hsaWdodGVkU3VnZ2VzdGlvbiIsInNob3VsZFJlbmRlciIsImlzRm9jdXNlZCIsImhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4IiwidmFsdWVCZWZvcmVVcERvd24iLCJpc0NvbGxhcHNlZCIsImJsdXJFdmVudCIsIl9yZWY0Iiwib25TdWdnZXN0aW9uTW91c2VFbnRlciIsIm9uU3VnZ2VzdGlvbk1vdXNlTGVhdmUiLCJvblN1Z2dlc3Rpb25Nb3VzZURvd24iLCJvblRvdWNoU3RhcnQiLCJvblN1Z2dlc3Rpb25Ub3VjaFN0YXJ0Iiwib25Ub3VjaE1vdmUiLCJvblN1Z2dlc3Rpb25Ub3VjaE1vdmUiLCJvblN1Z2dlc3Rpb25DbGljayIsIl9yZWY1IiwicmVuZGVyU3VnZ2VzdGlvbnNDb250YWluZXIiLCJxdWVyeSIsImdldFF1ZXJ5IiwianVzdFByZXNzZWRVcERvd24iLCJhZGRFdmVudExpc3RlbmVyIiwib25Eb2N1bWVudE1vdXNlRG93biIsIm9uRG9jdW1lbnRNb3VzZVVwIiwic2hvdWxkUmVzZXRIaWdobGlnaHRpbmciLCJoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9ucyIsIndpbGxSZW5kZXJTdWdnZXN0aW9ucyIsInJldmVhbFN1Z2dlc3Rpb25zIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwib25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicHJldlZhbHVlIiwic2hvdWxkUmVzZXRWYWx1ZUJlZm9yZVVwRG93biIsImdldFNlY3Rpb25TdWdnZXN0aW9ucyIsIl90aGlzJHN0YXRlIiwic3VnZ2VzdGlvbkVsZW1lbnQiLCJwYXJzZUludCIsInN0YXJ0Tm9kZSIsImNvbnNvbGUiLCJlcnJvciIsIm5ld1ZhbHVlIiwiX3RoaXMkcHJvcHMkaW5wdXRQcm9wIiwib25DaGFuZ2UiLCJ0cmltIiwiX3RoaXMzIiwiX3RoaXMkcHJvcHM2IiwicmVuZGVyU3VnZ2VzdGlvbiIsIl90aGlzJHN0YXRlMiIsIl9vbkZvY3VzIiwiX29uS2V5RG93biIsImF1dG93aGF0ZXZlcklucHV0UHJvcHMiLCJwcmV2ZW50RGVmYXVsdCIsImdldFN1Z2dlc3Rpb25WYWx1ZUJ5SW5kZXgiLCJfbmV3VmFsdWUiLCJ3aWxsQ2xvc2VTdWdnZXN0aW9ucyIsInJlbmRlclN1Z2dlc3Rpb25EYXRhIiwic3RvcmVBdXRvd2hhdGV2ZXJSZWYiLCJwcm9wTmFtZSIsInN0eWxlSW5qZWN0IiwiY3NzIiwiaW5zZXJ0QXQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiU2VsZWN0IiwiZ2V0RGlzcGxheSIsIm9wdGlvbnMiLCJvblNsYWNrVGltZVNlbGVjdGVkIiwidmlhUG9pbnRJbmRleCIsImxhYmVsIiwiaWNvbiIsImRpc3BsYXlWYWx1ZSIsImNoYW5nZURpc3BsYXlWYWx1ZSIsInVzZVN0YXRlIiwib3BlbiIsImNoYW5nZU9wZW4iLCJ1c2VFZmZlY3QiLCJzY3JvbGxSZWYiLCJ1c2VSZWYiLCJzY3JvbGxJbmRleCIsIk1hdGgiLCJmbG9vciIsInVzZUxheW91dEVmZmVjdCIsImlucHV0SWQiLCJsYWJlbElkIiwiUmVhY3QiLCJodG1sRm9yIiwiZGlzcGxheU5hbWUiLCJvbklucHV0Q2hhbmdlIiwiXyIsInJlYWRPbmx5Iiwib3RoZXJSZWZzIiwiX2V4Y2x1ZGVkIiwidGFiSW5kZXgiLCJlbGVtIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYXJyYXlPZiIsInNoYXBlIiwiaTE4biIsImNyZWF0ZUluc3RhbmNlIiwiZmFsbGJhY2tMbmciLCJyZXNvdXJjZXMiLCJkZSIsInRyYW5zbGF0aW9uIiwiZW4iLCJmaSIsInBsIiwic3YiLCJkZWZhdWx0TlMiLCJyZWFjdCIsInVzZVN1c3BlbnNlIiwiaW5pdCIsImdldEVtcHR5VmlhUG9pbnRQbGFjZUhvbGRlciIsImlzVmlhUG9pbnRFbXB0eSIsInZpYVBvaW50IiwiaXNFbXB0eSIsImluY2x1ZGVzIiwiSXRpbmVyYXJ5U2VhcmNoQ29udHJvbCIsImVuYWJsZWQiLCJvbktleVByZXNzIiwid2lkZSIsInJlc3QiLCJ1cGRhdGVWaWFQb2ludFNsYWNrIiwiYWN0aXZlVmlhUG9pbnRTbGFja3MiLCJ1cGRhdGVkVmlhUG9pbnRJbmRleCIsInZpYVBvaW50UmVtb3ZlZCIsImZvdW5kQXRJbmRleCIsInNwbGljZSIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsIndoaWNoIiwibG9jYXRpb24iLCJhZGRyZXNzIiwiZ3BzIiwicmVhZHkiLCJnZXRMb2NhdGlvblR5cGUiLCJkZWZhdWx0UHJvcHMiLCJsb2NhdGlvblNoYXBlIiwibGF0IiwibG9uIiwibG9jYXRpb25TbGFjayIsIkRUQXV0b3N1Z2dlc3RQYW5lbCIsInN1cGVyIiwicmVmcyIsImRlc3RpbmF0aW9uIiwidmlhUG9pbnRzIiwidXBkYXRlVmlhUG9pbnRzIiwidnAiLCJhY3RpdmVTbGFja0lucHV0cyIsInNsYWNrVGltZUluU2Vjb25kcyIsImFkZEFuYWx5dGljc0V2ZW50IiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJ2aWFQb2ludExvY2F0aW9uIiwiaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkIiwicmV2ZXJzZSIsInN3YXBPcmRlciIsInNsYWNrSW5TZWNvbmRzIiwibG5nIiwibGFuZyIsInJlbmRlciIsIm9yaWdpbiIsInNlYXJjaFBhbmVsVGV4dCIsInNlYXJjaENvbnRleHQiLCJkaXNhYmxlQXV0b0ZvY3VzIiwib3JpZ2luTW9iaWxlTGFiZWwiLCJkZXN0aW5hdGlvbk1vYmlsZUxhYmVsIiwiZm9udFdlaWdodHMiLCJvbkZvY3VzQ2hhbmdlIiwic2hvd1N3YXBDb250cm9sIiwic2hvd1ZpYXBvaW50Q29udHJvbCIsInNsYWNrVGltZSIsInRpbWVPcHRpb25zIiwidmFsdWVJbk1pbnV0ZXMiLCJnZXRTbGFja1RpbWVPcHRpb25zIiwiZ2V0VmlhUG9pbnRTbGFja1RpbWVPckRlZmF1bHQiLCJkZWZhdWx0VmFsdWUiLCJpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUiLCJpbmRleCIsImN4IiwiaXNNb2JpbGUiLCJjb2xvciIsIm1lZGl1bSIsIkRUQXV0b1N1Z2dlc3QiLCJhcHBFbGVtZW50IiwiYXV0b0ZvY3VzIiwic3RvcmVSZWYiLCJzdG9yZVJlZmVyZW5jZSIsInJlZlBvaW50IiwicGxhY2Vob2xkZXIiLCJvcmlnaW5QbGFjZUhvbGRlciIsImdldEF1dG9TdWdnZXN0SWNvbnMiLCJvblNlbGVjdCIsIm9uQ2xlYXIiLCJmb2N1c0NoYW5nZSIsImhhbmRsZUZvY3VzQ2hhbmdlIiwic291cmNlcyIsInRhcmdldHMiLCJmaWx0ZXJSZXN1bHRzIiwiaG92ZXJDb2xvciIsIm1vYmlsZUxhYmVsIiwibW9kZVNldCIsIm1vZGVJY29uQ29sb3JzIiwic2hvd1Njcm9sbCIsImlzRW1iZWRkZWQiLCJvcHBvc2l0ZSIsImhhbmRsZVN3YXBPcmRlckNsaWNrIiwiSWNvbiIsImltZyIsInJlY3RhbmdsZSIsIlJlYWN0U29ydGFibGUiLCJsaXN0IiwiaGFuZGxlIiwiYW5pbWF0aW9uIiwiZGlzYWJsZWQiLCJzZXRMaXN0IiwibmV3VmlhUG9pbnRzIiwicm93IiwiY3Vyc29yIiwicm90YXRlIiwiYXJpYUxhYmVsIiwiaGFuZGxlVmlhUG9pbnRzIiwic2hvd1NsYWNrQ29udHJvbCIsImhhbmRsZVRvZ2dsZVZpYVBvaW50U2xhY2tDbGljayIsImdldFNsYWNrRGlzcGxheSIsImhhbmRsZVZpYVBvaW50U2xhY2tUaW1lU2VsZWN0ZWQiLCJoYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrIiwiaXNOYU4iLCJkZXN0aW5hdGlvblBsYWNlSG9sZGVyIiwibW9yZSIsImhhbmRsZUFkZFZpYVBvaW50Q2xpY2siLCJ3aWR0aCIsImhlaWdodCIsIlVSTF9QRUxJQVMiLCJvYmplY3RPZiIsIkRUQXV0b3N1Z2dlc3RQYW5lbFdpdGhUcmFuc2xhdGlvbiIsIndpdGhUcmFuc2xhdGlvbiIsIkkxOG5leHRQcm92aWRlciJdLCJtYXBwaW5ncyI6InFnQ0FBQSxTQUFTQSxFQUFRQyxHQUdmLE9BQU9ELEVBQVUsbUJBQXFCRSxRQUFVLGlCQUFtQkEsT0FBT0MsU0FBVyxTQUFVRixHQUM3RixjQUFjQSxDQUNmLEVBQUcsU0FBVUEsR0FDWixPQUFPQSxHQUFLLG1CQUFxQkMsUUFBVUQsRUFBRUcsY0FBZ0JGLFFBQVVELElBQU1DLE9BQU9HLFVBQVksZ0JBQWtCSixDQUN0SCxFQUFLRCxFQUFRQyxFQUNiLENDTkEsU0FBU0ssRUFBY0MsR0FDckIsSUFBSUMsRUNGTixTQUFxQkQsRUFBR0UsR0FDdEIsR0FBSSxVQUFZVCxFQUFRTyxLQUFPQSxFQUFHLE9BQU9BLEVBQ3pDLElBQUlHLEVBQUlILEVBQUVMLE9BQU9TLGFBQ2pCLFFBQUksSUFBV0QsRUFBRyxDQUNoQixJQUFJRixFQUFJRSxFQUFFRSxLQUFLTCxFQUFHRSxHQUFLLFdBQ3ZCLEdBQUksVUFBWVQsRUFBUVEsR0FBSSxPQUFPQSxFQUNuQyxNQUFNLElBQUlLLFVBQVUsK0NBQ3JCLENBQ0QsT0FBUSxXQUFhSixF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
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("classnames"),require("prop-types"),require("react"),require("react-i18next"),require("react-sortablejs"),require("@digitransit-component/digitransit-component-autosuggest"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("i18next")):"function"==typeof define&&define.amd?define(["exports","classnames","prop-types","react","react-i18next","react-sortablejs","@digitransit-component/digitransit-component-autosuggest","@digitransit-component/digitransit-component-icon","lodash/isEmpty","i18next"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-autosuggest-panel"]={},e.cx,e.PropTypes,e.React,e.reactI18next,e.reactSortablejs,e.DTAutosuggest,e.Icon,e.isEmpty,e.i18next)}(this,(function(e,t,n,i,o,r,s,a,u,l){"use strict";function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=c(t),d=c(n),f=c(i),g=c(s),h=c(a),y=c(u);function m(e){return m="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},m(e)}function v(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=m(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==m(t)?t:t+""}function b(e,t,n){return(t=v(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(e,t){if(null==e)return{};var n,i,o=function(e,t){if(null==e)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==t.indexOf(i))continue;n[i]=e[i]}return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)n=r[i],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function S(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var w,x,O={};var P,I,k={};function j(){if(I)return P;I=1;var e=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,o=!1,r=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){o=!0,r=e}finally{try{!i&&a.return&&a.return()}finally{if(o)throw r}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};return P=function(t){var n=t.data,i=t.multiSection;function o(t){var o=e(t,2),r=o[0],s=o[1];return i?null===s||s===n[r]-1?null===(r=function(e){for(null===e?e=0:e++;e<n.length&&0===n[e];)e++;return e===n.length?null:e}(r))?[null,null]:[r,0]:[r,s+1]:0===n||s===n-1?[null,null]:null===s?[null,0]:[null,s+1]}return{next:o,prev:function(t){var o=e(t,2),r=o[0],s=o[1];return i?null===s||0===s?null===(r=function(e){for(null===e?e=n.length-1:e--;e>=0&&0===n[e];)e--;return-1===e?null:e}(r))?[null,null]:[r,n[r]-1]:[r,s-1]:0===n||0===s?[null,null]:null===s?[null,n-1]:[null,s-1]},isLast:function(e){return null===o(e)[1]}}}}var C,E,R,M={exports:{}};function D(){if(E)return C;E=1;var e=Object.prototype.propertyIsEnumerable;function t(t){var n=Object.getOwnPropertyNames(t);return Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t))),n.filter((function(n){return e.call(t,n)}))}return C=Object.assign||function(e,n){for(var i,o,r=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){i=arguments[s],o=t(Object(i));for(var a=0;a<o.length;a++)r[o[a]]=i[o[a]]}return r},C}function T(){return R||(R=1,function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,o=!1,r=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){o=!0,r=e}finally{try{!i&&a.return&&a.return()}finally{if(o)throw r}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var o,r=D(),s=(o=r)&&o.__esModule?o:{default:o},a=function(e){return e};t.default=function(e){var t=Array.isArray(e)&&2===e.length?e:[e,null],o=n(t,2),r=o[0],u=o[1];return function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];var l=n.map((function(e){return r[e]})).filter(a);return"string"==typeof l[0]||"function"==typeof u?{key:e,className:u?u.apply(void 0,i(l)):l.join(" ")}:{key:e,style:s.default.apply(void 0,[{}].concat(i(l)))}}},e.exports=t.default}(M,M.exports)),M.exports}var A,F,N={},q={};function V(){return A||(A=1,function(e){function t(e){return t="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},t(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(e===n)return!1;var o=Object.keys(e),r=Object.keys(n);if(o.length!==r.length)return!0;var s,a,u={};for(s=0,a=i.length;s<a;s++)u[i[s]]=!0;for(s=0,a=o.length;s<a;s++){var l=o[s],c=e[l],p=n[l];if(c!==p){if(!u[l]||null===c||null===p||"object"!==t(c)||"object"!==t(p))return!0;var d=Object.keys(c),f=Object.keys(p);if(d.length!==f.length)return!0;for(var g=0,h=d.length;g<h;g++){var y=d[g];if(c[y]!==p[y])return!0}}}return!1}}(q)),q}function L(){return F||(F=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==s(e)&&"function"!=typeof e)return{default:e};var t=r();if(t&&t.has(e))return t.get(e);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var a=i?Object.getOwnPropertyDescriptor(e,o):null;a&&(a.get||a.set)?Object.defineProperty(n,o,a):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(f.default),n=o(d.default),i=o(V());function o(e){return e&&e.__esModule?e:{default:e}}function r(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return r=function(){return e},e}function s(e){return s="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},s(e)}function a(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function u(e){return function(){var t,n=l(e);if(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()){var i=l(this).constructor;t=Reflect.construct(n,arguments,i)}else t=n.apply(this,arguments);return function(e,t){if(t&&("object"===s(t)||"function"==typeof t))return t;return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,t)}}function l(e){return l=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},l(e)}function c(e,t){return c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},c(e,t)}var p=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(l,e);var n,o,r,s=u(l);function l(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),s.apply(this,arguments)}return n=l,o=[{key:"shouldComponentUpdate",value:function(e){return(0,i.default)(e,this.props)}},{key:"render",value:function(){var e=this.props,n=e.section,i=e.renderSectionTitle,o=e.theme,r=e.sectionKeyPrefix,s=i(n);return s?t.default.createElement("div",o("".concat(r,"title"),"sectionTitle"),s):null}}],o&&a(n.prototype,o),r&&a(n,r),l}(t.Component);e.default=p,function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(p,"propTypes",{section:n.default.any.isRequired,renderSectionTitle:n.default.func.isRequired,theme:n.default.func.isRequired,sectionKeyPrefix:n.default.string.isRequired})}(N)),N}var H,K,U,z={},B={};function Z(){return H||(H=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==s(e)&&"function"!=typeof e)return{default:e};var t=r();if(t&&t.has(e))return t.get(e);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var a=i?Object.getOwnPropertyDescriptor(e,o):null;a&&(a.get||a.set)?Object.defineProperty(n,o,a):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(f.default),n=o(d.default),i=o(V());function o(e){return e&&e.__esModule?e:{default:e}}function r(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return r=function(){return e},e}function s(e){return s="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},s(e)}function a(){return a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},a.apply(this,arguments)}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function l(e,t){if(null==e)return{};var n,i,o=function(e,t){if(null==e)return{};var n,i,o={},r=Object.keys(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function c(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function p(e){return function(){var t,n=h(e);if(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()){var i=h(this).constructor;t=Reflect.construct(n,arguments,i)}else t=n.apply(this,arguments);return function(e,t){if(t&&("object"===s(t)||"function"==typeof t))return t;return g(e)}(this,t)}}function g(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}function y(e,t){return y=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},y(e,t)}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var v=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&y(e,t)}(d,e);var n,o,r,s=p(d);function d(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,d);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return m(g(e=s.call.apply(s,[this].concat(n))),"storeItemReference",(function(t){null!==t&&(e.item=t)})),m(g(e),"onMouseEnter",(function(t){var n=e.props,i=n.sectionIndex,o=n.itemIndex;e.props.onMouseEnter(t,{sectionIndex:i,itemIndex:o})})),m(g(e),"onMouseLeave",(function(t){var n=e.props,i=n.sectionIndex,o=n.itemIndex;e.props.onMouseLeave(t,{sectionIndex:i,itemIndex:o})})),m(g(e),"onMouseDown",(function(t){var n=e.props,i=n.sectionIndex,o=n.itemIndex;e.props.onMouseDown(t,{sectionIndex:i,itemIndex:o})})),m(g(e),"onClick",(function(t){var n=e.props,i=n.sectionIndex,o=n.itemIndex;e.props.onClick(t,{sectionIndex:i,itemIndex:o})})),e}return n=d,o=[{key:"shouldComponentUpdate",value:function(e){return(0,i.default)(e,this.props,["renderItemData"])}},{key:"render",value:function(){var e=this.props,n=e.isHighlighted,i=e.item,o=e.renderItem,r=e.renderItemData,s=l(e,["isHighlighted","item","renderItem","renderItemData"]);return delete s.sectionIndex,delete s.itemIndex,"function"==typeof s.onMouseEnter&&(s.onMouseEnter=this.onMouseEnter),"function"==typeof s.onMouseLeave&&(s.onMouseLeave=this.onMouseLeave),"function"==typeof s.onMouseDown&&(s.onMouseDown=this.onMouseDown),"function"==typeof s.onClick&&(s.onClick=this.onClick),t.default.createElement("li",a({role:"option"},s,{ref:this.storeItemReference}),o(i,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){m(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({isHighlighted:n},r)))}}],o&&c(n.prototype,o),r&&c(n,r),d}(t.Component);e.default=v,m(v,"propTypes",{sectionIndex:n.default.number,isHighlighted:n.default.bool.isRequired,itemIndex:n.default.number.isRequired,item:n.default.any.isRequired,renderItem:n.default.func.isRequired,renderItemData:n.default.object.isRequired,onMouseEnter:n.default.func,onMouseLeave:n.default.func,onMouseDown:n.default.func,onClick:n.default.func})}(B)),B}function W(){return K||(K=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==a(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var r=i?Object.getOwnPropertyDescriptor(e,o):null;r&&(r.get||r.set)?Object.defineProperty(n,o,r):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(f.default),n=r(d.default),i=r(Z()),o=r(V());function r(e){return e&&e.__esModule?e:{default:e}}function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}function a(e){return a="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},a(e)}function u(){return u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},u.apply(this,arguments)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function c(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function p(e){return function(){var t,n=h(e);if(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()){var i=h(this).constructor;t=Reflect.construct(n,arguments,i)}else t=n.apply(this,arguments);return function(e,t){if(t&&("object"===a(t)||"function"==typeof t))return t;return g(e)}(this,t)}}function g(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}function y(e,t){return y=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},y(e,t)}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var v=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&y(e,t)}(d,e);var n,r,s,a=p(d);function d(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,d);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return m(g(e=a.call.apply(a,[this].concat(n))),"storeHighlightedItemReference",(function(t){e.props.onHighlightedItemChange(null===t?null:t.item)})),e}return n=d,r=[{key:"shouldComponentUpdate",value:function(e){return(0,o.default)(e,this.props,["itemProps"])}},{key:"render",value:function(){var e=this,n=this.props,o=n.items,r=n.itemProps,s=n.renderItem,a=n.renderItemData,c=n.sectionIndex,p=n.highlightedItemIndex,d=n.getItemId,f=n.theme,g=n.keyPrefix,h=null===c?g:"".concat(g,"section-").concat(c,"-"),y="function"==typeof r;return t.default.createElement("ul",u({role:"listbox"},f("".concat(h,"items-list"),"itemsList")),o.map((function(n,o){var g=0===o,v=o===p,b="".concat(h,"item-").concat(o),_=y?r({sectionIndex:c,itemIndex:o}):r,S=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){m(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({id:d(c,o),"aria-selected":v},f(b,"item",g&&"itemFirst",v&&"itemHighlighted"),{},_);return v&&(S.ref=e.storeHighlightedItemReference),t.default.createElement(i.default,u({},S,{sectionIndex:c,isHighlighted:v,itemIndex:o,item:n,renderItem:s,renderItemData:a}))})))}}],r&&c(n.prototype,r),s&&c(n,s),d}(t.Component);e.default=v,m(v,"propTypes",{items:n.default.array.isRequired,itemProps:n.default.oneOfType([n.default.object,n.default.func]),renderItem:n.default.func.isRequired,renderItemData:n.default.object.isRequired,sectionIndex:n.default.number,highlightedItemIndex:n.default.number,onHighlightedItemChange:n.default.func.isRequired,getItemId:n.default.func.isRequired,theme:n.default.func.isRequired,keyPrefix:n.default.string.isRequired}),m(v,"defaultProps",{sectionIndex:null})}(z)),z}function Q(){return U||(U=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==h(e)&&"function"!=typeof e)return{default:e};var t=u();if(t&&t.has(e))return t.get(e);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var r=i?Object.getOwnPropertyDescriptor(e,o):null;r&&(r.get||r.set)?Object.defineProperty(n,o,r):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(f.default),n=a(d.default),i=a(j()),o=a(T()),r=a(L()),s=a(W());function a(e){return e&&e.__esModule?e:{default:e}}function u(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return u=function(){return e},e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){S(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],i=!0,o=!1,r=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){o=!0,r=e}finally{try{i||null==a.return||a.return()}finally{if(o)throw r}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return g(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return g(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}function h(e){return h="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},h(e)}function y(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function m(e){return function(){var t,n=b(e);if(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()){var i=b(this).constructor;t=Reflect.construct(n,arguments,i)}else t=n.apply(this,arguments);return function(e,t){if(t&&("object"===h(t)||"function"==typeof t))return t;return v(e)}(this,t)}}function v(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function _(e,t){return _=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},_(e,t)}function S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w={},x=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_(e,t)}(d,e);var n,a,u,l=m(d);function d(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,d),S(v(t=l.call(this,e)),"storeInputReference",(function(e){null!==e&&(t.input=e);var n=t.props.inputProps.ref;n&&("function"==typeof n?n(e):"object"===h(n)&&Object.prototype.hasOwnProperty.call(n,"current")&&(n.current=e))})),S(v(t),"storeItemsContainerReference",(function(e){null!==e&&(t.itemsContainer=e)})),S(v(t),"onHighlightedItemChange",(function(e){t.highlightedItem=e})),S(v(t),"getItemId",(function(e,n){if(null===n)return null;var i=t.props.id,o=null===e?"":"section-".concat(e);return"react-autowhatever-".concat(i,"-").concat(o,"-item-").concat(n)})),S(v(t),"onFocus",(function(e){var n=t.props.inputProps;t.setState({isInputFocused:!0}),n.onFocus&&n.onFocus(e)})),S(v(t),"onBlur",(function(e){var n=t.props.inputProps;t.setState({isInputFocused:!1}),n.onBlur&&n.onBlur(e)})),S(v(t),"onKeyDown",(function(e){var n=t.props,i=n.inputProps,o=n.highlightedSectionIndex,r=n.highlightedItemIndex,s=e.keyCode;switch(s){case 40:case 38:var a=40===s?"next":"prev",u=p(t.sectionIterator[a]([o,r]),2),l=u[0],c=u[1];i.onKeyDown(e,{newHighlightedSectionIndex:l,newHighlightedItemIndex:c});break;default:i.onKeyDown(e,{highlightedSectionIndex:o,highlightedItemIndex:r})}})),t.highlightedItem=null,t.state={isInputFocused:!1},t.setSectionsItems(e),t.setSectionIterator(e),t.setTheme(e),t}return n=d,a=[{key:"componentDidMount",value:function(){this.ensureHighlightedItemIsVisible()}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.items!==this.props.items&&this.setSectionsItems(e),e.items===this.props.items&&e.multiSection===this.props.multiSection||this.setSectionIterator(e),e.theme!==this.props.theme&&this.setTheme(e)}},{key:"componentDidUpdate",value:function(){this.ensureHighlightedItemIsVisible()}},{key:"setSectionsItems",value:function(e){e.multiSection&&(this.sectionsItems=e.items.map((function(t){return e.getSectionItems(t)})),this.sectionsLengths=this.sectionsItems.map((function(e){return e.length})),this.allSectionsAreEmpty=this.sectionsLengths.every((function(e){return 0===e})))}},{key:"setSectionIterator",value:function(e){this.sectionIterator=(0,i.default)({multiSection:e.multiSection,data:e.multiSection?this.sectionsLengths:e.items.length})}},{key:"setTheme",value:function(e){this.theme=(0,o.default)(e.theme)}},{key:"renderSections",value:function(){var e=this;if(this.allSectionsAreEmpty)return null;var n=this.theme,i=this.props,o=i.id,a=i.items,u=i.renderItem,l=i.renderItemData,c=i.renderSectionTitle,p=i.highlightedSectionIndex,d=i.highlightedItemIndex,f=i.itemProps;return a.map((function(i,a){var g="react-autowhatever-".concat(o,"-"),h="".concat(g,"section-").concat(a,"-"),y=0===a;return t.default.createElement("div",n("".concat(h,"container"),"sectionContainer",y&&"sectionContainerFirst"),t.default.createElement(r.default,{section:i,renderSectionTitle:c,theme:n,sectionKeyPrefix:h}),t.default.createElement(s.default,{items:e.sectionsItems[a],itemProps:f,renderItem:u,renderItemData:l,sectionIndex:a,highlightedItemIndex:p===a?d:null,onHighlightedItemChange:e.onHighlightedItemChange,getItemId:e.getItemId,theme:n,keyPrefix:g,ref:e.storeItemsListReference}))}))}},{key:"renderItems",value:function(){var e=this.props.items;if(0===e.length)return null;var n=this.theme,i=this.props,o=i.id,r=i.renderItem,a=i.renderItemData,u=i.highlightedSectionIndex,l=i.highlightedItemIndex,c=i.itemProps;return t.default.createElement(s.default,{items:e,itemProps:c,renderItem:r,renderItemData:a,highlightedItemIndex:null===u?l:null,onHighlightedItemChange:this.onHighlightedItemChange,getItemId:this.getItemId,theme:n,keyPrefix:"react-autowhatever-".concat(o,"-")})}},{key:"ensureHighlightedItemIsVisible",value:function(){var e=this.highlightedItem;if(e){var t=this.itemsContainer,n=e.offsetParent===t?e.offsetTop:e.offsetTop-t.offsetTop,i=t.scrollTop;n<i?i=n:n+e.offsetHeight>i+t.offsetHeight&&(i=n+e.offsetHeight-t.offsetHeight),i!==t.scrollTop&&(t.scrollTop=i)}}},{key:"render",value:function(){var e=this.theme,n=this.props,i=n.id,o=n.multiSection,r=n.renderInputComponent,s=n.renderItemsContainer,a=n.highlightedSectionIndex,u=n.highlightedItemIndex,l=this.state.isInputFocused,p=o?this.renderSections():this.renderItems(),d=null!==p,f=this.getItemId(a,u),g="react-autowhatever-".concat(i),h=c({role:"combobox","aria-haspopup":"listbox","aria-owns":g,"aria-expanded":d},e("react-autowhatever-".concat(i,"-container"),"container",d&&"containerOpen"),{},this.props.containerProps),y=r(c({type:"text",value:"",autoComplete:"off","aria-autocomplete":"list","aria-controls":g,"aria-activedescendant":f},e("react-autowhatever-".concat(i,"-input"),"input",d&&"inputOpen",l&&"inputFocused"),{},this.props.inputProps,{onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.props.inputProps.onKeyDown&&this.onKeyDown,ref:this.storeInputReference})),m=s({containerProps:c({id:g,role:"listbox"},e("react-autowhatever-".concat(i,"-items-container"),"itemsContainer",d&&"itemsContainerOpen"),{ref:this.storeItemsContainerReference}),children:p});return t.default.createElement("div",h,y,m)}}],a&&y(n.prototype,a),u&&y(n,u),d}(t.Component);e.default=x,S(x,"propTypes",{id:n.default.string,multiSection:n.default.bool,renderInputComponent:n.default.func,renderItemsContainer:n.default.func,items:n.default.array.isRequired,renderItem:n.default.func,renderItemData:n.default.object,renderSectionTitle:n.default.func,getSectionItems:n.default.func,containerProps:n.default.object,inputProps:n.default.object,itemProps:n.default.oneOfType([n.default.object,n.default.func]),highlightedSectionIndex:n.default.number,highlightedItemIndex:n.default.number,theme:n.default.oneOfType([n.default.object,n.default.array])}),S(x,"defaultProps",{id:"1",multiSection:!1,renderInputComponent:function(e){return t.default.createElement("input",e)},renderItemsContainer:function(e){var n=e.containerProps,i=e.children;return t.default.createElement("div",n,i)},renderItem:function(){throw new Error("`renderItem` must be provided")},renderItemData:w,renderSectionTitle:function(){throw new Error("`renderSectionTitle` must be provided")},getSectionItems:function(){throw new Error("`getSectionItems` must be provided")},containerProps:w,inputProps:w,itemProps:w,highlightedSectionIndex:null,highlightedItemIndex:null,theme:{container:"react-autowhatever__container",containerOpen:"react-autowhatever__container--open",input:"react-autowhatever__input",inputOpen:"react-autowhatever__input--open",inputFocused:"react-autowhatever__input--focused",itemsContainer:"react-autowhatever__items-container",itemsContainerOpen:"react-autowhatever__items-container--open",itemsList:"react-autowhatever__items-list",item:"react-autowhatever__item",itemFirst:"react-autowhatever__item--first",itemHighlighted:"react-autowhatever__item--highlighted",sectionContainer:"react-autowhatever__section-container",sectionContainerFirst:"react-autowhatever__section-container--first",sectionTitle:"react-autowhatever__section-title"}})}(k)),k}var Y,$,X,J,G={};function ee(){return $||($=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==u(e)&&"function"!=typeof e)return{default:e};var t=a();if(t&&t.has(e))return t.get(e);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var r=i?Object.getOwnPropertyDescriptor(e,o):null;r&&(r.get||r.set)?Object.defineProperty(n,o,r):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(f.default),n=s(d.default),i=s(x?w:(x=1,w=function(e,t){if(e===t)return!0;if(!e||!t)return!1;var n=e.length;if(t.length!==n)return!1;for(var i=0;i<n;i++)if(e[i]!==t[i])return!1;return!0})),o=s(Q()),r=(Y||(Y=1,Object.defineProperty(G,"__esModule",{value:!0}),G.mapToAutowhateverTheme=G.defaultTheme=void 0,G.defaultTheme={container:"react-autosuggest__container",containerOpen:"react-autosuggest__container--open",input:"react-autosuggest__input",inputOpen:"react-autosuggest__input--open",inputFocused:"react-autosuggest__input--focused",suggestionsContainer:"react-autosuggest__suggestions-container",suggestionsContainerOpen:"react-autosuggest__suggestions-container--open",suggestionsList:"react-autosuggest__suggestions-list",suggestion:"react-autosuggest__suggestion",suggestionFirst:"react-autosuggest__suggestion--first",suggestionHighlighted:"react-autosuggest__suggestion--highlighted",sectionContainer:"react-autosuggest__section-container",sectionContainerFirst:"react-autosuggest__section-container--first",sectionTitle:"react-autosuggest__section-title"},G.mapToAutowhateverTheme=function(e){var t={};for(var n in e)switch(n){case"suggestionsContainer":t.itemsContainer=e[n];break;case"suggestionsContainerOpen":t.itemsContainerOpen=e[n];break;case"suggestion":t.item=e[n];break;case"suggestionFirst":t.itemFirst=e[n];break;case"suggestionHighlighted":t.itemHighlighted=e[n];break;case"suggestionsList":t.itemsList=e[n];break;default:t[n]=e[n]}return t}),G);function s(e){return e&&e.__esModule?e:{default:e}}function a(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return a=function(){return e},e}function u(e){return u="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},u(e)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){v(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function g(e){return function(){var t,n=y(e);if(function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()){var i=y(this).constructor;t=Reflect.construct(n,arguments,i)}else t=n.apply(this,arguments);return function(e,t){if(t&&("object"===u(t)||"function"==typeof t))return t;return h(e)}(this,t)}}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function y(e){return y=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},y(e)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var b=function(){return!0},_="suggestions-revealed",S="input-focused",O="input-changed",P="escape-pressed",I=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&m(e,t)}(l,e);var n,s,a,u=g(l);function l(e){var t,n=e.alwaysRenderSuggestions;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),v(h(t=u.call(this)),"onDocumentMouseDown",(function(e){t.justClickedOnSuggestionsContainer=!1;for(var n=e.detail&&e.detail.target||e.target;null!==n&&n!==document;){if(n.getAttribute&&null!==n.getAttribute("data-suggestion-index"))return;if(n===t.suggestionsContainer)return void(t.justClickedOnSuggestionsContainer=!0);n=n.parentNode}})),v(h(t),"storeAutowhateverRef",(function(e){null!==e&&(t.autowhatever=e)})),v(h(t),"onSuggestionMouseEnter",(function(e,n){var i=n.sectionIndex,o=n.itemIndex;t.updateHighlightedSuggestion(i,o),e.target===t.pressedSuggestion&&(t.justSelectedSuggestion=!0),t.justMouseEntered=!0,setTimeout((function(){t.justMouseEntered=!1}))})),v(h(t),"highlightFirstSuggestion",(function(){t.updateHighlightedSuggestion(t.props.multiSection?0:null,0)})),v(h(t),"onDocumentMouseUp",(function(){t.pressedSuggestion&&!t.justSelectedSuggestion&&t.input.focus(),t.pressedSuggestion=null})),v(h(t),"onSuggestionMouseDown",(function(e){t.justSelectedSuggestion||(t.justSelectedSuggestion=!0,t.pressedSuggestion=e.target)})),v(h(t),"onSuggestionsClearRequested",(function(){var e=t.props.onSuggestionsClearRequested;e&&e()})),v(h(t),"onSuggestionSelected",(function(e,n){var i=t.props,o=i.alwaysRenderSuggestions,r=i.onSuggestionSelected,s=i.onSuggestionsFetchRequested;r&&r(e,n);var a=t.props.shouldKeepSuggestionsOnSelect(n.suggestion);o||a?s({value:n.suggestionValue,reason:"suggestion-selected"}):t.onSuggestionsClearRequested(),t.resetHighlightedSuggestion()})),v(h(t),"onSuggestionClick",(function(e){var n=t.props,i=n.alwaysRenderSuggestions,o=n.focusInputOnSuggestionClick,r=t.getSuggestionIndices(t.findSuggestionElement(e.target)),s=r.sectionIndex,a=r.suggestionIndex,u=t.getSuggestion(s,a),l=t.props.getSuggestionValue(u);t.maybeCallOnChange(e,l,"click"),t.onSuggestionSelected(e,{suggestion:u,suggestionValue:l,suggestionIndex:a,sectionIndex:s,method:"click"});var c=t.props.shouldKeepSuggestionsOnSelect(u);i||c||t.closeSuggestions(),!0===o?t.input.focus():t.onBlur(),setTimeout((function(){t.justSelectedSuggestion=!1}))})),v(h(t),"onBlur",(function(){var e=t.props,n=e.inputProps,i=e.shouldRenderSuggestions,o=n.value,r=n.onBlur,s=t.getHighlightedSuggestion(),a=i(o,"input-blurred");t.setState({isFocused:!1,highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null,isCollapsed:!a}),r&&r(t.blurEvent,{highlightedSuggestion:s})})),v(h(t),"onSuggestionMouseLeave",(function(e){t.resetHighlightedSuggestion(!1),t.justSelectedSuggestion&&e.target===t.pressedSuggestion&&(t.justSelectedSuggestion=!1)})),v(h(t),"onSuggestionTouchStart",(function(){t.justSelectedSuggestion=!0})),v(h(t),"onSuggestionTouchMove",(function(){t.justSelectedSuggestion=!1,t.pressedSuggestion=null,t.input.focus()})),v(h(t),"itemProps",(function(e){return{"data-section-index":e.sectionIndex,"data-suggestion-index":e.itemIndex,onMouseEnter:t.onSuggestionMouseEnter,onMouseLeave:t.onSuggestionMouseLeave,onMouseDown:t.onSuggestionMouseDown,onTouchStart:t.onSuggestionTouchStart,onTouchMove:t.onSuggestionTouchMove,onClick:t.onSuggestionClick}})),v(h(t),"renderSuggestionsContainer",(function(e){var n=e.containerProps,i=e.children;return(0,t.props.renderSuggestionsContainer)({containerProps:n,children:i,query:t.getQuery()})})),t.state={isFocused:!1,isCollapsed:!n,highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null},t.justPressedUpDown=!1,t.justMouseEntered=!1,t.pressedSuggestion=null,t}return n=l,s=[{key:"componentDidMount",value:function(){document.addEventListener("mousedown",this.onDocumentMouseDown),document.addEventListener("mouseup",this.onDocumentMouseUp),this.input=this.autowhatever.input,this.suggestionsContainer=this.autowhatever.itemsContainer}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){var t=0===this.state.highlightedSuggestionIndex&&this.props.highlightFirstSuggestion&&!e.highlightFirstSuggestion;(0,i.default)(e.suggestions,this.props.suggestions)?e.highlightFirstSuggestion&&e.suggestions.length>0&&!1===this.justPressedUpDown&&!1===this.justMouseEntered?this.highlightFirstSuggestion():t&&this.resetHighlightedSuggestion():this.willRenderSuggestions(e,"suggestions-updated")?(this.state.isCollapsed&&!this.justSelectedSuggestion&&this.revealSuggestions(),t&&this.resetHighlightedSuggestion()):this.resetHighlightedSuggestion()}},{key:"componentDidUpdate",value:function(e,t){var n=this.props,o=n.suggestions,r=n.onSuggestionHighlighted,s=n.highlightFirstSuggestion;if(!(0,i.default)(o,e.suggestions)&&o.length>0&&s)this.highlightFirstSuggestion();else if(r){var a=this.getHighlightedSuggestion();a!=t.highlightedSuggestion&&r({suggestion:a})}}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.onDocumentMouseDown),document.removeEventListener("mouseup",this.onDocumentMouseUp)}},{key:"updateHighlightedSuggestion",value:function(e,t,n){var i=this;this.setState((function(o){var r=o.valueBeforeUpDown;return null===t?r=null:null===r&&void 0!==n&&(r=n),{highlightedSectionIndex:e,highlightedSuggestionIndex:t,highlightedSuggestion:null===t?null:i.getSuggestion(e,t),valueBeforeUpDown:r}}))}},{key:"resetHighlightedSuggestion",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.setState((function(t){var n=t.valueBeforeUpDown;return{highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:e?null:n}}))}},{key:"revealSuggestions",value:function(){this.setState({isCollapsed:!1})}},{key:"closeSuggestions",value:function(){this.setState({highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null,isCollapsed:!0})}},{key:"getSuggestion",value:function(e,t){var n=this.props,i=n.suggestions,o=n.multiSection,r=n.getSectionSuggestions;return o?r(i[e])[t]:i[t]}},{key:"getHighlightedSuggestion",value:function(){var e=this.state,t=e.highlightedSectionIndex,n=e.highlightedSuggestionIndex;return null===n?null:this.getSuggestion(t,n)}},{key:"getSuggestionValueByIndex",value:function(e,t){return(0,this.props.getSuggestionValue)(this.getSuggestion(e,t))}},{key:"getSuggestionIndices",value:function(e){var t=e.getAttribute("data-section-index"),n=e.getAttribute("data-suggestion-index");return{sectionIndex:"string"==typeof t?parseInt(t,10):null,suggestionIndex:parseInt(n,10)}}},{key:"findSuggestionElement",value:function(e){var t=e;do{if(t.getAttribute&&null!==t.getAttribute("data-suggestion-index"))return t;t=t.parentNode}while(null!==t);throw console.error("Clicked element:",e),new Error("Couldn't find suggestion element")}},{key:"maybeCallOnChange",value:function(e,t,n){var i=this.props.inputProps,o=i.value,r=i.onChange;t!==o&&r(e,{newValue:t,method:n})}},{key:"willRenderSuggestions",value:function(e,t){var n=e.suggestions,i=e.inputProps,o=e.shouldRenderSuggestions,r=i.value;return n.length>0&&o(r,t)}},{key:"getQuery",value:function(){var e=this.props.inputProps.value,t=this.state.valueBeforeUpDown;return(null===t?e:t).trim()}},{key:"render",value:function(){var e=this,n=this.props,i=n.suggestions,s=n.renderInputComponent,a=n.onSuggestionsFetchRequested,u=n.renderSuggestion,l=n.inputProps,p=n.multiSection,d=n.renderSectionTitle,f=n.id,g=n.getSectionSuggestions,h=n.theme,y=n.getSuggestionValue,m=n.alwaysRenderSuggestions,v=n.highlightFirstSuggestion,w=n.containerProps,x=this.state,I=x.isFocused,k=x.isCollapsed,j=x.highlightedSectionIndex,C=x.highlightedSuggestionIndex,E=x.valueBeforeUpDown,R=m?b:this.props.shouldRenderSuggestions,M=l.value,D=l.onFocus,T=l.onKeyDown,A=this.willRenderSuggestions(this.props,"render"),F=m||I&&!k&&A,N=F?i:[],q=c({},l,{onFocus:function(t){if(!e.justSelectedSuggestion&&!e.justClickedOnSuggestionsContainer){var n=R(M,S);e.setState({isFocused:!0,isCollapsed:!n}),D&&D(t),n&&a({value:M,reason:S})}},onBlur:function(t){e.justClickedOnSuggestionsContainer?e.input.focus():(e.blurEvent=t,e.justSelectedSuggestion||(e.onBlur(),e.onSuggestionsClearRequested()))},onChange:function(t){var n=t.target.value,i=R(n,O);e.maybeCallOnChange(t,n,"type"),e.suggestionsContainer&&(e.suggestionsContainer.scrollTop=0),e.setState(c({},v?{}:{highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null},{valueBeforeUpDown:null,isCollapsed:!i})),i?a({value:n,reason:O}):e.onSuggestionsClearRequested()},onKeyDown:function(t,n){var o=t.keyCode;switch(o){case 40:case 38:if(k)R(M,_)&&(a({value:M,reason:_}),e.revealSuggestions(),t.preventDefault());else if(i.length>0){var r,s=n.newHighlightedSectionIndex,u=n.newHighlightedItemIndex;r=null===u?null===E?M:E:e.getSuggestionValueByIndex(s,u),e.updateHighlightedSuggestion(s,u,M),e.maybeCallOnChange(t,r,40===o?"down":"up"),t.preventDefault()}e.justPressedUpDown=!0,setTimeout((function(){e.justPressedUpDown=!1}));break;case 13:if(229===t.keyCode)break;var l=e.getHighlightedSuggestion();if(F&&!m&&e.closeSuggestions(),null!=l){t.preventDefault();var c=y(l);e.maybeCallOnChange(t,c,"enter"),e.onSuggestionSelected(t,{suggestion:l,suggestionValue:c,suggestionIndex:C,sectionIndex:j,method:"enter"}),e.justSelectedSuggestion=!0,setTimeout((function(){e.justSelectedSuggestion=!1}))}break;case 27:F&&t.preventDefault();var p=F&&!m;null===E?p||(e.maybeCallOnChange(t,"","escape"),R("",P)?a({value:"",reason:P}):e.onSuggestionsClearRequested()):e.maybeCallOnChange(t,E,"escape"),p?(e.onSuggestionsClearRequested(),e.closeSuggestions()):e.resetHighlightedSuggestion()}T&&T(t)}}),V={query:this.getQuery()};return t.default.createElement(o.default,{multiSection:p,items:N,renderInputComponent:s,renderItemsContainer:this.renderSuggestionsContainer,renderItem:u,renderItemData:V,renderSectionTitle:d,getSectionItems:g,highlightedSectionIndex:j,highlightedItemIndex:C,containerProps:w,inputProps:q,itemProps:this.itemProps,theme:(0,r.mapToAutowhateverTheme)(h),id:f,ref:this.storeAutowhateverRef})}}],s&&p(n.prototype,s),a&&p(n,a),l}(t.Component);e.default=I,v(I,"propTypes",{suggestions:n.default.array.isRequired,onSuggestionsFetchRequested:function(e,t){var n=e[t];if("function"!=typeof n)throw new Error("'onSuggestionsFetchRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsFetchRequestedProp")},onSuggestionsClearRequested:function(e,t){var n=e[t];if(!1===e.alwaysRenderSuggestions&&"function"!=typeof n)throw new Error("'onSuggestionsClearRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsClearRequestedProp")},shouldKeepSuggestionsOnSelect:n.default.func,onSuggestionSelected:n.default.func,onSuggestionHighlighted:n.default.func,renderInputComponent:n.default.func,renderSuggestionsContainer:n.default.func,getSuggestionValue:n.default.func.isRequired,renderSuggestion:n.default.func.isRequired,inputProps:function(e,t){var n=e[t];if(!n)throw new Error("'inputProps' must be passed.");if(!Object.prototype.hasOwnProperty.call(n,"value"))throw new Error("'inputProps' must have 'value'.");if(!Object.prototype.hasOwnProperty.call(n,"onChange"))throw new Error("'inputProps' must have 'onChange'.")},shouldRenderSuggestions:n.default.func,alwaysRenderSuggestions:n.default.bool,multiSection:n.default.bool,renderSectionTitle:function(e,t){var n=e[t];if(!0===e.multiSection&&"function"!=typeof n)throw new Error("'renderSectionTitle' must be implemented. See: https://github.com/moroshko/react-autosuggest#renderSectionTitleProp")},getSectionSuggestions:function(e,t){var n=e[t];if(!0===e.multiSection&&"function"!=typeof n)throw new Error("'getSectionSuggestions' must be implemented. See: https://github.com/moroshko/react-autosuggest#getSectionSuggestionsProp")},focusInputOnSuggestionClick:n.default.bool,highlightFirstSuggestion:n.default.bool,theme:n.default.object,id:n.default.string,containerProps:n.default.object}),v(I,"defaultProps",{renderSuggestionsContainer:function(e){var n=e.containerProps,i=e.children;return t.default.createElement("div",n,i)},shouldRenderSuggestions:function(e){return e.trim().length>0},alwaysRenderSuggestions:!1,multiSection:!1,shouldKeepSuggestionsOnSelect:function(){return!1},focusInputOnSuggestionClick:!0,highlightFirstSuggestion:!1,theme:r.defaultTheme,id:"1",containerProps:{}})}(O)),O}var te=S(J?X:(J=1,X=ee().default));function ne(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===n&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var ie={"combobox-container":"select_combobox-container__0lRpm","left-column":"select_left-column__cSrMR","combobox-label":"select_combobox-label__F9Ayd",container:"select_container__yrA-N",suggestion:"select_suggestion__b05iD",suggestionHighlighted:"select_suggestionHighlighted__ZFPWo",suggestionsContainerOpen:"select_suggestionsContainerOpen__9wcJ5",input:"select_input__pK5vk"};ne(".select_combobox-container__0lRpm {\n background-color: #fff;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 50px;\n justify-content: space-between;\n flex-grow: 1; }\n .select_combobox-container__0lRpm:focus-within {\n border-color: #007ac9; }\n .select_combobox-container__0lRpm .select_left-column__cSrMR {\n display: flex;\n flex-direction: column;\n width: 100%; }\n\n.select_combobox-label__F9Ayd {\n font-size: 12px;\n line-height: 20px;\n color: #666;\n letter-spacing: -0.48px;\n margin-left: 12px;\n margin-top: 4px; }\n\n.select_container__yrA-N {\n position: relative; }\n .select_container__yrA-N .select_suggestion__b05iD {\n font-size: 15px;\n line-height: 49px;\n height: 50px;\n padding: 0 0 0 12px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500; }\n .select_container__yrA-N .select_suggestionHighlighted__ZFPWo {\n font-size: 15px;\n font-weight: 500;\n background: #f2f5f7; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 {\n position: absolute;\n background-color: #fff;\n z-index: 20;\n max-height: 250px;\n overflow-x: hidden;\n overflow-y: scroll;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid;\n top: 35px;\n width: calc(100% + 45px); }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 ul {\n padding: 0;\n margin: 0; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 li:not(:last-child) {\n border-bottom: 1px solid #ddd; }\n .select_container__yrA-N .select_input__pK5vk {\n -webkit-appearance: none;\n appearance: none;\n margin: -4px 0 0 0;\n padding-left: 12px;\n border: none;\n height: 26px;\n background: #fff;\n font-weight: 500;\n box-shadow: none;\n font-size: 15px;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.6px;\n color: #333; }\n .select_container__yrA-N .select_input__pK5vk:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n .select_container__yrA-N .select_input__pK5vk:read-only {\n cursor: pointer;\n background: #fff; }\n");const oe=["ref"],re=({value:e,getDisplay:t,options:n,onSlackTimeSelected:o,viaPointIndex:r,id:s,label:a,icon:u})=>{const[l,c]=i.useState(t(e)),[p,d]=i.useState(!1);i.useEffect((()=>c(t(e))),[e]);const g=i.useRef(null),h=Math.floor(e/600);i.useLayoutEffect((()=>{p&&g.current&&(g.current.scrollTop=50*h)}),[e,p]);const y=`${s}-input`,m=`${s}-label`;return f.default.createElement("label",{className:ie["combobox-container"],htmlFor:y},f.default.createElement("span",{className:ie["left-column"]},f.default.createElement("span",{className:ie["combobox-label"],id:m},a),f.default.createElement(te,{id:s,suggestions:n,getSuggestionValue:e=>e.value,renderSuggestion:e=>e.displayName,onSuggestionsFetchRequested:()=>null,shouldRenderSuggestions:()=>!0,focusInputOnSuggestionClick:!1,onSuggestionsClearRequested:()=>null,inputProps:{value:l,onChange:(t,{newValue:n,method:i})=>{switch(i){case"enter":case"click":o(n,r);break;case"escape":c(e)}},onFocus:()=>{d(!0)},onBlur:()=>{d(!1)},id:y,"aria-labelledby":m,"aria-autocomplete":"none",readOnly:!0},renderSuggestionsContainer:({containerProps:e,children:t})=>{const{ref:n}=e,i=_(e,oe);return f.default.createElement("div",Object.assign({tabIndex:"-1"},i,{ref:e=>{e&&(g.current=e,n(e))}}),t)},theme:ie})),u)};"production"!==process.env.NODE_ENV&&(re.propTypes={value:d.default.number.isRequired,onSlackTimeSelected:d.default.func.isRequired,getDisplay:d.default.func.isRequired,options:d.default.arrayOf(d.default.shape({displayName:d.default.string.isRequired,value:d.default.number.isRequired}).isRequired).isRequired,id:d.default.string.isRequired,label:d.default.node.isRequired,icon:d.default.node.isRequired,viaPointIndex:d.default.number.isRequired});const se=l.createInstance({fallbackLng:"fi",resources:{de:{translation:{"add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Setze Umsteigezeit für Zwischenziel {{index}}","add-via-duration-button-label-close":"Schließe Umsteigezeit-Auswahl für Zwischenziel {{index}}","add-via-duration-button-label-open":"Öffne Umsteigezeit-Auswahl für Zwischenziel {{index}}","minute-short":"min","remove-via-button-label":"Entferne Zwischenziel {{index}}","swap-order-button-label":"Tausche Start mit Ziel","via-point":"Zwischenziel","via-point-index":"Zwischenziel {{index}}","viapoint-slack-amount":"Umsteigezeit"}},en:{translation:{"add-via-button-label":"Add via point","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}","minute-short":"min","remove-via-button-label":"Remove via point {{index}}","swap-order-button-label":"Reverse origin and destination","via-point":"Via point","via-point-index":"Via point {{index}}","viapoint-slack-amount":"Stop duration"}},fi:{translation:{"add-via-button-label":"Lisää välipiste","add-via-duration-button-label":"Aseta välipisteelle {{index}} pysähdyksen kesto","add-via-duration-button-label-close":"Avaa välipisteen {{index}} pysähdyksen kesto valitsin","add-via-duration-button-label-open":"Sulje välipisteen {{index}} pysähdyksen kesto valitsin","minute-short":"min","remove-via-button-label":"Poista välipiste {{index}}","swap-order-button-label":"Käännä reitin suunta vastakkaiseksi","via-point":"Välipiste","via-point-index":"Välipiste {{index}}","viapoint-slack-amount":"Pysähdyksen kesto"}},pl:{translation:{"add-via-button-label":"Dodaj punkt pośredni","add-via-duration-button-label":"Wybierz czas postoju dla punktu {{index}}","add-via-duration-button-label-close":"Zamknij wybornik czasu postoju w punkcie {{index}}","add-via-duration-button-label-open":"Otwórz wybornik czasu postoju w punkcie {{index}}","minute-short":"min.","remove-via-button-label":"Usuń punkt pośredni {{index}}","swap-order-button-label":"Odwróć początek i cel","via-point":"Punkt pośredni","via-point-index":"Punkt pośredni {{index}}","viapoint-slack-amount":"Czas postoju"}},sv:{translation:{"add-via-button-label":"Lägg till viapunkt","add-via-duration-button-label":"Ställ in varaktighet för viapunkten {{index}}","add-via-duration-button-label-close":"Stäng väljaren för varaktighet vid via-punkten {{index}}","add-via-duration-button-label-open":"Öppna väljaren för varaktighet vid via-punkten {{index}}","minute-short":"min","remove-via-button-label":"Ta bort viapunkt {{index}}","swap-order-button-label":"Sväng ruttens riktning till den motsatta","via-point":"Via punkt","via-point-index":"Via punkt {{index}}","viapoint-slack-amount":"Stoppets varaktighet"}}},defaultNS:"translation",react:{useSuspense:!0}});se.init();var ae={"autosuggest-panel":"styles_autosuggest-panel__meNwd","autosuggest-searchpanel-text":"styles_autosuggest-searchpanel-text__-VQTg","origin-input-container":"styles_origin-input-container__p4Qik","destination-input-container":"styles_destination-input-container__jBY4I",row:"styles_row__1GhCD","viapoints-container":"styles_viapoints-container__FYp7K","viapoint-container":"styles_viapoint-container__8yh1M","light-gray-background":"styles_light-gray-background__4fyZs","viapoint-before":"styles_viapoint-before__t4saF","viapoint-input-container":"styles_viapoint-input-container__uZx95","viapoint-1":"styles_viapoint-1__8Mna8",viapoint:"styles_viapoint__vUO9L","viapoint-2":"styles_viapoint-2__-OoUa","viapoint-3":"styles_viapoint-3__vvivE","viapoint-4":"styles_viapoint-4__jS9k1","viapoint-5":"styles_viapoint-5__J4V5N","viapoint-slack-time":"styles_viapoint-slack-time__Xpo0G","select-wrapper":"styles_select-wrapper__1usZw","via-point-button-container":"styles_via-point-button-container__cI2JI","input-viapoint-slack-container":"styles_input-viapoint-slack-container__TNgVy","itinerary-search-control":"styles_itinerary-search-control__cEL1X",opposite:"styles_opposite__zQQhd","add-via-point":"styles_add-via-point__E-gGB","add-via-point-slack":"styles_add-via-point-slack__GKjFf","remove-via-point":"styles_remove-via-point__e9DMQ","combobox-icon":"styles_combobox-icon__d3k1e","time-input-icon":"styles_time-input-icon__M8dmw","rectangle-container":"styles_rectangle-container__AdbAA",rectangle:"styles_rectangle__1IO7E","search-panel-whitespace":"styles_search-panel-whitespace__Luhwx"};ne(".styles_autosuggest-panel__meNwd {\n width: 100%; }\n\n.styles_autosuggest-searchpanel-text__-VQTg {\n font-size: 24px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.8px;\n color: #333;\n line-height: 1;\n margin-bottom: 17px;\n margin-top: unset; }\n @media screen and (min-width: 768px) {\n .styles_autosuggest-searchpanel-text__-VQTg {\n letter-spacing: -0.8px;\n line-height: 27px;\n margin-bottom: 21px; } }\n\n.styles_origin-input-container__p4Qik,\n.styles_destination-input-container__jBY4I {\n display: flex;\n flex: 1 0 100%; }\n .styles_origin-input-container__p4Qik input[type='text'],\n .styles_destination-input-container__jBY4I input[type='text'] {\n margin: 0; }\n\n.styles_row__1GhCD {\n display: flex;\n flex-direction: row; }\n\n.styles_viapoints-container__FYp7K {\n display: flex;\n flex-direction: column; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M {\n display: flex;\n flex: 1 0 100%;\n min-height: 50px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:first-child {\n margin-top: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:not(:first-child) {\n margin-top: 3px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:last-child {\n margin-bottom: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs {\n display: flex;\n padding: 3px 0;\n flex-direction: column;\n background: #f2f5f7;\n border-radius: 5px;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF {\n display: flex;\n min-width: 27px;\n justify-content: center;\n align-items: center; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF svg {\n fill: #888;\n height: 20px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 {\n display: flex;\n align-items: center;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 input[type='text'] {\n margin: 0; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-1__8Mna8 > div.styles_viapoint__vUO9L {\n z-index: 15; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-2__-OoUa > div.styles_viapoint__vUO9L {\n z-index: 14; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-3__vvivE > div.styles_viapoint__vUO9L {\n z-index: 13; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-4__jS9k1 > div.styles_viapoint__vUO9L {\n z-index: 12; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-5__J4V5N > div.styles_viapoint__vUO9L {\n z-index: 11; }\n\n.styles_viapoint-slack-time__Xpo0G {\n font-size: 13px;\n font-weight: normal;\n letter-spacing: -0.36px;\n color: #333;\n padding-left: 27px;\n padding-top: 12px;\n padding-bottom: 10px; }\n\n.styles_select-wrapper__1usZw {\n display: flex;\n height: 50px;\n margin-top: 9px;\n padding-left: 27px;\n padding-right: 47px; }\n\n.styles_via-point-button-container__cI2JI {\n display: flex; }\n .styles_via-point-button-container__cI2JI > div:nth-child(1) {\n order: 1;\n border-left: none; }\n .styles_via-point-button-container__cI2JI > div:nth-child(2) {\n order: 2;\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n\n.styles_input-viapoint-slack-container__TNgVy {\n display: flex;\n flex-direction: column; }\n\n.styles_itinerary-search-control__cEL1X {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n max-height: 50px;\n min-width: var(--width); }\n .styles_itinerary-search-control__cEL1X + .styles_itinerary-search-control__cEL1X {\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd svg {\n width: 19px;\n height: 17px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB svg {\n width: 20px;\n height: 22px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 47px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf svg {\n width: 18px;\n height: 19px; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n max-height: 44px;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ svg {\n width: 14px;\n height: 14px; }\n\n.styles_combobox-icon__d3k1e {\n color: var(--color);\n border-left: solid #888 1px;\n height: 35px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw {\n padding: 9px 13px 0 13px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw svg {\n width: 18px;\n height: 19px; }\n\n.styles_rectangle-container__AdbAA {\n display: block;\n position: relative;\n height: 9px;\n z-index: 19; }\n .styles_rectangle-container__AdbAA .styles_rectangle__1IO7E {\n position: absolute;\n width: 4px;\n height: 21px;\n border-radius: 2px;\n background-color: #ddd;\n margin-left: 25px;\n margin-top: -5px; }\n\n.styles_search-panel-whitespace__Luhwx {\n min-width: 40px; }\n");const ue=["children","className","enabled","onClick","onKeyPress","wide"],le=()=>({}),ce=e=>{if(void 0===e||y.default(e))return!0;const t=Object.keys(e);return 1===t.length||2===t.length&&t.includes("locationSlack")},pe=e=>{let{children:t,className:n,enabled:i,onClick:o,onKeyPress:r,wide:s}=e,a=_(e,ue);return f.default.createElement("div",{className:ae["itinerary-search-control"],style:{"--width":s?"47px":"40px"}},o&&i&&f.default.createElement("div",Object.assign({},a,{className:n,onClick:o,onKeyPress:r,role:"button",tabIndex:"0"}),t))},de=(e,t,n=!1)=>{const i=e.indexOf(t);return i>-1&&e.splice(i,1),n?e.map((e=>e>t?e-1:e)):e},fe=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},ge=e=>e&&e.address||e&&e.gps&&e.ready&&"Nykyinen sijainti"||"",he=e=>e&&!0===e.gps?"position":"location";"production"!==process.env.NODE_ENV&&(pe.propTypes={children:d.default.node,className:d.default.string.isRequired,enabled:d.default.bool.isRequired,onClick:d.default.func.isRequired,onKeyPress:d.default.func.isRequired,wide:d.default.bool}),pe.defaultProps={children:void 0,wide:!1};const ye="production"!==process.env.NODE_ENV?d.default.shape({address:d.default.string,lat:d.default.number,lon:d.default.number,locationSlack:d.default.number}):{};class me extends f.default.Component{constructor(e){super(e),b(this,"storeReference",(e=>{this.setState((t=>({refs:[...t.refs,e]})))})),b(this,"handleFocusChange",(()=>{const{destination:e}=this.props;e&&e.lat||this.state.refs[1].focus()})),b(this,"updateViaPoints",(e=>{0!==e.length?this.props.updateViaPoints(e.filter((e=>!ce(e)))):this.props.updateViaPoints([])})),b(this,"handleToggleViaPointSlackClick",(e=>{const{activeSlackInputs:t}=this.state;this.setState({activeSlackInputs:t.includes(e)?de(t,e):t.concat([e])})})),b(this,"handleViaPointSlackTimeSelected",((e,t)=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"EditViaPointStopDuration",category:"ItinerarySettings",name:e/60});const{viaPoints:n}=this.props;n[t].locationSlack=Number.parseInt(e,10),this.updateViaPoints(n)})),b(this,"handleViaPointLocationSelected",((e,t)=>{this.props.handleViaPointLocationSelected(e,t)})),b(this,"handleRemoveViaPointClick",(e=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"RemoveJourneyViaPoint",category:"ItinerarySettings",name:null});const{activeSlackInputs:t}=this.state,{viaPoints:n}=this.props;n.splice(e,1),this.setState({activeSlackInputs:de(t,e,!0)},(()=>this.updateViaPoints(n)))})),b(this,"handleAddViaPointClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"AddJourneyViaPoint",category:"ItinerarySettings",name:"QuickSettingsButton"});const{viaPoints:e}=this.props;e.push({}),this.setState(this.state)})),b(this,"handleSwapOrderClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"SwitchJourneyStartAndEndPointOrder",category:"ItinerarySettings",name:null});const{viaPoints:e}=this.props;e.reverse(),this.props.swapOrder()})),b(this,"getSlackDisplay",(e=>`${e/60} ${this.props.t("minute-short",{lng:this.props.lang})}`)),this.state={activeSlackInputs:[],refs:[]}}render(){const{origin:e,searchPanelText:t,searchContext:n,disableAutoFocus:i,viaPoints:o,originMobileLabel:s,destinationMobileLabel:a,fontWeights:u,onFocusChange:l,showSwapControl:c,showViapointControl:d,t:y,lang:m}=this.props,{primary:v}=this.props.colors,{activeSlackInputs:b}=this.state,_=(e=>{const t=[];for(let n=0;n<=9;n++){const i=10*n;t.push({displayName:`${i} ${e("minute-short")}`,value:60*i})}return t})(y),S=(e,t=0)=>e&&e.locationSlack||t,w=e=>b.includes(e);return f.default.createElement("div",{className:p.default(ae["autosuggest-panel"],this.props.isMobile&&"small"),style:{"--color":v,"--font-weight-medium":u.medium}}," ",t?f.default.createElement("div",null,f.default.createElement("h1",{className:ae["autosuggest-searchpanel-text"]}," ",t)):null,f.default.createElement("div",{className:ae["origin-input-container"]},f.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"origin",autoFocus:!0!==i&&(!this.props.isMobile&&!e.lat),storeRef:this.storeReference,refPoint:this.props.refPoint,className:he(e),placeholder:this.props.originPlaceHolder,value:ge(e),searchContext:n,getAutoSuggestIcons:this.props.getAutoSuggestIcons,onSelect:this.props.onSelect,onClear:this.props.onClear,focusChange:l||this.handleFocusChange,lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,colors:this.props.colors,mobileLabel:s,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(c||d)&&f.default.createElement(pe,{className:ae.opposite,enabled:c,onClick:()=>this.handleSwapOrderClick(),onKeyPress:e=>fe(e)&&this.handleSwapOrderClick(),"aria-label":y("swap-order-button-label",{lng:m})},f.default.createElement(h.default,{img:"opposite",color:v}))),0===o.length&&f.default.createElement("div",{className:ae["rectangle-container"]},f.default.createElement("div",{className:ae.rectangle})),f.default.createElement(r.ReactSortable,{className:ae["viapoints-container"],list:o,handle:`.${ae["viapoint-before"]}`,animation:200,disabled:o.length<=1,setList:e=>{const t=e.filter((e=>!ce(e)));t.length>0&&this.props.updateViaPoints(t)}},o.map(((e,t)=>f.default.createElement("div",{className:p.default(ae["viapoint-container"]),key:`viapoint-${t}`},f.default.createElement("div",{className:ae["light-gray-background"]},f.default.createElement("div",{className:ae.row},f.default.createElement("div",{className:ae["viapoint-before"],style:o.length>1?{cursor:"move"}:{}},o.length>1&&f.default.createElement(h.default,{img:"ellipsis",rotate:90,color:v})),f.default.createElement("div",{className:`${ae["viapoint-input-container"]} ${ae[`viapoint-${t+1}`]}`},f.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"via-point",ariaLabel:y("via-point-index",{index:t+1,lng:m}),autoFocus:!0!==i&&!this.props.isMobile,placeholder:"via-point",className:"viapoint",searchContext:n,refPoint:this.props.refPoint,value:e&&e.address||"",onSelect:this.props.onSelect,onClear:this.props.onClear,handleViaPoints:e=>this.handleViaPointLocationSelected(e,t),lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,getAutoSuggestIcons:this.props.getAutoSuggestIcons,isMobile:this.props.isMobile,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,colors:this.props.colors,showScroll:this.props.showScroll})),this.props.showSlackControl&&f.default.createElement(pe,{className:ae["add-via-point-slack"],enabled:this.props.showViapointControl,onClick:()=>this.handleToggleViaPointSlackClick(t),onKeyPress:e=>fe(e)&&this.handleToggleViaPointSlackClick(t),"aria-label":y(w(t)?"add-via-duration-button-label-open":"add-via-duration-button-label-close",{index:t+1,lng:m}),wide:!0},f.default.createElement(h.default,{img:"time",color:v}))),!w(t)&&o[t]&&o[t].locationSlack>0&&f.default.createElement("span",{className:ae["viapoint-slack-time"]},`${y("viapoint-slack-amount",{lng:m})}: ${this.getSlackDisplay(o[t].locationSlack)}`),f.default.createElement("div",{className:p.default(ae["input-viapoint-slack-container"],!w(t)&&"collapsed")},f.default.createElement("div",{className:ae["select-wrapper"]},f.default.createElement(re,{id:`viapoint-slack-${t}`,label:y("viapoint-slack-amount",{lng:m}),options:_,value:S(o[t]),getDisplay:this.getSlackDisplay,viaPointIndex:t,icon:f.default.createElement("span",{className:`${ae["combobox-icon"]} ${ae["time-input-icon"]}`},f.default.createElement(h.default,{img:"time",color:v})),onSlackTimeSelected:this.handleViaPointSlackTimeSelected})))),f.default.createElement(pe,{className:ae["remove-via-point"],enabled:this.props.showViapointControl,onClick:()=>this.handleRemoveViaPointClick(t),onKeyPress:e=>fe(e)&&this.handleRemoveViaPointClick(t),"aria-label":y("remove-via-button-label",{index:t+1,lng:m})},f.default.createElement(h.default,{img:"trash",color:v})))))),f.default.createElement("div",{className:ae["destination-input-container"]},f.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"destination",autoFocus:!0!==i&&(!this.props.isMobile&&!Number.isNaN(e.lat)),storeRef:this.storeReference,placeholder:this.props.destinationPlaceHolder,className:he(this.props.destination),getAutoSuggestIcons:this.props.getAutoSuggestIcons,searchContext:n,onSelect:this.props.onSelect,onClear:this.props.onClear,refPoint:this.props.refPoint,value:ge(this.props.destination),lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,mobileLabel:a,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,colors:this.props.colors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(c||d)&&f.default.createElement(pe,{className:p.default(ae["add-via-point"],ae.more,o.length>4&&"collapsed"),enabled:d&&0===o.length,onClick:()=>this.handleAddViaPointClick(),onKeyPress:e=>fe(e)&&this.handleAddViaPointClick(),"aria-label":y("add-via-button-label",{lng:m})},f.default.createElement(h.default,{img:"viapoint",width:1.25,height:1.375,color:v}))))}}b(me,"defaultProps",{origin:void 0,destination:void 0,viaPoints:[],originPlaceHolder:"give-origin",destinationPlaceHolder:"give-destination",swapOrder:void 0,updateViaPoints:()=>{},searchPanelText:void 0,sources:[],targets:[],filterResults:void 0,onClear:void 0,getAutoSuggestIcons:void 0,refPoint:void 0,addAnalyticsEvent:void 0,disableAutoFocus:!1,isMobile:!1,handleViaPointLocationSelected:void 0,originMobileLabel:null,destinationMobileLabel:null,modeSet:void 0,colors:a.defaultColors,fontWeights:{medium:500},showScroll:!1,onFocusChange:void 0,isEmbedded:!1,showSwapControl:!1,showViapointControl:!1,showSlackControl:!1}),"production"!==process.env.NODE_ENV&&(me.propTypes={appElement:d.default.string.isRequired,origin:ye,destination:ye,originPlaceHolder:d.default.string,destinationPlaceHolder:d.default.string,viaPoints:d.default.arrayOf(ye),updateViaPoints:d.default.func,handleViaPointLocationSelected:d.default.func,swapOrder:d.default.func,searchPanelText:d.default.string,searchContext:d.default.shape({URL_PELIAS:d.default.string}).isRequired,onSelect:d.default.func.isRequired,onClear:d.default.func,addAnalyticsEvent:d.default.func,lang:d.default.string.isRequired,disableAutoFocus:d.default.bool,sources:d.default.arrayOf(d.default.string),targets:d.default.arrayOf(d.default.string),filterResults:d.default.func,isMobile:d.default.bool,originMobileLabel:d.default.string,destinationMobileLabel:d.default.string,refPoint:ye,modeSet:d.default.string,colors:d.default.objectOf(d.default.string),getAutoSuggestIcons:d.default.objectOf(d.default.func),fontWeights:d.default.shape({medium:d.default.number}),showScroll:d.default.bool,onFocusChange:d.default.func,isEmbedded:d.default.bool,showSwapControl:d.default.bool,showViapointControl:d.default.bool,showSlackControl:d.default.bool,t:d.default.func.isRequired});const ve=o.withTranslation()(me);e.default=e=>f.default.createElement(o.I18nextProvider,{i18n:se},f.default.createElement(ve,e)),e.getEmptyViaPointPlaceHolder=le,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3NlY3Rpb24taXRlcmF0b3IvZGlzdC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC10aGVtZWFibGUvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtdGhlbWVhYmxlL2Rpc3QvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b3N1Z2dlc3QvZGlzdC9jb21wYXJlT2JqZWN0cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvc3VnZ2VzdC9kaXN0L1NlY3Rpb25UaXRsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvc3VnZ2VzdC9kaXN0L0l0ZW0uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b3N1Z2dlc3QvZGlzdC9JdGVtTGlzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvc3VnZ2VzdC9kaXN0L0F1dG93aGF0ZXZlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvc3VnZ2VzdC9kaXN0L0F1dG9zdWdnZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3NoYWxsb3ctZXF1YWwvYXJyYXlzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWF1dG9zdWdnZXN0L2Rpc3QvdGhlbWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b3N1Z2dlc3QvZGlzdC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi9zcmMvaGVscGVycy9TZWxlY3QuanMiLCIuLi9zcmMvaGVscGVycy90cmFuc2xhdGlvbnMuanMiLCIuLi9zcmMvaGVscGVycy9pMThuLmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIi4vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qc1wiO1xuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHtcbiAgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9O1xuICB2YXIgbyxcbiAgICByLFxuICAgIGkgPSBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtcbiAgICBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pO1xuICB9XG4gIHJldHVybiBpO1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9zbGljZWRUb0FycmF5ID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkgeyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9IHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgcmV0dXJuIGFycjsgfSBlbHNlIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHsgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTsgfSBlbHNlIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH0gfTsgfSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBkYXRhID0gX3JlZi5kYXRhO1xuICB2YXIgbXVsdGlTZWN0aW9uID0gX3JlZi5tdWx0aVNlY3Rpb247XG5cbiAgZnVuY3Rpb24gbmV4dE5vbkVtcHR5U2VjdGlvbkluZGV4KHNlY3Rpb25JbmRleCkge1xuICAgIGlmIChzZWN0aW9uSW5kZXggPT09IG51bGwpIHtcbiAgICAgIHNlY3Rpb25JbmRleCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlY3Rpb25JbmRleCsrO1xuICAgIH1cblxuICAgIHdoaWxlIChzZWN0aW9uSW5kZXggPCBkYXRhLmxlbmd0aCAmJiBkYXRhW3NlY3Rpb25JbmRleF0gPT09IDApIHtcbiAgICAgIHNlY3Rpb25JbmRleCsrO1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uSW5kZXggPT09IGRhdGEubGVuZ3RoID8gbnVsbCA6IHNlY3Rpb25JbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXZOb25FbXB0eVNlY3Rpb25JbmRleChzZWN0aW9uSW5kZXgpIHtcbiAgICBpZiAoc2VjdGlvbkluZGV4ID09PSBudWxsKSB7XG4gICAgICBzZWN0aW9uSW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlY3Rpb25JbmRleC0tO1xuICAgIH1cblxuICAgIHdoaWxlIChzZWN0aW9uSW5kZXggPj0gMCAmJiBkYXRhW3NlY3Rpb25JbmRleF0gPT09IDApIHtcbiAgICAgIHNlY3Rpb25JbmRleC0tO1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uSW5kZXggPT09IC0xID8gbnVsbCA6IHNlY3Rpb25JbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHQocG9zaXRpb24pIHtcbiAgICB2YXIgX3Bvc2l0aW9uID0gX3NsaWNlZFRvQXJyYXkocG9zaXRpb24sIDIpO1xuXG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IF9wb3NpdGlvblswXTtcbiAgICB2YXIgaXRlbUluZGV4ID0gX3Bvc2l0aW9uWzFdO1xuXG5cbiAgICBpZiAobXVsdGlTZWN0aW9uKSB7XG4gICAgICBpZiAoaXRlbUluZGV4ID09PSBudWxsIHx8IGl0ZW1JbmRleCA9PT0gZGF0YVtzZWN0aW9uSW5kZXhdIC0gMSkge1xuICAgICAgICBzZWN0aW9uSW5kZXggPSBuZXh0Tm9uRW1wdHlTZWN0aW9uSW5kZXgoc2VjdGlvbkluZGV4KTtcblxuICAgICAgICBpZiAoc2VjdGlvbkluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbc2VjdGlvbkluZGV4LCAwXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtzZWN0aW9uSW5kZXgsIGl0ZW1JbmRleCArIDFdO1xuICAgIH1cblxuICAgIGlmIChkYXRhID09PSAwIHx8IGl0ZW1JbmRleCA9PT0gZGF0YSAtIDEpIHtcbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1JbmRleCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtudWxsLCAwXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW251bGwsIGl0ZW1JbmRleCArIDFdO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJldihwb3NpdGlvbikge1xuICAgIHZhciBfcG9zaXRpb24yID0gX3NsaWNlZFRvQXJyYXkocG9zaXRpb24sIDIpO1xuXG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IF9wb3NpdGlvbjJbMF07XG4gICAgdmFyIGl0ZW1JbmRleCA9IF9wb3NpdGlvbjJbMV07XG5cblxuICAgIGlmIChtdWx0aVNlY3Rpb24pIHtcbiAgICAgIGlmIChpdGVtSW5kZXggPT09IG51bGwgfHwgaXRlbUluZGV4ID09PSAwKSB7XG4gICAgICAgIHNlY3Rpb25JbmRleCA9IHByZXZOb25FbXB0eVNlY3Rpb25JbmRleChzZWN0aW9uSW5kZXgpO1xuXG4gICAgICAgIGlmIChzZWN0aW9uSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtzZWN0aW9uSW5kZXgsIGRhdGFbc2VjdGlvbkluZGV4XSAtIDFdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW3NlY3Rpb25JbmRleCwgaXRlbUluZGV4IC0gMV07XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgPT09IDAgfHwgaXRlbUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICAgIH1cblxuICAgIGlmIChpdGVtSW5kZXggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBbbnVsbCwgZGF0YSAtIDFdO1xuICAgIH1cblxuICAgIHJldHVybiBbbnVsbCwgaXRlbUluZGV4IC0gMV07XG4gIH1cblxuICBmdW5jdGlvbiBpc0xhc3QocG9zaXRpb24pIHtcbiAgICByZXR1cm4gbmV4dChwb3NpdGlvbilbMV0gPT09IG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5leHQ6IG5leHQsXG4gICAgcHJldjogcHJldixcbiAgICBpc0xhc3Q6IGlzTGFzdFxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gVG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIG93bkVudW1lcmFibGVLZXlzKG9iaikge1xuXHR2YXIga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaik7XG5cblx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopKTtcblx0fVxuXG5cdHJldHVybiBrZXlzLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG5cdFx0cmV0dXJuIHByb3BJc0VudW1lcmFibGUuY2FsbChvYmosIGtleSk7XG5cdH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIga2V5cztcblx0dmFyIHRvID0gVG9PYmplY3QodGFyZ2V0KTtcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBhcmd1bWVudHNbc107XG5cdFx0a2V5cyA9IG93bkVudW1lcmFibGVLZXlzKE9iamVjdChmcm9tKSk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRvW2tleXNbaV1dID0gZnJvbVtrZXlzW2ldXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9zbGljZWRUb0FycmF5ID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbJ3JldHVybiddKSBfaVsncmV0dXJuJ10oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9IHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgcmV0dXJuIGFycjsgfSBlbHNlIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHsgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTsgfSBlbHNlIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZScpOyB9IH07IH0pKCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxudmFyIF9vYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBfb2JqZWN0QXNzaWduMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29iamVjdEFzc2lnbik7XG5cbnZhciB0cnV0aHkgPSBmdW5jdGlvbiB0cnV0aHkoeCkge1xuICByZXR1cm4geDtcbn07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgX3JlZiA9IEFycmF5LmlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGlucHV0IDogW2lucHV0LCBudWxsXTtcblxuICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKTtcblxuICB2YXIgdGhlbWUgPSBfcmVmMlswXTtcbiAgdmFyIGNsYXNzTmFtZURlY29yYXRvciA9IF9yZWYyWzFdO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG5hbWVzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgbmFtZXNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBzdHlsZXMgPSBuYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGVtZVtuYW1lXTtcbiAgICB9KS5maWx0ZXIodHJ1dGh5KTtcblxuICAgIHJldHVybiB0eXBlb2Ygc3R5bGVzWzBdID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2xhc3NOYW1lRGVjb3JhdG9yID09PSAnZnVuY3Rpb24nID8geyBrZXk6IGtleSwgY2xhc3NOYW1lOiBjbGFzc05hbWVEZWNvcmF0b3IgPyBjbGFzc05hbWVEZWNvcmF0b3IuYXBwbHkodW5kZWZpbmVkLCBfdG9Db25zdW1hYmxlQXJyYXkoc3R5bGVzKSkgOiBzdHlsZXMuam9pbignICcpIH0gOiB7IGtleToga2V5LCBzdHlsZTogX29iamVjdEFzc2lnbjJbJ2RlZmF1bHQnXS5hcHBseSh1bmRlZmluZWQsIFt7fV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdHlsZXMpKSkgfTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBjb21wYXJlT2JqZWN0cztcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBjb21wYXJlT2JqZWN0cyhvYmpBLCBvYmpCKSB7XG4gIHZhciBrZXlzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBbXTtcblxuICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBhS2V5cyA9IE9iamVjdC5rZXlzKG9iakEpO1xuICB2YXIgYktleXMgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBrZXlzTWFwID0ge307XG4gIHZhciBpLCBsZW47XG5cbiAgZm9yIChpID0gMCwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGtleXNNYXBba2V5c1tpXV0gPSB0cnVlO1xuICB9XG5cbiAgZm9yIChpID0gMCwgbGVuID0gYUtleXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIga2V5ID0gYUtleXNbaV07XG4gICAgdmFyIGFWYWx1ZSA9IG9iakFba2V5XTtcbiAgICB2YXIgYlZhbHVlID0gb2JqQltrZXldO1xuXG4gICAgaWYgKGFWYWx1ZSA9PT0gYlZhbHVlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWtleXNNYXBba2V5XSB8fCBhVmFsdWUgPT09IG51bGwgfHwgYlZhbHVlID09PSBudWxsIHx8IF90eXBlb2YoYVZhbHVlKSAhPT0gJ29iamVjdCcgfHwgX3R5cGVvZihiVmFsdWUpICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGFWYWx1ZUtleXMgPSBPYmplY3Qua2V5cyhhVmFsdWUpO1xuICAgIHZhciBiVmFsdWVLZXlzID0gT2JqZWN0LmtleXMoYlZhbHVlKTtcblxuICAgIGlmIChhVmFsdWVLZXlzLmxlbmd0aCAhPT0gYlZhbHVlS2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIG4gPSAwLCBsZW5ndGggPSBhVmFsdWVLZXlzLmxlbmd0aDsgbiA8IGxlbmd0aDsgbisrKSB7XG4gICAgICB2YXIgYVZhbHVlS2V5ID0gYVZhbHVlS2V5c1tuXTtcblxuICAgICAgaWYgKGFWYWx1ZVthVmFsdWVLZXldICE9PSBiVmFsdWVbYVZhbHVlS2V5XSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5cbnZhciBfY29tcGFyZU9iamVjdHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBhcmVPYmplY3RzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpOyBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IHJldHVybiBjYWNoZTsgfTsgcmV0dXJuIGNhY2hlOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeyB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDsgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOyB9IGVsc2UgeyBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgU2VjdGlvblRpdGxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTZWN0aW9uVGl0bGUsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU2VjdGlvblRpdGxlKTtcblxuICBmdW5jdGlvbiBTZWN0aW9uVGl0bGUoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlY3Rpb25UaXRsZSk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU2VjdGlvblRpdGxlLCBbe1xuICAgIGtleTogXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgICAgcmV0dXJuICgwLCBfY29tcGFyZU9iamVjdHNbXCJkZWZhdWx0XCJdKShuZXh0UHJvcHMsIHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBzZWN0aW9uID0gX3RoaXMkcHJvcHMuc2VjdGlvbixcbiAgICAgICAgICByZW5kZXJTZWN0aW9uVGl0bGUgPSBfdGhpcyRwcm9wcy5yZW5kZXJTZWN0aW9uVGl0bGUsXG4gICAgICAgICAgdGhlbWUgPSBfdGhpcyRwcm9wcy50aGVtZSxcbiAgICAgICAgICBzZWN0aW9uS2V5UHJlZml4ID0gX3RoaXMkcHJvcHMuc2VjdGlvbktleVByZWZpeDtcbiAgICAgIHZhciBzZWN0aW9uVGl0bGUgPSByZW5kZXJTZWN0aW9uVGl0bGUoc2VjdGlvbik7XG5cbiAgICAgIGlmICghc2VjdGlvblRpdGxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImRpdlwiLCB0aGVtZShcIlwiLmNvbmNhdChzZWN0aW9uS2V5UHJlZml4LCBcInRpdGxlXCIpLCAnc2VjdGlvblRpdGxlJyksIHNlY3Rpb25UaXRsZSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNlY3Rpb25UaXRsZTtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gU2VjdGlvblRpdGxlO1xuXG5fZGVmaW5lUHJvcGVydHkoU2VjdGlvblRpdGxlLCBcInByb3BUeXBlc1wiLCB7XG4gIHNlY3Rpb246IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmFueS5pc1JlcXVpcmVkLFxuICByZW5kZXJTZWN0aW9uVGl0bGU6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdGhlbWU6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMuaXNSZXF1aXJlZCxcbiAgc2VjdGlvbktleVByZWZpeDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uc3RyaW5nLmlzUmVxdWlyZWRcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xuXG52YXIgX2NvbXBhcmVPYmplY3RzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wYXJlT2JqZWN0c1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDsgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTsgX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyByZXR1cm4gY2FjaGU7IH07IHJldHVybiBjYWNoZTsgfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgX3R5cGVvZihvYmopICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgeyByZXR1cm4geyBcImRlZmF1bHRcIjogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCk7IGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgeyByZXR1cm4gY2FjaGUuZ2V0KG9iaik7IH0gdmFyIG5ld09iaiA9IHt9OyB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7IGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTsgfSBlbHNlIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqW1wiZGVmYXVsdFwiXSA9IG9iajsgaWYgKGNhY2hlKSB7IGNhY2hlLnNldChvYmosIG5ld09iaik7IH0gcmV0dXJuIG5ld09iajsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbnZhciBJdGVtID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhJdGVtLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEl0ZW0pO1xuXG4gIGZ1bmN0aW9uIEl0ZW0oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEl0ZW0pO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdG9yZUl0ZW1SZWZlcmVuY2VcIiwgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtICE9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLml0ZW0gPSBpdGVtO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTW91c2VFbnRlclwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHNlY3Rpb25JbmRleCA9IF90aGlzJHByb3BzLnNlY3Rpb25JbmRleCxcbiAgICAgICAgICBpdGVtSW5kZXggPSBfdGhpcyRwcm9wcy5pdGVtSW5kZXg7XG5cbiAgICAgIF90aGlzLnByb3BzLm9uTW91c2VFbnRlcihldmVudCwge1xuICAgICAgICBzZWN0aW9uSW5kZXg6IHNlY3Rpb25JbmRleCxcbiAgICAgICAgaXRlbUluZGV4OiBpdGVtSW5kZXhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTW91c2VMZWF2ZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBzZWN0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuc2VjdGlvbkluZGV4LFxuICAgICAgICAgIGl0ZW1JbmRleCA9IF90aGlzJHByb3BzMi5pdGVtSW5kZXg7XG5cbiAgICAgIF90aGlzLnByb3BzLm9uTW91c2VMZWF2ZShldmVudCwge1xuICAgICAgICBzZWN0aW9uSW5kZXg6IHNlY3Rpb25JbmRleCxcbiAgICAgICAgaXRlbUluZGV4OiBpdGVtSW5kZXhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTW91c2VEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHNlY3Rpb25JbmRleCA9IF90aGlzJHByb3BzMy5zZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaXRlbUluZGV4ID0gX3RoaXMkcHJvcHMzLml0ZW1JbmRleDtcblxuICAgICAgX3RoaXMucHJvcHMub25Nb3VzZURvd24oZXZlbnQsIHtcbiAgICAgICAgc2VjdGlvbkluZGV4OiBzZWN0aW9uSW5kZXgsXG4gICAgICAgIGl0ZW1JbmRleDogaXRlbUluZGV4XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsaWNrXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHNlY3Rpb25JbmRleCA9IF90aGlzJHByb3BzNC5zZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaXRlbUluZGV4ID0gX3RoaXMkcHJvcHM0Lml0ZW1JbmRleDtcblxuICAgICAgX3RoaXMucHJvcHMub25DbGljayhldmVudCwge1xuICAgICAgICBzZWN0aW9uSW5kZXg6IHNlY3Rpb25JbmRleCxcbiAgICAgICAgaXRlbUluZGV4OiBpdGVtSW5kZXhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEl0ZW0sIFt7XG4gICAga2V5OiBcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb21wYXJlT2JqZWN0c1tcImRlZmF1bHRcIl0pKG5leHRQcm9wcywgdGhpcy5wcm9wcywgWydyZW5kZXJJdGVtRGF0YSddKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzSGlnaGxpZ2h0ZWQgPSBfdGhpcyRwcm9wczUuaXNIaWdobGlnaHRlZCxcbiAgICAgICAgICBpdGVtID0gX3RoaXMkcHJvcHM1Lml0ZW0sXG4gICAgICAgICAgcmVuZGVySXRlbSA9IF90aGlzJHByb3BzNS5yZW5kZXJJdGVtLFxuICAgICAgICAgIHJlbmRlckl0ZW1EYXRhID0gX3RoaXMkcHJvcHM1LnJlbmRlckl0ZW1EYXRhLFxuICAgICAgICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczUsIFtcImlzSGlnaGxpZ2h0ZWRcIiwgXCJpdGVtXCIsIFwicmVuZGVySXRlbVwiLCBcInJlbmRlckl0ZW1EYXRhXCJdKTtcblxuICAgICAgZGVsZXRlIHJlc3RQcm9wcy5zZWN0aW9uSW5kZXg7XG4gICAgICBkZWxldGUgcmVzdFByb3BzLml0ZW1JbmRleDtcblxuICAgICAgaWYgKHR5cGVvZiByZXN0UHJvcHMub25Nb3VzZUVudGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3RQcm9wcy5vbk1vdXNlRW50ZXIgPSB0aGlzLm9uTW91c2VFbnRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByZXN0UHJvcHMub25Nb3VzZUxlYXZlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3RQcm9wcy5vbk1vdXNlTGVhdmUgPSB0aGlzLm9uTW91c2VMZWF2ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByZXN0UHJvcHMub25Nb3VzZURvd24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzdFByb3BzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByZXN0UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXN0UHJvcHMub25DbGljayA9IHRoaXMub25DbGljaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJvbGU6IFwib3B0aW9uXCJcbiAgICAgIH0sIHJlc3RQcm9wcywge1xuICAgICAgICByZWY6IHRoaXMuc3RvcmVJdGVtUmVmZXJlbmNlXG4gICAgICB9KSwgcmVuZGVySXRlbShpdGVtLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgaXNIaWdobGlnaHRlZDogaXNIaWdobGlnaHRlZFxuICAgICAgfSwgcmVuZGVySXRlbURhdGEpKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEl0ZW07XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEl0ZW07XG5cbl9kZWZpbmVQcm9wZXJ0eShJdGVtLCBcInByb3BUeXBlc1wiLCB7XG4gIHNlY3Rpb25JbmRleDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0ubnVtYmVyLFxuICBpc0hpZ2hsaWdodGVkOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5ib29sLmlzUmVxdWlyZWQsXG4gIGl0ZW1JbmRleDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0ubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGl0ZW06IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmFueS5pc1JlcXVpcmVkLFxuICByZW5kZXJJdGVtOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLmlzUmVxdWlyZWQsXG4gIHJlbmRlckl0ZW1EYXRhOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcbiAgb25Nb3VzZUVudGVyOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLFxuICBvbk1vdXNlTGVhdmU6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIG9uTW91c2VEb3duOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLFxuICBvbkNsaWNrOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3JlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcblxudmFyIF9wcm9wVHlwZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcblxudmFyIF9JdGVtID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9JdGVtXCIpKTtcblxudmFyIF9jb21wYXJlT2JqZWN0cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29tcGFyZU9iamVjdHNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyBpZiAodHlwZW9mIFdlYWtNYXAgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7IHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgcmV0dXJuIGNhY2hlOyB9OyByZXR1cm4gY2FjaGU7IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBpZiAob2JqID09PSBudWxsIHx8IF90eXBlb2Yob2JqKSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHsgcmV0dXJuIHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9IHZhciBjYWNoZSA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpOyBpZiAoY2FjaGUgJiYgY2FjaGUuaGFzKG9iaikpIHsgcmV0dXJuIGNhY2hlLmdldChvYmopOyB9IHZhciBuZXdPYmogPSB7fTsgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7IHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsOyBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7IH0gZWxzZSB7IG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSB9IG5ld09ialtcImRlZmF1bHRcIl0gPSBvYmo7IGlmIChjYWNoZSkgeyBjYWNoZS5zZXQob2JqLCBuZXdPYmopOyB9IHJldHVybiBuZXdPYmo7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgSXRlbXNMaXN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhJdGVtc0xpc3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoSXRlbXNMaXN0KTtcblxuICBmdW5jdGlvbiBJdGVtc0xpc3QoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEl0ZW1zTGlzdCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0b3JlSGlnaGxpZ2h0ZWRJdGVtUmVmZXJlbmNlXCIsIGZ1bmN0aW9uIChoaWdobGlnaHRlZEl0ZW0pIHtcbiAgICAgIF90aGlzLnByb3BzLm9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlKGhpZ2hsaWdodGVkSXRlbSA9PT0gbnVsbCA/IG51bGwgOiBoaWdobGlnaHRlZEl0ZW0uaXRlbSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoSXRlbXNMaXN0LCBbe1xuICAgIGtleTogXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgICAgcmV0dXJuICgwLCBfY29tcGFyZU9iamVjdHNbXCJkZWZhdWx0XCJdKShuZXh0UHJvcHMsIHRoaXMucHJvcHMsIFsnaXRlbVByb3BzJ10pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgICBpdGVtUHJvcHMgPSBfdGhpcyRwcm9wcy5pdGVtUHJvcHMsXG4gICAgICAgICAgcmVuZGVySXRlbSA9IF90aGlzJHByb3BzLnJlbmRlckl0ZW0sXG4gICAgICAgICAgcmVuZGVySXRlbURhdGEgPSBfdGhpcyRwcm9wcy5yZW5kZXJJdGVtRGF0YSxcbiAgICAgICAgICBzZWN0aW9uSW5kZXggPSBfdGhpcyRwcm9wcy5zZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJdGVtSW5kZXggPSBfdGhpcyRwcm9wcy5oaWdobGlnaHRlZEl0ZW1JbmRleCxcbiAgICAgICAgICBnZXRJdGVtSWQgPSBfdGhpcyRwcm9wcy5nZXRJdGVtSWQsXG4gICAgICAgICAgdGhlbWUgPSBfdGhpcyRwcm9wcy50aGVtZSxcbiAgICAgICAgICBrZXlQcmVmaXggPSBfdGhpcyRwcm9wcy5rZXlQcmVmaXg7XG4gICAgICB2YXIgc2VjdGlvblByZWZpeCA9IHNlY3Rpb25JbmRleCA9PT0gbnVsbCA/IGtleVByZWZpeCA6IFwiXCIuY29uY2F0KGtleVByZWZpeCwgXCJzZWN0aW9uLVwiKS5jb25jYXQoc2VjdGlvbkluZGV4LCBcIi1cIik7XG4gICAgICB2YXIgaXNJdGVtUHJvcHNGdW5jdGlvbiA9IHR5cGVvZiBpdGVtUHJvcHMgPT09ICdmdW5jdGlvbic7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInVsXCIsIF9leHRlbmRzKHtcbiAgICAgICAgcm9sZTogXCJsaXN0Ym94XCJcbiAgICAgIH0sIHRoZW1lKFwiXCIuY29uY2F0KHNlY3Rpb25QcmVmaXgsIFwiaXRlbXMtbGlzdFwiKSwgJ2l0ZW1zTGlzdCcpKSwgaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtLCBpdGVtSW5kZXgpIHtcbiAgICAgICAgdmFyIGlzRmlyc3QgPSBpdGVtSW5kZXggPT09IDA7XG4gICAgICAgIHZhciBpc0hpZ2hsaWdodGVkID0gaXRlbUluZGV4ID09PSBoaWdobGlnaHRlZEl0ZW1JbmRleDtcbiAgICAgICAgdmFyIGl0ZW1LZXkgPSBcIlwiLmNvbmNhdChzZWN0aW9uUHJlZml4LCBcIml0ZW0tXCIpLmNvbmNhdChpdGVtSW5kZXgpO1xuICAgICAgICB2YXIgaXRlbVByb3BzT2JqID0gaXNJdGVtUHJvcHNGdW5jdGlvbiA/IGl0ZW1Qcm9wcyh7XG4gICAgICAgICAgc2VjdGlvbkluZGV4OiBzZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaXRlbUluZGV4OiBpdGVtSW5kZXhcbiAgICAgICAgfSkgOiBpdGVtUHJvcHM7XG5cbiAgICAgICAgdmFyIGFsbEl0ZW1Qcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIGlkOiBnZXRJdGVtSWQoc2VjdGlvbkluZGV4LCBpdGVtSW5kZXgpLFxuICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogaXNIaWdobGlnaHRlZFxuICAgICAgICB9LCB0aGVtZShpdGVtS2V5LCAnaXRlbScsIGlzRmlyc3QgJiYgJ2l0ZW1GaXJzdCcsIGlzSGlnaGxpZ2h0ZWQgJiYgJ2l0ZW1IaWdobGlnaHRlZCcpLCB7fSwgaXRlbVByb3BzT2JqKTtcblxuICAgICAgICBpZiAoaXNIaWdobGlnaHRlZCkge1xuICAgICAgICAgIGFsbEl0ZW1Qcm9wcy5yZWYgPSBfdGhpczIuc3RvcmVIaWdobGlnaHRlZEl0ZW1SZWZlcmVuY2U7XG4gICAgICAgIH0gLy8gYGtleWAgaXMgcHJvdmlkZWQgYnkgdGhlbWUoKVxuXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1rZXkgKi9cblxuXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KF9JdGVtW1wiZGVmYXVsdFwiXSwgX2V4dGVuZHMoe30sIGFsbEl0ZW1Qcm9wcywge1xuICAgICAgICAgIHNlY3Rpb25JbmRleDogc2VjdGlvbkluZGV4LFxuICAgICAgICAgIGlzSGlnaGxpZ2h0ZWQ6IGlzSGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgaXRlbUluZGV4OiBpdGVtSW5kZXgsXG4gICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICByZW5kZXJJdGVtOiByZW5kZXJJdGVtLFxuICAgICAgICAgIHJlbmRlckl0ZW1EYXRhOiByZW5kZXJJdGVtRGF0YVxuICAgICAgICB9KSk7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QvanN4LWtleSAqL1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBJdGVtc0xpc3Q7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEl0ZW1zTGlzdDtcblxuX2RlZmluZVByb3BlcnR5KEl0ZW1zTGlzdCwgXCJwcm9wVHlwZXNcIiwge1xuICBpdGVtczogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uYXJyYXkuaXNSZXF1aXJlZCxcbiAgaXRlbVByb3BzOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vbmVPZlR5cGUoW19wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLm9iamVjdCwgX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuY10pLFxuICByZW5kZXJJdGVtOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLmlzUmVxdWlyZWQsXG4gIHJlbmRlckl0ZW1EYXRhOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcbiAgc2VjdGlvbkluZGV4OiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5udW1iZXIsXG4gIGhpZ2hsaWdodGVkSXRlbUluZGV4OiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5udW1iZXIsXG4gIG9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldEl0ZW1JZDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYy5pc1JlcXVpcmVkLFxuICB0aGVtZTogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYy5pc1JlcXVpcmVkLFxuICBrZXlQcmVmaXg6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLnN0cmluZy5pc1JlcXVpcmVkXG59KTtcblxuX2RlZmluZVByb3BlcnR5KEl0ZW1zTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBzZWN0aW9uSW5kZXg6IG51bGxcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xuXG52YXIgX3NlY3Rpb25JdGVyYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInNlY3Rpb24taXRlcmF0b3JcIikpO1xuXG52YXIgX3JlYWN0VGhlbWVhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicmVhY3QtdGhlbWVhYmxlXCIpKTtcblxudmFyIF9TZWN0aW9uVGl0bGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL1NlY3Rpb25UaXRsZVwiKSk7XG5cbnZhciBfSXRlbUxpc3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL0l0ZW1MaXN0XCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpOyBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IHJldHVybiBjYWNoZTsgfTsgcmV0dXJuIGNhY2hlOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeyB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDsgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOyB9IGVsc2UgeyBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obik7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbnZhciBkZWZhdWx0UmVuZGVySW5wdXRDb21wb25lbnQgPSBmdW5jdGlvbiBkZWZhdWx0UmVuZGVySW5wdXRDb21wb25lbnQocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBwcm9wcyk7XG59O1xuXG52YXIgZGVmYXVsdFJlbmRlckl0ZW1zQ29udGFpbmVyID0gZnVuY3Rpb24gZGVmYXVsdFJlbmRlckl0ZW1zQ29udGFpbmVyKF9yZWYpIHtcbiAgdmFyIGNvbnRhaW5lclByb3BzID0gX3JlZi5jb250YWluZXJQcm9wcyxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgY29udGFpbmVyUHJvcHMsIGNoaWxkcmVuKTtcbn07XG5cbnZhciBkZWZhdWx0VGhlbWUgPSB7XG4gIGNvbnRhaW5lcjogJ3JlYWN0LWF1dG93aGF0ZXZlcl9fY29udGFpbmVyJyxcbiAgY29udGFpbmVyT3BlbjogJ3JlYWN0LWF1dG93aGF0ZXZlcl9fY29udGFpbmVyLS1vcGVuJyxcbiAgaW5wdXQ6ICdyZWFjdC1hdXRvd2hhdGV2ZXJfX2lucHV0JyxcbiAgaW5wdXRPcGVuOiAncmVhY3QtYXV0b3doYXRldmVyX19pbnB1dC0tb3BlbicsXG4gIGlucHV0Rm9jdXNlZDogJ3JlYWN0LWF1dG93aGF0ZXZlcl9faW5wdXQtLWZvY3VzZWQnLFxuICBpdGVtc0NvbnRhaW5lcjogJ3JlYWN0LWF1dG93aGF0ZXZlcl9faXRlbXMtY29udGFpbmVyJyxcbiAgaXRlbXNDb250YWluZXJPcGVuOiAncmVhY3QtYXV0b3doYXRldmVyX19pdGVtcy1jb250YWluZXItLW9wZW4nLFxuICBpdGVtc0xpc3Q6ICdyZWFjdC1hdXRvd2hhdGV2ZXJfX2l0ZW1zLWxpc3QnLFxuICBpdGVtOiAncmVhY3QtYXV0b3doYXRldmVyX19pdGVtJyxcbiAgaXRlbUZpcnN0OiAncmVhY3QtYXV0b3doYXRldmVyX19pdGVtLS1maXJzdCcsXG4gIGl0ZW1IaWdobGlnaHRlZDogJ3JlYWN0LWF1dG93aGF0ZXZlcl9faXRlbS0taGlnaGxpZ2h0ZWQnLFxuICBzZWN0aW9uQ29udGFpbmVyOiAncmVhY3QtYXV0b3doYXRldmVyX19zZWN0aW9uLWNvbnRhaW5lcicsXG4gIHNlY3Rpb25Db250YWluZXJGaXJzdDogJ3JlYWN0LWF1dG93aGF0ZXZlcl9fc2VjdGlvbi1jb250YWluZXItLWZpcnN0JyxcbiAgc2VjdGlvblRpdGxlOiAncmVhY3QtYXV0b3doYXRldmVyX19zZWN0aW9uLXRpdGxlJ1xufTtcblxudmFyIEF1dG93aGF0ZXZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQXV0b3doYXRldmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEF1dG93aGF0ZXZlcik7XG5cbiAgZnVuY3Rpb24gQXV0b3doYXRldmVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEF1dG93aGF0ZXZlcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdG9yZUlucHV0UmVmZXJlbmNlXCIsIGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgaWYgKGlucHV0ICE9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICB9XG5cbiAgICAgIHZhciB1c2VyUmVmID0gX3RoaXMucHJvcHMuaW5wdXRQcm9wcy5yZWY7XG5cbiAgICAgIGlmICh1c2VyUmVmKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdXNlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHVzZXJSZWYoaW5wdXQpO1xuICAgICAgICB9IGVsc2UgaWYgKF90eXBlb2YodXNlclJlZikgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1c2VyUmVmLCAnY3VycmVudCcpKSB7XG4gICAgICAgICAgdXNlclJlZi5jdXJyZW50ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdG9yZUl0ZW1zQ29udGFpbmVyUmVmZXJlbmNlXCIsIGZ1bmN0aW9uIChpdGVtc0NvbnRhaW5lcikge1xuICAgICAgaWYgKGl0ZW1zQ29udGFpbmVyICE9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLml0ZW1zQ29udGFpbmVyID0gaXRlbXNDb250YWluZXI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25IaWdobGlnaHRlZEl0ZW1DaGFuZ2VcIiwgZnVuY3Rpb24gKGhpZ2hsaWdodGVkSXRlbSkge1xuICAgICAgX3RoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gaGlnaGxpZ2h0ZWRJdGVtO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImdldEl0ZW1JZFwiLCBmdW5jdGlvbiAoc2VjdGlvbkluZGV4LCBpdGVtSW5kZXgpIHtcbiAgICAgIGlmIChpdGVtSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBpZCA9IF90aGlzLnByb3BzLmlkO1xuICAgICAgdmFyIHNlY3Rpb24gPSBzZWN0aW9uSW5kZXggPT09IG51bGwgPyAnJyA6IFwic2VjdGlvbi1cIi5jb25jYXQoc2VjdGlvbkluZGV4KTtcbiAgICAgIHJldHVybiBcInJlYWN0LWF1dG93aGF0ZXZlci1cIi5jb25jYXQoaWQsIFwiLVwiKS5jb25jYXQoc2VjdGlvbiwgXCItaXRlbS1cIikuY29uY2F0KGl0ZW1JbmRleCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBpbnB1dFByb3BzID0gX3RoaXMucHJvcHMuaW5wdXRQcm9wcztcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0lucHV0Rm9jdXNlZDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlucHV0UHJvcHMub25Gb2N1cyAmJiBpbnB1dFByb3BzLm9uRm9jdXMoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQmx1clwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBpbnB1dFByb3BzID0gX3RoaXMucHJvcHMuaW5wdXRQcm9wcztcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0lucHV0Rm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBpbnB1dFByb3BzLm9uQmx1ciAmJiBpbnB1dFByb3BzLm9uQmx1cihldmVudCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaW5wdXRQcm9wcyA9IF90aGlzJHByb3BzLmlucHV0UHJvcHMsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBfdGhpcyRwcm9wcy5oaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleCA9IF90aGlzJHByb3BzLmhpZ2hsaWdodGVkSXRlbUluZGV4O1xuICAgICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuXG4gICAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgICAgY2FzZSA0MDogLy8gQXJyb3dEb3duXG5cbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBBcnJvd1VwXG4gICAgICAgICAgICB2YXIgbmV4dFByZXYgPSBrZXlDb2RlID09PSA0MCA/ICduZXh0JyA6ICdwcmV2JztcblxuICAgICAgICAgICAgdmFyIF90aGlzJHNlY3Rpb25JdGVyYXRvciA9IF90aGlzLnNlY3Rpb25JdGVyYXRvcltuZXh0UHJldl0oW2hpZ2hsaWdodGVkU2VjdGlvbkluZGV4LCBoaWdobGlnaHRlZEl0ZW1JbmRleF0pLFxuICAgICAgICAgICAgICAgIF90aGlzJHNlY3Rpb25JdGVyYXRvcjIgPSBfc2xpY2VkVG9BcnJheShfdGhpcyRzZWN0aW9uSXRlcmF0b3IsIDIpLFxuICAgICAgICAgICAgICAgIG5ld0hpZ2hsaWdodGVkU2VjdGlvbkluZGV4ID0gX3RoaXMkc2VjdGlvbkl0ZXJhdG9yMlswXSxcbiAgICAgICAgICAgICAgICBuZXdIaWdobGlnaHRlZEl0ZW1JbmRleCA9IF90aGlzJHNlY3Rpb25JdGVyYXRvcjJbMV07XG5cbiAgICAgICAgICAgIGlucHV0UHJvcHMub25LZXlEb3duKGV2ZW50LCB7XG4gICAgICAgICAgICAgIG5ld0hpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBuZXdIaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICAgICAgbmV3SGlnaGxpZ2h0ZWRJdGVtSW5kZXg6IG5ld0hpZ2hsaWdodGVkSXRlbUluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlucHV0UHJvcHMub25LZXlEb3duKGV2ZW50LCB7XG4gICAgICAgICAgICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleDogaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsXG4gICAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleDogaGlnaGxpZ2h0ZWRJdGVtSW5kZXhcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF90aGlzLmhpZ2hsaWdodGVkSXRlbSA9IG51bGw7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBpc0lucHV0Rm9jdXNlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgX3RoaXMuc2V0U2VjdGlvbnNJdGVtcyhwcm9wcyk7XG5cbiAgICBfdGhpcy5zZXRTZWN0aW9uSXRlcmF0b3IocHJvcHMpO1xuXG4gICAgX3RoaXMuc2V0VGhlbWUocHJvcHMpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEF1dG93aGF0ZXZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLmVuc3VyZUhpZ2hsaWdodGVkSXRlbUlzVmlzaWJsZSgpO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZSwgcmVhY3Qvc29ydC1jb21wXG5cbiAgfSwge1xuICAgIGtleTogXCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIGlmIChuZXh0UHJvcHMuaXRlbXMgIT09IHRoaXMucHJvcHMuaXRlbXMpIHtcbiAgICAgICAgdGhpcy5zZXRTZWN0aW9uc0l0ZW1zKG5leHRQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0UHJvcHMuaXRlbXMgIT09IHRoaXMucHJvcHMuaXRlbXMgfHwgbmV4dFByb3BzLm11bHRpU2VjdGlvbiAhPT0gdGhpcy5wcm9wcy5tdWx0aVNlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zZXRTZWN0aW9uSXRlcmF0b3IobmV4dFByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHRQcm9wcy50aGVtZSAhPT0gdGhpcy5wcm9wcy50aGVtZSkge1xuICAgICAgICB0aGlzLnNldFRoZW1lKG5leHRQcm9wcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB0aGlzLmVuc3VyZUhpZ2hsaWdodGVkSXRlbUlzVmlzaWJsZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRTZWN0aW9uc0l0ZW1zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFNlY3Rpb25zSXRlbXMocHJvcHMpIHtcbiAgICAgIGlmIChwcm9wcy5tdWx0aVNlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zZWN0aW9uc0l0ZW1zID0gcHJvcHMuaXRlbXMubWFwKGZ1bmN0aW9uIChzZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BzLmdldFNlY3Rpb25JdGVtcyhzZWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VjdGlvbnNMZW5ndGhzID0gdGhpcy5zZWN0aW9uc0l0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbXMpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbXMubGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hbGxTZWN0aW9uc0FyZUVtcHR5ID0gdGhpcy5zZWN0aW9uc0xlbmd0aHMuZXZlcnkoZnVuY3Rpb24gKGl0ZW1zQ291bnQpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbXNDb3VudCA9PT0gMDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFNlY3Rpb25JdGVyYXRvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTZWN0aW9uSXRlcmF0b3IocHJvcHMpIHtcbiAgICAgIHRoaXMuc2VjdGlvbkl0ZXJhdG9yID0gKDAsIF9zZWN0aW9uSXRlcmF0b3JbXCJkZWZhdWx0XCJdKSh7XG4gICAgICAgIG11bHRpU2VjdGlvbjogcHJvcHMubXVsdGlTZWN0aW9uLFxuICAgICAgICBkYXRhOiBwcm9wcy5tdWx0aVNlY3Rpb24gPyB0aGlzLnNlY3Rpb25zTGVuZ3RocyA6IHByb3BzLml0ZW1zLmxlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFRoZW1lXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFRoZW1lKHByb3BzKSB7XG4gICAgICB0aGlzLnRoZW1lID0gKDAsIF9yZWFjdFRoZW1lYWJsZVtcImRlZmF1bHRcIl0pKHByb3BzLnRoZW1lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyU2VjdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyU2VjdGlvbnMoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuYWxsU2VjdGlvbnNBcmVFbXB0eSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHRoZW1lID0gdGhpcy50aGVtZTtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICAgIHJlbmRlckl0ZW0gPSBfdGhpcyRwcm9wczIucmVuZGVySXRlbSxcbiAgICAgICAgICByZW5kZXJJdGVtRGF0YSA9IF90aGlzJHByb3BzMi5yZW5kZXJJdGVtRGF0YSxcbiAgICAgICAgICByZW5kZXJTZWN0aW9uVGl0bGUgPSBfdGhpcyRwcm9wczIucmVuZGVyU2VjdGlvblRpdGxlLFxuICAgICAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMyLmhpZ2hsaWdodGVkU2VjdGlvbkluZGV4LFxuICAgICAgICAgIGhpZ2hsaWdodGVkSXRlbUluZGV4ID0gX3RoaXMkcHJvcHMyLmhpZ2hsaWdodGVkSXRlbUluZGV4LFxuICAgICAgICAgIGl0ZW1Qcm9wcyA9IF90aGlzJHByb3BzMi5pdGVtUHJvcHM7XG4gICAgICByZXR1cm4gaXRlbXMubWFwKGZ1bmN0aW9uIChzZWN0aW9uLCBzZWN0aW9uSW5kZXgpIHtcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IFwicmVhY3QtYXV0b3doYXRldmVyLVwiLmNvbmNhdChpZCwgXCItXCIpO1xuICAgICAgICB2YXIgc2VjdGlvbktleVByZWZpeCA9IFwiXCIuY29uY2F0KGtleVByZWZpeCwgXCJzZWN0aW9uLVwiKS5jb25jYXQoc2VjdGlvbkluZGV4LCBcIi1cIik7XG4gICAgICAgIHZhciBpc0ZpcnN0U2VjdGlvbiA9IHNlY3Rpb25JbmRleCA9PT0gMDsgLy8gYGtleWAgaXMgcHJvdmlkZWQgYnkgdGhlbWUoKVxuXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1rZXkgKi9cblxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImRpdlwiLCB0aGVtZShcIlwiLmNvbmNhdChzZWN0aW9uS2V5UHJlZml4LCBcImNvbnRhaW5lclwiKSwgJ3NlY3Rpb25Db250YWluZXInLCBpc0ZpcnN0U2VjdGlvbiAmJiAnc2VjdGlvbkNvbnRhaW5lckZpcnN0JyksIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoX1NlY3Rpb25UaXRsZVtcImRlZmF1bHRcIl0sIHtcbiAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9uLFxuICAgICAgICAgIHJlbmRlclNlY3Rpb25UaXRsZTogcmVuZGVyU2VjdGlvblRpdGxlLFxuICAgICAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgICAgICBzZWN0aW9uS2V5UHJlZml4OiBzZWN0aW9uS2V5UHJlZml4XG4gICAgICAgIH0pLCAvKiNfX1BVUkVfXyovX3JlYWN0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KF9JdGVtTGlzdFtcImRlZmF1bHRcIl0sIHtcbiAgICAgICAgICBpdGVtczogX3RoaXMyLnNlY3Rpb25zSXRlbXNbc2VjdGlvbkluZGV4XSxcbiAgICAgICAgICBpdGVtUHJvcHM6IGl0ZW1Qcm9wcyxcbiAgICAgICAgICByZW5kZXJJdGVtOiByZW5kZXJJdGVtLFxuICAgICAgICAgIHJlbmRlckl0ZW1EYXRhOiByZW5kZXJJdGVtRGF0YSxcbiAgICAgICAgICBzZWN0aW9uSW5kZXg6IHNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleDogaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPT09IHNlY3Rpb25JbmRleCA/IGhpZ2hsaWdodGVkSXRlbUluZGV4IDogbnVsbCxcbiAgICAgICAgICBvbkhpZ2hsaWdodGVkSXRlbUNoYW5nZTogX3RoaXMyLm9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlLFxuICAgICAgICAgIGdldEl0ZW1JZDogX3RoaXMyLmdldEl0ZW1JZCxcbiAgICAgICAgICB0aGVtZTogdGhlbWUsXG4gICAgICAgICAga2V5UHJlZml4OiBrZXlQcmVmaXgsXG4gICAgICAgICAgcmVmOiBfdGhpczIuc3RvcmVJdGVtc0xpc3RSZWZlcmVuY2VcbiAgICAgICAgfSkpO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0L2pzeC1rZXkgKi9cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtcygpIHtcbiAgICAgIHZhciBpdGVtcyA9IHRoaXMucHJvcHMuaXRlbXM7XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciB0aGVtZSA9IHRoaXMudGhlbWU7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzMy5pZCxcbiAgICAgICAgICByZW5kZXJJdGVtID0gX3RoaXMkcHJvcHMzLnJlbmRlckl0ZW0sXG4gICAgICAgICAgcmVuZGVySXRlbURhdGEgPSBfdGhpcyRwcm9wczMucmVuZGVySXRlbURhdGEsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBfdGhpcyRwcm9wczMuaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJdGVtSW5kZXggPSBfdGhpcyRwcm9wczMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXgsXG4gICAgICAgICAgaXRlbVByb3BzID0gX3RoaXMkcHJvcHMzLml0ZW1Qcm9wcztcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KF9JdGVtTGlzdFtcImRlZmF1bHRcIl0sIHtcbiAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICBpdGVtUHJvcHM6IGl0ZW1Qcm9wcyxcbiAgICAgICAgcmVuZGVySXRlbTogcmVuZGVySXRlbSxcbiAgICAgICAgcmVuZGVySXRlbURhdGE6IHJlbmRlckl0ZW1EYXRhLFxuICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleDogaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPT09IG51bGwgPyBoaWdobGlnaHRlZEl0ZW1JbmRleCA6IG51bGwsXG4gICAgICAgIG9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlOiB0aGlzLm9uSGlnaGxpZ2h0ZWRJdGVtQ2hhbmdlLFxuICAgICAgICBnZXRJdGVtSWQ6IHRoaXMuZ2V0SXRlbUlkLFxuICAgICAgICB0aGVtZTogdGhlbWUsXG4gICAgICAgIGtleVByZWZpeDogXCJyZWFjdC1hdXRvd2hhdGV2ZXItXCIuY29uY2F0KGlkLCBcIi1cIilcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbnN1cmVIaWdobGlnaHRlZEl0ZW1Jc1Zpc2libGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5zdXJlSGlnaGxpZ2h0ZWRJdGVtSXNWaXNpYmxlKCkge1xuICAgICAgdmFyIGhpZ2hsaWdodGVkSXRlbSA9IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtO1xuXG4gICAgICBpZiAoIWhpZ2hsaWdodGVkSXRlbSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVtc0NvbnRhaW5lciA9IHRoaXMuaXRlbXNDb250YWluZXI7XG4gICAgICB2YXIgaXRlbU9mZnNldFJlbGF0aXZlVG9Db250YWluZXIgPSBoaWdobGlnaHRlZEl0ZW0ub2Zmc2V0UGFyZW50ID09PSBpdGVtc0NvbnRhaW5lciA/IGhpZ2hsaWdodGVkSXRlbS5vZmZzZXRUb3AgOiBoaWdobGlnaHRlZEl0ZW0ub2Zmc2V0VG9wIC0gaXRlbXNDb250YWluZXIub2Zmc2V0VG9wO1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IGl0ZW1zQ29udGFpbmVyLnNjcm9sbFRvcDsgLy8gVG9wIG9mIHRoZSB2aXNpYmxlIGFyZWFcblxuICAgICAgaWYgKGl0ZW1PZmZzZXRSZWxhdGl2ZVRvQ29udGFpbmVyIDwgc2Nyb2xsVG9wKSB7XG4gICAgICAgIC8vIEl0ZW0gaXMgb2ZmIHRoZSB0b3Agb2YgdGhlIHZpc2libGUgYXJlYVxuICAgICAgICBzY3JvbGxUb3AgPSBpdGVtT2Zmc2V0UmVsYXRpdmVUb0NvbnRhaW5lcjtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbU9mZnNldFJlbGF0aXZlVG9Db250YWluZXIgKyBoaWdobGlnaHRlZEl0ZW0ub2Zmc2V0SGVpZ2h0ID4gc2Nyb2xsVG9wICsgaXRlbXNDb250YWluZXIub2Zmc2V0SGVpZ2h0KSB7XG4gICAgICAgIC8vIEl0ZW0gaXMgb2ZmIHRoZSBib3R0b20gb2YgdGhlIHZpc2libGUgYXJlYVxuICAgICAgICBzY3JvbGxUb3AgPSBpdGVtT2Zmc2V0UmVsYXRpdmVUb0NvbnRhaW5lciArIGhpZ2hsaWdodGVkSXRlbS5vZmZzZXRIZWlnaHQgLSBpdGVtc0NvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IGl0ZW1zQ29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICBpdGVtc0NvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgdGhlbWUgPSB0aGlzLnRoZW1lO1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaWQgPSBfdGhpcyRwcm9wczQuaWQsXG4gICAgICAgICAgbXVsdGlTZWN0aW9uID0gX3RoaXMkcHJvcHM0Lm11bHRpU2VjdGlvbixcbiAgICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudCA9IF90aGlzJHByb3BzNC5yZW5kZXJJbnB1dENvbXBvbmVudCxcbiAgICAgICAgICByZW5kZXJJdGVtc0NvbnRhaW5lciA9IF90aGlzJHByb3BzNC5yZW5kZXJJdGVtc0NvbnRhaW5lcixcbiAgICAgICAgICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleCA9IF90aGlzJHByb3BzNC5oaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleCA9IF90aGlzJHByb3BzNC5oaWdobGlnaHRlZEl0ZW1JbmRleDtcbiAgICAgIHZhciBpc0lucHV0Rm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNJbnB1dEZvY3VzZWQ7XG4gICAgICB2YXIgcmVuZGVyZWRJdGVtcyA9IG11bHRpU2VjdGlvbiA/IHRoaXMucmVuZGVyU2VjdGlvbnMoKSA6IHRoaXMucmVuZGVySXRlbXMoKTtcbiAgICAgIHZhciBpc09wZW4gPSByZW5kZXJlZEl0ZW1zICE9PSBudWxsO1xuICAgICAgdmFyIGFyaWFBY3RpdmVkZXNjZW5kYW50ID0gdGhpcy5nZXRJdGVtSWQoaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsIGhpZ2hsaWdodGVkSXRlbUluZGV4KTtcbiAgICAgIHZhciBpdGVtc0NvbnRhaW5lcklkID0gXCJyZWFjdC1hdXRvd2hhdGV2ZXItXCIuY29uY2F0KGlkKTtcblxuICAgICAgdmFyIGNvbnRhaW5lclByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJvbGU6ICdjb21ib2JveCcsXG4gICAgICAgICdhcmlhLWhhc3BvcHVwJzogJ2xpc3Rib3gnLFxuICAgICAgICAnYXJpYS1vd25zJzogaXRlbXNDb250YWluZXJJZCxcbiAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBpc09wZW5cbiAgICAgIH0sIHRoZW1lKFwicmVhY3QtYXV0b3doYXRldmVyLVwiLmNvbmNhdChpZCwgXCItY29udGFpbmVyXCIpLCAnY29udGFpbmVyJywgaXNPcGVuICYmICdjb250YWluZXJPcGVuJyksIHt9LCB0aGlzLnByb3BzLmNvbnRhaW5lclByb3BzKTtcblxuICAgICAgdmFyIGlucHV0Q29tcG9uZW50ID0gcmVuZGVySW5wdXRDb21wb25lbnQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBhdXRvQ29tcGxldGU6ICdvZmYnLFxuICAgICAgICAnYXJpYS1hdXRvY29tcGxldGUnOiAnbGlzdCcsXG4gICAgICAgICdhcmlhLWNvbnRyb2xzJzogaXRlbXNDb250YWluZXJJZCxcbiAgICAgICAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IGFyaWFBY3RpdmVkZXNjZW5kYW50XG4gICAgICB9LCB0aGVtZShcInJlYWN0LWF1dG93aGF0ZXZlci1cIi5jb25jYXQoaWQsIFwiLWlucHV0XCIpLCAnaW5wdXQnLCBpc09wZW4gJiYgJ2lucHV0T3BlbicsIGlzSW5wdXRGb2N1c2VkICYmICdpbnB1dEZvY3VzZWQnKSwge30sIHRoaXMucHJvcHMuaW5wdXRQcm9wcywge1xuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uS2V5RG93biAmJiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgcmVmOiB0aGlzLnN0b3JlSW5wdXRSZWZlcmVuY2VcbiAgICAgIH0pKTtcbiAgICAgIHZhciBpdGVtc0NvbnRhaW5lciA9IHJlbmRlckl0ZW1zQ29udGFpbmVyKHtcbiAgICAgICAgY29udGFpbmVyUHJvcHM6IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIGlkOiBpdGVtc0NvbnRhaW5lcklkLFxuICAgICAgICAgIHJvbGU6ICdsaXN0Ym94J1xuICAgICAgICB9LCB0aGVtZShcInJlYWN0LWF1dG93aGF0ZXZlci1cIi5jb25jYXQoaWQsIFwiLWl0ZW1zLWNvbnRhaW5lclwiKSwgJ2l0ZW1zQ29udGFpbmVyJywgaXNPcGVuICYmICdpdGVtc0NvbnRhaW5lck9wZW4nKSwge1xuICAgICAgICAgIHJlZjogdGhpcy5zdG9yZUl0ZW1zQ29udGFpbmVyUmVmZXJlbmNlXG4gICAgICAgIH0pLFxuICAgICAgICBjaGlsZHJlbjogcmVuZGVyZWRJdGVtc1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImRpdlwiLCBjb250YWluZXJQcm9wcywgaW5wdXRDb21wb25lbnQsIGl0ZW1zQ29udGFpbmVyKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQXV0b3doYXRldmVyO1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBBdXRvd2hhdGV2ZXI7XG5cbl9kZWZpbmVQcm9wZXJ0eShBdXRvd2hhdGV2ZXIsIFwicHJvcFR5cGVzXCIsIHtcbiAgaWQ6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLnN0cmluZyxcbiAgLy8gVXNlZCBpbiBhcmlhLSogYXR0cmlidXRlcy4gSWYgbXVsdGlwbGUgQXV0b3doYXRldmVyJ3MgYXJlIHJlbmRlcmVkIG9uIGEgcGFnZSwgdGhleSBtdXN0IGhhdmUgdW5pcXVlIGlkcy5cbiAgbXVsdGlTZWN0aW9uOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5ib29sLFxuICAvLyBJbmRpY2F0ZXMgd2hldGhlciBhIG11bHRpIHNlY3Rpb24gbGF5b3V0IHNob3VsZCBiZSByZW5kZXJlZC5cbiAgcmVuZGVySW5wdXRDb21wb25lbnQ6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIC8vIFdoZW4gc3BlY2lmaWVkLCBpdCBpcyB1c2VkIHRvIHJlbmRlciB0aGUgaW5wdXQgZWxlbWVudC5cbiAgcmVuZGVySXRlbXNDb250YWluZXI6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIC8vIFJlbmRlcnMgdGhlIGl0ZW1zIGNvbnRhaW5lci5cbiAgaXRlbXM6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmFycmF5LmlzUmVxdWlyZWQsXG4gIC8vIEFycmF5IG9mIGl0ZW1zIG9yIHNlY3Rpb25zIHRvIHJlbmRlci5cbiAgcmVuZGVySXRlbTogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYyxcbiAgLy8gVGhpcyBmdW5jdGlvbiByZW5kZXJzIGEgc2luZ2xlIGl0ZW0uXG4gIHJlbmRlckl0ZW1EYXRhOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QsXG4gIC8vIEFyYml0cmFyeSBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gcmVuZGVySXRlbSgpXG4gIHJlbmRlclNlY3Rpb25UaXRsZTogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYyxcbiAgLy8gVGhpcyBmdW5jdGlvbiBnZXRzIGEgc2VjdGlvbiBhbmQgcmVuZGVycyBpdHMgdGl0bGUuXG4gIGdldFNlY3Rpb25JdGVtczogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYyxcbiAgLy8gVGhpcyBmdW5jdGlvbiBnZXRzIGEgc2VjdGlvbiBhbmQgcmV0dXJucyBpdHMgaXRlbXMsIHdoaWNoIHdpbGwgYmUgcGFzc2VkIGludG8gYHJlbmRlckl0ZW1gIGZvciByZW5kZXJpbmcuXG4gIGNvbnRhaW5lclByb3BzOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QsXG4gIC8vIEFyYml0cmFyeSBjb250YWluZXIgcHJvcHNcbiAgaW5wdXRQcm9wczogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0ub2JqZWN0LFxuICAvLyBBcmJpdHJhcnkgaW5wdXQgcHJvcHNcbiAgaXRlbVByb3BzOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vbmVPZlR5cGUoWy8vIEFyYml0cmFyeSBpdGVtIHByb3BzXG4gIF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLm9iamVjdCwgX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuY10pLFxuICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0ubnVtYmVyLFxuICAvLyBTZWN0aW9uIGluZGV4IG9mIHRoZSBoaWdobGlnaHRlZCBpdGVtXG4gIGhpZ2hsaWdodGVkSXRlbUluZGV4OiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5udW1iZXIsXG4gIC8vIEhpZ2hsaWdodGVkIGl0ZW0gaW5kZXggKHdpdGhpbiBhIHNlY3Rpb24pXG4gIHRoZW1lOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vbmVPZlR5cGUoWy8vIFN0eWxlcy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWFya2RhbGdsZWlzaC9yZWFjdC10aGVtZWFibGVcbiAgX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0ub2JqZWN0LCBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5hcnJheV0pXG59KTtcblxuX2RlZmluZVByb3BlcnR5KEF1dG93aGF0ZXZlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpZDogJzEnLFxuICBtdWx0aVNlY3Rpb246IGZhbHNlLFxuICByZW5kZXJJbnB1dENvbXBvbmVudDogZGVmYXVsdFJlbmRlcklucHV0Q29tcG9uZW50LFxuICByZW5kZXJJdGVtc0NvbnRhaW5lcjogZGVmYXVsdFJlbmRlckl0ZW1zQ29udGFpbmVyLFxuICByZW5kZXJJdGVtOiBmdW5jdGlvbiByZW5kZXJJdGVtKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYHJlbmRlckl0ZW1gIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfSxcbiAgcmVuZGVySXRlbURhdGE6IGVtcHR5T2JqZWN0LFxuICByZW5kZXJTZWN0aW9uVGl0bGU6IGZ1bmN0aW9uIHJlbmRlclNlY3Rpb25UaXRsZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ByZW5kZXJTZWN0aW9uVGl0bGVgIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfSxcbiAgZ2V0U2VjdGlvbkl0ZW1zOiBmdW5jdGlvbiBnZXRTZWN0aW9uSXRlbXMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdgZ2V0U2VjdGlvbkl0ZW1zYCBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gIH0sXG4gIGNvbnRhaW5lclByb3BzOiBlbXB0eU9iamVjdCxcbiAgaW5wdXRQcm9wczogZW1wdHlPYmplY3QsXG4gIGl0ZW1Qcm9wczogZW1wdHlPYmplY3QsXG4gIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICBoaWdobGlnaHRlZEl0ZW1JbmRleDogbnVsbCxcbiAgdGhlbWU6IGRlZmF1bHRUaGVtZVxufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5cbnZhciBfYXJyYXlzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwic2hhbGxvdy1lcXVhbC9hcnJheXNcIikpO1xuXG52YXIgX0F1dG93aGF0ZXZlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vQXV0b3doYXRldmVyXCIpKTtcblxudmFyIF90aGVtZSA9IHJlcXVpcmUoXCIuL3RoZW1lXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyBpZiAodHlwZW9mIFdlYWtNYXAgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7IHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgcmV0dXJuIGNhY2hlOyB9OyByZXR1cm4gY2FjaGU7IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBpZiAob2JqID09PSBudWxsIHx8IF90eXBlb2Yob2JqKSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHsgcmV0dXJuIHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9IHZhciBjYWNoZSA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpOyBpZiAoY2FjaGUgJiYgY2FjaGUuaGFzKG9iaikpIHsgcmV0dXJuIGNhY2hlLmdldChvYmopOyB9IHZhciBuZXdPYmogPSB7fTsgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7IHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsOyBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7IH0gZWxzZSB7IG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSB9IG5ld09ialtcImRlZmF1bHRcIl0gPSBvYmo7IGlmIChjYWNoZSkgeyBjYWNoZS5zZXQob2JqLCBuZXdPYmopOyB9IHJldHVybiBuZXdPYmo7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgYWx3YXlzVHJ1ZSA9IGZ1bmN0aW9uIGFsd2F5c1RydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIGRlZmF1bHRTaG91bGRSZW5kZXJTdWdnZXN0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRTaG91bGRSZW5kZXJTdWdnZXN0aW9ucyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XG59O1xuXG52YXIgZGVmYXVsdFJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyID0gZnVuY3Rpb24gZGVmYXVsdFJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyKF9yZWYpIHtcbiAgdmFyIGNvbnRhaW5lclByb3BzID0gX3JlZi5jb250YWluZXJQcm9wcyxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgY29udGFpbmVyUHJvcHMsIGNoaWxkcmVuKTtcbn07XG5cbnZhciBSRUFTT05fU1VHR0VTVElPTlNfUkVWRUFMRUQgPSAnc3VnZ2VzdGlvbnMtcmV2ZWFsZWQnO1xudmFyIFJFQVNPTl9TVUdHRVNUSU9OU19VUERBVEVEID0gJ3N1Z2dlc3Rpb25zLXVwZGF0ZWQnO1xudmFyIFJFQVNPTl9TVUdHRVNUSU9OX1NFTEVDVEVEID0gJ3N1Z2dlc3Rpb24tc2VsZWN0ZWQnO1xudmFyIFJFQVNPTl9JTlBVVF9GT0NVU0VEID0gJ2lucHV0LWZvY3VzZWQnO1xudmFyIFJFQVNPTl9JTlBVVF9DSEFOR0VEID0gJ2lucHV0LWNoYW5nZWQnO1xudmFyIFJFQVNPTl9JTlBVVF9CTFVSUkVEID0gJ2lucHV0LWJsdXJyZWQnO1xudmFyIFJFQVNPTl9FU0NBUEVfUFJFU1NFRCA9ICdlc2NhcGUtcHJlc3NlZCc7XG5cbnZhciBBdXRvc3VnZ2VzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQXV0b3N1Z2dlc3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQXV0b3N1Z2dlc3QpO1xuXG4gIGZ1bmN0aW9uIEF1dG9zdWdnZXN0KF9yZWYyKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIF9hbHdheXNSZW5kZXJTdWdnZXN0aW9ucyA9IF9yZWYyLmFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEF1dG9zdWdnZXN0KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Eb2N1bWVudE1vdXNlRG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLmp1c3RDbGlja2VkT25TdWdnZXN0aW9uc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgdmFyIG5vZGUgPSBldmVudC5kZXRhaWwgJiYgZXZlbnQuZGV0YWlsLnRhcmdldCB8fCAvLyBUaGlzIGlzIGZvciB0ZXN0aW5nIG9ubHkuIFBsZWFzZSBzaG93IG1lIGEgYmV0dGVyIHdheSB0byBlbXVsYXRlIHRoaXMuXG4gICAgICBldmVudC50YXJnZXQ7XG5cbiAgICAgIHdoaWxlIChub2RlICE9PSBudWxsICYmIG5vZGUgIT09IGRvY3VtZW50KSB7XG4gICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1zdWdnZXN0aW9uLWluZGV4JykgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBTdWdnZXN0aW9uIHdhcyBjbGlja2VkXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IF90aGlzLnN1Z2dlc3Rpb25zQ29udGFpbmVyKSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIGVsc2UgaW5zaWRlIHN1Z2dlc3Rpb25zIGNvbnRhaW5lciB3YXMgY2xpY2tlZFxuICAgICAgICAgIF90aGlzLmp1c3RDbGlja2VkT25TdWdnZXN0aW9uc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdG9yZUF1dG93aGF0ZXZlclJlZlwiLCBmdW5jdGlvbiAoYXV0b3doYXRldmVyKSB7XG4gICAgICBpZiAoYXV0b3doYXRldmVyICE9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLmF1dG93aGF0ZXZlciA9IGF1dG93aGF0ZXZlcjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblN1Z2dlc3Rpb25Nb3VzZUVudGVyXCIsIGZ1bmN0aW9uIChldmVudCwgX3JlZjMpIHtcbiAgICAgIHZhciBzZWN0aW9uSW5kZXggPSBfcmVmMy5zZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaXRlbUluZGV4ID0gX3JlZjMuaXRlbUluZGV4O1xuXG4gICAgICBfdGhpcy51cGRhdGVIaWdobGlnaHRlZFN1Z2dlc3Rpb24oc2VjdGlvbkluZGV4LCBpdGVtSW5kZXgpO1xuXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBfdGhpcy5wcmVzc2VkU3VnZ2VzdGlvbikge1xuICAgICAgICBfdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuanVzdE1vdXNlRW50ZXJlZCA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuanVzdE1vdXNlRW50ZXJlZCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnVwZGF0ZUhpZ2hsaWdodGVkU3VnZ2VzdGlvbihfdGhpcy5wcm9wcy5tdWx0aVNlY3Rpb24gPyAwIDogbnVsbCwgMCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Eb2N1bWVudE1vdXNlVXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByZXNzZWRTdWdnZXN0aW9uICYmICFfdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uKSB7XG4gICAgICAgIF90aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnByZXNzZWRTdWdnZXN0aW9uID0gbnVsbDtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblN1Z2dlc3Rpb25Nb3VzZURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBDaGVja2luZyBpZiB0aGlzLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gaXMgYWxyZWFkeSB0cnVlIHRvIG5vdCBkdXBsaWNhdGUgdG91Y2ggZXZlbnRzIGluIGNocm9tZVxuICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzk4MDkjaXNzdWVjb21tZW50LTQxMzk3ODQwNVxuICAgICAgaWYgKCFfdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uKSB7XG4gICAgICAgIF90aGlzLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSB0cnVlO1xuICAgICAgICBfdGhpcy5wcmVzc2VkU3VnZ2VzdGlvbiA9IGV2ZW50LnRhcmdldDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCA9IF90aGlzLnByb3BzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZDtcbiAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCAmJiBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblN1Z2dlc3Rpb25TZWxlY3RlZFwiLCBmdW5jdGlvbiAoZXZlbnQsIGRhdGEpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zID0gX3RoaXMkcHJvcHMuYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQgPSBfdGhpcyRwcm9wcy5vblN1Z2dlc3Rpb25TZWxlY3RlZCxcbiAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQgPSBfdGhpcyRwcm9wcy5vblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ7XG4gICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZCAmJiBvblN1Z2dlc3Rpb25TZWxlY3RlZChldmVudCwgZGF0YSk7XG5cbiAgICAgIHZhciBrZWVwU3VnZ2VzdGlvbnNPblNlbGVjdCA9IF90aGlzLnByb3BzLnNob3VsZEtlZXBTdWdnZXN0aW9uc09uU2VsZWN0KGRhdGEuc3VnZ2VzdGlvbik7XG5cbiAgICAgIGlmIChhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyB8fCBrZWVwU3VnZ2VzdGlvbnNPblNlbGVjdCkge1xuICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQoe1xuICAgICAgICAgIHZhbHVlOiBkYXRhLnN1Z2dlc3Rpb25WYWx1ZSxcbiAgICAgICAgICByZWFzb246IFJFQVNPTl9TVUdHRVNUSU9OX1NFTEVDVEVEXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkKCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnJlc2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25TdWdnZXN0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczIuYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrID0gX3RoaXMkcHJvcHMyLmZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljaztcblxuICAgICAgdmFyIF90aGlzJGdldFN1Z2dlc3Rpb25JbiA9IF90aGlzLmdldFN1Z2dlc3Rpb25JbmRpY2VzKF90aGlzLmZpbmRTdWdnZXN0aW9uRWxlbWVudChldmVudC50YXJnZXQpKSxcbiAgICAgICAgICBzZWN0aW9uSW5kZXggPSBfdGhpcyRnZXRTdWdnZXN0aW9uSW4uc2VjdGlvbkluZGV4LFxuICAgICAgICAgIHN1Z2dlc3Rpb25JbmRleCA9IF90aGlzJGdldFN1Z2dlc3Rpb25Jbi5zdWdnZXN0aW9uSW5kZXg7XG5cbiAgICAgIHZhciBjbGlja2VkU3VnZ2VzdGlvbiA9IF90aGlzLmdldFN1Z2dlc3Rpb24oc2VjdGlvbkluZGV4LCBzdWdnZXN0aW9uSW5kZXgpO1xuXG4gICAgICB2YXIgY2xpY2tlZFN1Z2dlc3Rpb25WYWx1ZSA9IF90aGlzLnByb3BzLmdldFN1Z2dlc3Rpb25WYWx1ZShjbGlja2VkU3VnZ2VzdGlvbik7XG5cbiAgICAgIF90aGlzLm1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCBjbGlja2VkU3VnZ2VzdGlvblZhbHVlLCAnY2xpY2snKTtcblxuICAgICAgX3RoaXMub25TdWdnZXN0aW9uU2VsZWN0ZWQoZXZlbnQsIHtcbiAgICAgICAgc3VnZ2VzdGlvbjogY2xpY2tlZFN1Z2dlc3Rpb24sXG4gICAgICAgIHN1Z2dlc3Rpb25WYWx1ZTogY2xpY2tlZFN1Z2dlc3Rpb25WYWx1ZSxcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4OiBzdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgIHNlY3Rpb25JbmRleDogc2VjdGlvbkluZGV4LFxuICAgICAgICBtZXRob2Q6ICdjbGljaydcbiAgICAgIH0pO1xuXG4gICAgICB2YXIga2VlcFN1Z2dlc3Rpb25zT25TZWxlY3QgPSBfdGhpcy5wcm9wcy5zaG91bGRLZWVwU3VnZ2VzdGlvbnNPblNlbGVjdChjbGlja2VkU3VnZ2VzdGlvbik7XG5cbiAgICAgIGlmICghKGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIHx8IGtlZXBTdWdnZXN0aW9uc09uU2VsZWN0KSkge1xuICAgICAgICBfdGhpcy5jbG9zZVN1Z2dlc3Rpb25zKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2sgPT09IHRydWUpIHtcbiAgICAgICAgX3RoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLm9uQmx1cigpO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbnB1dFByb3BzID0gX3RoaXMkcHJvcHMzLmlucHV0UHJvcHMsXG4gICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczMuc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFByb3BzLnZhbHVlLFxuICAgICAgICAgIG9uQmx1ciA9IGlucHV0UHJvcHMub25CbHVyO1xuXG4gICAgICB2YXIgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uID0gX3RoaXMuZ2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKCk7XG5cbiAgICAgIHZhciBzaG91bGRSZW5kZXIgPSBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucyh2YWx1ZSwgUkVBU09OX0lOUFVUX0JMVVJSRUQpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2UsXG4gICAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleDogbnVsbCxcbiAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uOiBudWxsLFxuICAgICAgICB2YWx1ZUJlZm9yZVVwRG93bjogbnVsbCxcbiAgICAgICAgaXNDb2xsYXBzZWQ6ICFzaG91bGRSZW5kZXJcbiAgICAgIH0pO1xuXG4gICAgICBvbkJsdXIgJiYgb25CbHVyKF90aGlzLmJsdXJFdmVudCwge1xuICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb246IGhpZ2hsaWdodGVkU3VnZ2VzdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25TdWdnZXN0aW9uTW91c2VMZWF2ZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLnJlc2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKGZhbHNlKTsgLy8gc2hvdWxkUmVzZXRWYWx1ZUJlZm9yZVVwRG93blxuXG5cbiAgICAgIGlmIChfdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uICYmIGV2ZW50LnRhcmdldCA9PT0gX3RoaXMucHJlc3NlZFN1Z2dlc3Rpb24pIHtcbiAgICAgICAgX3RoaXMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU3VnZ2VzdGlvblRvdWNoU3RhcnRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IHRydWU7IC8vIHRvZG86IGV2ZW50LnByZXZlbnREZWZhdWx0IHdoZW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yMDQzXG4gICAgICAvLyB0b2RvOiBnZXRzIHJlbGVhc2VkIHNvIG9uU3VnZ2VzdGlvbk1vdXNlRG93biB3b24ndCBmaXJlIGluIGNocm9tZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU3VnZ2VzdGlvblRvdWNoTW92ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgICBfdGhpcy5wcmVzc2VkU3VnZ2VzdGlvbiA9IG51bGw7XG5cbiAgICAgIF90aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaXRlbVByb3BzXCIsIGZ1bmN0aW9uIChfcmVmNCkge1xuICAgICAgdmFyIHNlY3Rpb25JbmRleCA9IF9yZWY0LnNlY3Rpb25JbmRleCxcbiAgICAgICAgICBpdGVtSW5kZXggPSBfcmVmNC5pdGVtSW5kZXg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGF0YS1zZWN0aW9uLWluZGV4Jzogc2VjdGlvbkluZGV4LFxuICAgICAgICAnZGF0YS1zdWdnZXN0aW9uLWluZGV4JzogaXRlbUluZGV4LFxuICAgICAgICBvbk1vdXNlRW50ZXI6IF90aGlzLm9uU3VnZ2VzdGlvbk1vdXNlRW50ZXIsXG4gICAgICAgIG9uTW91c2VMZWF2ZTogX3RoaXMub25TdWdnZXN0aW9uTW91c2VMZWF2ZSxcbiAgICAgICAgb25Nb3VzZURvd246IF90aGlzLm9uU3VnZ2VzdGlvbk1vdXNlRG93bixcbiAgICAgICAgb25Ub3VjaFN0YXJ0OiBfdGhpcy5vblN1Z2dlc3Rpb25Ub3VjaFN0YXJ0LFxuICAgICAgICBvblRvdWNoTW92ZTogX3RoaXMub25TdWdnZXN0aW9uVG91Y2hNb3ZlLFxuICAgICAgICBvbkNsaWNrOiBfdGhpcy5vblN1Z2dlc3Rpb25DbGlja1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lclwiLCBmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgIHZhciBjb250YWluZXJQcm9wcyA9IF9yZWY1LmNvbnRhaW5lclByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3JlZjUuY2hpbGRyZW47XG4gICAgICB2YXIgcmVuZGVyU3VnZ2VzdGlvbnNDb250YWluZXIgPSBfdGhpcy5wcm9wcy5yZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lcjtcbiAgICAgIHJldHVybiByZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lcih7XG4gICAgICAgIGNvbnRhaW5lclByb3BzOiBjb250YWluZXJQcm9wcyxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICBxdWVyeTogX3RoaXMuZ2V0UXVlcnkoKVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzRm9jdXNlZDogZmFsc2UsXG4gICAgICBpc0NvbGxhcHNlZDogIV9hbHdheXNSZW5kZXJTdWdnZXN0aW9ucyxcbiAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg6IG51bGwsXG4gICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb246IG51bGwsXG4gICAgICB2YWx1ZUJlZm9yZVVwRG93bjogbnVsbFxuICAgIH07XG4gICAgX3RoaXMuanVzdFByZXNzZWRVcERvd24gPSBmYWxzZTtcbiAgICBfdGhpcy5qdXN0TW91c2VFbnRlcmVkID0gZmFsc2U7XG4gICAgX3RoaXMucHJlc3NlZFN1Z2dlc3Rpb24gPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhBdXRvc3VnZ2VzdCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uRG9jdW1lbnRNb3VzZURvd24pO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Eb2N1bWVudE1vdXNlVXApO1xuICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuYXV0b3doYXRldmVyLmlucHV0O1xuICAgICAgdGhpcy5zdWdnZXN0aW9uc0NvbnRhaW5lciA9IHRoaXMuYXV0b3doYXRldmVyLml0ZW1zQ29udGFpbmVyO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZSwgcmVhY3Qvc29ydC1jb21wXG5cbiAgfSwge1xuICAgIGtleTogXCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIC8vIFdoZW4gaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uIGJlY29tZXMgZGVhY3RpdmF0ZWQsIGlmIHRoZSBmaXJzdCBzdWdnZXN0aW9uIHdhc1xuICAgICAgLy8gc2V0LCB3ZSBzaG91bGQgcmVzZXQgdGhlIHN1Z2dlc3Rpb24gYmFjayB0byB0aGUgdW5zZWxlY3RlZCBkZWZhdWx0IHN0YXRlLlxuICAgICAgdmFyIHNob3VsZFJlc2V0SGlnaGxpZ2h0aW5nID0gdGhpcy5zdGF0ZS5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9PT0gMCAmJiB0aGlzLnByb3BzLmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbiAmJiAhbmV4dFByb3BzLmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbjtcblxuICAgICAgaWYgKCgwLCBfYXJyYXlzW1wiZGVmYXVsdFwiXSkobmV4dFByb3BzLnN1Z2dlc3Rpb25zLCB0aGlzLnByb3BzLnN1Z2dlc3Rpb25zKSkge1xuICAgICAgICBpZiAobmV4dFByb3BzLmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbiAmJiBuZXh0UHJvcHMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLmp1c3RQcmVzc2VkVXBEb3duID09PSBmYWxzZSAmJiB0aGlzLmp1c3RNb3VzZUVudGVyZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgfSBlbHNlIGlmIChzaG91bGRSZXNldEhpZ2hsaWdodGluZykge1xuICAgICAgICAgIHRoaXMucmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMud2lsbFJlbmRlclN1Z2dlc3Rpb25zKG5leHRQcm9wcywgUkVBU09OX1NVR0dFU1RJT05TX1VQREFURUQpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUuaXNDb2xsYXBzZWQgJiYgIXRoaXMuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZXZlYWxTdWdnZXN0aW9ucygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaG91bGRSZXNldEhpZ2hsaWdodGluZykge1xuICAgICAgICAgICAgdGhpcy5yZXNldEhpZ2hsaWdodGVkU3VnZ2VzdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgc3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczQuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgb25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQgPSBfdGhpcyRwcm9wczQub25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uID0gX3RoaXMkcHJvcHM0LmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbjtcblxuICAgICAgaWYgKCEoMCwgX2FycmF5c1tcImRlZmF1bHRcIl0pKHN1Z2dlc3Rpb25zLCBwcmV2UHJvcHMuc3VnZ2VzdGlvbnMpICYmIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uKSB7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9uU3VnZ2VzdGlvbkhpZ2hsaWdodGVkKSB7XG4gICAgICAgIHZhciBoaWdobGlnaHRlZFN1Z2dlc3Rpb24gPSB0aGlzLmdldEhpZ2hsaWdodGVkU3VnZ2VzdGlvbigpO1xuICAgICAgICB2YXIgcHJldkhpZ2hsaWdodGVkU3VnZ2VzdGlvbiA9IHByZXZTdGF0ZS5oaWdobGlnaHRlZFN1Z2dlc3Rpb247XG5cbiAgICAgICAgaWYgKGhpZ2hsaWdodGVkU3VnZ2VzdGlvbiAhPSBwcmV2SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKSB7XG4gICAgICAgICAgb25TdWdnZXN0aW9uSGlnaGxpZ2h0ZWQoe1xuICAgICAgICAgICAgc3VnZ2VzdGlvbjogaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uRG9jdW1lbnRNb3VzZURvd24pO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Eb2N1bWVudE1vdXNlVXApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVIaWdobGlnaHRlZFN1Z2dlc3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlSGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKHNlY3Rpb25JbmRleCwgc3VnZ2VzdGlvbkluZGV4LCBwcmV2VmFsdWUpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgdmFsdWVCZWZvcmVVcERvd24gPSBzdGF0ZS52YWx1ZUJlZm9yZVVwRG93bjtcblxuICAgICAgICBpZiAoc3VnZ2VzdGlvbkluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgdmFsdWVCZWZvcmVVcERvd24gPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlQmVmb3JlVXBEb3duID09PSBudWxsICYmIHR5cGVvZiBwcmV2VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdmFsdWVCZWZvcmVVcERvd24gPSBwcmV2VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBzZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg6IHN1Z2dlc3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb246IHN1Z2dlc3Rpb25JbmRleCA9PT0gbnVsbCA/IG51bGwgOiBfdGhpczIuZ2V0U3VnZ2VzdGlvbihzZWN0aW9uSW5kZXgsIHN1Z2dlc3Rpb25JbmRleCksXG4gICAgICAgICAgdmFsdWVCZWZvcmVVcERvd246IHZhbHVlQmVmb3JlVXBEb3duXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24oKSB7XG4gICAgICB2YXIgc2hvdWxkUmVzZXRWYWx1ZUJlZm9yZVVwRG93biA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciB2YWx1ZUJlZm9yZVVwRG93biA9IHN0YXRlLnZhbHVlQmVmb3JlVXBEb3duO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4OiBudWxsLFxuICAgICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4OiBudWxsLFxuICAgICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbjogbnVsbCxcbiAgICAgICAgICB2YWx1ZUJlZm9yZVVwRG93bjogc2hvdWxkUmVzZXRWYWx1ZUJlZm9yZVVwRG93biA/IG51bGwgOiB2YWx1ZUJlZm9yZVVwRG93blxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJldmVhbFN1Z2dlc3Rpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJldmVhbFN1Z2dlc3Rpb25zKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzQ29sbGFwc2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsb3NlU3VnZ2VzdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2VTdWdnZXN0aW9ucygpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleDogbnVsbCxcbiAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg6IG51bGwsXG4gICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbjogbnVsbCxcbiAgICAgICAgdmFsdWVCZWZvcmVVcERvd246IG51bGwsXG4gICAgICAgIGlzQ29sbGFwc2VkOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3VnZ2VzdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uKHNlY3Rpb25JbmRleCwgc3VnZ2VzdGlvbkluZGV4KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBzdWdnZXN0aW9ucyA9IF90aGlzJHByb3BzNS5zdWdnZXN0aW9ucyxcbiAgICAgICAgICBtdWx0aVNlY3Rpb24gPSBfdGhpcyRwcm9wczUubXVsdGlTZWN0aW9uLFxuICAgICAgICAgIGdldFNlY3Rpb25TdWdnZXN0aW9ucyA9IF90aGlzJHByb3BzNS5nZXRTZWN0aW9uU3VnZ2VzdGlvbnM7XG5cbiAgICAgIGlmIChtdWx0aVNlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGdldFNlY3Rpb25TdWdnZXN0aW9ucyhzdWdnZXN0aW9uc1tzZWN0aW9uSW5kZXhdKVtzdWdnZXN0aW9uSW5kZXhdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnNbc3VnZ2VzdGlvbkluZGV4XTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEhpZ2hsaWdodGVkU3VnZ2VzdGlvbigpIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZS5oaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9IF90aGlzJHN0YXRlLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4O1xuXG4gICAgICBpZiAoaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmdldFN1Z2dlc3Rpb24oaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3VnZ2VzdGlvblZhbHVlQnlJbmRleFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uVmFsdWVCeUluZGV4KHNlY3Rpb25JbmRleCwgc3VnZ2VzdGlvbkluZGV4KSB7XG4gICAgICB2YXIgZ2V0U3VnZ2VzdGlvblZhbHVlID0gdGhpcy5wcm9wcy5nZXRTdWdnZXN0aW9uVmFsdWU7XG4gICAgICByZXR1cm4gZ2V0U3VnZ2VzdGlvblZhbHVlKHRoaXMuZ2V0U3VnZ2VzdGlvbihzZWN0aW9uSW5kZXgsIHN1Z2dlc3Rpb25JbmRleCkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRTdWdnZXN0aW9uSW5kaWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uSW5kaWNlcyhzdWdnZXN0aW9uRWxlbWVudCkge1xuICAgICAgdmFyIHNlY3Rpb25JbmRleCA9IHN1Z2dlc3Rpb25FbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zZWN0aW9uLWluZGV4Jyk7XG4gICAgICB2YXIgc3VnZ2VzdGlvbkluZGV4ID0gc3VnZ2VzdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXN1Z2dlc3Rpb24taW5kZXgnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlY3Rpb25JbmRleDogdHlwZW9mIHNlY3Rpb25JbmRleCA9PT0gJ3N0cmluZycgPyBwYXJzZUludChzZWN0aW9uSW5kZXgsIDEwKSA6IG51bGwsXG4gICAgICAgIHN1Z2dlc3Rpb25JbmRleDogcGFyc2VJbnQoc3VnZ2VzdGlvbkluZGV4LCAxMClcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpbmRTdWdnZXN0aW9uRWxlbWVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5kU3VnZ2VzdGlvbkVsZW1lbnQoc3RhcnROb2RlKSB7XG4gICAgICB2YXIgbm9kZSA9IHN0YXJ0Tm9kZTtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3VnZ2VzdGlvbi1pbmRleCcpICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgfSB3aGlsZSAobm9kZSAhPT0gbnVsbCk7XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NsaWNrZWQgZWxlbWVudDonLCBzdGFydE5vZGUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBzdWdnZXN0aW9uIGVsZW1lbnRcIik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm1heWJlQ2FsbE9uQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCBuZXdWYWx1ZSwgbWV0aG9kKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkaW5wdXRQcm9wID0gdGhpcy5wcm9wcy5pbnB1dFByb3BzLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcHJvcHMkaW5wdXRQcm9wLnZhbHVlLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMkaW5wdXRQcm9wLm9uQ2hhbmdlO1xuXG4gICAgICBpZiAobmV3VmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIG9uQ2hhbmdlKGV2ZW50LCB7XG4gICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgIG1ldGhvZDogbWV0aG9kXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3aWxsUmVuZGVyU3VnZ2VzdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd2lsbFJlbmRlclN1Z2dlc3Rpb25zKHByb3BzLCByZWFzb24pIHtcbiAgICAgIHZhciBzdWdnZXN0aW9ucyA9IHByb3BzLnN1Z2dlc3Rpb25zLFxuICAgICAgICAgIGlucHV0UHJvcHMgPSBwcm9wcy5pbnB1dFByb3BzLFxuICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zID0gcHJvcHMuc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFByb3BzLnZhbHVlO1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnModmFsdWUsIHJlYXNvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFF1ZXJ5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFF1ZXJ5KCkge1xuICAgICAgdmFyIGlucHV0UHJvcHMgPSB0aGlzLnByb3BzLmlucHV0UHJvcHM7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFByb3BzLnZhbHVlO1xuICAgICAgdmFyIHZhbHVlQmVmb3JlVXBEb3duID0gdGhpcy5zdGF0ZS52YWx1ZUJlZm9yZVVwRG93bjtcbiAgICAgIHJldHVybiAodmFsdWVCZWZvcmVVcERvd24gPT09IG51bGwgPyB2YWx1ZSA6IHZhbHVlQmVmb3JlVXBEb3duKS50cmltKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgc3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczYuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQgPSBfdGhpcyRwcm9wczYucmVuZGVySW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkID0gX3RoaXMkcHJvcHM2Lm9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCxcbiAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uID0gX3RoaXMkcHJvcHM2LnJlbmRlclN1Z2dlc3Rpb24sXG4gICAgICAgICAgaW5wdXRQcm9wcyA9IF90aGlzJHByb3BzNi5pbnB1dFByb3BzLFxuICAgICAgICAgIG11bHRpU2VjdGlvbiA9IF90aGlzJHByb3BzNi5tdWx0aVNlY3Rpb24sXG4gICAgICAgICAgcmVuZGVyU2VjdGlvblRpdGxlID0gX3RoaXMkcHJvcHM2LnJlbmRlclNlY3Rpb25UaXRsZSxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzNi5pZCxcbiAgICAgICAgICBnZXRTZWN0aW9uU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczYuZ2V0U2VjdGlvblN1Z2dlc3Rpb25zLFxuICAgICAgICAgIHRoZW1lID0gX3RoaXMkcHJvcHM2LnRoZW1lLFxuICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZSA9IF90aGlzJHByb3BzNi5nZXRTdWdnZXN0aW9uVmFsdWUsXG4gICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczYuYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uID0gX3RoaXMkcHJvcHM2LmhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbixcbiAgICAgICAgICBjb250YWluZXJQcm9wcyA9IF90aGlzJHByb3BzNi5jb250YWluZXJQcm9wcztcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHN0YXRlMi5pc0ZvY3VzZWQsXG4gICAgICAgICAgaXNDb2xsYXBzZWQgPSBfdGhpcyRzdGF0ZTIuaXNDb2xsYXBzZWQsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZTIuaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZTIuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgICAgdmFsdWVCZWZvcmVVcERvd24gPSBfdGhpcyRzdGF0ZTIudmFsdWVCZWZvcmVVcERvd247XG4gICAgICB2YXIgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMgPSBhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyA/IGFsd2F5c1RydWUgOiB0aGlzLnByb3BzLnNob3VsZFJlbmRlclN1Z2dlc3Rpb25zO1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRQcm9wcy52YWx1ZSxcbiAgICAgICAgICBfb25Gb2N1cyA9IGlucHV0UHJvcHMub25Gb2N1cyxcbiAgICAgICAgICBfb25LZXlEb3duID0gaW5wdXRQcm9wcy5vbktleURvd247XG4gICAgICB2YXIgd2lsbFJlbmRlclN1Z2dlc3Rpb25zID0gdGhpcy53aWxsUmVuZGVyU3VnZ2VzdGlvbnModGhpcy5wcm9wcywgJ3JlbmRlcicpO1xuICAgICAgdmFyIGlzT3BlbiA9IGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIHx8IGlzRm9jdXNlZCAmJiAhaXNDb2xsYXBzZWQgJiYgd2lsbFJlbmRlclN1Z2dlc3Rpb25zO1xuICAgICAgdmFyIGl0ZW1zID0gaXNPcGVuID8gc3VnZ2VzdGlvbnMgOiBbXTtcblxuICAgICAgdmFyIGF1dG93aGF0ZXZlcklucHV0UHJvcHMgPSBfb2JqZWN0U3ByZWFkKHt9LCBpbnB1dFByb3BzLCB7XG4gICAgICAgIG9uRm9jdXM6IGZ1bmN0aW9uIG9uRm9jdXMoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIV90aGlzMy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uICYmICFfdGhpczMuanVzdENsaWNrZWRPblN1Z2dlc3Rpb25zQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB2YXIgc2hvdWxkUmVuZGVyID0gc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnModmFsdWUsIFJFQVNPTl9JTlBVVF9GT0NVU0VEKTtcblxuICAgICAgICAgICAgX3RoaXMzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgaXNGb2N1c2VkOiB0cnVlLFxuICAgICAgICAgICAgICBpc0NvbGxhcHNlZDogIXNob3VsZFJlbmRlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIF9vbkZvY3VzICYmIF9vbkZvY3VzKGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKHNob3VsZFJlbmRlcikge1xuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICByZWFzb246IFJFQVNPTl9JTlBVVF9GT0NVU0VEXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25CbHVyOiBmdW5jdGlvbiBvbkJsdXIoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLmp1c3RDbGlja2VkT25TdWdnZXN0aW9uc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgX3RoaXMzLmlucHV0LmZvY3VzKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczMuYmx1ckV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgICBpZiAoIV90aGlzMy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICBfdGhpczMub25CbHVyKCk7XG5cbiAgICAgICAgICAgIF90aGlzMy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICB2YXIgc2hvdWxkUmVuZGVyID0gc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnModmFsdWUsIFJFQVNPTl9JTlBVVF9DSEFOR0VEKTtcblxuICAgICAgICAgIF90aGlzMy5tYXliZUNhbGxPbkNoYW5nZShldmVudCwgdmFsdWUsICd0eXBlJyk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMzLnN1Z2dlc3Rpb25zQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBfdGhpczMuc3VnZ2VzdGlvbnNDb250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczMuc2V0U3RhdGUoX29iamVjdFNwcmVhZCh7fSwgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uID8ge30gOiB7XG4gICAgICAgICAgICBoaWdobGlnaHRlZFNlY3Rpb25JbmRleDogbnVsbCxcbiAgICAgICAgICAgIGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4OiBudWxsLFxuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uOiBudWxsXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgdmFsdWVCZWZvcmVVcERvd246IG51bGwsXG4gICAgICAgICAgICBpc0NvbGxhcHNlZDogIXNob3VsZFJlbmRlclxuICAgICAgICAgIH0pKTtcblxuICAgICAgICAgIGlmIChzaG91bGRSZW5kZXIpIHtcbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCh7XG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgcmVhc29uOiBSRUFTT05fSU5QVVRfQ0hBTkdFRFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzMy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uS2V5RG93bjogZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50LCBkYXRhKSB7XG4gICAgICAgICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIDQwOiAvLyBBcnJvd0Rvd25cblxuICAgICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgICAgLy8gQXJyb3dVcFxuICAgICAgICAgICAgICBpZiAoaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnModmFsdWUsIFJFQVNPTl9TVUdHRVNUSU9OU19SRVZFQUxFRCkpIHtcbiAgICAgICAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiBSRUFTT05fU1VHR0VTVElPTlNfUkVWRUFMRURcbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICBfdGhpczMucmV2ZWFsU3VnZ2VzdGlvbnMoKTtcblxuICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gV2UgYWN0IG9uIHRoZSBrZXkuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3SGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXggPSBkYXRhLm5ld0hpZ2hsaWdodGVkU2VjdGlvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICBuZXdIaWdobGlnaHRlZEl0ZW1JbmRleCA9IGRhdGEubmV3SGlnaGxpZ2h0ZWRJdGVtSW5kZXg7XG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5ld0hpZ2hsaWdodGVkSXRlbUluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyB2YWx1ZUJlZm9yZVVwRG93biBjYW4gYmUgbnVsbCBpZiwgZm9yIGV4YW1wbGUsIHVzZXJcbiAgICAgICAgICAgICAgICAgIC8vIGhvdmVycyBvbiB0aGUgZmlyc3Qgc3VnZ2VzdGlvbiBhbmQgdGhlbiBwcmVzc2VkIFVwLlxuICAgICAgICAgICAgICAgICAgLy8gSWYgdGhhdCBoYXBwZW5zLCB1c2UgdGhlIG9yaWdpbmFsIGlucHV0IHZhbHVlLlxuICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSB2YWx1ZUJlZm9yZVVwRG93biA9PT0gbnVsbCA/IHZhbHVlIDogdmFsdWVCZWZvcmVVcERvd247XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gX3RoaXMzLmdldFN1Z2dlc3Rpb25WYWx1ZUJ5SW5kZXgobmV3SGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXgsIG5ld0hpZ2hsaWdodGVkSXRlbUluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBfdGhpczMudXBkYXRlSGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKG5ld0hpZ2hsaWdodGVkU2VjdGlvbkluZGV4LCBuZXdIaWdobGlnaHRlZEl0ZW1JbmRleCwgdmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgX3RoaXMzLm1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCBuZXdWYWx1ZSwga2V5Q29kZSA9PT0gNDAgPyAnZG93bicgOiAndXAnKTtcblxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFdlIGFjdCBvbiB0aGUga2V5LlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX3RoaXMzLmp1c3RQcmVzc2VkVXBEb3duID0gdHJ1ZTtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMzLmp1c3RQcmVzc2VkVXBEb3duID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIEVudGVyXG5cbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTZWUgIzM4OFxuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAyMjkpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBoaWdobGlnaHRlZFN1Z2dlc3Rpb24gPSBfdGhpczMuZ2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNPcGVuICYmICFhbHdheXNSZW5kZXJTdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgX3RoaXMzLmNsb3NlU3VnZ2VzdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgIHZhciBfbmV3VmFsdWUgPSBnZXRTdWdnZXN0aW9uVmFsdWUoaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgX3RoaXMzLm1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCBfbmV3VmFsdWUsICdlbnRlcicpO1xuXG4gICAgICAgICAgICAgICAgICBfdGhpczMub25TdWdnZXN0aW9uU2VsZWN0ZWQoZXZlbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbjogaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uVmFsdWU6IF9uZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkluZGV4OiBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbkluZGV4OiBoaWdobGlnaHRlZFNlY3Rpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnZW50ZXInXG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgX3RoaXMzLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzMy5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXNjYXBlXG5cbiAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAvLyBJZiBpbnB1dC50eXBlID09PSAnc2VhcmNoJywgdGhlIGJyb3dzZXIgY2xlYXJzIHRoZSBpbnB1dFxuICAgICAgICAgICAgICAgICAgLy8gd2hlbiBFc2NhcGUgaXMgcHJlc3NlZC4gV2Ugd2FudCB0byBkaXNhYmxlIHRoaXMgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgLy8gYmVoYXZpb3VyIHNvIHRoYXQsIHdoZW4gc3VnZ2VzdGlvbnMgYXJlIHNob3duLCB3ZSBqdXN0IGhpZGVcbiAgICAgICAgICAgICAgICAgIC8vIHRoZW0sIHdpdGhvdXQgY2xlYXJpbmcgdGhlIGlucHV0LlxuICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgd2lsbENsb3NlU3VnZ2VzdGlvbnMgPSBpc09wZW4gJiYgIWFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlQmVmb3JlVXBEb3duID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyBEaWRuJ3QgaW50ZXJhY3Qgd2l0aCBVcC9Eb3duXG4gICAgICAgICAgICAgICAgICBpZiAoIXdpbGxDbG9zZVN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfbmV3VmFsdWUyID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgX3RoaXMzLm1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCBfbmV3VmFsdWUyLCAnZXNjYXBlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zKF9uZXdWYWx1ZTIsIFJFQVNPTl9FU0NBUEVfUFJFU1NFRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF9uZXdWYWx1ZTIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IFJFQVNPTl9FU0NBUEVfUFJFU1NFRFxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBJbnRlcmFjdGVkIHdpdGggVXAvRG93blxuICAgICAgICAgICAgICAgICAgX3RoaXMzLm1heWJlQ2FsbE9uQ2hhbmdlKGV2ZW50LCB2YWx1ZUJlZm9yZVVwRG93biwgJ2VzY2FwZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh3aWxsQ2xvc2VTdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgX3RoaXMzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCgpO1xuXG4gICAgICAgICAgICAgICAgICBfdGhpczMuY2xvc2VTdWdnZXN0aW9ucygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBfdGhpczMucmVzZXRIaWdobGlnaHRlZFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIF9vbktleURvd24gJiYgX29uS2V5RG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVuZGVyU3VnZ2VzdGlvbkRhdGEgPSB7XG4gICAgICAgIHF1ZXJ5OiB0aGlzLmdldFF1ZXJ5KClcbiAgICAgIH07XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChfQXV0b3doYXRldmVyW1wiZGVmYXVsdFwiXSwge1xuICAgICAgICBtdWx0aVNlY3Rpb246IG11bHRpU2VjdGlvbixcbiAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudDogcmVuZGVySW5wdXRDb21wb25lbnQsXG4gICAgICAgIHJlbmRlckl0ZW1zQ29udGFpbmVyOiB0aGlzLnJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyLFxuICAgICAgICByZW5kZXJJdGVtOiByZW5kZXJTdWdnZXN0aW9uLFxuICAgICAgICByZW5kZXJJdGVtRGF0YTogcmVuZGVyU3VnZ2VzdGlvbkRhdGEsXG4gICAgICAgIHJlbmRlclNlY3Rpb25UaXRsZTogcmVuZGVyU2VjdGlvblRpdGxlLFxuICAgICAgICBnZXRTZWN0aW9uSXRlbXM6IGdldFNlY3Rpb25TdWdnZXN0aW9ucyxcbiAgICAgICAgaGlnaGxpZ2h0ZWRTZWN0aW9uSW5kZXg6IGhpZ2hsaWdodGVkU2VjdGlvbkluZGV4LFxuICAgICAgICBoaWdobGlnaHRlZEl0ZW1JbmRleDogaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgIGNvbnRhaW5lclByb3BzOiBjb250YWluZXJQcm9wcyxcbiAgICAgICAgaW5wdXRQcm9wczogYXV0b3doYXRldmVySW5wdXRQcm9wcyxcbiAgICAgICAgaXRlbVByb3BzOiB0aGlzLml0ZW1Qcm9wcyxcbiAgICAgICAgdGhlbWU6ICgwLCBfdGhlbWUubWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSkodGhlbWUpLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIHJlZjogdGhpcy5zdG9yZUF1dG93aGF0ZXZlclJlZlxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEF1dG9zdWdnZXN0O1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBBdXRvc3VnZ2VzdDtcblxuX2RlZmluZVByb3BlcnR5KEF1dG9zdWdnZXN0LCBcInByb3BUeXBlc1wiLCB7XG4gIHN1Z2dlc3Rpb25zOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5hcnJheS5pc1JlcXVpcmVkLFxuICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ6IGZ1bmN0aW9uIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZChwcm9wcywgcHJvcE5hbWUpIHtcbiAgICB2YXIgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIidvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQnIG11c3QgYmUgaW1wbGVtZW50ZWQuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL21vcm9zaGtvL3JlYWN0LWF1dG9zdWdnZXN0I29uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZFByb3BcIik7XG4gICAgfVxuICB9LFxuICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ6IGZ1bmN0aW9uIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZChwcm9wcywgcHJvcE5hbWUpIHtcbiAgICB2YXIgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BzLmFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zID09PSBmYWxzZSAmJiB0eXBlb2Ygb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkJyBtdXN0IGJlIGltcGxlbWVudGVkLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3Jvc2hrby9yZWFjdC1hdXRvc3VnZ2VzdCNvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWRQcm9wXCIpO1xuICAgIH1cbiAgfSxcbiAgc2hvdWxkS2VlcFN1Z2dlc3Rpb25zT25TZWxlY3Q6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIG9uU3VnZ2VzdGlvblNlbGVjdGVkOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLFxuICBvblN1Z2dlc3Rpb25IaWdobGlnaHRlZDogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYyxcbiAgcmVuZGVySW5wdXRDb21wb25lbnQ6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIHJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5mdW5jLFxuICBnZXRTdWdnZXN0aW9uVmFsdWU6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMuaXNSZXF1aXJlZCxcbiAgcmVuZGVyU3VnZ2VzdGlvbjogX3Byb3BUeXBlc1tcImRlZmF1bHRcIl0uZnVuYy5pc1JlcXVpcmVkLFxuICBpbnB1dFByb3BzOiBmdW5jdGlvbiBpbnB1dFByb3BzKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIHZhciBpbnB1dFByb3BzID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKCFpbnB1dFByb3BzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInaW5wdXRQcm9wcycgbXVzdCBiZSBwYXNzZWQuXCIpO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlucHV0UHJvcHMsICd2YWx1ZScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInaW5wdXRQcm9wcycgbXVzdCBoYXZlICd2YWx1ZScuXCIpO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlucHV0UHJvcHMsICdvbkNoYW5nZScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInaW5wdXRQcm9wcycgbXVzdCBoYXZlICdvbkNoYW5nZScuXCIpO1xuICAgIH1cbiAgfSxcbiAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM6IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5ib29sLFxuICBtdWx0aVNlY3Rpb246IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmJvb2wsXG4gIHJlbmRlclNlY3Rpb25UaXRsZTogZnVuY3Rpb24gcmVuZGVyU2VjdGlvblRpdGxlKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIHZhciByZW5kZXJTZWN0aW9uVGl0bGUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcHMubXVsdGlTZWN0aW9uID09PSB0cnVlICYmIHR5cGVvZiByZW5kZXJTZWN0aW9uVGl0bGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIidyZW5kZXJTZWN0aW9uVGl0bGUnIG11c3QgYmUgaW1wbGVtZW50ZWQuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL21vcm9zaGtvL3JlYWN0LWF1dG9zdWdnZXN0I3JlbmRlclNlY3Rpb25UaXRsZVByb3BcIik7XG4gICAgfVxuICB9LFxuICBnZXRTZWN0aW9uU3VnZ2VzdGlvbnM6IGZ1bmN0aW9uIGdldFNlY3Rpb25TdWdnZXN0aW9ucyhwcm9wcywgcHJvcE5hbWUpIHtcbiAgICB2YXIgZ2V0U2VjdGlvblN1Z2dlc3Rpb25zID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BzLm11bHRpU2VjdGlvbiA9PT0gdHJ1ZSAmJiB0eXBlb2YgZ2V0U2VjdGlvblN1Z2dlc3Rpb25zICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInZ2V0U2VjdGlvblN1Z2dlc3Rpb25zJyBtdXN0IGJlIGltcGxlbWVudGVkLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3Jvc2hrby9yZWFjdC1hdXRvc3VnZ2VzdCNnZXRTZWN0aW9uU3VnZ2VzdGlvbnNQcm9wXCIpO1xuICAgIH1cbiAgfSxcbiAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5ib29sLFxuICBoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb246IF9wcm9wVHlwZXNbXCJkZWZhdWx0XCJdLmJvb2wsXG4gIHRoZW1lOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QsXG4gIGlkOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5zdHJpbmcsXG4gIGNvbnRhaW5lclByb3BzOiBfcHJvcFR5cGVzW1wiZGVmYXVsdFwiXS5vYmplY3QgLy8gQXJiaXRyYXJ5IGNvbnRhaW5lciBwcm9wc1xuXG59KTtcblxuX2RlZmluZVByb3BlcnR5KEF1dG9zdWdnZXN0LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyOiBkZWZhdWx0UmVuZGVyU3VnZ2VzdGlvbnNDb250YWluZXIsXG4gIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zOiBkZWZhdWx0U2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMsXG4gIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zOiBmYWxzZSxcbiAgbXVsdGlTZWN0aW9uOiBmYWxzZSxcbiAgc2hvdWxkS2VlcFN1Z2dlc3Rpb25zT25TZWxlY3Q6IGZ1bmN0aW9uIHNob3VsZEtlZXBTdWdnZXN0aW9uc09uU2VsZWN0KCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrOiB0cnVlLFxuICBoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb246IGZhbHNlLFxuICB0aGVtZTogX3RoZW1lLmRlZmF1bHRUaGVtZSxcbiAgaWQ6ICcxJyxcbiAgY29udGFpbmVyUHJvcHM6IHt9XG59KTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbEFycmF5cyhhcnJBLCBhcnJCKSB7XG4gIGlmIChhcnJBID09PSBhcnJCKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWFyckEgfHwgIWFyckIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgbGVuID0gYXJyQS5sZW5ndGg7XG5cbiAgaWYgKGFyckIubGVuZ3RoICE9PSBsZW4pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFyckFbaV0gIT09IGFyckJbaV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaGFsbG93RXF1YWxBcnJheXM7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSA9IGV4cG9ydHMuZGVmYXVsdFRoZW1lID0gdm9pZCAwO1xudmFyIGRlZmF1bHRUaGVtZSA9IHtcbiAgY29udGFpbmVyOiAncmVhY3QtYXV0b3N1Z2dlc3RfX2NvbnRhaW5lcicsXG4gIGNvbnRhaW5lck9wZW46ICdyZWFjdC1hdXRvc3VnZ2VzdF9fY29udGFpbmVyLS1vcGVuJyxcbiAgaW5wdXQ6ICdyZWFjdC1hdXRvc3VnZ2VzdF9faW5wdXQnLFxuICBpbnB1dE9wZW46ICdyZWFjdC1hdXRvc3VnZ2VzdF9faW5wdXQtLW9wZW4nLFxuICBpbnB1dEZvY3VzZWQ6ICdyZWFjdC1hdXRvc3VnZ2VzdF9faW5wdXQtLWZvY3VzZWQnLFxuICBzdWdnZXN0aW9uc0NvbnRhaW5lcjogJ3JlYWN0LWF1dG9zdWdnZXN0X19zdWdnZXN0aW9ucy1jb250YWluZXInLFxuICBzdWdnZXN0aW9uc0NvbnRhaW5lck9wZW46ICdyZWFjdC1hdXRvc3VnZ2VzdF9fc3VnZ2VzdGlvbnMtY29udGFpbmVyLS1vcGVuJyxcbiAgc3VnZ2VzdGlvbnNMaXN0OiAncmVhY3QtYXV0b3N1Z2dlc3RfX3N1Z2dlc3Rpb25zLWxpc3QnLFxuICBzdWdnZXN0aW9uOiAncmVhY3QtYXV0b3N1Z2dlc3RfX3N1Z2dlc3Rpb24nLFxuICBzdWdnZXN0aW9uRmlyc3Q6ICdyZWFjdC1hdXRvc3VnZ2VzdF9fc3VnZ2VzdGlvbi0tZmlyc3QnLFxuICBzdWdnZXN0aW9uSGlnaGxpZ2h0ZWQ6ICdyZWFjdC1hdXRvc3VnZ2VzdF9fc3VnZ2VzdGlvbi0taGlnaGxpZ2h0ZWQnLFxuICBzZWN0aW9uQ29udGFpbmVyOiAncmVhY3QtYXV0b3N1Z2dlc3RfX3NlY3Rpb24tY29udGFpbmVyJyxcbiAgc2VjdGlvbkNvbnRhaW5lckZpcnN0OiAncmVhY3QtYXV0b3N1Z2dlc3RfX3NlY3Rpb24tY29udGFpbmVyLS1maXJzdCcsXG4gIHNlY3Rpb25UaXRsZTogJ3JlYWN0LWF1dG9zdWdnZXN0X19zZWN0aW9uLXRpdGxlJ1xufTtcbmV4cG9ydHMuZGVmYXVsdFRoZW1lID0gZGVmYXVsdFRoZW1lO1xuXG52YXIgbWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSA9IGZ1bmN0aW9uIG1hcFRvQXV0b3doYXRldmVyVGhlbWUodGhlbWUpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiB0aGVtZSkge1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICdzdWdnZXN0aW9uc0NvbnRhaW5lcic6XG4gICAgICAgIHJlc3VsdFsnaXRlbXNDb250YWluZXInXSA9IHRoZW1lW2tleV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4nOlxuICAgICAgICByZXN1bHRbJ2l0ZW1zQ29udGFpbmVyT3BlbiddID0gdGhlbWVba2V5XTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N1Z2dlc3Rpb24nOlxuICAgICAgICByZXN1bHRbJ2l0ZW0nXSA9IHRoZW1lW2tleV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdWdnZXN0aW9uRmlyc3QnOlxuICAgICAgICByZXN1bHRbJ2l0ZW1GaXJzdCddID0gdGhlbWVba2V5XTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N1Z2dlc3Rpb25IaWdobGlnaHRlZCc6XG4gICAgICAgIHJlc3VsdFsnaXRlbUhpZ2hsaWdodGVkJ10gPSB0aGVtZVtrZXldO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3VnZ2VzdGlvbnNMaXN0JzpcbiAgICAgICAgcmVzdWx0WydpdGVtc0xpc3QnXSA9IHRoZW1lW2tleV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXN1bHRba2V5XSA9IHRoZW1lW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydHMubWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSA9IG1hcFRvQXV0b3doYXRldmVyVGhlbWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9BdXRvc3VnZ2VzdCcpW1wiZGVmYXVsdFwiXTsiLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZUxheW91dEVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc2VsZWN0LnNjc3MnO1xuXG5jb25zdCBTZWxlY3QgPSAoe1xuICB2YWx1ZSxcbiAgZ2V0RGlzcGxheSxcbiAgb3B0aW9ucyxcbiAgb25TbGFja1RpbWVTZWxlY3RlZCxcbiAgdmlhUG9pbnRJbmRleCxcbiAgaWQsXG4gIGxhYmVsLFxuICBpY29uLFxufSkgPT4ge1xuICBjb25zdCBbZGlzcGxheVZhbHVlLCBjaGFuZ2VEaXNwbGF5VmFsdWVdID0gdXNlU3RhdGUoZ2V0RGlzcGxheSh2YWx1ZSkpO1xuICBjb25zdCBbb3BlbiwgY2hhbmdlT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBjaGFuZ2VEaXNwbGF5VmFsdWUoZ2V0RGlzcGxheSh2YWx1ZSkpLCBbdmFsdWVdKTtcbiAgY29uc3Qgc2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBzY3JvbGxJbmRleCA9IE1hdGguZmxvb3IodmFsdWUgLyA2MDApO1xuICBjb25zdCBlbGVtZW50SGVpZ2h0ID0gNTA7XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4gJiYgc2Nyb2xsUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNjcm9sbFJlZi5jdXJyZW50LnNjcm9sbFRvcCA9IGVsZW1lbnRIZWlnaHQgKiBzY3JvbGxJbmRleDtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgb3Blbl0pO1xuXG4gIGNvbnN0IGlucHV0SWQgPSBgJHtpZH0taW5wdXRgO1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcblxuICBjb25zdCBvbklucHV0Q2hhbmdlID0gKF8sIHsgbmV3VmFsdWUsIG1ldGhvZCB9KSA9PiB7XG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ2VudGVyJzpcbiAgICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgICAgb25TbGFja1RpbWVTZWxlY3RlZChuZXdWYWx1ZSwgdmlhUG9pbnRJbmRleCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgY2hhbmdlRGlzcGxheVZhbHVlKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1cCc6XG4gICAgICBjYXNlICdkb3duJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWwgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWNvbnRhaW5lciddfSBodG1sRm9yPXtpbnB1dElkfT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydsZWZ0LWNvbHVtbiddfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWxhYmVsJ119IGlkPXtsYWJlbElkfT5cbiAgICAgICAgICB7bGFiZWx9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPEF1dG9zdWdnZXN0XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIHN1Z2dlc3Rpb25zPXtvcHRpb25zfVxuICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17cyA9PiBzLnZhbHVlfVxuICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3MgPT4gcy5kaXNwbGF5TmFtZX1cbiAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9eygpID0+IG51bGx9XG4gICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRydWV9XG4gICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrPXtmYWxzZX1cbiAgICAgICAgICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ9eygpID0+IG51bGx9XG4gICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgdmFsdWU6IGRpc3BsYXlWYWx1ZSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBvbklucHV0Q2hhbmdlLFxuICAgICAgICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgICBjaGFuZ2VPcGVuKHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgICBjaGFuZ2VPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZDogaW5wdXRJZCxcbiAgICAgICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiBsYWJlbElkLFxuICAgICAgICAgICAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogJ25vbmUnLFxuICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgICAgfX1cbiAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lcj17KHsgY29udGFpbmVyUHJvcHMsIGNoaWxkcmVuIH0pID0+IHtcbiAgICAgICAgICAgIC8vIHNldCByZWZzIGZvciBhdXRvc3VnZ2VzdCBsaWJyYXJ5IGFuZCBzY3JvbGxiYXIgcG9zaXRpb25pbmdcbiAgICAgICAgICAgIGNvbnN0IHsgcmVmLCAuLi5vdGhlclJlZnMgfSA9IGNvbnRhaW5lclByb3BzO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVmID0gZWxlbSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgICAgICAgICAgc2Nyb2xsUmVmLmN1cnJlbnQgPSBlbGVtO1xuICAgICAgICAgICAgICAgIHJlZihlbGVtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXYgdGFiSW5kZXg9XCItMVwiIHsuLi5vdGhlclJlZnN9IHJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgIC8+XG4gICAgICA8L3NwYW4+XG4gICAgICB7aWNvbn1cbiAgICA8L2xhYmVsPlxuICApO1xufTtcblxuU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgb25TbGFja1RpbWVTZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0RGlzcGxheTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGRpc3BsYXlOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICkuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIGljb246IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIHZpYVBvaW50SW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0bDvGdlIFp3aXNjaGVuemllbCBoaW56dScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0emUgVW1zdGVpZ2V6ZWl0IGbDvHIgWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnU2NobGllw59lIFVtc3RlaWdlemVpdC1BdXN3YWhsIGbDvHIgWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICfDlmZmbmUgVW1zdGVpZ2V6ZWl0LUF1c3dhaGwgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdFbnRmZXJuZSBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdUYXVzY2hlIFN0YXJ0IG1pdCBaaWVsJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAndmlhcG9pbnQtc2xhY2stYW1vdW50JzogJ1Vtc3RlaWdlemVpdCcsXG4gICAgfSxcbiAgfSxcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICAncmVtb3ZlLXZpYS1idXR0b24tbGFiZWwnOiAnUmVtb3ZlIHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ1JldmVyc2Ugb3JpZ2luIGFuZCBkZXN0aW5hdGlvbicsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1ZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdTdG9wIGR1cmF0aW9uJyxcbiAgICB9LFxuICB9LFxuICBmaToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTGlzw6TDpCB2w6RsaXBpc3RlJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdBc2V0YSB2w6RsaXBpc3RlZWxsZSB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ1N1bGplIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdQb2lzdGEgdsOkbGlwaXN0ZSB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ0vDpMOkbm7DpCByZWl0aW4gc3V1bnRhIHZhc3Rha2thaXNla3NpJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1bDpGxpcGlzdGUge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnUHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICB9LFxuICB9LFxuICBwbDoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRG9kYWogcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdXeWJpZXJ6IGN6YXMgcG9zdG9qdSBkbGEgcHVua3R1IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3R3w7NyeiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdVc3XFhCBwdW5rdCBwb8WbcmVkbmkge3tpbmRleH19JyxcbiAgICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdPZHdyw7PEhyBwb2N6xIV0ZWsgaSBjZWwnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdQdW5rdCBwb8WbcmVkbmknLFxuICAgICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdQdW5rdCBwb8WbcmVkbmkge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnQ3phcyBwb3N0b2p1JyxcbiAgICB9LFxuICB9LFxuICBzdjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTMOkZ2cgdGlsbCB2aWFwdW5rdCcsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ1N0w6RuZyB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ8OWcHBuYSB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdUYSBib3J0IHZpYXB1bmt0IHt7aW5kZXh9fScsXG4gICAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnU3bDpG5nIHJ1dHRlbnMgcmlrdG5pbmcgdGlsbCBkZW4gbW90c2F0dGEnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWaWEgcHVua3QnLFxuICAgICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdWaWEgcHVua3Qge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnU3RvcHBldHMgdmFyYWt0aWdoZXQnLFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCJpbXBvcnQgeyBjcmVhdGVJbnN0YW5jZSB9IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XG5cbmNvbnN0IGkxOG4gPSBjcmVhdGVJbnN0YW5jZSh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICAvLyBkZWJ1ZzogdHJ1ZSxcbiAgcmVzb3VyY2VzOiB0cmFuc2xhdGlvbnMsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgcmVhY3Q6IHtcbiAgICB1c2VTdXNwZW5zZTogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5pMThuLmluaXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgaTE4bjtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJMThuZXh0UHJvdmlkZXIsIHdpdGhUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgUmVhY3RTb3J0YWJsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlanMnO1xuaW1wb3J0IERUQXV0b1N1Z2dlc3QgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IEljb24sIHtcbiAgZGVmYXVsdENvbG9ycyxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJy4vaGVscGVycy9TZWxlY3QnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi9oZWxwZXJzL2kxOG4nO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuXG5leHBvcnQgY29uc3QgZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyID0gKCkgPT4gKHt9KTtcblxuY29uc3QgaXNWaWFQb2ludEVtcHR5ID0gdmlhUG9pbnQgPT4ge1xuICBpZiAodmlhUG9pbnQgPT09IHVuZGVmaW5lZCB8fCBpc0VtcHR5KHZpYVBvaW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2aWFQb2ludCk7XG4gIHJldHVybiAoXG4gICAga2V5cy5sZW5ndGggPT09IDEgfHwgKGtleXMubGVuZ3RoID09PSAyICYmIGtleXMuaW5jbHVkZXMoJ2xvY2F0aW9uU2xhY2snKSlcbiAgKTtcbn07XG5cbmNvbnN0IEl0aW5lcmFyeVNlYXJjaENvbnRyb2wgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBlbmFibGVkLFxuICBvbkNsaWNrLFxuICBvbktleVByZXNzLFxuICB3aWRlLFxuICAuLi5yZXN0XG59KSA9PiAoXG4gIDxkaXZcbiAgICBjbGFzc05hbWU9e3N0eWxlc1snaXRpbmVyYXJ5LXNlYXJjaC1jb250cm9sJ119XG4gICAgc3R5bGU9e3sgJy0td2lkdGgnOiB3aWRlID8gJzQ3cHgnIDogJzQwcHgnIH19XG4gID5cbiAgICB7b25DbGljayAmJiBlbmFibGVkICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbktleVByZXNzPXtvbktleVByZXNzfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5jb25zdCB1cGRhdGVWaWFQb2ludFNsYWNrID0gKFxuICBhY3RpdmVWaWFQb2ludFNsYWNrcyxcbiAgdXBkYXRlZFZpYVBvaW50SW5kZXgsXG4gIHZpYVBvaW50UmVtb3ZlZCA9IGZhbHNlLFxuKSA9PiB7XG4gIGNvbnN0IGZvdW5kQXRJbmRleCA9IGFjdGl2ZVZpYVBvaW50U2xhY2tzLmluZGV4T2YodXBkYXRlZFZpYVBvaW50SW5kZXgpO1xuICBpZiAoZm91bmRBdEluZGV4ID4gLTEpIHtcbiAgICBhY3RpdmVWaWFQb2ludFNsYWNrcy5zcGxpY2UoZm91bmRBdEluZGV4LCAxKTtcbiAgfVxuICByZXR1cm4gdmlhUG9pbnRSZW1vdmVkXG4gICAgPyBhY3RpdmVWaWFQb2ludFNsYWNrcy5tYXAodmFsdWUgPT5cbiAgICAgICAgdmFsdWUgPiB1cGRhdGVkVmlhUG9pbnRJbmRleCA/IHZhbHVlIC0gMSA6IHZhbHVlLFxuICAgICAgKVxuICAgIDogYWN0aXZlVmlhUG9pbnRTbGFja3M7XG59O1xuXG5jb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcbiAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IHZhbHVlID0gbG9jYXRpb24gPT5cbiAgKGxvY2F0aW9uICYmIGxvY2F0aW9uLmFkZHJlc3MpIHx8XG4gIChsb2NhdGlvbiAmJiBsb2NhdGlvbi5ncHMgJiYgbG9jYXRpb24ucmVhZHkgJiYgJ055a3lpbmVuIHNpamFpbnRpJykgfHxcbiAgJyc7XG5cbmNvbnN0IGdldExvY2F0aW9uVHlwZSA9IGxvY2F0aW9uID0+XG4gIGxvY2F0aW9uICYmIGxvY2F0aW9uLmdwcyA9PT0gdHJ1ZSA/ICdwb3NpdGlvbicgOiAnbG9jYXRpb24nO1xuXG5jb25zdCBnZXRTbGFja1RpbWVPcHRpb25zID0gdCA9PiB7XG4gIGNvbnN0IHRpbWVPcHRpb25zID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IDk7IGkrKykge1xuICAgIGNvbnN0IHZhbHVlSW5NaW51dGVzID0gaSAqIDEwO1xuICAgIHRpbWVPcHRpb25zLnB1c2goe1xuICAgICAgZGlzcGxheU5hbWU6IGAke3ZhbHVlSW5NaW51dGVzfSAke3QoJ21pbnV0ZS1zaG9ydCcpfWAsXG4gICAgICB2YWx1ZTogdmFsdWVJbk1pbnV0ZXMgKiA2MCxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdGltZU9wdGlvbnM7XG59O1xuXG5JdGluZXJhcnlTZWFyY2hDb250cm9sLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZW5hYmxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25LZXlQcmVzczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgd2lkZTogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5JdGluZXJhcnlTZWFyY2hDb250cm9sLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgd2lkZTogZmFsc2UsXG59O1xuXG4vKipcbiAqIFBhbmVsIHRoYXQgcmVuZGVycyB0d28gRFRBdXRvc3VnZ2VzdCBzZWFyY2ggZmllbGRzLCBpbmNsdWRpbmcgdmlhcG9pbnQgaGFuZGxpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqXG4gKiBjb25zdCBvcmlnaW4gPSB7XG4gKiAgbGF0OiA2MC4xNjkxOTYsXG4gKiAgbG9uOiAyNC45NTc2NzQsXG4gKiAgYWRkcmVzczogJ0FsZWtzYW50ZXJpbmthdHUsIEhlbHNpbmtpJyxcbiAqICBzZXQ6IHRydWUsXG4gKiAgcmVhZHk6IHRydWUsXG4gKiB9XG4gKlxuICogY29uc3QgZGVzdGluYXRpb24gPSB7XG4gKiAgIGxhdDogNjAuMTk5MDkzLFxuICogICBsb246IDI0Ljk0MDUzNixcbiAqICAgYWRkcmVzczogJ09wYXN0aW5zaWx0YSA2LCBIZWxzaW5raScsXG4gKiAgIHNldDogdHJ1ZSxcbiAqICAgcmVhZHk6IHRydWUsXG4gKiB9XG4gKiBvblNlbGVjdChpdGVtLCBpZCkge1xuICogIHJldHVybiBudWxsOyAgLy8gRGVmaW5lIHdoYXQgdG8gZG8gd2hlbiBhIHN1Z2dlc3Rpb24gaXMgYmVpbmcgc2VsZWN0ZWQuIE5vbmUgYnkgZGVmYXVsdC5cbiAqICB9XG4gKiBvbkNsZWFyKGlkKSB7XG4gKiAgcmV0dXJuIG51bGw7ICAvLyBEZWZpbmUgd2hhdCB0byBkbyB3aGVuIGEgc3VnZ2VzdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTm9uZSBieSBkZWZhdWx0LlxuICogfVxuICogY29uc3QgZ2V0QXV0b1N1Z2dlc3RJY29uczoge1xuICogICAvLyBDYWxsZWQgZm9yIGV2ZXJ5IGNpdHkgYmlrZSBzdGF0aW9uIHJlbmRlcmVkIGFzIGEgc2VhcmNoIHN1Z2dlc3Rpb24uIFNob3VsZCByZXR1cm4gdGhlIGljb24gYW5kXG4gKiAgIC8vIGNvbG9yIHVzZWQgZm9yIHRoYXQgc3RhdGlvbi4gVHdvIGljb25zIGFyZSBhdmFpbGFibGUsICdjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JyBhbmRpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQtc2Vjb25kYXJ5Jy5cbiAqICAgY2l0eWJpa2VzOiBzdGF0aW9uID0+IHtcbiAqICAgICAgcmV0dXJuIFsnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcsICcjZjJiNjJkJ107XG4gKiAgIH1cbiAqIH1cbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIExvY2F0aW9ucywgU3RvcHMsIFJvdXRlcywgVmVoaWNsZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSwgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIDxEVEF1dG9zdWdnZXN0UGFuZWxcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBvcmlnaW49e29yaWdpbn0gLy8gU2VsZWN0ZWQgb3JpZ2luIHBvaW50XG4gKiAgICBkZXN0aW5hdGlvbj17ZGVzdGluYXRpb259IC8vIFNlbGVjdGVkIGRlc3RpbmF0aW9uIHBvaW50XG4gKiAgICBvcmlnaW5QbGFjZUhvbGRlcj17J0dpdmUgb3JpZ2luJ30gLy8gT3B0aW9uYWwgR2l2ZSBzdHJpbmcgc2hvd24gaW5pdGlhbGx5IGluc2lkZSBvcmlnaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyPXsnR2l2ZSBkZXN0aW5hdGlvbid9IC8vIE9wdGlvbmFsIEdpdmUgc3RyaW5nIHNob3duIGluaXRhbGx5IGluc2lkZSBkZXN0aW5hdGlvbiBzZWFyY2ggZmllbGRcbiAqICAgIGluaXRpYWxWaWFQb2ludHM9e1tdfSAvLyBPcHRpb25hbC4gIElmIHNob3dWaWFwb2ludENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIHBhc3MgaW5pdGlhbCB2aWEgcG9pbnRzIHRvIHRoZSBwYW5lbC4gQ3VycmVudGx5IG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICB1cGRhdGVWaWFQb2ludHM9eygpID0+IHJldHVybiBbXX0gLy8gT3B0aW9uYWwuIElmIHNob3dWaWFwb2ludENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIGRlZmluZSBob3cgdG8gdXBkYXRlIHlvdXIgdmlhIHBvaW50IGxpc3Qgd2l0aCB0aGlzIGZ1bmN0aW9uLiBDdXJyZW5sdHkgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHN3YXBPcmRlcj17KCkgPT4gcmV0dXJuIG51bGx9IC8vIE9wdGlvbmFsLiBJZiBzaG93U3dhcENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIGRlZmluZSBob3cgdG8gc3dhcCBvcmRlciBvZiB5b3VyIHBvaW50cyAob3JpZ2luLCBkZXN0aW5hdGlvbiwgdmlhcG9pbnRzKS4gQ3VycmVudGx5IG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIG9uU2VsZWN0PXt0aGlzLm9uU2VsZWN0fVxuICogICAgb25DbGVhcj17dGhpcy5vbkNsZWFyfVxuICogICAgbGFuZz1cImZpXCIgLy8gRGVmaW5lIGxhbmd1YWdlIGZpIHN2IG9yIGVuLlxuICogICAgYWRkQW5hbHl0aWNzRXZlbnQ9e251bGx9IC8vIE9wdGlvbmFsLiB5b3UgY2FuIHJlY29yZCBhbiBhbmFseXRpY3MgZXZlbnQgaWYgeW91IHdpc2guIGlmIHBhc3NlZCwgY29tcG9uZW50IHdpbGwgcGFzcyBhbiBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lIHBhcmFtZXRlcnMgdG8gYWRkQW5hbHl0aWNzRXZlbnRcbiAqICAgIGRpc2FibGVBdXRvRm9jdXM9e2ZhbHNlfSAvLyBPcHRpb25hbC4gdXNlIHRoaXMgdG8gZGlzYWJsZSBhdXRvZm9jdXMgY29tcGxldGVseSBmcm9tIERUQXV0b3N1Z2dlc3RQYW5lbFxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgb3JpZ2luTW9iaWxlTGFiZWw9XCJPcmlnaW4gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIG9yaWdpbiBmaWVsZCBvbiBtb2JpbGUuXG4gKiAgICBkZXN0aW5hdGlvbk1vYmlsZUxhYmVsPVwiRGVzdGluYXRpb24gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGRlc3RpbmF0aW9uIGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGhhbmRsZUZvY3VzQ2hhbmdlPXsoKSA9PiB7fX0gLy8gT3B0aW9uYWwuIElmIGRlZmluZWQgb3ZlcnJpZGVzIGRlZmF1bHQgb25Gb2N1c0NoYW5nZSBiZWhhdmlvdXJcbiAqICAgIHNob3dTd2FwQ29udHJvbD17ZmFsc2V9IC8vIE9wdGlvbmFsLlxuICogICAgc2hvd1ZpYXBvaW50Q29udHJvbD17ZmFsc2V9IC8vIE9wdGlvbmFsLlxuICovXG5cbmNvbnN0IGxvY2F0aW9uU2hhcGUgPSBQcm9wVHlwZXMuc2hhcGUoe1xuICBhZGRyZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgbG9jYXRpb25TbGFjazogUHJvcFR5cGVzLm51bWJlcixcbn0pO1xuXG5jbGFzcyBEVEF1dG9zdWdnZXN0UGFuZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBvcmlnaW46IGxvY2F0aW9uU2hhcGUsXG4gICAgZGVzdGluYXRpb246IGxvY2F0aW9uU2hhcGUsXG4gICAgb3JpZ2luUGxhY2VIb2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVzdGluYXRpb25QbGFjZUhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB2aWFQb2ludHM6IFByb3BUeXBlcy5hcnJheU9mKGxvY2F0aW9uU2hhcGUpLFxuICAgIHVwZGF0ZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzd2FwT3JkZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNlYXJjaFBhbmVsVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hDb250ZXh0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgVVJMX1BFTElBUzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFkZEFuYWx5dGljc0V2ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgZmlsdGVyUmVzdWx0czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIG9yaWdpbk1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmUG9pbnQ6IGxvY2F0aW9uU2hhcGUsXG4gICAgbW9kZVNldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICAgIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uRm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dTd2FwQ29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd1ZpYXBvaW50Q29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd1NsYWNrQ29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIG9yaWdpbjogdW5kZWZpbmVkLFxuICAgIGRlc3RpbmF0aW9uOiB1bmRlZmluZWQsXG4gICAgdmlhUG9pbnRzOiBbXSxcbiAgICBvcmlnaW5QbGFjZUhvbGRlcjogJ2dpdmUtb3JpZ2luJyxcbiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyOiAnZ2l2ZS1kZXN0aW5hdGlvbicsXG4gICAgc3dhcE9yZGVyOiB1bmRlZmluZWQsXG4gICAgdXBkYXRlVmlhUG9pbnRzOiAoKSA9PiB7fSxcbiAgICBzZWFyY2hQYW5lbFRleHQ6IHVuZGVmaW5lZCxcbiAgICBzb3VyY2VzOiBbXSxcbiAgICB0YXJnZXRzOiBbXSxcbiAgICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gICAgb25DbGVhcjogdW5kZWZpbmVkLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgICByZWZQb2ludDogdW5kZWZpbmVkLFxuICAgIGFkZEFuYWx5dGljc0V2ZW50OiB1bmRlZmluZWQsXG4gICAgZGlzYWJsZUF1dG9Gb2N1czogZmFsc2UsXG4gICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgIGhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIG9yaWdpbk1vYmlsZUxhYmVsOiBudWxsLFxuICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWw6IG51bGwsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIGNvbG9yczogZGVmYXVsdENvbG9ycyxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgICBzaG93U2Nyb2xsOiBmYWxzZSxcbiAgICBvbkZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gICAgaXNFbWJlZGRlZDogZmFsc2UsXG4gICAgc2hvd1N3YXBDb250cm9sOiBmYWxzZSxcbiAgICBzaG93VmlhcG9pbnRDb250cm9sOiBmYWxzZSxcbiAgICBzaG93U2xhY2tDb250cm9sOiBmYWxzZSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlU2xhY2tJbnB1dHM6IFtdLFxuICAgICAgcmVmczogW10sXG4gICAgfTtcbiAgfVxuXG4gIHN0b3JlUmVmZXJlbmNlID0gcmVmID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiAoeyByZWZzOiBbLi4ucHJldlN0YXRlLnJlZnMsIHJlZl0gfSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzQ2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZGVzdGluYXRpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFkZXN0aW5hdGlvbiB8fCAhZGVzdGluYXRpb24ubGF0KSB7XG4gICAgICB0aGlzLnN0YXRlLnJlZnNbMV0uZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlVmlhUG9pbnRzID0gdmlhUG9pbnRzID0+IHtcbiAgICBpZiAodmlhUG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wcm9wcy51cGRhdGVWaWFQb2ludHMoW10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMuZmlsdGVyKHZwID0+ICFpc1ZpYVBvaW50RW1wdHkodnApKSk7XG4gIH07XG5cbiAgaGFuZGxlVG9nZ2xlVmlhUG9pbnRTbGFja0NsaWNrID0gdmlhUG9pbnRJbmRleCA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmVTbGFja0lucHV0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzOiBhY3RpdmVTbGFja0lucHV0cy5pbmNsdWRlcyh2aWFQb2ludEluZGV4KVxuICAgICAgICA/IHVwZGF0ZVZpYVBvaW50U2xhY2soYWN0aXZlU2xhY2tJbnB1dHMsIHZpYVBvaW50SW5kZXgpXG4gICAgICAgIDogYWN0aXZlU2xhY2tJbnB1dHMuY29uY2F0KFt2aWFQb2ludEluZGV4XSksXG4gICAgfSk7XG4gIH07XG5cbiAgaGFuZGxlVmlhUG9pbnRTbGFja1RpbWVTZWxlY3RlZCA9IChzbGFja1RpbWVJblNlY29uZHMsIGkpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ0VkaXRWaWFQb2ludFN0b3BEdXJhdGlvbicsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiBzbGFja1RpbWVJblNlY29uZHMgLyA2MCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHNbaV0ubG9jYXRpb25TbGFjayA9IE51bWJlci5wYXJzZUludChzbGFja1RpbWVJblNlY29uZHMsIDEwKTtcbiAgICB0aGlzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMpO1xuICB9O1xuXG4gIGhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZCA9ICh2aWFQb2ludExvY2F0aW9uLCBpKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQodmlhUG9pbnRMb2NhdGlvbiwgaSk7XG4gIH07XG5cbiAgaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayA9IHZpYVBvaW50SW5kZXggPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KHtcbiAgICAgICAgYWN0aW9uOiAnUmVtb3ZlSm91cm5leVZpYVBvaW50JyxcbiAgICAgICAgY2F0ZWdvcnk6ICdJdGluZXJhcnlTZXR0aW5ncycsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyBhY3RpdmVTbGFja0lucHV0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHMuc3BsaWNlKHZpYVBvaW50SW5kZXgsIDEpO1xuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzOiB1cGRhdGVWaWFQb2ludFNsYWNrKFxuICAgICAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzLFxuICAgICAgICAgIHZpYVBvaW50SW5kZXgsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMpLFxuICAgICk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVmlhUG9pbnRDbGljayA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ0FkZEpvdXJuZXlWaWFQb2ludCcsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiAnUXVpY2tTZXR0aW5nc0J1dHRvbicsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyB2aWFQb2ludHMgfSA9IHRoaXMucHJvcHM7XG4gICAgdmlhUG9pbnRzLnB1c2goZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyKCkpO1xuICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBzbyB0aGF0IHBsYWNlSG9sZGVyIHdpbGwgc2hvdyB1cCBpbiBwYW5lbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYWNjZXNzLXN0YXRlLWluLXNldHN0YXRlXG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLnN0YXRlKTtcbiAgfTtcblxuICBoYW5kbGVTd2FwT3JkZXJDbGljayA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ1N3aXRjaEpvdXJuZXlTdGFydEFuZEVuZFBvaW50T3JkZXInLFxuICAgICAgICBjYXRlZ29yeTogJ0l0aW5lcmFyeVNldHRpbmdzJyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHMucmV2ZXJzZSgpO1xuICAgIHRoaXMucHJvcHMuc3dhcE9yZGVyKCk7XG4gIH07XG5cbiAgZ2V0U2xhY2tEaXNwbGF5ID0gc2xhY2tJblNlY29uZHMgPT5cbiAgICBgJHtzbGFja0luU2Vjb25kcyAvIDYwfSAke3RoaXMucHJvcHMudCgnbWludXRlLXNob3J0Jywge1xuICAgICAgbG5nOiB0aGlzLnByb3BzLmxhbmcsXG4gICAgfSl9YDtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgb3JpZ2luLFxuICAgICAgc2VhcmNoUGFuZWxUZXh0LFxuICAgICAgc2VhcmNoQ29udGV4dCxcbiAgICAgIGRpc2FibGVBdXRvRm9jdXMsXG4gICAgICB2aWFQb2ludHMsXG4gICAgICBvcmlnaW5Nb2JpbGVMYWJlbCxcbiAgICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWwsXG4gICAgICBmb250V2VpZ2h0cyxcbiAgICAgIG9uRm9jdXNDaGFuZ2UsXG4gICAgICBzaG93U3dhcENvbnRyb2wsXG4gICAgICBzaG93VmlhcG9pbnRDb250cm9sLFxuICAgICAgdCxcbiAgICAgIGxhbmc6IGxuZyxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHByaW1hcnkgfSA9IHRoaXMucHJvcHMuY29sb3JzO1xuICAgIGNvbnN0IHsgYWN0aXZlU2xhY2tJbnB1dHMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qgc2xhY2tUaW1lID0gZ2V0U2xhY2tUaW1lT3B0aW9ucyh0KTtcbiAgICBjb25zdCBkZWZhdWx0U2xhY2tUaW1lVmFsdWUgPSAwO1xuICAgIGNvbnN0IGdldFZpYVBvaW50U2xhY2tUaW1lT3JEZWZhdWx0ID0gKFxuICAgICAgdmlhUG9pbnQsXG4gICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0U2xhY2tUaW1lVmFsdWUsXG4gICAgKSA9PiAodmlhUG9pbnQgJiYgdmlhUG9pbnQubG9jYXRpb25TbGFjaykgfHwgZGVmYXVsdFZhbHVlO1xuICAgIGNvbnN0IGlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZSA9IGluZGV4ID0+XG4gICAgICBhY3RpdmVTbGFja0lucHV0cy5pbmNsdWRlcyhpbmRleCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1wYW5lbCddLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNtYWxsOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogcHJpbWFyeSxcbiAgICAgICAgICAnLS1mb250LXdlaWdodC1tZWRpdW0nOiBmb250V2VpZ2h0cy5tZWRpdW0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHsnICd9XG4gICAgICAgIHtzZWFyY2hQYW5lbFRleHQgPyAoXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9e3N0eWxlc1snYXV0b3N1Z2dlc3Qtc2VhcmNocGFuZWwtdGV4dCddfT5cbiAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAge3NlYXJjaFBhbmVsVGV4dH1cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydvcmlnaW4taW5wdXQtY29udGFpbmVyJ119PlxuICAgICAgICAgIDxEVEF1dG9TdWdnZXN0XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBpY29uPVwibWFwTWFya2VyXCJcbiAgICAgICAgICAgIGlkPVwib3JpZ2luXCJcbiAgICAgICAgICAgIGF1dG9Gb2N1cz17XG4gICAgICAgICAgICAgIGRpc2FibGVBdXRvRm9jdXMgPT09IHRydWVcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5wcm9wcy5pc01vYmlsZSAmJiAhb3JpZ2luLmxhdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RvcmVSZWY9e3RoaXMuc3RvcmVSZWZlcmVuY2V9XG4gICAgICAgICAgICByZWZQb2ludD17dGhpcy5wcm9wcy5yZWZQb2ludH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TG9jYXRpb25UeXBlKG9yaWdpbil9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5vcmlnaW5QbGFjZUhvbGRlcn1cbiAgICAgICAgICAgIHZhbHVlPXt2YWx1ZShvcmlnaW4pfVxuICAgICAgICAgICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAgICAgICAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e3RoaXMucHJvcHMuZ2V0QXV0b1N1Z2dlc3RJY29uc31cbiAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLnByb3BzLm9uU2VsZWN0fVxuICAgICAgICAgICAgb25DbGVhcj17dGhpcy5wcm9wcy5vbkNsZWFyfVxuICAgICAgICAgICAgZm9jdXNDaGFuZ2U9e29uRm9jdXNDaGFuZ2UgfHwgdGhpcy5oYW5kbGVGb2N1c0NoYW5nZX1cbiAgICAgICAgICAgIGxhbmc9e3RoaXMucHJvcHMubGFuZ31cbiAgICAgICAgICAgIHNvdXJjZXM9e3RoaXMucHJvcHMuc291cmNlc31cbiAgICAgICAgICAgIHRhcmdldHM9e3RoaXMucHJvcHMudGFyZ2V0c31cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHM9e3RoaXMucHJvcHMuZmlsdGVyUmVzdWx0c31cbiAgICAgICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICAgICAgY29sb3JzPXt0aGlzLnByb3BzLmNvbG9yc31cbiAgICAgICAgICAgIG1vYmlsZUxhYmVsPXtvcmlnaW5Nb2JpbGVMYWJlbH1cbiAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgbW9kZVNldD17dGhpcy5wcm9wcy5tb2RlU2V0fVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgICAgaXNFbWJlZGRlZD17dGhpcy5wcm9wcy5pc0VtYmVkZGVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyhzaG93U3dhcENvbnRyb2wgfHwgc2hvd1ZpYXBvaW50Q29udHJvbCkgJiYgKFxuICAgICAgICAgICAgPEl0aW5lcmFyeVNlYXJjaENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMub3Bwb3NpdGV9XG4gICAgICAgICAgICAgIGVuYWJsZWQ9e3Nob3dTd2FwQ29udHJvbH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVTd2FwT3JkZXJDbGljaygpfVxuICAgICAgICAgICAgICBvbktleVByZXNzPXtlID0+XG4gICAgICAgICAgICAgICAgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIHRoaXMuaGFuZGxlU3dhcE9yZGVyQ2xpY2soKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJywgeyBsbmcgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIGltZz1cIm9wcG9zaXRlXCIgY29sb3I9e3ByaW1hcnl9IC8+XG4gICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt2aWFQb2ludHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydyZWN0YW5nbGUtY29udGFpbmVyJ119PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yZWN0YW5nbGV9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxSZWFjdFNvcnRhYmxlXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ3ZpYXBvaW50cy1jb250YWluZXInXX1cbiAgICAgICAgICBsaXN0PXt2aWFQb2ludHN9XG4gICAgICAgICAgaGFuZGxlPXtgLiR7c3R5bGVzWyd2aWFwb2ludC1iZWZvcmUnXX1gfVxuICAgICAgICAgIGFuaW1hdGlvbj17MjAwfVxuICAgICAgICAgIGRpc2FibGVkPXt2aWFQb2ludHMubGVuZ3RoIDw9IDF9XG4gICAgICAgICAgc2V0TGlzdD17aXRlbXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3VmlhUG9pbnRzID0gaXRlbXMuZmlsdGVyKHZwID0+ICFpc1ZpYVBvaW50RW1wdHkodnApKTtcbiAgICAgICAgICAgIGlmIChuZXdWaWFQb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLnVwZGF0ZVZpYVBvaW50cyhuZXdWaWFQb2ludHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dmlhUG9pbnRzLm1hcCgobywgaSkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KHN0eWxlc1sndmlhcG9pbnQtY29udGFpbmVyJ10pfVxuICAgICAgICAgICAgICBrZXk9e2B2aWFwb2ludC0ke2l9YH0gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydsaWdodC1ncmF5LWJhY2tncm91bmQnXX0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb3d9PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1sndmlhcG9pbnQtYmVmb3JlJ119XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt2aWFQb2ludHMubGVuZ3RoID4gMSA/IHsgY3Vyc29yOiAnbW92ZScgfSA6IHt9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7dmlhUG9pbnRzLmxlbmd0aCA+IDEgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGltZz1cImVsbGlwc2lzXCIgcm90YXRlPXs5MH0gY29sb3I9e3ByaW1hcnl9IC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgICAgICAgICBgJHtzdHlsZXNbJ3ZpYXBvaW50LWlucHV0LWNvbnRhaW5lciddfSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzW2B2aWFwb2ludC0ke2kgKyAxfWBdXG4gICAgICAgICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxEVEF1dG9TdWdnZXN0XG4gICAgICAgICAgICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJtYXBNYXJrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwidmlhLXBvaW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9e3QoJ3ZpYS1wb2ludC1pbmRleCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxuZyxcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICBhdXRvRm9jdXM9e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUF1dG9Gb2N1cyA9PT0gdHJ1ZSA/IGZhbHNlIDogIXRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ2aWEtcG9pbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInZpYXBvaW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICAgICAgICAgICAgICAgICAgICAgIHJlZlBvaW50PXt0aGlzLnByb3BzLnJlZlBvaW50fVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXsobyAmJiBvLmFkZHJlc3MpIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLnByb3BzLm9uU2VsZWN0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xlYXI9e3RoaXMucHJvcHMub25DbGVhcn1cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVWaWFQb2ludHM9e2l0ZW0gPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkKGl0ZW0sIGkpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGxhbmc9e3RoaXMucHJvcHMubGFuZ31cbiAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzPXt0aGlzLnByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cz17dGhpcy5wcm9wcy50YXJnZXRzfVxuICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclJlc3VsdHM9e3RoaXMucHJvcHMuZmlsdGVyUmVzdWx0c31cbiAgICAgICAgICAgICAgICAgICAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXt0aGlzLnByb3BzLmdldEF1dG9TdWdnZXN0SWNvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgaXNNb2JpbGU9e3RoaXMucHJvcHMuaXNNb2JpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICAgICAgICAgICAgbW9kZVNldD17dGhpcy5wcm9wcy5tb2RlU2V0fVxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycz17dGhpcy5wcm9wcy5jb2xvcnN9XG4gICAgICAgICAgICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5zaG93U2xhY2tDb250cm9sICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEl0aW5lcmFyeVNlYXJjaENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snYWRkLXZpYS1wb2ludC1zbGFjayddfVxuICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ9e3RoaXMucHJvcHMuc2hvd1ZpYXBvaW50Q29udHJvbH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZVRvZ2dsZVZpYVBvaW50U2xhY2tDbGljayhpKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbktleVByZXNzPXtlID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVG9nZ2xlVmlhUG9pbnRTbGFja0NsaWNrKGkpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUoaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3BlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBpbmRleDogaSArIDEsIGxuZyB9LFxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgd2lkZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gaW1nPVwidGltZVwiIGNvbG9yPXtwcmltYXJ5fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHshaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlKGkpICYmXG4gICAgICAgICAgICAgICAgICB2aWFQb2ludHNbaV0gJiZcbiAgICAgICAgICAgICAgICAgIHZpYVBvaW50c1tpXS5sb2NhdGlvblNsYWNrID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWyd2aWFwb2ludC1zbGFjay10aW1lJ119PntgJHt0KFxuICAgICAgICAgICAgICAgICAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxuZyxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICApfTogJHt0aGlzLmdldFNsYWNrRGlzcGxheShcbiAgICAgICAgICAgICAgICAgICAgICB2aWFQb2ludHNbaV0ubG9jYXRpb25TbGFjayxcbiAgICAgICAgICAgICAgICAgICAgKX1gfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ2lucHV0LXZpYXBvaW50LXNsYWNrLWNvbnRhaW5lciddLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZDogIWlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZShpKSxcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ3NlbGVjdC13cmFwcGVyJ119PlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2B2aWFwb2ludC1zbGFjay0ke2l9YH1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17dCgndmlhcG9pbnQtc2xhY2stYW1vdW50JywgeyBsbmcgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17c2xhY2tUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtnZXRWaWFQb2ludFNsYWNrVGltZU9yRGVmYXVsdCh2aWFQb2ludHNbaV0pfVxuICAgICAgICAgICAgICAgICAgICAgIGdldERpc3BsYXk9e3RoaXMuZ2V0U2xhY2tEaXNwbGF5fVxuICAgICAgICAgICAgICAgICAgICAgIHZpYVBvaW50SW5kZXg9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj17XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlc1snY29tYm9ib3gtaWNvbiddfSAke3N0eWxlc1sndGltZS1pbnB1dC1pY29uJ119YH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaW1nPVwidGltZVwiIGNvbG9yPXtwcmltYXJ5fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBvblNsYWNrVGltZVNlbGVjdGVkPXt0aGlzLmhhbmRsZVZpYVBvaW50U2xhY2tUaW1lU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxJdGluZXJhcnlTZWFyY2hDb250cm9sXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ3JlbW92ZS12aWEtcG9pbnQnXX1cbiAgICAgICAgICAgICAgICBlbmFibGVkPXt0aGlzLnByb3BzLnNob3dWaWFwb2ludENvbnRyb2x9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrKGkpfVxuICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrKGkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJywge1xuICAgICAgICAgICAgICAgICAgaW5kZXg6IGkgKyAxLFxuICAgICAgICAgICAgICAgICAgbG5nLFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gaW1nPVwidHJhc2hcIiBjb2xvcj17cHJpbWFyeX0gLz5cbiAgICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvUmVhY3RTb3J0YWJsZT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZGVzdGluYXRpb24taW5wdXQtY29udGFpbmVyJ119PlxuICAgICAgICAgIDxEVEF1dG9TdWdnZXN0XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBpY29uPVwibWFwTWFya2VyXCJcbiAgICAgICAgICAgIGlkPVwiZGVzdGluYXRpb25cIlxuICAgICAgICAgICAgYXV0b0ZvY3VzPXtcbiAgICAgICAgICAgICAgZGlzYWJsZUF1dG9Gb2N1cyA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6ICF0aGlzLnByb3BzLmlzTW9iaWxlICYmICFOdW1iZXIuaXNOYU4ob3JpZ2luLmxhdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0b3JlUmVmPXt0aGlzLnN0b3JlUmVmZXJlbmNlfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMuZGVzdGluYXRpb25QbGFjZUhvbGRlcn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TG9jYXRpb25UeXBlKHRoaXMucHJvcHMuZGVzdGluYXRpb24pfVxuICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLnByb3BzLm9uU2VsZWN0fVxuICAgICAgICAgICAgb25DbGVhcj17dGhpcy5wcm9wcy5vbkNsZWFyfVxuICAgICAgICAgICAgcmVmUG9pbnQ9e3RoaXMucHJvcHMucmVmUG9pbnR9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUodGhpcy5wcm9wcy5kZXN0aW5hdGlvbil9XG4gICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgICBzb3VyY2VzPXt0aGlzLnByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICB0YXJnZXRzPXt0aGlzLnByb3BzLnRhcmdldHN9XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzPXt0aGlzLnByb3BzLmZpbHRlclJlc3VsdHN9XG4gICAgICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgICAgIG1vYmlsZUxhYmVsPXtkZXN0aW5hdGlvbk1vYmlsZUxhYmVsfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICBjb2xvcnM9e3RoaXMucHJvcHMuY29sb3JzfVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgICAgaXNFbWJlZGRlZD17dGhpcy5wcm9wcy5pc0VtYmVkZGVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyhzaG93U3dhcENvbnRyb2wgfHwgc2hvd1ZpYXBvaW50Q29udHJvbCkgJiYgKFxuICAgICAgICAgICAgPEl0aW5lcmFyeVNlYXJjaENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ2FkZC12aWEtcG9pbnQnXSwgc3R5bGVzLm1vcmUsIHtcbiAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6IHZpYVBvaW50cy5sZW5ndGggPiA0LFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgZW5hYmxlZD17c2hvd1ZpYXBvaW50Q29udHJvbCAmJiB2aWFQb2ludHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUFkZFZpYVBvaW50Q2xpY2soKX1cbiAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiB0aGlzLmhhbmRsZUFkZFZpYVBvaW50Q2xpY2soKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2FkZC12aWEtYnV0dG9uLWxhYmVsJywgeyBsbmcgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uXG4gICAgICAgICAgICAgICAgaW1nPVwidmlhcG9pbnRcIlxuICAgICAgICAgICAgICAgIHdpZHRoPXsxLjI1fVxuICAgICAgICAgICAgICAgIGhlaWdodD17MS4zNzV9XG4gICAgICAgICAgICAgICAgY29sb3I9e3ByaW1hcnl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IERUQXV0b3N1Z2dlc3RQYW5lbFdpdGhUcmFuc2xhdGlvbiA9IHdpdGhUcmFuc2xhdGlvbigpKERUQXV0b3N1Z2dlc3RQYW5lbCk7XG5cbmV4cG9ydCBkZWZhdWx0IHByb3BzID0+IHtcbiAgcmV0dXJuIChcbiAgICA8STE4bmV4dFByb3ZpZGVyIGkxOG49e2kxOG59PlxuICAgICAgPERUQXV0b3N1Z2dlc3RQYW5lbFdpdGhUcmFuc2xhdGlvbiB7Li4ucHJvcHN9IC8+XG4gICAgPC9JMThuZXh0UHJvdmlkZXI+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsInRvUHJvcGVydHlLZXkiLCJ0IiwiaSIsInIiLCJlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2RlZmluZVByb3BlcnR5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsImluZGV4T2YiLCJvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibGVuZ3RoIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJfc2xpY2VkVG9BcnJheSIsImFyciIsIkFycmF5IiwiaXNBcnJheSIsIl9hcnIiLCJfbiIsIl9kIiwiX2UiLCJ1bmRlZmluZWQiLCJfcyIsIl9pIiwibmV4dCIsImRvbmUiLCJwdXNoIiwiZXJyIiwic2xpY2VJdGVyYXRvciIsImRpc3QiLCJfcmVmIiwiZGF0YSIsIm11bHRpU2VjdGlvbiIsInBvc2l0aW9uIiwiX3Bvc2l0aW9uIiwic2VjdGlvbkluZGV4IiwiaXRlbUluZGV4IiwibmV4dE5vbkVtcHR5U2VjdGlvbkluZGV4IiwicHJldiIsIl9wb3NpdGlvbjIiLCJwcmV2Tm9uRW1wdHlTZWN0aW9uSW5kZXgiLCJpc0xhc3QiLCJwcm9wSXNFbnVtZXJhYmxlIiwib3duRW51bWVyYWJsZUtleXMiLCJvYmoiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImNvbmNhdCIsImZpbHRlciIsImtleSIsIm9iamVjdEFzc2lnbiIsImFzc2lnbiIsInRhcmdldCIsInNvdXJjZSIsImZyb20iLCJ0byIsInZhbCIsIlRvT2JqZWN0IiwicyIsImFyZ3VtZW50cyIsImV4cG9ydHMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIyIiwiX29iamVjdEFzc2lnbiIsInJlcXVpcmUkJDAiLCJfb2JqZWN0QXNzaWduMiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidHJ1dGh5IiwieCIsImlucHV0IiwiX3JlZjIiLCJ0aGVtZSIsImNsYXNzTmFtZURlY29yYXRvciIsIl9sZW4iLCJuYW1lcyIsIl9rZXkiLCJzdHlsZXMiLCJtYXAiLCJuYW1lIiwiY2xhc3NOYW1lIiwiYXBwbHkiLCJqb2luIiwic3R5bGUiLCJtb2R1bGUiLCJvYmpBIiwib2JqQiIsImFLZXlzIiwiYktleXMiLCJsZW4iLCJrZXlzTWFwIiwiYVZhbHVlIiwiYlZhbHVlIiwiYVZhbHVlS2V5cyIsImJWYWx1ZUtleXMiLCJhVmFsdWVLZXkiLCJfcmVhY3QiLCJjYWNoZSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImRlc2MiLCJzZXQiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9wcm9wVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSQkMSIsIl9jb21wYXJlT2JqZWN0cyIsInJlcXVpcmUkJDIiLCJXZWFrTWFwIiwiX2RlZmluZVByb3BlcnRpZXMiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJfY3JlYXRlU3VwZXIiLCJEZXJpdmVkIiwicmVzdWx0IiwiU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJSZWZsZWN0IiwiY29uc3RydWN0Iiwic2hhbSIsIlByb3h5IiwiRGF0ZSIsInRvU3RyaW5nIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIk5ld1RhcmdldCIsInRoaXMiLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX3NldFByb3RvdHlwZU9mIiwicCIsIlNlY3Rpb25UaXRsZSIsIl9Db21wb25lbnQiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJfaW5oZXJpdHMiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl9zdXBlciIsImluc3RhbmNlIiwiX2NsYXNzQ2FsbENoZWNrIiwibmV4dFByb3BzIiwiX3RoaXMkcHJvcHMiLCJzZWN0aW9uIiwicmVuZGVyU2VjdGlvblRpdGxlIiwic2VjdGlvbktleVByZWZpeCIsInNlY3Rpb25UaXRsZSIsImNyZWF0ZUVsZW1lbnQiLCJDb21wb25lbnQiLCJhbnkiLCJpc1JlcXVpcmVkIiwiZnVuYyIsInN0cmluZyIsIl9leHRlbmRzIiwib3duS2V5cyIsIm9iamVjdCIsImVudW1lcmFibGVPbmx5Iiwic3ltYm9scyIsInN5bSIsImV4Y2x1ZGVkIiwic291cmNlS2V5cyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwic291cmNlU3ltYm9sS2V5cyIsIkl0ZW0iLCJfdGhpcyIsImFyZ3MiLCJpdGVtIiwiZXZlbnQiLCJvbk1vdXNlRW50ZXIiLCJfdGhpcyRwcm9wczIiLCJvbk1vdXNlTGVhdmUiLCJfdGhpcyRwcm9wczMiLCJvbk1vdXNlRG93biIsIl90aGlzJHByb3BzNCIsIm9uQ2xpY2siLCJfdGhpcyRwcm9wczUiLCJpc0hpZ2hsaWdodGVkIiwicmVuZGVySXRlbSIsInJlbmRlckl0ZW1EYXRhIiwicmVzdFByb3BzIiwicm9sZSIsInJlZiIsInN0b3JlSXRlbVJlZmVyZW5jZSIsImZvckVhY2giLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9vYmplY3RTcHJlYWQiLCJudW1iZXIiLCJib29sIiwiX0l0ZW0iLCJyZXF1aXJlJCQzIiwiSXRlbXNMaXN0IiwiaGlnaGxpZ2h0ZWRJdGVtIiwib25IaWdobGlnaHRlZEl0ZW1DaGFuZ2UiLCJfdGhpczIiLCJpdGVtcyIsIml0ZW1Qcm9wcyIsImhpZ2hsaWdodGVkSXRlbUluZGV4IiwiZ2V0SXRlbUlkIiwia2V5UHJlZml4Iiwic2VjdGlvblByZWZpeCIsImlzSXRlbVByb3BzRnVuY3Rpb24iLCJpc0ZpcnN0IiwiaXRlbUtleSIsIml0ZW1Qcm9wc09iaiIsImFsbEl0ZW1Qcm9wcyIsImlkIiwic3RvcmVIaWdobGlnaHRlZEl0ZW1SZWZlcmVuY2UiLCJhcnJheSIsIm9uZU9mVHlwZSIsIl9zZWN0aW9uSXRlcmF0b3IiLCJfcmVhY3RUaGVtZWFibGUiLCJfU2VjdGlvblRpdGxlIiwicmVxdWlyZSQkNCIsIl9JdGVtTGlzdCIsInJlcXVpcmUkJDUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJtaW5MZW4iLCJfYXJyYXlMaWtlVG9BcnJheSIsInNsaWNlIiwidGVzdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJlbXB0eU9iamVjdCIsIkF1dG93aGF0ZXZlciIsInVzZXJSZWYiLCJpbnB1dFByb3BzIiwiY3VycmVudCIsIml0ZW1zQ29udGFpbmVyIiwic2V0U3RhdGUiLCJpc0lucHV0Rm9jdXNlZCIsIm9uRm9jdXMiLCJvbkJsdXIiLCJoaWdobGlnaHRlZFNlY3Rpb25JbmRleCIsImtleUNvZGUiLCJuZXh0UHJldiIsIl90aGlzJHNlY3Rpb25JdGVyYXRvcjIiLCJzZWN0aW9uSXRlcmF0b3IiLCJuZXdIaWdobGlnaHRlZFNlY3Rpb25JbmRleCIsIm5ld0hpZ2hsaWdodGVkSXRlbUluZGV4Iiwib25LZXlEb3duIiwic3RhdGUiLCJzZXRTZWN0aW9uc0l0ZW1zIiwic2V0U2VjdGlvbkl0ZXJhdG9yIiwic2V0VGhlbWUiLCJlbnN1cmVIaWdobGlnaHRlZEl0ZW1Jc1Zpc2libGUiLCJzZWN0aW9uc0l0ZW1zIiwiZ2V0U2VjdGlvbkl0ZW1zIiwic2VjdGlvbnNMZW5ndGhzIiwiYWxsU2VjdGlvbnNBcmVFbXB0eSIsImV2ZXJ5IiwiaXRlbXNDb3VudCIsImlzRmlyc3RTZWN0aW9uIiwic3RvcmVJdGVtc0xpc3RSZWZlcmVuY2UiLCJpdGVtT2Zmc2V0UmVsYXRpdmVUb0NvbnRhaW5lciIsIm9mZnNldFBhcmVudCIsIm9mZnNldFRvcCIsInNjcm9sbFRvcCIsIm9mZnNldEhlaWdodCIsInJlbmRlcklucHV0Q29tcG9uZW50IiwicmVuZGVySXRlbXNDb250YWluZXIiLCJyZW5kZXJlZEl0ZW1zIiwicmVuZGVyU2VjdGlvbnMiLCJyZW5kZXJJdGVtcyIsImlzT3BlbiIsImFyaWFBY3RpdmVkZXNjZW5kYW50IiwiaXRlbXNDb250YWluZXJJZCIsImNvbnRhaW5lclByb3BzIiwiaW5wdXRDb21wb25lbnQiLCJ0eXBlIiwiYXV0b0NvbXBsZXRlIiwic3RvcmVJbnB1dFJlZmVyZW5jZSIsInN0b3JlSXRlbXNDb250YWluZXJSZWZlcmVuY2UiLCJjaGlsZHJlbiIsIkVycm9yIiwiY29udGFpbmVyIiwiY29udGFpbmVyT3BlbiIsImlucHV0T3BlbiIsImlucHV0Rm9jdXNlZCIsIml0ZW1zQ29udGFpbmVyT3BlbiIsIml0ZW1zTGlzdCIsIml0ZW1GaXJzdCIsIml0ZW1IaWdobGlnaHRlZCIsInNlY3Rpb25Db250YWluZXIiLCJzZWN0aW9uQ29udGFpbmVyRmlyc3QiLCJfYXJyYXlzIiwiYXJyYXlzIiwiYXJyQSIsImFyckIiLCJfQXV0b3doYXRldmVyIiwiX3RoZW1lIiwibWFwVG9BdXRvd2hhdGV2ZXJUaGVtZSIsImRlZmF1bHRUaGVtZSIsInN1Z2dlc3Rpb25zQ29udGFpbmVyIiwic3VnZ2VzdGlvbnNDb250YWluZXJPcGVuIiwic3VnZ2VzdGlvbnNMaXN0Iiwic3VnZ2VzdGlvbiIsInN1Z2dlc3Rpb25GaXJzdCIsInN1Z2dlc3Rpb25IaWdobGlnaHRlZCIsImFsd2F5c1RydWUiLCJSRUFTT05fU1VHR0VTVElPTlNfUkVWRUFMRUQiLCJSRUFTT05fSU5QVVRfRk9DVVNFRCIsIlJFQVNPTl9JTlBVVF9DSEFOR0VEIiwiUkVBU09OX0VTQ0FQRV9QUkVTU0VEIiwiQXV0b3N1Z2dlc3QiLCJfYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMiLCJhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyIsImp1c3RDbGlja2VkT25TdWdnZXN0aW9uc0NvbnRhaW5lciIsIm5vZGUiLCJkZXRhaWwiLCJkb2N1bWVudCIsImdldEF0dHJpYnV0ZSIsInBhcmVudE5vZGUiLCJhdXRvd2hhdGV2ZXIiLCJfcmVmMyIsInVwZGF0ZUhpZ2hsaWdodGVkU3VnZ2VzdGlvbiIsInByZXNzZWRTdWdnZXN0aW9uIiwianVzdFNlbGVjdGVkU3VnZ2VzdGlvbiIsImp1c3RNb3VzZUVudGVyZWQiLCJzZXRUaW1lb3V0IiwiZm9jdXMiLCJvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQiLCJvblN1Z2dlc3Rpb25TZWxlY3RlZCIsIm9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCIsImtlZXBTdWdnZXN0aW9uc09uU2VsZWN0Iiwic2hvdWxkS2VlcFN1Z2dlc3Rpb25zT25TZWxlY3QiLCJzdWdnZXN0aW9uVmFsdWUiLCJyZWFzb24iLCJyZXNldEhpZ2hsaWdodGVkU3VnZ2VzdGlvbiIsImZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayIsIl90aGlzJGdldFN1Z2dlc3Rpb25JbiIsImdldFN1Z2dlc3Rpb25JbmRpY2VzIiwiZmluZFN1Z2dlc3Rpb25FbGVtZW50Iiwic3VnZ2VzdGlvbkluZGV4IiwiY2xpY2tlZFN1Z2dlc3Rpb24iLCJnZXRTdWdnZXN0aW9uIiwiY2xpY2tlZFN1Z2dlc3Rpb25WYWx1ZSIsImdldFN1Z2dlc3Rpb25WYWx1ZSIsIm1heWJlQ2FsbE9uQ2hhbmdlIiwibWV0aG9kIiwiY2xvc2VTdWdnZXN0aW9ucyIsInNob3VsZFJlbmRlclN1Z2dlc3Rpb25zIiwiaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uIiwiZ2V0SGlnaGxpZ2h0ZWRTdWdnZXN0aW9uIiwic2hvdWxkUmVuZGVyIiwiaXNGb2N1c2VkIiwiaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgiLCJ2YWx1ZUJlZm9yZVVwRG93biIsImlzQ29sbGFwc2VkIiwiYmx1ckV2ZW50IiwiX3JlZjQiLCJvblN1Z2dlc3Rpb25Nb3VzZUVudGVyIiwib25TdWdnZXN0aW9uTW91c2VMZWF2ZSIsIm9uU3VnZ2VzdGlvbk1vdXNlRG93biIsIm9uVG91Y2hTdGFydCIsIm9uU3VnZ2VzdGlvblRvdWNoU3RhcnQiLCJvblRvdWNoTW92ZSIsIm9uU3VnZ2VzdGlvblRvdWNoTW92ZSIsIm9uU3VnZ2VzdGlvbkNsaWNrIiwiX3JlZjUiLCJyZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lciIsInF1ZXJ5IiwiZ2V0UXVlcnkiLCJqdXN0UHJlc3NlZFVwRG93biIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbkRvY3VtZW50TW91c2VEb3duIiwib25Eb2N1bWVudE1vdXNlVXAiLCJzaG91bGRSZXNldEhpZ2hsaWdodGluZyIsImhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbiIsInN1Z2dlc3Rpb25zIiwid2lsbFJlbmRlclN1Z2dlc3Rpb25zIiwicmV2ZWFsU3VnZ2VzdGlvbnMiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJvblN1Z2dlc3Rpb25IaWdobGlnaHRlZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJwcmV2VmFsdWUiLCJzaG91bGRSZXNldFZhbHVlQmVmb3JlVXBEb3duIiwiZ2V0U2VjdGlvblN1Z2dlc3Rpb25zIiwiX3RoaXMkc3RhdGUiLCJzdWdnZXN0aW9uRWxlbWVudCIsInBhcnNlSW50Iiwic3RhcnROb2RlIiwiY29uc29sZSIsImVycm9yIiwibmV3VmFsdWUiLCJfdGhpcyRwcm9wcyRpbnB1dFByb3AiLCJvbkNoYW5nZSIsInRyaW0iLCJfdGhpczMiLCJfdGhpcyRwcm9wczYiLCJyZW5kZXJTdWdnZXN0aW9uIiwiX3RoaXMkc3RhdGUyIiwiX29uRm9jdXMiLCJfb25LZXlEb3duIiwiYXV0b3doYXRldmVySW5wdXRQcm9wcyIsInByZXZlbnREZWZhdWx0IiwiZ2V0U3VnZ2VzdGlvblZhbHVlQnlJbmRleCIsIl9uZXdWYWx1ZSIsIndpbGxDbG9zZVN1Z2dlc3Rpb25zIiwicmVuZGVyU3VnZ2VzdGlvbkRhdGEiLCJzdG9yZUF1dG93aGF0ZXZlclJlZiIsInByb3BOYW1lIiwic3R5bGVJbmplY3QiLCJjc3MiLCJpbnNlcnRBdCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJTZWxlY3QiLCJnZXREaXNwbGF5Iiwib3B0aW9ucyIsIm9uU2xhY2tUaW1lU2VsZWN0ZWQiLCJ2aWFQb2ludEluZGV4IiwibGFiZWwiLCJpY29uIiwiZGlzcGxheVZhbHVlIiwiY2hhbmdlRGlzcGxheVZhbHVlIiwidXNlU3RhdGUiLCJvcGVuIiwiY2hhbmdlT3BlbiIsInVzZUVmZmVjdCIsInNjcm9sbFJlZiIsInVzZVJlZiIsInNjcm9sbEluZGV4IiwiTWF0aCIsImZsb29yIiwidXNlTGF5b3V0RWZmZWN0IiwiaW5wdXRJZCIsImxhYmVsSWQiLCJSZWFjdCIsImh0bWxGb3IiLCJkaXNwbGF5TmFtZSIsIm9uSW5wdXRDaGFuZ2UiLCJfIiwicmVhZE9ubHkiLCJvdGhlclJlZnMiLCJfZXhjbHVkZWQiLCJ0YWJJbmRleCIsImVsZW0iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJhcnJheU9mIiwic2hhcGUiLCJpMThuIiwiY3JlYXRlSW5zdGFuY2UiLCJmYWxsYmFja0xuZyIsInJlc291cmNlcyIsImRlIiwidHJhbnNsYXRpb24iLCJlbiIsImZpIiwicGwiLCJzdiIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJpbml0IiwiZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyIiwiaXNWaWFQb2ludEVtcHR5IiwidmlhUG9pbnQiLCJpc0VtcHR5IiwiaW5jbHVkZXMiLCJJdGluZXJhcnlTZWFyY2hDb250cm9sIiwiZW5hYmxlZCIsIm9uS2V5UHJlc3MiLCJ3aWRlIiwicmVzdCIsInVwZGF0ZVZpYVBvaW50U2xhY2siLCJhY3RpdmVWaWFQb2ludFNsYWNrcyIsInVwZGF0ZWRWaWFQb2ludEluZGV4IiwidmlhUG9pbnRSZW1vdmVkIiwiZm91bmRBdEluZGV4Iiwic3BsaWNlIiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50Iiwid2hpY2giLCJsb2NhdGlvbiIsImFkZHJlc3MiLCJncHMiLCJyZWFkeSIsImdldExvY2F0aW9uVHlwZSIsImRlZmF1bHRQcm9wcyIsImxvY2F0aW9uU2hhcGUiLCJsYXQiLCJsb24iLCJsb2NhdGlvblNsYWNrIiwiRFRBdXRvc3VnZ2VzdFBhbmVsIiwic3VwZXIiLCJyZWZzIiwiZGVzdGluYXRpb24iLCJ2aWFQb2ludHMiLCJ1cGRhdGVWaWFQb2ludHMiLCJ2cCIsImFjdGl2ZVNsYWNrSW5wdXRzIiwic2xhY2tUaW1lSW5TZWNvbmRzIiwiYWRkQW5hbHl0aWNzRXZlbnQiLCJhY3Rpb24iLCJjYXRlZ29yeSIsInZpYVBvaW50TG9jYXRpb24iLCJoYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQiLCJyZXZlcnNlIiwic3dhcE9yZGVyIiwic2xhY2tJblNlY29uZHMiLCJsbmciLCJsYW5nIiwicmVuZGVyIiwib3JpZ2luIiwic2VhcmNoUGFuZWxUZXh0Iiwic2VhcmNoQ29udGV4dCIsImRpc2FibGVBdXRvRm9jdXMiLCJvcmlnaW5Nb2JpbGVMYWJlbCIsImRlc3RpbmF0aW9uTW9iaWxlTGFiZWwiLCJmb250V2VpZ2h0cyIsIm9uRm9jdXNDaGFuZ2UiLCJzaG93U3dhcENvbnRyb2wiLCJzaG93VmlhcG9pbnRDb250cm9sIiwicHJpbWFyeSIsImNvbG9ycyIsInNsYWNrVGltZSIsInRpbWVPcHRpb25zIiwidmFsdWVJbk1pbnV0ZXMiLCJnZXRTbGFja1RpbWVPcHRpb25zIiwiZ2V0VmlhUG9pbnRTbGFja1RpbWVPckRlZmF1bHQiLCJkZWZhdWx0VmFsdWUiLCJpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUiLCJpbmRleCIsImN4IiwiaXNNb2JpbGUiLCJtZWRpdW0iLCJEVEF1dG9TdWdnZXN0IiwiYXBwRWxlbWVudCIsImF1dG9Gb2N1cyIsInN0b3JlUmVmIiwic3RvcmVSZWZlcmVuY2UiLCJyZWZQb2ludCIsInBsYWNlaG9sZGVyIiwib3JpZ2luUGxhY2VIb2xkZXIiLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwib25TZWxlY3QiLCJvbkNsZWFyIiwiZm9jdXNDaGFuZ2UiLCJoYW5kbGVGb2N1c0NoYW5nZSIsInNvdXJjZXMiLCJ0YXJnZXRzIiwiZmlsdGVyUmVzdWx0cyIsIm1vYmlsZUxhYmVsIiwibW9kZVNldCIsInNob3dTY3JvbGwiLCJpc0VtYmVkZGVkIiwib3Bwb3NpdGUiLCJoYW5kbGVTd2FwT3JkZXJDbGljayIsIkljb24iLCJpbWciLCJjb2xvciIsInJlY3RhbmdsZSIsIlJlYWN0U29ydGFibGUiLCJsaXN0IiwiaGFuZGxlIiwiYW5pbWF0aW9uIiwiZGlzYWJsZWQiLCJzZXRMaXN0IiwibmV3VmlhUG9pbnRzIiwicm93IiwiY3Vyc29yIiwicm90YXRlIiwiYXJpYUxhYmVsIiwiaGFuZGxlVmlhUG9pbnRzIiwic2hvd1NsYWNrQ29udHJvbCIsImhhbmRsZVRvZ2dsZVZpYVBvaW50U2xhY2tDbGljayIsImdldFNsYWNrRGlzcGxheSIsImhhbmRsZVZpYVBvaW50U2xhY2tUaW1lU2VsZWN0ZWQiLCJoYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrIiwiaXNOYU4iLCJkZXN0aW5hdGlvblBsYWNlSG9sZGVyIiwibW9yZSIsImhhbmRsZUFkZFZpYVBvaW50Q2xpY2siLCJ3aWR0aCIsImhlaWdodCIsImRlZmF1bHRDb2xvcnMiLCJVUkxfUEVMSUFTIiwib2JqZWN0T2YiLCJEVEF1dG9zdWdnZXN0UGFuZWxXaXRoVHJhbnNsYXRpb24iLCJ3aXRoVHJhbnNsYXRpb24iLCJJMThuZXh0UHJvdmlkZXIiXSwibWFwcGluZ3MiOiJxZ0NBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0YsY0FBY0EsQ0FDZixFQUFHLFNBQVVBLEdBQ1osT0FBT0Es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
|