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