@digitransit-component/digitransit-component-autosuggest-panel 7.0.4 → 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.
@@ -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("react-autosuggest"),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","react-autosuggest","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.Autosuggest,e.i18next)}(this,(function(e,t,n,i,o,s,a,l,r,c,p){"use strict";function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=d(t),_=d(n),h=d(i),g=d(a),f=d(l),v=d(r),y=d(c);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 b(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 x(e,t,n){return(t=b(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function k(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 s=Object.getOwnPropertySymbols(e);for(i=0;i<s.length;i++)n=s[i],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w(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 S={"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"};w(".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 E=["ref"],P=({value:e,getDisplay:t,options:n,onSlackTimeSelected:o,viaPointIndex:s,id:a,label:l,icon:r})=>{const[c,p]=i.useState(t(e)),[d,u]=i.useState(!1);i.useEffect((()=>p(t(e))),[e]);const _=i.useRef(null),g=Math.floor(e/600);i.useLayoutEffect((()=>{d&&_.current&&(_.current.scrollTop=50*g)}),[e,d]);const f=`${a}-input`,v=`${a}-label`;return h.default.createElement("label",{className:S["combobox-container"],htmlFor:f},h.default.createElement("span",{className:S["left-column"]},h.default.createElement("span",{className:S["combobox-label"],id:v},l),h.default.createElement(y.default,{id:a,suggestions:n,getSuggestionValue:e=>e.value,renderSuggestion:e=>e.displayName,onSuggestionsFetchRequested:()=>null,shouldRenderSuggestions:()=>!0,focusInputOnSuggestionClick:!1,onSuggestionsClearRequested:()=>null,inputProps:{value:c,onChange:(t,{newValue:n,method:i})=>{switch(i){case"enter":case"click":o(n,s);break;case"escape":p(e)}},onFocus:()=>{u(!0)},onBlur:()=>{u(!1)},id:f,"aria-labelledby":v,"aria-autocomplete":"none",readOnly:!0},renderSuggestionsContainer:({containerProps:e,children:t})=>{const{ref:n}=e,i=k(e,E);return h.default.createElement("div",Object.assign({tabIndex:"-1"},i,{ref:e=>{e&&(_.current=e,n(e))}}),t)},theme:S})),r)};"production"!==process.env.NODE_ENV&&(P.propTypes={value:_.default.number.isRequired,onSlackTimeSelected:_.default.func.isRequired,getDisplay:_.default.func.isRequired,options:_.default.arrayOf(_.default.shape({displayName:_.default.string.isRequired,value:_.default.number.isRequired}).isRequired).isRequired,id:_.default.string.isRequired,label:_.default.node.isRequired,icon:_.default.node.isRequired,viaPointIndex:_.default.number.isRequired});const C=p.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}});C.init();var N={"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"};w(".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 A=["children","className","enabled","onClick","onKeyPress","wide"],V=()=>({}),I=e=>{if(void 0===e||v.default(e))return!0;const t=Object.keys(e);return 1===t.length||2===t.length&&t.includes("locationSlack")},R=e=>{let{children:t,className:n,enabled:i,onClick:o,onKeyPress:s,wide:a}=e,l=k(e,A);return h.default.createElement("div",{className:N["itinerary-search-control"],style:{"--width":a?"47px":"40px"}},o&&i&&h.default.createElement("div",Object.assign({},l,{className:n,onClick:o,onKeyPress:s,role:"button",tabIndex:"0"}),t))},O=(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},M=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},j=e=>e&&e.address||e&&e.gps&&e.ready&&"Nykyinen sijainti"||"",F=e=>e&&!0===e.gps?"position":"location";"production"!==process.env.NODE_ENV&&(R.propTypes={children:_.default.node,className:_.default.string.isRequired,enabled:_.default.bool.isRequired,onClick:_.default.func.isRequired,onKeyPress:_.default.func.isRequired,wide:_.default.bool}),R.defaultProps={children:void 0,wide:!1};const L="production"!==process.env.NODE_ENV?_.default.shape({address:_.default.string,lat:_.default.number,lon:_.default.number,locationSlack:_.default.number}):{};class z extends h.default.Component{constructor(e){super(e),x(this,"storeReference",(e=>{this.setState((t=>({refs:[...t.refs,e]})))})),x(this,"handleFocusChange",(()=>{const{destination:e}=this.props;e&&e.lat||this.state.refs[1].focus()})),x(this,"updateViaPoints",(e=>{0!==e.length?this.props.updateViaPoints(e.filter((e=>!I(e)))):this.props.updateViaPoints([])})),x(this,"handleToggleViaPointSlackClick",(e=>{const{activeSlackInputs:t}=this.state;this.setState({activeSlackInputs:t.includes(e)?O(t,e):t.concat([e])})})),x(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)})),x(this,"handleViaPointLocationSelected",((e,t)=>{this.props.handleViaPointLocationSelected(e,t)})),x(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:O(t,e,!0)},(()=>this.updateViaPoints(n)))})),x(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)})),x(this,"handleSwapOrderClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"SwitchJourneyStartAndEndPointOrder",category:"ItinerarySettings",name:null});const{viaPoints:e}=this.props;e.reverse(),this.props.swapOrder()})),x(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:a,destinationMobileLabel:l,fontWeights:r,onFocusChange:c,showSwapControl:p,showViapointControl:d,t:_,lang:v}=this.props,{activeSlackInputs:y}=this.state,m=(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})(_),b=(e,t=0)=>e&&e.locationSlack||t,x=e=>y.includes(e);return h.default.createElement("div",{className:u.default(N["autosuggest-panel"],this.props.isMobile&&"small"),style:{"--color":`${this.props.color}`,"--font-weight-medium":r.medium}}," ",t?h.default.createElement("div",null,h.default.createElement("h1",{className:N["autosuggest-searchpanel-text"]}," ",t)):null,h.default.createElement("div",{className:N["origin-input-container"]},h.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:F(e),placeholder:this.props.originPlaceHolder,value:j(e),searchContext:n,getAutoSuggestIcons:this.props.getAutoSuggestIcons,onSelect:this.props.onSelect,onClear:this.props.onClear,focusChange:c||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:a,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(p||d)&&h.default.createElement(R,{className:N.opposite,enabled:p,onClick:()=>this.handleSwapOrderClick(),onKeyPress:e=>M(e)&&this.handleSwapOrderClick(),"aria-label":_("swap-order-button-label",{lng:v})},h.default.createElement(f.default,{img:"opposite",color:this.props.color}))),0===o.length&&h.default.createElement("div",{className:N["rectangle-container"]},h.default.createElement("div",{className:N.rectangle})),h.default.createElement(s.ReactSortable,{className:N["viapoints-container"],list:o,handle:`.${N["viapoint-before"]}`,animation:200,disabled:o.length<=1,setList:e=>{const t=e.filter((e=>!I(e)));t.length>0&&this.props.updateViaPoints(t)}},o.map(((e,t)=>h.default.createElement("div",{className:u.default(N["viapoint-container"]),key:`viapoint-${t}`},h.default.createElement("div",{className:N["light-gray-background"]},h.default.createElement("div",{className:N.row},h.default.createElement("div",{className:N["viapoint-before"],style:o.length>1?{cursor:"move"}:{}},o.length>1&&h.default.createElement(f.default,{img:"ellipsis",rotate:90,color:this.props.color})),h.default.createElement("div",{className:`${N["viapoint-input-container"]} ${N[`viapoint-${t+1}`]}`},h.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker-via",id:"via-point",ariaLabel:_("via-point-index",{index:t+1,lng:v}),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:["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&&h.default.createElement(R,{className:N["add-via-point-slack"],enabled:this.props.showViapointControl,onClick:()=>this.handleToggleViaPointSlackClick(t),onKeyPress:e=>M(e)&&this.handleToggleViaPointSlackClick(t),"aria-label":_(x(t)?"add-via-duration-button-label-open":"add-via-duration-button-label-close",{index:t+1,lng:v}),wide:!0},h.default.createElement(f.default,{img:"time",color:this.props.color}))),!x(t)&&o[t]&&o[t].locationSlack>0&&h.default.createElement("span",{className:N["viapoint-slack-time"]},`${_("viapoint-slack-amount",{lng:v})}: ${this.getSlackDisplay(o[t].locationSlack)}`),h.default.createElement("div",{className:u.default(N["input-viapoint-slack-container"],!x(t)&&"collapsed")},h.default.createElement("div",{className:N["select-wrapper"]},h.default.createElement(P,{id:`viapoint-slack-${t}`,label:_("viapoint-slack-amount",{lng:v}),options:m,value:b(o[t]),getDisplay:this.getSlackDisplay,viaPointIndex:t,icon:h.default.createElement("span",{className:`${N["combobox-icon"]} ${N["time-input-icon"]}`},h.default.createElement(f.default,{img:"time",color:this.props.color})),onSlackTimeSelected:this.handleViaPointSlackTimeSelected})))),h.default.createElement(R,{className:N["remove-via-point"],enabled:this.props.showViapointControl,onClick:()=>this.handleRemoveViaPointClick(t),onKeyPress:e=>M(e)&&this.handleRemoveViaPointClick(t),"aria-label":_("remove-via-button-label",{index:t+1,lng:v})},h.default.createElement(f.default,{img:"trash",color:this.props.color})))))),h.default.createElement("div",{className:N["destination-input-container"]},h.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:F(this.props.destination),getAutoSuggestIcons:this.props.getAutoSuggestIcons,searchContext:n,onSelect:this.props.onSelect,onClear:this.props.onClear,refPoint:this.props.refPoint,value:j(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:l,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(p||d)&&h.default.createElement(R,{className:u.default(N["add-via-point"],N.more,o.length>4&&"collapsed"),enabled:d&&0===o.length,onClick:()=>this.handleAddViaPointClick(),onKeyPress:e=>M(e)&&this.handleAddViaPointClick(),"aria-label":_("add-via-button-label",{lng:v})},h.default.createElement(f.default,{img:"viapoint",width:1.25,height:1.375,color:this.props.color}))))}}x(z,"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&&(z.propTypes={appElement:_.default.string.isRequired,origin:L,destination:L,originPlaceHolder:_.default.string,destinationPlaceHolder:_.default.string,viaPoints:_.default.arrayOf(L),updateViaPoints:_.default.func,handleViaPointLocationSelected:_.default.func,swapOrder:_.default.func,searchPanelText:_.default.string,searchContext:_.default.shape({URL_PELIAS:_.default.string}).isRequired,onSelect:_.default.func.isRequired,onClear:_.default.func,addAnalyticsEvent:_.default.func,lang:_.default.string.isRequired,disableAutoFocus:_.default.bool,sources:_.default.arrayOf(_.default.string),targets:_.default.arrayOf(_.default.string),filterResults:_.default.func,isMobile:_.default.bool,color:_.default.string,hoverColor:_.default.string,originMobileLabel:_.default.string,destinationMobileLabel:_.default.string,refPoint:L,modeSet:_.default.string,modeIconColors:_.default.objectOf(_.default.string),getAutoSuggestIcons:_.default.objectOf(_.default.func),fontWeights:_.default.shape({medium:_.default.number}),showScroll:_.default.bool,onFocusChange:_.default.func,isEmbedded:_.default.bool,showSwapControl:_.default.bool,showViapointControl:_.default.bool,showSlackControl:_.default.bool,t:_.default.func.isRequired});const q=o.withTranslation()(z);e.default=e=>h.default.createElement(o.I18nextProvider,{i18n:C},h.default.createElement(q,e)),e.getEmptyViaPointPlaceHolder=V,Object.defineProperty(e,"__esModule",{value:!0})}));
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL1NlbGVjdC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uL3NyYy9oZWxwZXJzL2kxOG4uanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiLi9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzXCI7XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkge1xuICBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307XG4gIHZhciBvLFxuICAgIHIsXG4gICAgaSA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEF1dG9zdWdnZXN0IGZyb20gJ3JlYWN0LWF1dG9zdWdnZXN0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zZWxlY3Quc2Nzcyc7XG5cbmNvbnN0IFNlbGVjdCA9ICh7XG4gIHZhbHVlLFxuICBnZXREaXNwbGF5LFxuICBvcHRpb25zLFxuICBvblNsYWNrVGltZVNlbGVjdGVkLFxuICB2aWFQb2ludEluZGV4LFxuICBpZCxcbiAgbGFiZWwsXG4gIGljb24sXG59KSA9PiB7XG4gIGNvbnN0IFtkaXNwbGF5VmFsdWUsIGNoYW5nZURpc3BsYXlWYWx1ZV0gPSB1c2VTdGF0ZShnZXREaXNwbGF5KHZhbHVlKSk7XG4gIGNvbnN0IFtvcGVuLCBjaGFuZ2VPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgdXNlRWZmZWN0KCgpID0+IGNoYW5nZURpc3BsYXlWYWx1ZShnZXREaXNwbGF5KHZhbHVlKSksIFt2YWx1ZV0pO1xuICBjb25zdCBzY3JvbGxSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHNjcm9sbEluZGV4ID0gTWF0aC5mbG9vcih2YWx1ZSAvIDYwMCk7XG4gIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSA1MDtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BlbiAmJiBzY3JvbGxSZWYuY3VycmVudCkge1xuICAgICAgc2Nyb2xsUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gZWxlbWVudEhlaWdodCAqIHNjcm9sbEluZGV4O1xuICAgIH1cbiAgfSwgW3ZhbHVlLCBvcGVuXSk7XG5cbiAgY29uc3QgaW5wdXRJZCA9IGAke2lkfS1pbnB1dGA7XG4gIGNvbnN0IGxhYmVsSWQgPSBgJHtpZH0tbGFiZWxgO1xuXG4gIGNvbnN0IG9uSW5wdXRDaGFuZ2UgPSAoXywgeyBuZXdWYWx1ZSwgbWV0aG9kIH0pID0+IHtcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgY2FzZSAnY2xpY2snOlxuICAgICAgICBvblNsYWNrVGltZVNlbGVjdGVkKG5ld1ZhbHVlLCB2aWFQb2ludEluZGV4KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlc2NhcGUnOlxuICAgICAgICBjaGFuZ2VEaXNwbGF5VmFsdWUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VwJzpcbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9O1xuICByZXR1cm4gKFxuICAgIDxsYWJlbCBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtY29udGFpbmVyJ119IGh0bWxGb3I9e2lucHV0SWR9PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ2xlZnQtY29sdW1uJ119PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtbGFiZWwnXX0gaWQ9e2xhYmVsSWR9PlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8QXV0b3N1Z2dlc3RcbiAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgc3VnZ2VzdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtzID0+IHMudmFsdWV9XG4gICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17cyA9PiBzLmRpc3BsYXlOYW1lfVxuICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZD17KCkgPT4gbnVsbH1cbiAgICAgICAgICBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucz17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2s9e2ZhbHNlfVxuICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17KCkgPT4gbnVsbH1cbiAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICB2YWx1ZTogZGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgb25DaGFuZ2U6IG9uSW5wdXRDaGFuZ2UsXG4gICAgICAgICAgICBvbkZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGNoYW5nZU9wZW4odHJ1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGNoYW5nZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkOiBpbnB1dElkLFxuICAgICAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IGxhYmVsSWQsXG4gICAgICAgICAgICAnYXJpYS1hdXRvY29tcGxldGUnOiAnbm9uZScsXG4gICAgICAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyPXsoeyBjb250YWluZXJQcm9wcywgY2hpbGRyZW4gfSkgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IHJlZnMgZm9yIGF1dG9zdWdnZXN0IGxpYnJhcnkgYW5kIHNjcm9sbGJhciBwb3NpdGlvbmluZ1xuICAgICAgICAgICAgY29uc3QgeyByZWYsIC4uLm90aGVyUmVmcyB9ID0gY29udGFpbmVyUHJvcHM7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJSZWYgPSBlbGVtID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVsZW0pIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxSZWYuY3VycmVudCA9IGVsZW07XG4gICAgICAgICAgICAgICAgcmVmKGVsZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdiB0YWJJbmRleD1cIi0xXCIgey4uLm90aGVyUmVmc30gcmVmPXtjb250YWluZXJSZWZ9PlxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH19XG4gICAgICAgICAgdGhlbWU9e3N0eWxlc31cbiAgICAgICAgLz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtpY29ufVxuICAgIDwvbGFiZWw+XG4gICk7XG59O1xuXG5TZWxlY3QucHJvcFR5cGVzID0ge1xuICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBvblNsYWNrVGltZVNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXREaXNwbGF5OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgZGlzcGxheU5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgKS5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgaWNvbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgdmlhUG9pbnRJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0O1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTZXR6ZSBVbXN0ZWlnZXplaXQgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdTY2hsaWXDn2UgVW1zdGVpZ2V6ZWl0LUF1c3dhaGwgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ8OWZmZuZSBVbXN0ZWlnZXplaXQtQXVzd2FobCBmw7xyIFp3aXNjaGVuemllbCB7e2luZGV4fX0nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ0VudGZlcm5lIFp3aXNjaGVuemllbCB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ1RhdXNjaGUgU3RhcnQgbWl0IFppZWwnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdad2lzY2hlbnppZWwnLFxuICAgICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnVW1zdGVpZ2V6ZWl0JyxcbiAgICB9LFxuICB9LFxuICBlbjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnQWRkIHZpYSBwb2ludCcsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdSZW1vdmUgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnUmV2ZXJzZSBvcmlnaW4gYW5kIGRlc3RpbmF0aW9uJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVmlhIHBvaW50JyxcbiAgICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnVmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAndmlhcG9pbnQtc2xhY2stYW1vdW50JzogJ1N0b3AgZHVyYXRpb24nLFxuICAgIH0sXG4gIH0sXG4gIGZpOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ0FzZXRhIHbDpGxpcGlzdGVlbGxlIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ1BvaXN0YSB2w6RsaXBpc3RlIHt7aW5kZXh9fScsXG4gICAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnS8Okw6RubsOkIHJlaXRpbiBzdXVudGEgdmFzdGFra2Fpc2Vrc2knLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnVsOkbGlwaXN0ZSB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdQeXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgIH0sXG4gIH0sXG4gIHBsOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdEb2RhaiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1d5YmllcnogY3phcyBwb3N0b2p1IGRsYSBwdW5rdHUge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdaYW1rbmlqIHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPdHfDs3J6IHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbi4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ1VzdcWEIHB1bmt0IHBvxZtyZWRuaSB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ09kd3LDs8SHIHBvY3rEhXRlayBpIGNlbCcsXG4gICAgICAndmlhLXBvaW50JzogJ1B1bmt0IHBvxZtyZWRuaScsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1B1bmt0IHBvxZtyZWRuaSB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdDemFzIHBvc3RvanUnLFxuICAgIH0sXG4gIH0sXG4gIHN2OiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMw6RnZyB0aWxsIHZpYXB1bmt0JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTdMOkbGwgaW4gdmFyYWt0aWdoZXQgZsO2ciB2aWFwdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnw5ZwcG5hIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ1RhIGJvcnQgdmlhcHVua3Qge3tpbmRleH19JyxcbiAgICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdTdsOkbmcgcnV0dGVucyByaWt0bmluZyB0aWxsIGRlbiBtb3RzYXR0YScsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwdW5rdCcsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1ZpYSBwdW5rdCB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdTdG9wcGV0cyB2YXJha3RpZ2hldCcsXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zbGF0aW9ucztcbiIsImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vdHJhbnNsYXRpb25zJztcblxuY29uc3QgaTE4biA9IGNyZWF0ZUluc3RhbmNlKHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIC8vIGRlYnVnOiB0cnVlLFxuICByZXNvdXJjZXM6IHRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICByZWFjdDoge1xuICAgIHVzZVN1c3BlbnNlOiB0cnVlLFxuICB9LFxufSk7XG5cbmkxOG4uaW5pdCgpO1xuXG5leHBvcnQgZGVmYXVsdCBpMThuO1xuIiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEkxOG5leHRQcm92aWRlciwgd2l0aFRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBSZWFjdFNvcnRhYmxlIH0gZnJvbSAncmVhY3Qtc29ydGFibGVqcyc7XG5pbXBvcnQgRFRBdXRvU3VnZ2VzdCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBTZWxlY3QgZnJvbSAnLi9oZWxwZXJzL1NlbGVjdCc7XG5pbXBvcnQgaTE4biBmcm9tICcuL2hlbHBlcnMvaTE4bic7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vaGVscGVycy9zdHlsZXMuc2Nzcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRFbXB0eVZpYVBvaW50UGxhY2VIb2xkZXIgPSAoKSA9PiAoe30pO1xuXG5jb25zdCBpc1ZpYVBvaW50RW1wdHkgPSB2aWFQb2ludCA9PiB7XG4gIGlmICh2aWFQb2ludCA9PT0gdW5kZWZpbmVkIHx8IGlzRW1wdHkodmlhUG9pbnQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZpYVBvaW50KTtcbiAgcmV0dXJuIChcbiAgICBrZXlzLmxlbmd0aCA9PT0gMSB8fCAoa2V5cy5sZW5ndGggPT09IDIgJiYga2V5cy5pbmNsdWRlcygnbG9jYXRpb25TbGFjaycpKVxuICApO1xufTtcblxuY29uc3QgSXRpbmVyYXJ5U2VhcmNoQ29udHJvbCA9ICh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGVuYWJsZWQsXG4gIG9uQ2xpY2ssXG4gIG9uS2V5UHJlc3MsXG4gIHdpZGUsXG4gIC4uLnJlc3Rcbn0pID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT17c3R5bGVzWydpdGluZXJhcnktc2VhcmNoLWNvbnRyb2wnXX1cbiAgICBzdHlsZT17eyAnLS13aWR0aCc6IHdpZGUgPyAnNDdweCcgOiAnNDBweCcgfX1cbiAgPlxuICAgIHtvbkNsaWNrICYmIGVuYWJsZWQgJiYgKFxuICAgICAgPGRpdlxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIG9uS2V5UHJlc3M9e29uS2V5UHJlc3N9XG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0YWJJbmRleD1cIjBcIlxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICApfVxuICA8L2Rpdj5cbik7XG5cbmNvbnN0IHVwZGF0ZVZpYVBvaW50U2xhY2sgPSAoXG4gIGFjdGl2ZVZpYVBvaW50U2xhY2tzLFxuICB1cGRhdGVkVmlhUG9pbnRJbmRleCxcbiAgdmlhUG9pbnRSZW1vdmVkID0gZmFsc2UsXG4pID0+IHtcbiAgY29uc3QgZm91bmRBdEluZGV4ID0gYWN0aXZlVmlhUG9pbnRTbGFja3MuaW5kZXhPZih1cGRhdGVkVmlhUG9pbnRJbmRleCk7XG4gIGlmIChmb3VuZEF0SW5kZXggPiAtMSkge1xuICAgIGFjdGl2ZVZpYVBvaW50U2xhY2tzLnNwbGljZShmb3VuZEF0SW5kZXgsIDEpO1xuICB9XG4gIHJldHVybiB2aWFQb2ludFJlbW92ZWRcbiAgICA/IGFjdGl2ZVZpYVBvaW50U2xhY2tzLm1hcCh2YWx1ZSA9PlxuICAgICAgICB2YWx1ZSA+IHVwZGF0ZWRWaWFQb2ludEluZGV4ID8gdmFsdWUgLSAxIDogdmFsdWUsXG4gICAgICApXG4gICAgOiBhY3RpdmVWaWFQb2ludFNsYWNrcztcbn07XG5cbmNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuICBpZiAoIWtleSB8fCAhc3BhY2UuY29uY2F0KGVudGVyKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgdmFsdWUgPSBsb2NhdGlvbiA9PlxuICAobG9jYXRpb24gJiYgbG9jYXRpb24uYWRkcmVzcykgfHxcbiAgKGxvY2F0aW9uICYmIGxvY2F0aW9uLmdwcyAmJiBsb2NhdGlvbi5yZWFkeSAmJiAnTnlreWluZW4gc2lqYWludGknKSB8fFxuICAnJztcblxuY29uc3QgZ2V0TG9jYXRpb25UeXBlID0gbG9jYXRpb24gPT5cbiAgbG9jYXRpb24gJiYgbG9jYXRpb24uZ3BzID09PSB0cnVlID8gJ3Bvc2l0aW9uJyA6ICdsb2NhdGlvbic7XG5cbmNvbnN0IGdldFNsYWNrVGltZU9wdGlvbnMgPSB0ID0+IHtcbiAgY29uc3QgdGltZU9wdGlvbnMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gOTsgaSsrKSB7XG4gICAgY29uc3QgdmFsdWVJbk1pbnV0ZXMgPSBpICogMTA7XG4gICAgdGltZU9wdGlvbnMucHVzaCh7XG4gICAgICBkaXNwbGF5TmFtZTogYCR7dmFsdWVJbk1pbnV0ZXN9ICR7dCgnbWludXRlLXNob3J0Jyl9YCxcbiAgICAgIHZhbHVlOiB2YWx1ZUluTWludXRlcyAqIDYwLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0aW1lT3B0aW9ucztcbn07XG5cbkl0aW5lcmFyeVNlYXJjaENvbnRyb2wucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBlbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbktleVByZXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB3aWRlOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbkl0aW5lcmFyeVNlYXJjaENvbnRyb2wuZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICB3aWRlOiBmYWxzZSxcbn07XG5cbi8qKlxuICogUGFuZWwgdGhhdCByZW5kZXJzIHR3byBEVEF1dG9zdWdnZXN0IHNlYXJjaCBmaWVsZHMsIGluY2x1ZGluZyB2aWFwb2ludCBoYW5kbGluZ1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICpcbiAqIGNvbnN0IG9yaWdpbiA9IHtcbiAqICBsYXQ6IDYwLjE2OTE5NixcbiAqICBsb246IDI0Ljk1NzY3NCxcbiAqICBhZGRyZXNzOiAnQWxla3NhbnRlcmlua2F0dSwgSGVsc2lua2knLFxuICogIHNldDogdHJ1ZSxcbiAqICByZWFkeTogdHJ1ZSxcbiAqIH1cbiAqXG4gKiBjb25zdCBkZXN0aW5hdGlvbiA9IHtcbiAqICAgbGF0OiA2MC4xOTkwOTMsXG4gKiAgIGxvbjogMjQuOTQwNTM2LFxuICogICBhZGRyZXNzOiAnT3Bhc3RpbnNpbHRhIDYsIEhlbHNpbmtpJyxcbiAqICAgc2V0OiB0cnVlLFxuICogICByZWFkeTogdHJ1ZSxcbiAqIH1cbiAqIG9uU2VsZWN0KGl0ZW0sIGlkKSB7XG4gKiAgcmV0dXJuIG51bGw7ICAvLyBEZWZpbmUgd2hhdCB0byBkbyB3aGVuIGEgc3VnZ2VzdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTm9uZSBieSBkZWZhdWx0LlxuICogIH1cbiAqIG9uQ2xlYXIoaWQpIHtcbiAqICByZXR1cm4gbnVsbDsgIC8vIERlZmluZSB3aGF0IHRvIGRvIHdoZW4gYSBzdWdnZXN0aW9uIGlzIGJlaW5nIHNlbGVjdGVkLiBOb25lIGJ5IGRlZmF1bHQuXG4gKiB9XG4gKiBjb25zdCBnZXRBdXRvU3VnZ2VzdEljb25zOiB7XG4gKiAgIC8vIENhbGxlZCBmb3IgZXZlcnkgY2l0eSBiaWtlIHN0YXRpb24gcmVuZGVyZWQgYXMgYSBzZWFyY2ggc3VnZ2VzdGlvbi4gU2hvdWxkIHJldHVybiB0aGUgaWNvbiBhbmRcbiAqICAgLy8gY29sb3IgdXNlZCBmb3IgdGhhdCBzdGF0aW9uLiBUd28gaWNvbnMgYXJlIGF2YWlsYWJsZSwgJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnIGFuZGl0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdC1zZWNvbmRhcnknLlxuICogICBjaXR5YmlrZXM6IHN0YXRpb24gPT4ge1xuICogICAgICByZXR1cm4gWydjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JywgJyNmMmI2MmQnXTtcbiAqICAgfVxuICogfVxuICogY29uc3QgdGFyZ2V0cyA9IFsnTG9jYXRpb25zJywgJ1N0b3BzJywgJ1JvdXRlcyddOyAvLyBEZWZpbmVzIHdoYXQgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgb3B0aW9ucyBhcmUgTG9jYXRpb25zLCBTdG9wcywgUm91dGVzLCBWZWhpY2xlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpLCBhbmQgRGF0YXNvdXJjZS4gTGVhdmUgZW1wdHkgdG8gdXNlIGFsbCBzb3VyY2VzLlxuICogPERUQXV0b3N1Z2dlc3RQYW5lbFxuICogICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH0gLy8gUmVxdWlyZWQuIFJvb3QgZWxlbWVudCdzIGlkLiBOZWVkZWQgZm9yIHJlYWN0LW1vZGFsIGNvbXBvbmVudC5cbiAqICAgIG9yaWdpbj17b3JpZ2lufSAvLyBTZWxlY3RlZCBvcmlnaW4gcG9pbnRcbiAqICAgIGRlc3RpbmF0aW9uPXtkZXN0aW5hdGlvbn0gLy8gU2VsZWN0ZWQgZGVzdGluYXRpb24gcG9pbnRcbiAqICAgIG9yaWdpblBsYWNlSG9sZGVyPXsnR2l2ZSBvcmlnaW4nfSAvLyBPcHRpb25hbCBHaXZlIHN0cmluZyBzaG93biBpbml0aWFsbHkgaW5zaWRlIG9yaWdpbiBzZWFyY2ggZmllbGRcbiAqICAgIGRlc3RpbmF0aW9uUGxhY2VIb2xkZXI9eydHaXZlIGRlc3RpbmF0aW9uJ30gLy8gT3B0aW9uYWwgR2l2ZSBzdHJpbmcgc2hvd24gaW5pdGFsbHkgaW5zaWRlIGRlc3RpbmF0aW9uIHNlYXJjaCBmaWVsZFxuICogICAgaW5pdGlhbFZpYVBvaW50cz17W119IC8vIE9wdGlvbmFsLiAgSWYgc2hvd1ZpYXBvaW50Q29udHJvbCBpcyBzZXQgdG8gdHJ1ZSwgcGFzcyBpbml0aWFsIHZpYSBwb2ludHMgdG8gdGhlIHBhbmVsLiBDdXJyZW50bHkgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHVwZGF0ZVZpYVBvaW50cz17KCkgPT4gcmV0dXJuIFtdfSAvLyBPcHRpb25hbC4gSWYgc2hvd1ZpYXBvaW50Q29udHJvbCBpcyBzZXQgdG8gdHJ1ZSwgZGVmaW5lIGhvdyB0byB1cGRhdGUgeW91ciB2aWEgcG9pbnQgbGlzdCB3aXRoIHRoaXMgZnVuY3Rpb24uIEN1cnJlbmx0eSBubyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGdpdmVuLlxuICogICAgc3dhcE9yZGVyPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gT3B0aW9uYWwuIElmIHNob3dTd2FwQ29udHJvbCBpcyBzZXQgdG8gdHJ1ZSwgZGVmaW5lIGhvdyB0byBzd2FwIG9yZGVyIG9mIHlvdXIgcG9pbnRzIChvcmlnaW4sIGRlc3RpbmF0aW9uLCB2aWFwb2ludHMpLiBDdXJyZW50bHkgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgb25TZWxlY3Q9e3RoaXMub25TZWxlY3R9XG4gKiAgICBvbkNsZWFyPXt0aGlzLm9uQ2xlYXJ9XG4gKiAgICBsYW5nPVwiZmlcIiAvLyBEZWZpbmUgbGFuZ3VhZ2UgZmkgc3Ygb3IgZW4uXG4gKiAgICBhZGRBbmFseXRpY3NFdmVudD17bnVsbH0gLy8gT3B0aW9uYWwuIHlvdSBjYW4gcmVjb3JkIGFuIGFuYWx5dGljcyBldmVudCBpZiB5b3Ugd2lzaC4gaWYgcGFzc2VkLCBjb21wb25lbnQgd2lsbCBwYXNzIGFuIGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUgcGFyYW1ldGVycyB0byBhZGRBbmFseXRpY3NFdmVudFxuICogICAgZGlzYWJsZUF1dG9Gb2N1cz17ZmFsc2V9IC8vIE9wdGlvbmFsLiB1c2UgdGhpcyB0byBkaXNhYmxlIGF1dG9mb2N1cyBjb21wbGV0ZWx5IGZyb20gRFRBdXRvc3VnZ2VzdFBhbmVsXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBvcmlnaW5Nb2JpbGVMYWJlbD1cIk9yaWdpbiBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3Igb3JpZ2luIGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWw9XCJEZXN0aW5hdGlvbiBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgZGVzdGluYXRpb24gZmllbGQgb24gbW9iaWxlLlxuICogICAgaGFuZGxlRm9jdXNDaGFuZ2U9eygpID0+IHt9fSAvLyBPcHRpb25hbC4gSWYgZGVmaW5lZCBvdmVycmlkZXMgZGVmYXVsdCBvbkZvY3VzQ2hhbmdlIGJlaGF2aW91clxuICogICAgc2hvd1N3YXBDb250cm9sPXtmYWxzZX0gLy8gT3B0aW9uYWwuXG4gKiAgICBzaG93VmlhcG9pbnRDb250cm9sPXtmYWxzZX0gLy8gT3B0aW9uYWwuXG4gKi9cblxuY29uc3QgbG9jYXRpb25TaGFwZSA9IFByb3BUeXBlcy5zaGFwZSh7XG4gIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICBsb2NhdGlvblNsYWNrOiBQcm9wVHlwZXMubnVtYmVyLFxufSk7XG5cbmNsYXNzIERUQXV0b3N1Z2dlc3RQYW5lbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG9yaWdpbjogbG9jYXRpb25TaGFwZSxcbiAgICBkZXN0aW5hdGlvbjogbG9jYXRpb25TaGFwZSxcbiAgICBvcmlnaW5QbGFjZUhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHZpYVBvaW50czogUHJvcFR5cGVzLmFycmF5T2YobG9jYXRpb25TaGFwZSksXG4gICAgdXBkYXRlVmlhUG9pbnRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHN3YXBPcmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc2VhcmNoUGFuZWxUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaENvbnRleHQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBVUkxfUEVMSUFTOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWRkQW5hbHl0aWNzRXZlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICB0YXJnZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcmlnaW5Nb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZXN0aW5hdGlvbk1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZlBvaW50OiBsb2NhdGlvblNoYXBlLFxuICAgIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbW9kZUljb25Db2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICAgIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uRm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dTd2FwQ29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd1ZpYXBvaW50Q29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd1NsYWNrQ29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIG9yaWdpbjogdW5kZWZpbmVkLFxuICAgIGRlc3RpbmF0aW9uOiB1bmRlZmluZWQsXG4gICAgdmlhUG9pbnRzOiBbXSxcbiAgICBvcmlnaW5QbGFjZUhvbGRlcjogJ2dpdmUtb3JpZ2luJyxcbiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyOiAnZ2l2ZS1kZXN0aW5hdGlvbicsXG4gICAgc3dhcE9yZGVyOiB1bmRlZmluZWQsXG4gICAgdXBkYXRlVmlhUG9pbnRzOiAoKSA9PiB7fSxcbiAgICBzZWFyY2hQYW5lbFRleHQ6IHVuZGVmaW5lZCxcbiAgICBzb3VyY2VzOiBbXSxcbiAgICB0YXJnZXRzOiBbXSxcbiAgICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gICAgb25DbGVhcjogdW5kZWZpbmVkLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgICByZWZQb2ludDogdW5kZWZpbmVkLFxuICAgIGFkZEFuYWx5dGljc0V2ZW50OiB1bmRlZmluZWQsXG4gICAgZGlzYWJsZUF1dG9Gb2N1czogZmFsc2UsXG4gICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgIGhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIGNvbG9yOiAnIzAwN2FjOScsXG4gICAgaG92ZXJDb2xvcjogJyMwMDYyYTEnLFxuICAgIG9yaWdpbk1vYmlsZUxhYmVsOiBudWxsLFxuICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWw6IG51bGwsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIG1vZGVJY29uQ29sb3JzOiB1bmRlZmluZWQsXG4gICAgZm9udFdlaWdodHM6IHtcbiAgICAgIG1lZGl1bTogNTAwLFxuICAgIH0sXG4gICAgc2hvd1Njcm9sbDogZmFsc2UsXG4gICAgb25Gb2N1c0NoYW5nZTogdW5kZWZpbmVkLFxuICAgIGlzRW1iZWRkZWQ6IGZhbHNlLFxuICAgIHNob3dTd2FwQ29udHJvbDogZmFsc2UsXG4gICAgc2hvd1ZpYXBvaW50Q29udHJvbDogZmFsc2UsXG4gICAgc2hvd1NsYWNrQ29udHJvbDogZmFsc2UsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzOiBbXSxcbiAgICAgIHJlZnM6IFtdLFxuICAgIH07XG4gIH1cblxuICBzdG9yZVJlZmVyZW5jZSA9IHJlZiA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4gKHsgcmVmczogWy4uLnByZXZTdGF0ZS5yZWZzLCByZWZdIH0pKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1c0NoYW5nZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGRlc3RpbmF0aW9uIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmICghZGVzdGluYXRpb24gfHwgIWRlc3RpbmF0aW9uLmxhdCkge1xuICAgICAgdGhpcy5zdGF0ZS5yZWZzWzFdLmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZVZpYVBvaW50cyA9IHZpYVBvaW50cyA9PiB7XG4gICAgaWYgKHZpYVBvaW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucHJvcHMudXBkYXRlVmlhUG9pbnRzKFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy51cGRhdGVWaWFQb2ludHModmlhUG9pbnRzLmZpbHRlcih2cCA9PiAhaXNWaWFQb2ludEVtcHR5KHZwKSkpO1xuICB9O1xuXG4gIGhhbmRsZVRvZ2dsZVZpYVBvaW50U2xhY2tDbGljayA9IHZpYVBvaW50SW5kZXggPT4ge1xuICAgIGNvbnN0IHsgYWN0aXZlU2xhY2tJbnB1dHMgfSA9IHRoaXMuc3RhdGU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhY3RpdmVTbGFja0lucHV0czogYWN0aXZlU2xhY2tJbnB1dHMuaW5jbHVkZXModmlhUG9pbnRJbmRleClcbiAgICAgICAgPyB1cGRhdGVWaWFQb2ludFNsYWNrKGFjdGl2ZVNsYWNrSW5wdXRzLCB2aWFQb2ludEluZGV4KVxuICAgICAgICA6IGFjdGl2ZVNsYWNrSW5wdXRzLmNvbmNhdChbdmlhUG9pbnRJbmRleF0pLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZVZpYVBvaW50U2xhY2tUaW1lU2VsZWN0ZWQgPSAoc2xhY2tUaW1lSW5TZWNvbmRzLCBpKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQoe1xuICAgICAgICBhY3Rpb246ICdFZGl0VmlhUG9pbnRTdG9wRHVyYXRpb24nLFxuICAgICAgICBjYXRlZ29yeTogJ0l0aW5lcmFyeVNldHRpbmdzJyxcbiAgICAgICAgbmFtZTogc2xhY2tUaW1lSW5TZWNvbmRzIC8gNjAsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyB2aWFQb2ludHMgfSA9IHRoaXMucHJvcHM7XG4gICAgdmlhUG9pbnRzW2ldLmxvY2F0aW9uU2xhY2sgPSBOdW1iZXIucGFyc2VJbnQoc2xhY2tUaW1lSW5TZWNvbmRzLCAxMCk7XG4gICAgdGhpcy51cGRhdGVWaWFQb2ludHModmlhUG9pbnRzKTtcbiAgfTtcblxuICBoYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQgPSAodmlhUG9pbnRMb2NhdGlvbiwgaSkgPT4ge1xuICAgIHRoaXMucHJvcHMuaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkKHZpYVBvaW50TG9jYXRpb24sIGkpO1xuICB9O1xuXG4gIGhhbmRsZVJlbW92ZVZpYVBvaW50Q2xpY2sgPSB2aWFQb2ludEluZGV4ID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ1JlbW92ZUpvdXJuZXlWaWFQb2ludCcsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHsgYWN0aXZlU2xhY2tJbnB1dHMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2aWFQb2ludHMgfSA9IHRoaXMucHJvcHM7XG4gICAgdmlhUG9pbnRzLnNwbGljZSh2aWFQb2ludEluZGV4LCAxKTtcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBhY3RpdmVTbGFja0lucHV0czogdXBkYXRlVmlhUG9pbnRTbGFjayhcbiAgICAgICAgICBhY3RpdmVTbGFja0lucHV0cyxcbiAgICAgICAgICB2aWFQb2ludEluZGV4LFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy51cGRhdGVWaWFQb2ludHModmlhUG9pbnRzKSxcbiAgICApO1xuICB9O1xuXG4gIGhhbmRsZUFkZFZpYVBvaW50Q2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQoe1xuICAgICAgICBhY3Rpb246ICdBZGRKb3VybmV5VmlhUG9pbnQnLFxuICAgICAgICBjYXRlZ29yeTogJ0l0aW5lcmFyeVNldHRpbmdzJyxcbiAgICAgICAgbmFtZTogJ1F1aWNrU2V0dGluZ3NCdXR0b24nLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHsgdmlhUG9pbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgIHZpYVBvaW50cy5wdXNoKGdldEVtcHR5VmlhUG9pbnRQbGFjZUhvbGRlcigpKTtcbiAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc3RhdGUgc28gdGhhdCBwbGFjZUhvbGRlciB3aWxsIHNob3cgdXAgaW4gcGFuZWwuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFjY2Vzcy1zdGF0ZS1pbi1zZXRzdGF0ZVxuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZSk7XG4gIH07XG5cbiAgaGFuZGxlU3dhcE9yZGVyQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQoe1xuICAgICAgICBhY3Rpb246ICdTd2l0Y2hKb3VybmV5U3RhcnRBbmRFbmRQb2ludE9yZGVyJyxcbiAgICAgICAgY2F0ZWdvcnk6ICdJdGluZXJhcnlTZXR0aW5ncycsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyB2aWFQb2ludHMgfSA9IHRoaXMucHJvcHM7XG4gICAgdmlhUG9pbnRzLnJldmVyc2UoKTtcbiAgICB0aGlzLnByb3BzLnN3YXBPcmRlcigpO1xuICB9O1xuXG4gIGdldFNsYWNrRGlzcGxheSA9IHNsYWNrSW5TZWNvbmRzID0+XG4gICAgYCR7c2xhY2tJblNlY29uZHMgLyA2MH0gJHt0aGlzLnByb3BzLnQoJ21pbnV0ZS1zaG9ydCcsIHtcbiAgICAgIGxuZzogdGhpcy5wcm9wcy5sYW5nLFxuICAgIH0pfWA7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9yaWdpbixcbiAgICAgIHNlYXJjaFBhbmVsVGV4dCxcbiAgICAgIHNlYXJjaENvbnRleHQsXG4gICAgICBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgICAgdmlhUG9pbnRzLFxuICAgICAgb3JpZ2luTW9iaWxlTGFiZWwsXG4gICAgICBkZXN0aW5hdGlvbk1vYmlsZUxhYmVsLFxuICAgICAgZm9udFdlaWdodHMsXG4gICAgICBvbkZvY3VzQ2hhbmdlLFxuICAgICAgc2hvd1N3YXBDb250cm9sLFxuICAgICAgc2hvd1ZpYXBvaW50Q29udHJvbCxcbiAgICAgIHQsXG4gICAgICBsYW5nOiBsbmcsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBhY3RpdmVTbGFja0lucHV0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBzbGFja1RpbWUgPSBnZXRTbGFja1RpbWVPcHRpb25zKHQpO1xuICAgIGNvbnN0IGRlZmF1bHRTbGFja1RpbWVWYWx1ZSA9IDA7XG4gICAgY29uc3QgZ2V0VmlhUG9pbnRTbGFja1RpbWVPckRlZmF1bHQgPSAoXG4gICAgICB2aWFQb2ludCxcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRTbGFja1RpbWVWYWx1ZSxcbiAgICApID0+ICh2aWFQb2ludCAmJiB2aWFQb2ludC5sb2NhdGlvblNsYWNrKSB8fCBkZWZhdWx0VmFsdWU7XG4gICAgY29uc3QgaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlID0gaW5kZXggPT5cbiAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzLmluY2x1ZGVzKGluZGV4KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LXBhbmVsJ10sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc21hbGw6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSl9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBgJHt0aGlzLnByb3BzLmNvbG9yfWAsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7JyAnfVxuICAgICAgICB7c2VhcmNoUGFuZWxUZXh0ID8gKFxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPXtzdHlsZXNbJ2F1dG9zdWdnZXN0LXNlYXJjaHBhbmVsLXRleHQnXX0+XG4gICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgIHtzZWFyY2hQYW5lbFRleHR9XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snb3JpZ2luLWlucHV0LWNvbnRhaW5lciddfT5cbiAgICAgICAgICA8RFRBdXRvU3VnZ2VzdFxuICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgaWNvbj1cIm1hcE1hcmtlclwiXG4gICAgICAgICAgICBpZD1cIm9yaWdpblwiXG4gICAgICAgICAgICBhdXRvRm9jdXM9e1xuICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogIXRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIW9yaWdpbi5sYXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0b3JlUmVmPXt0aGlzLnN0b3JlUmVmZXJlbmNlfVxuICAgICAgICAgICAgcmVmUG9pbnQ9e3RoaXMucHJvcHMucmVmUG9pbnR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2dldExvY2F0aW9uVHlwZShvcmlnaW4pfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMub3JpZ2luUGxhY2VIb2xkZXJ9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUob3JpZ2luKX1cbiAgICAgICAgICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gICAgICAgICAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXt0aGlzLnByb3BzLmdldEF1dG9TdWdnZXN0SWNvbnN9XG4gICAgICAgICAgICBvblNlbGVjdD17dGhpcy5wcm9wcy5vblNlbGVjdH1cbiAgICAgICAgICAgIG9uQ2xlYXI9e3RoaXMucHJvcHMub25DbGVhcn1cbiAgICAgICAgICAgIGZvY3VzQ2hhbmdlPXtvbkZvY3VzQ2hhbmdlIHx8IHRoaXMuaGFuZGxlRm9jdXNDaGFuZ2V9XG4gICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgICBzb3VyY2VzPXt0aGlzLnByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICB0YXJnZXRzPXt0aGlzLnByb3BzLnRhcmdldHN9XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzPXt0aGlzLnByb3BzLmZpbHRlclJlc3VsdHN9XG4gICAgICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgbW9iaWxlTGFiZWw9e29yaWdpbk1vYmlsZUxhYmVsfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICBtb2RlSWNvbkNvbG9ycz17dGhpcy5wcm9wcy5tb2RlSWNvbkNvbG9yc31cbiAgICAgICAgICAgIHNob3dTY3JvbGw9e3RoaXMucHJvcHMuc2hvd1Njcm9sbH1cbiAgICAgICAgICAgIGlzRW1iZWRkZWQ9e3RoaXMucHJvcHMuaXNFbWJlZGRlZH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHsoc2hvd1N3YXBDb250cm9sIHx8IHNob3dWaWFwb2ludENvbnRyb2wpICYmIChcbiAgICAgICAgICAgIDxJdGluZXJhcnlTZWFyY2hDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm9wcG9zaXRlfVxuICAgICAgICAgICAgICBlbmFibGVkPXtzaG93U3dhcENvbnRyb2x9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlU3dhcE9yZGVyQ2xpY2soKX1cbiAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiB0aGlzLmhhbmRsZVN3YXBPcmRlckNsaWNrKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJvcHBvc2l0ZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dmlhUG9pbnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1sncmVjdGFuZ2xlLWNvbnRhaW5lciddfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmVjdGFuZ2xlfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8UmVhY3RTb3J0YWJsZVxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWyd2aWFwb2ludHMtY29udGFpbmVyJ119XG4gICAgICAgICAgbGlzdD17dmlhUG9pbnRzfVxuICAgICAgICAgIGhhbmRsZT17YC4ke3N0eWxlc1sndmlhcG9pbnQtYmVmb3JlJ119YH1cbiAgICAgICAgICBhbmltYXRpb249ezIwMH1cbiAgICAgICAgICBkaXNhYmxlZD17dmlhUG9pbnRzLmxlbmd0aCA8PSAxfVxuICAgICAgICAgIHNldExpc3Q9e2l0ZW1zID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZpYVBvaW50cyA9IGl0ZW1zLmZpbHRlcih2cCA9PiAhaXNWaWFQb2ludEVtcHR5KHZwKSk7XG4gICAgICAgICAgICBpZiAobmV3VmlhUG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy51cGRhdGVWaWFQb2ludHMobmV3VmlhUG9pbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3ZpYVBvaW50cy5tYXAoKG8sIGkpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ3ZpYXBvaW50LWNvbnRhaW5lciddKX1cbiAgICAgICAgICAgICAga2V5PXtgdmlhcG9pbnQtJHtpfWB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snbGlnaHQtZ3JheS1iYWNrZ3JvdW5kJ119PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93fT5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ3ZpYXBvaW50LWJlZm9yZSddfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17dmlhUG9pbnRzLmxlbmd0aCA+IDEgPyB7IGN1cnNvcjogJ21vdmUnIH0gOiB7fX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3ZpYVBvaW50cy5sZW5ndGggPiAxICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nPVwiZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlPXs5MH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgICAgICAgICBgJHtzdHlsZXNbJ3ZpYXBvaW50LWlucHV0LWNvbnRhaW5lciddfSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzW2B2aWFwb2ludC0ke2kgKyAxfWBdXG4gICAgICAgICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxEVEF1dG9TdWdnZXN0XG4gICAgICAgICAgICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJtYXBNYXJrZXItdmlhXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInZpYS1wb2ludFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPXt0KCd2aWEtcG9pbnQtaW5kZXgnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsbmcsXG4gICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgYXV0b0ZvY3VzPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVBdXRvRm9jdXMgPT09IHRydWUgPyBmYWxzZSA6ICF0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwidmlhLXBvaW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ2aWFwb2ludFwiXG4gICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICByZWZQb2ludD17dGhpcy5wcm9wcy5yZWZQb2ludH1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17KG8gJiYgby5hZGRyZXNzKSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17dGhpcy5wcm9wcy5vblNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsZWFyPXt0aGlzLnByb3BzLm9uQ2xlYXJ9XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVmlhUG9pbnRzPXtpdGVtID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZChpdGVtLCBpKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlcz17dGhpcy5wcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHM9e1snU3RvcHMnLCAnU3RhdGlvbnMnXX1cbiAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJSZXN1bHRzPXt0aGlzLnByb3BzLmZpbHRlclJlc3VsdHN9XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgICAgICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgICAgICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICAgICAgICAgICAgbW9kZUljb25Db2xvcnM9e3RoaXMucHJvcHMubW9kZUljb25Db2xvcnN9XG4gICAgICAgICAgICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5zaG93U2xhY2tDb250cm9sICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEl0aW5lcmFyeVNlYXJjaENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snYWRkLXZpYS1wb2ludC1zbGFjayddfVxuICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ9e3RoaXMucHJvcHMuc2hvd1ZpYXBvaW50Q29udHJvbH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZVRvZ2dsZVZpYVBvaW50U2xhY2tDbGljayhpKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbktleVByZXNzPXtlID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVG9nZ2xlVmlhUG9pbnRTbGFja0NsaWNrKGkpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUoaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3BlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBpbmRleDogaSArIDEsIGxuZyB9LFxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgd2lkZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gaW1nPVwidGltZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHshaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlKGkpICYmXG4gICAgICAgICAgICAgICAgICB2aWFQb2ludHNbaV0gJiZcbiAgICAgICAgICAgICAgICAgIHZpYVBvaW50c1tpXS5sb2NhdGlvblNsYWNrID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWyd2aWFwb2ludC1zbGFjay10aW1lJ119PntgJHt0KFxuICAgICAgICAgICAgICAgICAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxuZyxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICApfTogJHt0aGlzLmdldFNsYWNrRGlzcGxheShcbiAgICAgICAgICAgICAgICAgICAgICB2aWFQb2ludHNbaV0ubG9jYXRpb25TbGFjayxcbiAgICAgICAgICAgICAgICAgICAgKX1gfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ2lucHV0LXZpYXBvaW50LXNsYWNrLWNvbnRhaW5lciddLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZDogIWlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZShpKSxcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ3NlbGVjdC13cmFwcGVyJ119PlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2B2aWFwb2ludC1zbGFjay0ke2l9YH1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17dCgndmlhcG9pbnQtc2xhY2stYW1vdW50JywgeyBsbmcgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17c2xhY2tUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtnZXRWaWFQb2ludFNsYWNrVGltZU9yRGVmYXVsdCh2aWFQb2ludHNbaV0pfVxuICAgICAgICAgICAgICAgICAgICAgIGdldERpc3BsYXk9e3RoaXMuZ2V0U2xhY2tEaXNwbGF5fVxuICAgICAgICAgICAgICAgICAgICAgIHZpYVBvaW50SW5kZXg9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj17XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlc1snY29tYm9ib3gtaWNvbiddfSAke3N0eWxlc1sndGltZS1pbnB1dC1pY29uJ119YH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaW1nPVwidGltZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBvblNsYWNrVGltZVNlbGVjdGVkPXt0aGlzLmhhbmRsZVZpYVBvaW50U2xhY2tUaW1lU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxJdGluZXJhcnlTZWFyY2hDb250cm9sXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ3JlbW92ZS12aWEtcG9pbnQnXX1cbiAgICAgICAgICAgICAgICBlbmFibGVkPXt0aGlzLnByb3BzLnNob3dWaWFwb2ludENvbnRyb2x9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrKGkpfVxuICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrKGkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJywge1xuICAgICAgICAgICAgICAgICAgaW5kZXg6IGkgKyAxLFxuICAgICAgICAgICAgICAgICAgbG5nLFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gaW1nPVwidHJhc2hcIiBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn0gLz5cbiAgICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvUmVhY3RTb3J0YWJsZT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZGVzdGluYXRpb24taW5wdXQtY29udGFpbmVyJ119PlxuICAgICAgICAgIDxEVEF1dG9TdWdnZXN0XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBpY29uPVwibWFwTWFya2VyXCJcbiAgICAgICAgICAgIGlkPVwiZGVzdGluYXRpb25cIlxuICAgICAgICAgICAgYXV0b0ZvY3VzPXtcbiAgICAgICAgICAgICAgZGlzYWJsZUF1dG9Gb2N1cyA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6ICF0aGlzLnByb3BzLmlzTW9iaWxlICYmICFOdW1iZXIuaXNOYU4ob3JpZ2luLmxhdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0b3JlUmVmPXt0aGlzLnN0b3JlUmVmZXJlbmNlfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMuZGVzdGluYXRpb25QbGFjZUhvbGRlcn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TG9jYXRpb25UeXBlKHRoaXMucHJvcHMuZGVzdGluYXRpb24pfVxuICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLnByb3BzLm9uU2VsZWN0fVxuICAgICAgICAgICAgb25DbGVhcj17dGhpcy5wcm9wcy5vbkNsZWFyfVxuICAgICAgICAgICAgcmVmUG9pbnQ9e3RoaXMucHJvcHMucmVmUG9pbnR9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUodGhpcy5wcm9wcy5kZXN0aW5hdGlvbil9XG4gICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgICBzb3VyY2VzPXt0aGlzLnByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICB0YXJnZXRzPXt0aGlzLnByb3BzLnRhcmdldHN9XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzPXt0aGlzLnByb3BzLmZpbHRlclJlc3VsdHN9XG4gICAgICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgbW9iaWxlTGFiZWw9e2Rlc3RpbmF0aW9uTW9iaWxlTGFiZWx9XG4gICAgICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgICAgIG1vZGVTZXQ9e3RoaXMucHJvcHMubW9kZVNldH1cbiAgICAgICAgICAgIG1vZGVJY29uQ29sb3JzPXt0aGlzLnByb3BzLm1vZGVJY29uQ29sb3JzfVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgICAgaXNFbWJlZGRlZD17dGhpcy5wcm9wcy5pc0VtYmVkZGVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyhzaG93U3dhcENvbnRyb2wgfHwgc2hvd1ZpYXBvaW50Q29udHJvbCkgJiYgKFxuICAgICAgICAgICAgPEl0aW5lcmFyeVNlYXJjaENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ2FkZC12aWEtcG9pbnQnXSwgc3R5bGVzLm1vcmUsIHtcbiAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6IHZpYVBvaW50cy5sZW5ndGggPiA0LFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgZW5hYmxlZD17c2hvd1ZpYXBvaW50Q29udHJvbCAmJiB2aWFQb2ludHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUFkZFZpYVBvaW50Q2xpY2soKX1cbiAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiB0aGlzLmhhbmRsZUFkZFZpYVBvaW50Q2xpY2soKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2FkZC12aWEtYnV0dG9uLWxhYmVsJywgeyBsbmcgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uXG4gICAgICAgICAgICAgICAgaW1nPVwidmlhcG9pbnRcIlxuICAgICAgICAgICAgICAgIHdpZHRoPXsxLjI1fVxuICAgICAgICAgICAgICAgIGhlaWdodD17MS4zNzV9XG4gICAgICAgICAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IERUQXV0b3N1Z2dlc3RQYW5lbFdpdGhUcmFuc2xhdGlvbiA9IHdpdGhUcmFuc2xhdGlvbigpKERUQXV0b3N1Z2dlc3RQYW5lbCk7XG5cbmV4cG9ydCBkZWZhdWx0IHByb3BzID0+IHtcbiAgcmV0dXJuIChcbiAgICA8STE4bmV4dFByb3ZpZGVyIGkxOG49e2kxOG59PlxuICAgICAgPERUQXV0b3N1Z2dlc3RQYW5lbFdpdGhUcmFuc2xhdGlvbiB7Li4ucHJvcHN9IC8+XG4gICAgPC9JMThuZXh0UHJvdmlkZXI+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsInRvUHJvcGVydHlLZXkiLCJ0IiwiaSIsInIiLCJlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2RlZmluZVByb3BlcnR5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsImluZGV4T2YiLCJvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibGVuZ3RoIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZG9jdW1lbnQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJ0eXBlIiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsIlNlbGVjdCIsImdldERpc3BsYXkiLCJvcHRpb25zIiwib25TbGFja1RpbWVTZWxlY3RlZCIsInZpYVBvaW50SW5kZXgiLCJpZCIsImxhYmVsIiwiaWNvbiIsImRpc3BsYXlWYWx1ZSIsImNoYW5nZURpc3BsYXlWYWx1ZSIsInVzZVN0YXRlIiwib3BlbiIsImNoYW5nZU9wZW4iLCJ1c2VFZmZlY3QiLCJzY3JvbGxSZWYiLCJ1c2VSZWYiLCJzY3JvbGxJbmRleCIsIk1hdGgiLCJmbG9vciIsInVzZUxheW91dEVmZmVjdCIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJpbnB1dElkIiwibGFiZWxJZCIsIlJlYWN0IiwiY2xhc3NOYW1lIiwic3R5bGVzIiwiaHRtbEZvciIsIkF1dG9zdWdnZXN0Iiwic3VnZ2VzdGlvbnMiLCJnZXRTdWdnZXN0aW9uVmFsdWUiLCJzIiwicmVuZGVyU3VnZ2VzdGlvbiIsImRpc3BsYXlOYW1lIiwib25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkIiwic2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMiLCJmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2siLCJvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQiLCJpbnB1dFByb3BzIiwib25DaGFuZ2UiLCJvbklucHV0Q2hhbmdlIiwiXyIsIm5ld1ZhbHVlIiwibWV0aG9kIiwib25Gb2N1cyIsIm9uQmx1ciIsInJlYWRPbmx5IiwicmVuZGVyU3VnZ2VzdGlvbnNDb250YWluZXIiLCJjb250YWluZXJQcm9wcyIsImNoaWxkcmVuIiwib3RoZXJSZWZzIiwiX2V4Y2x1ZGVkIiwiYXNzaWduIiwidGFiSW5kZXgiLCJlbGVtIiwidGhlbWUiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJudW1iZXIiLCJpc1JlcXVpcmVkIiwiZnVuYyIsImFycmF5T2YiLCJzaGFwZSIsInN0cmluZyIsIm5vZGUiLCJpMThuIiwiY3JlYXRlSW5zdGFuY2UiLCJmYWxsYmFja0xuZyIsInJlc291cmNlcyIsImRlIiwidHJhbnNsYXRpb24iLCJlbiIsImZpIiwicGwiLCJzdiIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJpbml0IiwiZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyIiwiaXNWaWFQb2ludEVtcHR5IiwidmlhUG9pbnQiLCJ1bmRlZmluZWQiLCJpc0VtcHR5Iiwia2V5cyIsImluY2x1ZGVzIiwiSXRpbmVyYXJ5U2VhcmNoQ29udHJvbCIsIl9yZWYiLCJlbmFibGVkIiwib25DbGljayIsIm9uS2V5UHJlc3MiLCJ3aWRlIiwicmVzdCIsInJvbGUiLCJ1cGRhdGVWaWFQb2ludFNsYWNrIiwiYWN0aXZlVmlhUG9pbnRTbGFja3MiLCJ1cGRhdGVkVmlhUG9pbnRJbmRleCIsInZpYVBvaW50UmVtb3ZlZCIsImZvdW5kQXRJbmRleCIsInNwbGljZSIsIm1hcCIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsImV2ZW50Iiwia2V5Iiwid2hpY2giLCJrZXlDb2RlIiwiY29uY2F0IiwicHJldmVudERlZmF1bHQiLCJsb2NhdGlvbiIsImFkZHJlc3MiLCJncHMiLCJyZWFkeSIsImdldExvY2F0aW9uVHlwZSIsImJvb2wiLCJkZWZhdWx0UHJvcHMiLCJsb2NhdGlvblNoYXBlIiwibGF0IiwibG9uIiwibG9jYXRpb25TbGFjayIsIkRUQXV0b3N1Z2dlc3RQYW5lbCIsIkNvbXBvbmVudCIsInByb3BzIiwic3VwZXIiLCJ0aGlzIiwic2V0U3RhdGUiLCJwcmV2U3RhdGUiLCJyZWZzIiwiZGVzdGluYXRpb24iLCJzdGF0ZSIsImZvY3VzIiwidmlhUG9pbnRzIiwidXBkYXRlVmlhUG9pbnRzIiwiZmlsdGVyIiwidnAiLCJhY3RpdmVTbGFja0lucHV0cyIsInNsYWNrVGltZUluU2Vjb25kcyIsImFkZEFuYWx5dGljc0V2ZW50IiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJuYW1lIiwicGFyc2VJbnQiLCJ2aWFQb2ludExvY2F0aW9uIiwiaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkIiwicHVzaCIsInJldmVyc2UiLCJzd2FwT3JkZXIiLCJzbGFja0luU2Vjb25kcyIsImxuZyIsImxhbmciLCJyZW5kZXIiLCJvcmlnaW4iLCJzZWFyY2hQYW5lbFRleHQiLCJzZWFyY2hDb250ZXh0IiwiZGlzYWJsZUF1dG9Gb2N1cyIsIm9yaWdpbk1vYmlsZUxhYmVsIiwiZGVzdGluYXRpb25Nb2JpbGVMYWJlbCIsImZvbnRXZWlnaHRzIiwib25Gb2N1c0NoYW5nZSIsInNob3dTd2FwQ29udHJvbCIsInNob3dWaWFwb2ludENvbnRyb2wiLCJzbGFja1RpbWUiLCJ0aW1lT3B0aW9ucyIsInZhbHVlSW5NaW51dGVzIiwiZ2V0U2xhY2tUaW1lT3B0aW9ucyIsImdldFZpYVBvaW50U2xhY2tUaW1lT3JEZWZhdWx0IiwiZGVmYXVsdFZhbHVlIiwiaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlIiwiaW5kZXgiLCJjeCIsImlzTW9iaWxlIiwiY29sb3IiLCJtZWRpdW0iLCJEVEF1dG9TdWdnZXN0IiwiYXBwRWxlbWVudCIsImF1dG9Gb2N1cyIsInN0b3JlUmVmIiwic3RvcmVSZWZlcmVuY2UiLCJyZWZQb2ludCIsInBsYWNlaG9sZGVyIiwib3JpZ2luUGxhY2VIb2xkZXIiLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwib25TZWxlY3QiLCJvbkNsZWFyIiwiZm9jdXNDaGFuZ2UiLCJoYW5kbGVGb2N1c0NoYW5nZSIsInNvdXJjZXMiLCJ0YXJnZXRzIiwiZmlsdGVyUmVzdWx0cyIsImhvdmVyQ29sb3IiLCJtb2JpbGVMYWJlbCIsIm1vZGVTZXQiLCJtb2RlSWNvbkNvbG9ycyIsInNob3dTY3JvbGwiLCJpc0VtYmVkZGVkIiwib3Bwb3NpdGUiLCJoYW5kbGVTd2FwT3JkZXJDbGljayIsIkljb24iLCJpbWciLCJyZWN0YW5nbGUiLCJSZWFjdFNvcnRhYmxlIiwibGlzdCIsImhhbmRsZSIsImFuaW1hdGlvbiIsImRpc2FibGVkIiwic2V0TGlzdCIsIml0ZW1zIiwibmV3VmlhUG9pbnRzIiwicm93IiwiY3Vyc29yIiwicm90YXRlIiwiYXJpYUxhYmVsIiwiaGFuZGxlVmlhUG9pbnRzIiwiaXRlbSIsInNob3dTbGFja0NvbnRyb2wiLCJoYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2siLCJnZXRTbGFja0Rpc3BsYXkiLCJoYW5kbGVWaWFQb2ludFNsYWNrVGltZVNlbGVjdGVkIiwiaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayIsImlzTmFOIiwiZGVzdGluYXRpb25QbGFjZUhvbGRlciIsIm1vcmUiLCJoYW5kbGVBZGRWaWFQb2ludENsaWNrIiwid2lkdGgiLCJoZWlnaHQiLCJVUkxfUEVMSUFTIiwib2JqZWN0T2YiLCJEVEF1dG9zdWdnZXN0UGFuZWxXaXRoVHJhbnNsYXRpb24iLCJ3aXRoVHJhbnNsYXRpb24iLCJJMThuZXh0UHJvdmlkZXIiXSwibWFwcGluZ3MiOiI2a0NBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0YsY0FBY0EsQ0FDZixFQUFHLFNBQVVBLEdBQ1osT0FBT0EsR0FBSyxtQkFBcUJDLFFBQVVELEVBQUVHLGNBQWdCRixRQUFVRCxJQUFNQyxPQUFPRyxVQUFZLGdCQUFrQkosQ0FDdEgsRUFBS0QsRUFBUUMsRUFDYixDQ05BLFNBQVNLLEVBQWNDLEdBQ3JCLElBQUlDLEVDRk4sU0FBcUJELEVBQUdFLEdBQ3RCLEdBQUksVUFBWVQsRUFBUU8sS0FBT0EsRUFBRyxPQUFPQSxFQUN6QyxJQUFJRyxFQUFJSCxFQUFFTCxPQUFPUyxhQUNqQixRQUFJLElBQVdELEVBQUcsQ0FDaEIsSUFBSUYsRUFB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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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