@sapui5/sap.fe.core 1.97.0 → 1.99.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -4
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +377 -405
- package/src/sap/fe/core/AnnotationHelper.ts +385 -0
- package/src/sap/fe/core/AppComponent.js +6 -3
- package/src/sap/fe/core/AppStateHandler.js +229 -181
- package/src/sap/fe/core/AppStateHandler.ts +171 -0
- package/src/sap/fe/core/BaseController.js +3 -2
- package/src/sap/fe/core/BusyLocker.js +105 -121
- package/src/sap/fe/core/BusyLocker.ts +98 -0
- package/src/sap/fe/core/CommonUtils.js +2073 -2379
- package/src/sap/fe/core/CommonUtils.ts +2078 -0
- package/src/sap/fe/core/ExtensionAPI.js +16 -7
- package/src/sap/fe/core/PageController.js +84 -119
- package/src/sap/fe/core/PageController.ts +101 -0
- package/src/sap/fe/core/RouterProxy.js +986 -807
- package/src/sap/fe/core/RouterProxy.ts +838 -0
- package/src/sap/fe/core/Synchronization.js +51 -35
- package/src/sap/fe/core/Synchronization.ts +29 -0
- package/src/sap/fe/core/TemplateComponent.js +173 -155
- package/src/sap/fe/core/TemplateComponent.ts +166 -0
- package/src/sap/fe/core/TemplateModel.js +97 -54
- package/src/sap/fe/core/TemplateModel.ts +64 -0
- package/src/sap/fe/core/TransactionHelper.js +1576 -1579
- package/src/sap/fe/core/TransactionHelper.ts +1706 -0
- package/src/sap/fe/core/actions/draft.js +560 -581
- package/src/sap/fe/core/actions/draft.ts +594 -0
- package/src/sap/fe/core/actions/messageHandling.js +545 -511
- package/src/sap/fe/core/actions/messageHandling.ts +532 -0
- package/src/sap/fe/core/actions/nonDraft.js +17 -19
- package/src/sap/fe/core/actions/nonDraft.ts +12 -0
- package/src/sap/fe/core/actions/operations.js +1074 -1211
- package/src/sap/fe/core/actions/operations.ts +1162 -0
- package/src/sap/fe/core/actions/sticky.js +102 -105
- package/src/sap/fe/core/actions/sticky.ts +102 -0
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +229 -260
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +288 -13
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -23
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +82 -46
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +113 -25
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +135 -44
- package/src/sap/fe/core/controllerextensions/MassEdit.js +172 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +22 -9
- package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
- package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
- package/src/sap/fe/core/controllerextensions/Paginator.js +37 -9
- package/src/sap/fe/core/controllerextensions/Placeholder.js +8 -4
- package/src/sap/fe/core/controllerextensions/Routing.js +25 -5
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.js +22 -8
- package/src/sap/fe/core/controllerextensions/SideEffects.js +9 -9
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -21
- package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/CommandExecution.js +3 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +9 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +18 -23
- package/src/sap/fe/core/controls/FilterBar.js +3 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +3 -7
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
- package/src/sap/fe/core/converters/ConverterContext.js +14 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +14 -3
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +56 -32
- package/src/sap/fe/core/converters/ManifestWrapper.ts +24 -6
- package/src/sap/fe/core/converters/MetaModelConverter.js +67 -6
- package/src/sap/fe/core/converters/MetaModelConverter.ts +70 -14
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
- package/src/sap/fe/core/converters/annotations/DataField.js +3 -3
- package/src/sap/fe/core/converters/annotations/DataField.ts +1 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
- package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +20 -10
- package/src/sap/fe/core/converters/controls/Common/Form.ts +24 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +72 -0
- package/src/sap/fe/core/converters/controls/Common/Table.js +390 -398
- package/src/sap/fe/core/converters/controls/Common/Table.ts +497 -484
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +527 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +655 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +489 -37
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +506 -58
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +18 -3
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -2
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
- package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
- package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
- package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
- package/src/sap/fe/core/fpm/Component.js +3 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +391 -0
- package/src/sap/fe/core/helpers/BindingExpression.js +484 -437
- package/src/sap/fe/core/helpers/BindingExpression.ts +480 -463
- package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
- package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
- package/src/sap/fe/core/helpers/EditState.js +81 -84
- package/src/sap/fe/core/helpers/EditState.ts +81 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
- package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
- package/src/sap/fe/core/helpers/MassEditHelper.js +687 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
- package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
- package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
- package/src/sap/fe/core/library.js +30 -3
- package/src/sap/fe/core/library.support.js +12 -5
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
- package/src/sap/fe/core/messagebundle.properties +61 -13
- package/src/sap/fe/core/messagebundle_ar.properties +33 -2
- package/src/sap/fe/core/messagebundle_bg.properties +33 -2
- package/src/sap/fe/core/messagebundle_ca.properties +33 -2
- package/src/sap/fe/core/messagebundle_cs.properties +34 -3
- package/src/sap/fe/core/messagebundle_cy.properties +33 -2
- package/src/sap/fe/core/messagebundle_da.properties +33 -2
- package/src/sap/fe/core/messagebundle_de.properties +33 -2
- package/src/sap/fe/core/messagebundle_el.properties +33 -2
- package/src/sap/fe/core/messagebundle_en.properties +32 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +32 -1
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +36 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +33 -2
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +33 -2
- package/src/sap/fe/core/messagebundle_es.properties +33 -2
- package/src/sap/fe/core/messagebundle_es_MX.properties +33 -2
- package/src/sap/fe/core/messagebundle_et.properties +33 -2
- package/src/sap/fe/core/messagebundle_fi.properties +34 -3
- package/src/sap/fe/core/messagebundle_fr.properties +38 -7
- package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -2
- package/src/sap/fe/core/messagebundle_hi.properties +33 -2
- package/src/sap/fe/core/messagebundle_hr.properties +33 -2
- package/src/sap/fe/core/messagebundle_hu.properties +34 -3
- package/src/sap/fe/core/messagebundle_id.properties +36 -5
- package/src/sap/fe/core/messagebundle_it.properties +33 -2
- package/src/sap/fe/core/messagebundle_iw.properties +33 -2
- package/src/sap/fe/core/messagebundle_ja.properties +33 -2
- package/src/sap/fe/core/messagebundle_kk.properties +33 -2
- package/src/sap/fe/core/messagebundle_ko.properties +33 -2
- package/src/sap/fe/core/messagebundle_lt.properties +33 -2
- package/src/sap/fe/core/messagebundle_lv.properties +33 -2
- package/src/sap/fe/core/messagebundle_ms.properties +33 -2
- package/src/sap/fe/core/messagebundle_nl.properties +33 -2
- package/src/sap/fe/core/messagebundle_no.properties +33 -2
- package/src/sap/fe/core/messagebundle_pl.properties +33 -2
- package/src/sap/fe/core/messagebundle_pt.properties +34 -3
- package/src/sap/fe/core/messagebundle_pt_PT.properties +33 -2
- package/src/sap/fe/core/messagebundle_ro.properties +33 -2
- package/src/sap/fe/core/messagebundle_ru.properties +33 -2
- package/src/sap/fe/core/messagebundle_sh.properties +33 -2
- package/src/sap/fe/core/messagebundle_sk.properties +33 -2
- package/src/sap/fe/core/messagebundle_sl.properties +33 -2
- package/src/sap/fe/core/messagebundle_sv.properties +34 -3
- package/src/sap/fe/core/messagebundle_th.properties +33 -2
- package/src/sap/fe/core/messagebundle_tr.properties +33 -2
- package/src/sap/fe/core/messagebundle_uk.properties +33 -2
- package/src/sap/fe/core/messagebundle_vi.properties +33 -2
- package/src/sap/fe/core/messagebundle_zh_CN.properties +33 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +33 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +9 -5
- package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -1152
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
- package/src/sap/fe/core/services/ShellServicesFactory.ts +45 -11
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +42 -85
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +57 -100
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -478
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
- package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +10 -48
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +14 -46
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
- package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
- package/src/sap/fe/core/templating/FilterHelper.js +139 -70
- package/src/sap/fe/core/templating/FilterHelper.ts +140 -70
- package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
- package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js +45 -110
- package/src/sap/fe/core/templating/UIFormatters.ts +39 -75
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +4 -6
- package/ui5.yaml +0 -3
- package/src/sap/fe/core/controls/filterbar.d.js +0 -8
- package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
|
@@ -111,7 +111,7 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
|
|
|
111
111
|
var visualFilter = {};
|
|
112
112
|
var oVisualFilter = FilterFields[sPropertyPath];
|
|
113
113
|
|
|
114
|
-
if (oVisualFilter
|
|
114
|
+
if (oVisualFilter !== null && oVisualFilter !== void 0 && (_oVisualFilter$visual = oVisualFilter.visualFilter) !== null && _oVisualFilter$visual !== void 0 && _oVisualFilter$visual.valueList) {
|
|
115
115
|
var _oVisualFilter$visual2, _property$annotations;
|
|
116
116
|
|
|
117
117
|
var oVFPath = oVisualFilter === null || oVisualFilter === void 0 ? void 0 : (_oVisualFilter$visual2 = oVisualFilter.visualFilter) === null || _oVisualFilter$visual2 === void 0 ? void 0 : _oVisualFilter$visual2.valueList;
|
|
@@ -361,4 +361,4 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
|
|
|
361
361
|
_exports.getVisualFilters = getVisualFilters;
|
|
362
362
|
return _exports;
|
|
363
363
|
}, false);
|
|
364
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlcnMudHMiXSwibmFtZXMiOlsiX2NoZWNrVkZBZ2dyZWdhdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsInNNZWFzdXJlUGF0aCIsImJHcm91cGFibGUiLCJiQWdncmVnYXRhYmxlIiwic01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJ2YWx1ZSIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJzb21lIiwiY3VzdEFnZyIsInF1YWxpZmllciIsImFBZ2dyZWdhdGlvbnMiLCJvQWdncmVnYXRlIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImxlbmd0aCIsImFnZ3JlZ2F0YWJsZVByb3AiLCJQcm9wZXJ0eSIsImdyb3VwYWJsZVByb3AiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiZW50aXR5VHlwZSIsInNQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJGaWVsZHMiLCJ2aXN1YWxGaWx0ZXIiLCJvVmlzdWFsRmlsdGVyIiwidmFsdWVMaXN0Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInNwbGl0IiwicXVhbGlmaWVyVkwiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJjb2xsZWN0aW9uUGF0aCIsIkNvbGxlY3Rpb25QYXRoIiwiY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEVudGl0eVNldCIsIm5hbWUiLCJ2YWx1ZUxpc3RQYXJhbXMiLCJQYXJhbWV0ZXJzIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwiYVBhcmFtZXRlcnMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInBhcmFtZXRlckVudGl0eVR5cGUiLCJnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlIiwia2V5cyIsIm1hcCIsImtleSIsImdldENvbnRleHRQYXRoIiwiZm9yRWFjaCIsInBhcmFtZXRlciIsInB1c2giLCJsb2NhbERhdGFQcm9wZXJ0eSIsInZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0UGFyYW0iLCJMb2NhbERhdGFQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5IiwiJFR5cGUiLCJiTm90RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwib0luUGFyYW1ldGVyIiwibWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiY29tcGlsZUJpbmRpbmciLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwidmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJFcnJvciIsInB2UXVhbGlmaWVyIiwiUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllciIsInN2UXVhbGlmaWVyIiwiU2VsZWN0aW9uVmFyaWFudFF1YWxpZmllciIsInB2QW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwidGVybSIsIl9iZ2V0VkZBZ2dyZWdhdGlvbiIsImJEaW1lbnNpb25IaWRkZW4iLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwiSGlkZGVuRmlsdGVyIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidW5kZWZpbmVkIiwicHJlc2VudGF0aW9uQW5ub3RhdGlvbiIsImJJc1JhbmdlIiwiYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsInJlcXVpcmVkIiwiZ2V0SXNSZXF1aXJlZCIsInN2QW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwic0VudGl0eVNldCIsInNOYXZpZ2F0aW9uUHJvcGVydHkiLCJvRW50aXR5U2V0Q29udmVydGVyQ29udGV4dCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsInN0YXJ0aW5nRW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsImZpbmQiLCJyZXN0cmljdGVkTmF2UHJvcCIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsInR5cGUiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJlbnRpdHlTZXRBbm5vdGF0aW9ucyIsInJlcXVpcmVkUHJvcGVydHlQYXRocyIsIm9SZXF1aXJlUHJvcGVydHkiLCJjb25jYXQiLCJzaG93T3ZlcmxheUluaXRpYWxseSIsInNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwib1NlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInBhcmFtZXRlck9wdGlvbnMiLCJvUGFyYW1ldGVyT3B0aW9uIiwic29ydCIsInNQYXRoIiwiaW5kZXhPZiIsInNEaW1lbnNpb25UeXBlIiwiQ2hhcnRUeXBlIiwicmVuZGVyTGluZUNoYXJ0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIlZBTFVFTElTVCIsIk1hbmlmZXN0IiwiT2JqZWN0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1BLG1CQUFtQixHQUFHLFVBQzNCQyxnQkFEMkIsRUFFM0JDLGVBRjJCLEVBRzNCQyxpQkFIMkIsRUFJTDtBQUFBOztBQUN0QixRQUFJQyxZQUFKLEVBQWtCQyxVQUFsQixFQUE4QkMsYUFBOUI7QUFDQSxRQUFNQyxRQUFnQixHQUFHTCxlQUFILGFBQUdBLGVBQUgsZ0RBQUdBLGVBQWUsQ0FBRU0sT0FBcEIsb0ZBQUcsc0JBQTBCQyxRQUExQixDQUFtQyxDQUFuQyxDQUFILDJEQUFHLHVCQUF1Q0MsS0FBaEU7QUFDQSxRQUFNQyxVQUFrQixHQUFHVCxlQUFILGFBQUdBLGVBQUgsaURBQUdBLGVBQWUsQ0FBRU0sT0FBcEIscUZBQUcsdUJBQTBCSSxVQUExQixDQUFxQyxDQUFyQyxDQUFILDJEQUFHLHVCQUF5Q0YsS0FBcEU7QUFDQSxRQUFNRyxnQkFBZ0IsR0FBR1YsaUJBQWlCLENBQUNXLDZCQUFsQixFQUF6QjtBQUNBLFFBQU1DLGtCQUFrQixHQUFHWixpQkFBaUIsQ0FBQ2Esb0JBQWxCLEVBQTNCOztBQUVBLFFBQ0NILGdCQUFnQixDQUFDSSxJQUFqQixDQUFzQixVQUFTQyxPQUFULEVBQW1EO0FBQ3hFLGFBQU9BLE9BQU8sQ0FBQ0MsU0FBUixLQUFzQlosUUFBN0I7QUFDQSxLQUZELENBREQsRUFJRTtBQUNESCxNQUFBQSxZQUFZLEdBQUdHLFFBQWY7QUFDQSxLQU5ELE1BTU8sSUFBSVEsa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDLENBQUQsQ0FBNUMsRUFBaUQ7QUFD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RXlEQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDQyxLQUYzRjtBQUdBO0FBQ0QsU0FsSUQsTUFrSU87QUFDTjdKLFVBQUFBLGdCQUFnQixDQUNkcUosY0FERixHQUVFQyxRQUZGLENBRVdDLGFBQWEsQ0FBQ0MsVUFGekIsRUFFcUNDLGFBQWEsQ0FBQ0MsSUFGbkQsRUFFeURDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NFLG1CQUYzRjtBQUdBO0FBQ0QsT0EvTkQsTUErTk87QUFDTjlKLFFBQUFBLGdCQUFnQixDQUNkcUosY0FERixHQUVFQyxRQUZGLENBRVdDLGFBQWEsQ0FBQ0MsVUFGekIsRUFFcUNDLGFBQWEsQ0FBQ0MsSUFGbkQsRUFFeURDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NHLFNBRjNGO0FBR0E7QUFDRCxLQTFPRCxNQTBPTztBQUNOL0osTUFBQUEsZ0JBQWdCLENBQUNxSixjQUFqQixHQUFrQ0MsUUFBbEMsQ0FBMkNDLGFBQWEsQ0FBQ1MsUUFBekQsRUFBbUVQLGFBQWEsQ0FBQ0MsSUFBakYsRUFBdUZDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NHLFNBQXpIO0FBQ0E7O0FBQ0QsUUFBSUUsTUFBTSxDQUFDbEcsSUFBUCxDQUFZNUIsWUFBWixFQUEwQlIsTUFBMUIsR0FBbUMsQ0FBdkMsRUFBMEM7QUFDekMsYUFBT1EsWUFBUDtBQUNBO0FBQ0QiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSwgZ2V0SXNSZXF1aXJlZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpbHRlclRlbXBsYXRpbmdcIjtcbmltcG9ydCB7IGNvbXBpbGVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgSXNzdWVUeXBlLCBJc3N1ZVNldmVyaXR5LCBJc3N1ZUNhdGVnb3J5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uVGVybSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQWdncmVnYXRlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0FnZ3JlZ2F0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIFZpc3VhbEZpbHRlcnMgPSB7XG5cdGRpbWVuc2lvblBhdGg/OiBzdHJpbmc7XG5cdG1lYXN1cmVQYXRoPzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Y2hhcnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRwcmVzZW50YXRpb25Bbm5vdGF0aW9uPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0b3V0UGFyYW1ldGVyPzogc3RyaW5nO1xuXHRpblBhcmFtZXRlcnM/OiBvYmplY3RbXTtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQ/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdHNob3dPdmVybGF5SW5pdGlhbGx5PzogYm9vbGVhbjtcblx0cmVuZGVyTGluZUNoYXJ0PzogYm9vbGVhbjtcblx0cmVxdWlyZWRQcm9wZXJ0aWVzPzogb2JqZWN0W107XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IG1lYXN1cmVzIGFuZCBkaW1lbnNpb25zIG9mIHRoZSB2aXN1YWwgZmlsdGVyIGNoYXJ0IGNhbiBiZSBhZ2dyZWdhdGVkIGFuZCBncm91cGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9uIFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYWdncmVnYXRpb25IZWxwZXIgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWQgfVxuICovXG5jb25zdCBfY2hlY2tWRkFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNoYXJ0QW5ub3RhdGlvbjogYW55LFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogYW55XG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNNZWFzdXJlUGF0aCwgYkdyb3VwYWJsZSwgYkFnZ3JlZ2F0YWJsZTtcblx0Y29uc3Qgc01lYXN1cmU6IHN0cmluZyA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXNbMF0/LnZhbHVlO1xuXHRjb25zdCBzRGltZW5zaW9uOiBzdHJpbmcgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LnZhbHVlO1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblxuXHRpZiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uKGN1c3RBZ2c6IEFubm90YXRpb25UZXJtPEN1c3RvbUFnZ3JlZ2F0ZT4pIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gc01lYXN1cmU7XG5cdFx0fSlcblx0KSB7XG5cdFx0c01lYXN1cmVQYXRoID0gc01lYXN1cmU7XG5cdH0gZWxzZSBpZiAoYVRyYW5zQWdncmVnYXRpb25zICYmIGFUcmFuc0FnZ3JlZ2F0aW9uc1swXSkge1xuXHRcdGNvbnN0IGFBZ2dyZWdhdGlvbnMgPSBhVHJhbnNBZ2dyZWdhdGlvbnNbMF07XG5cdFx0YUFnZ3JlZ2F0aW9ucy5zb21lKGZ1bmN0aW9uKG9BZ2dyZWdhdGU6IGFueSkge1xuXHRcdFx0aWYgKG9BZ2dyZWdhdGUuTmFtZSA9PT0gc01lYXN1cmUpIHtcblx0XHRcdFx0c01lYXN1cmVQYXRoID0gb0FnZ3JlZ2F0ZT8uQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Y29uc3QgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKTtcblx0Y29uc3QgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEdyb3VwYWJsZVByb3BlcnRpZXMoKTtcblx0aWYgKGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3Agb2YgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGFnZ3JlZ2F0YWJsZVByb3A/LlByb3BlcnR5Py52YWx1ZSA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciAmJiBhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyLmxlbmd0aCkge1xuXHRcdGZvciAoY29uc3QgZ3JvdXBhYmxlUHJvcCBvZiBhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyKSB7XG5cdFx0XHRpZiAoZ3JvdXBhYmxlUHJvcD8udmFsdWUgPT09IHNEaW1lbnNpb24pIHtcblx0XHRcdFx0Ykdyb3VwYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBiQWdncmVnYXRhYmxlICYmIGJHcm91cGFibGU7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgdGhlIHZpc3VhbCBmaWx0ZXJzIG9iamVjdCBmb3IgYSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNoYXJ0IGFubm90YXRpb25cbiAqIEBwYXJhbSBzUHJvcGVydHlQYXRoIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEBwYXJhbSBGaWx0ZXJGaWVsZHMgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMge1Zpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQgfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzdWFsRmlsdGVycyhcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c1Byb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uPlxuKTogVmlzdWFsRmlsdGVycyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHZpc3VhbEZpbHRlcjogVmlzdWFsRmlsdGVycyA9IHt9O1xuXHRjb25zdCBvVmlzdWFsRmlsdGVyOiBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IEZpbHRlckZpZWxkc1tzUHJvcGVydHlQYXRoXTtcblx0aWYgKG9WaXN1YWxGaWx0ZXIgJiYgb1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyICYmIG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0KSB7XG5cdFx0Y29uc3Qgb1ZGUGF0aCA9IG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0O1xuXHRcdGNvbnN0IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdCA9IG9WRlBhdGguc3BsaXQoXCIjXCIpO1xuXHRcdGNvbnN0IHF1YWxpZmllclZMID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0Lmxlbmd0aCA+IDEgPyBcIlZhbHVlTGlzdCNcIiArIGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFsxXSA6IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFswXTtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgoc1Byb3BlcnR5UGF0aCk7XG5cdFx0Y29uc3QgdmFsdWVMaXN0OiBhbnkgPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbltxdWFsaWZpZXJWTF07XG5cdFx0aWYgKHZhbHVlTGlzdCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoO1xuXHRcdFx0bGV0IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XCIvXCIgKyAoY29sbGVjdGlvblBhdGggfHwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZSlcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbXMgPSB2YWx1ZUxpc3Q/LlBhcmFtZXRlcnM7XG5cdFx0XHRsZXQgb3V0UGFyYW1ldGVyOiBhbnk7XG5cdFx0XHRjb25zdCBpblBhcmFtZXRlcnM6IEFycmF5PG9iamVjdD4gPSBbXTtcblx0XHRcdGxldCBhUGFyYW1ldGVyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXHRcdFx0aWYgKCFjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihcIlwiKTtcblx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpO1xuXHRcdFx0YVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJFbnRpdHlUeXBlXG5cdFx0XHRcdD8gcGFyYW1ldGVyRW50aXR5VHlwZS5rZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBrZXkubmFtZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIHtcblx0XHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXI6IGFueSkge1xuXHRcdFx0XHRcdGluUGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogcGFyYW1ldGVyXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlTGlzdFBhcmFtcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlTGlzdFBhcmFtIG9mIHZhbHVlTGlzdFBhcmFtcykge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gKHZhbHVlTGlzdFBhcmFtIGFzIGFueSkuTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5ID0gKHZhbHVlTGlzdFBhcmFtIGFzIGFueSkuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5UGF0aCA9PT0gbG9jYWxEYXRhUHJvcGVydHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG91dFBhcmFtZXRlciA9IHZhbHVlTGlzdFBhcmFtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQodmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiIHx8XG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5cIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggIT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBiTm90RmlsdGVyYWJsZSA9IGlzUHJvcGVydHlGaWx0ZXJhYmxlKGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCwgdmFsdWVMaXN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0aWYgKCFiTm90RmlsdGVyYWJsZSkge1xuXHRcdFx0XHRcdFx0XHRpblBhcmFtZXRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHk6IGxvY2FsRGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFByb3BlcnR5OiB2YWx1ZUxpc3RQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChpblBhcmFtZXRlcnMgJiYgaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRpblBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihvSW5QYXJhbWV0ZXI6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8ubG9jYWxEYXRhUHJvcGVydHkpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8udmFsdWVMaXN0UHJvcGVydHkpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAodmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwidHJ1ZVwiICYmIG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdFwiRmlsdGVyUmVzdHJpY3Rpb25zIG9mIFwiICsgc1Byb3BlcnR5UGF0aCArIFwiIGluIE1haW5FbnRpdHlTZXQgYW5kIFZhbHVlTGlzdEVudGl0eVNldCBhcmUgZGlmZmVyZW50XCJcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHB2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5QcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3Qgc3ZRdWFsaWZpZXIgPSB2YWx1ZUxpc3Q/LlNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXI7XG5cdFx0XHRjb25zdCBwdkFubm90YXRpb246IGFueSA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJAVUkuUHJlc2VudGF0aW9uVmFyaWFudCNcIiArIHB2UXVhbGlmaWVyKVxuXHRcdFx0XHQ/LmFubm90YXRpb247XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChwdkFubm90YXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYVZpc3VhbGl6YXRpb25zID0gcHZBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucztcblx0XHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBcIi9cIiArIHZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGggfHwgXCIvXCIgKyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVNldCgpPy5uYW1lO1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aDtcblx0XHRcdFx0bGV0IGNoYXJ0QW5ub3RhdGlvbjtcblx0XHRcdFx0Zm9yIChjb25zdCB2aXN1YWxpemF0aW9uIG9mIGFWaXN1YWxpemF0aW9ucykge1xuXHRcdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLiR0YXJnZXQ/LnRlcm0gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIikge1xuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uID0gdmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0Y29uc3QgX2JnZXRWRkFnZ3JlZ2F0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gX2NoZWNrVkZBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoIV9iZ2V0VkZBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuOiBib29sZWFuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXI6IGJvb2xlYW4gPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCk7XG5cdFx0XHRcdFx0aWYgKGJEaW1lbnNpb25IaWRkZW4gPT09IHRydWUgfHwgYkRpbWVuc2lvbkhpZGRlbkZpbHRlciA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYVZpc3VhbGl6YXRpb25zICYmIGFWaXN1YWxpemF0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5jaGFydEFubm90YXRpb24gPSBjaGFydEFubm90YXRpb25cblx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lICsgXCIvJEFubm90YXRpb25QYXRoL1wiXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5wcmVzZW50YXRpb25Bbm5vdGF0aW9uID0gcHZBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHB2QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgKyBcIi9cIilcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIub3V0UGFyYW1ldGVyID0gb3V0UGFyYW1ldGVyPy5Mb2NhbERhdGFQcm9wZXJ0eT8udmFsdWU7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzID0gaW5QYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0Y29uc3QgYklzUmFuZ2UgPSBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCJdXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoY29tcGlsZUJpbmRpbmcoYklzUmFuZ2UpID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJSYW5nZSBBbGxvd2VkRXhwcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB2aXN1YWwgZmlsdGVyc1wiKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbjogYW55ID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCA9IGNvbXBpbGVCaW5kaW5nKCFiSXNNYWluRW50aXR5U2V0U2luZ2xlU2VsZWN0aW9uLnZhbHVlKSBhcyBhbnk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVxdWlyZWQgPSBnZXRJc1JlcXVpcmVkKGNvbnZlcnRlckNvbnRleHQsIHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdFx0bGV0IHN2QW5ub3RhdGlvbjogYW55O1xuXHRcdFx0XHRcdFx0aWYgKHN2UXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJAVUkuU2VsZWN0aW9uVmFyaWFudCNcIiArIHN2UXVhbGlmaWVyKVxuXHRcdFx0XHRcdFx0XHRcdD8uYW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gc3ZBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc3ZBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSArIFwiL1wiKVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydGllcyA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVswXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc05hdmlnYXRpb25Qcm9wZXJ0eSA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXCIvXCIgKyBzRW50aXR5U2V0KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb0VudGl0eVNldENvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5zdGFydGluZ0VudGl0eVNldFxuXHRcdFx0XHRcdFx0XHRcdD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXN0cmljdGVkUHJvcGVydHkgPSBhUmVzdHJpY3RlZFByb3BlcnRpZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0KHJlc3RyaWN0ZWROYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5Py50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5LnZhbHVlID09PSBzTmF2aWdhdGlvblByb3BlcnR5O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gb1Jlc3RyaWN0ZWRQcm9wZXJ0eT8uRmlsdGVyUmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgYXMgYW55W107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXRBbm5vdGF0aW9ucyA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IGVudGl0eVNldEFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzIGFzIGFueVtdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydHlQYXRoczogQXJyYXk8b2JqZWN0PiA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHJlcXVpcmVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKG9SZXF1aXJlUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocy5wdXNoKG9SZXF1aXJlUHJvcGVydHkudmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5jb25jYXQoYVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHRcdGlmICh2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIHx8ICF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0T3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uU2VsZWN0T3B0aW9ucz8ubWFwKChvU2VsZWN0T3B0aW9uOiBhbnkpID0+IG9TZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLnZhbHVlKSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtZXRlck9wdGlvbnMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24/LlBhcmFtZXRlcnM/Lm1hcCgob1BhcmFtZXRlck9wdGlvbjogYW55KSA9PiBvUGFyYW1ldGVyT3B0aW9uLlByb3BlcnR5TmFtZS52YWx1ZSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQocGFyYW1ldGVyT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvbWUoZnVuY3Rpb24oc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdE9wdGlvbnMuaW5kZXhPZihzUGF0aCkgPT09IC0xO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHNEaW1lbnNpb25UeXBlID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py50eXBlO1xuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQhKFxuXHRcdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIlxuXHRcdFx0XHRcdFx0XHQpICYmXG5cdFx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlbmRlckxpbmVDaGFydCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlbmRlckxpbmVDaGFydCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5DSEFSVCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlBSRVNFTlRBVElPTlZBUklBTlQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHR9XG5cdGlmIChPYmplY3Qua2V5cyh2aXN1YWxGaWx0ZXIpLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gdmlzdWFsRmlsdGVyO1xuXHR9XG59XG4iXX0=
|
|
364
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlcnMudHMiXSwibmFtZXMiOlsiX2NoZWNrVkZBZ2dyZWdhdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsInNNZWFzdXJlUGF0aCIsImJHcm91cGFibGUiLCJiQWdncmVnYXRhYmxlIiwic01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJ2YWx1ZSIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJzb21lIiwiY3VzdEFnZyIsInF1YWxpZmllciIsImFBZ2dyZWdhdGlvbnMiLCJvQWdncmVnYXRlIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImxlbmd0aCIsImFnZ3JlZ2F0YWJsZVByb3AiLCJQcm9wZXJ0eSIsImdyb3VwYWJsZVByb3AiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiZW50aXR5VHlwZSIsInNQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJGaWVsZHMiLCJ2aXN1YWxGaWx0ZXIiLCJvVmlzdWFsRmlsdGVyIiwidmFsdWVMaXN0Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInNwbGl0IiwicXVhbGlmaWVyVkwiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJjb2xsZWN0aW9uUGF0aCIsIkNvbGxlY3Rpb25QYXRoIiwiY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEVudGl0eVNldCIsIm5hbWUiLCJ2YWx1ZUxpc3RQYXJhbXMiLCJQYXJhbWV0ZXJzIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwiYVBhcmFtZXRlcnMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInBhcmFtZXRlckVudGl0eVR5cGUiLCJnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlIiwia2V5cyIsIm1hcCIsImtleSIsImdldENvbnRleHRQYXRoIiwiZm9yRWFjaCIsInBhcmFtZXRlciIsInB1c2giLCJsb2NhbERhdGFQcm9wZXJ0eSIsInZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0UGFyYW0iLCJMb2NhbERhdGFQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5IiwiJFR5cGUiLCJiTm90RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwib0luUGFyYW1ldGVyIiwibWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiY29tcGlsZUJpbmRpbmciLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwidmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJFcnJvciIsInB2UXVhbGlmaWVyIiwiUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllciIsInN2UXVhbGlmaWVyIiwiU2VsZWN0aW9uVmFyaWFudFF1YWxpZmllciIsInB2QW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwidGVybSIsIl9iZ2V0VkZBZ2dyZWdhdGlvbiIsImJEaW1lbnNpb25IaWRkZW4iLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwiSGlkZGVuRmlsdGVyIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidW5kZWZpbmVkIiwicHJlc2VudGF0aW9uQW5ub3RhdGlvbiIsImJJc1JhbmdlIiwiYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsInJlcXVpcmVkIiwiZ2V0SXNSZXF1aXJlZCIsInN2QW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwic0VudGl0eVNldCIsInNOYXZpZ2F0aW9uUHJvcGVydHkiLCJvRW50aXR5U2V0Q29udmVydGVyQ29udGV4dCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsInN0YXJ0aW5nRW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsImZpbmQiLCJyZXN0cmljdGVkTmF2UHJvcCIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsInR5cGUiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJlbnRpdHlTZXRBbm5vdGF0aW9ucyIsInJlcXVpcmVkUHJvcGVydHlQYXRocyIsIm9SZXF1aXJlUHJvcGVydHkiLCJjb25jYXQiLCJzaG93T3ZlcmxheUluaXRpYWxseSIsInNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwib1NlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInBhcmFtZXRlck9wdGlvbnMiLCJvUGFyYW1ldGVyT3B0aW9uIiwic29ydCIsInNQYXRoIiwiaW5kZXhPZiIsInNEaW1lbnNpb25UeXBlIiwiQ2hhcnRUeXBlIiwicmVuZGVyTGluZUNoYXJ0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIlZBTFVFTElTVCIsIk1hbmlmZXN0IiwiT2JqZWN0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1BLG1CQUFtQixHQUFHLFVBQzNCQyxnQkFEMkIsRUFFM0JDLGVBRjJCLEVBRzNCQyxpQkFIMkIsRUFJTDtBQUFBOztBQUN0QixRQUFJQyxZQUFKLEVBQWtCQyxVQUFsQixFQUE4QkMsYUFBOUI7QUFDQSxRQUFNQyxRQUFnQixHQUFHTCxlQUFILGFBQUdBLGVBQUgsZ0RBQUdBLGVBQWUsQ0FBRU0sT0FBcEIsb0ZBQUcsc0JBQTBCQyxRQUExQixDQUFtQyxDQUFuQyxDQUFILDJEQUFHLHVCQUF1Q0MsS0FBaEU7QUFDQSxRQUFNQyxVQUFrQixHQUFHVCxlQUFILGFBQUdBLGVBQUgsaURBQUdBLGVBQWUsQ0FBRU0sT0FBcEIscUZBQUcsdUJBQTBCSSxVQUExQixDQUFxQyxDQUFyQyxDQUFILDJEQUFHLHVCQUF5Q0YsS0FBcEU7QUFDQSxRQUFNRyxnQkFBZ0IsR0FBR1YsaUJBQWlCLENBQUNXLDZCQUFsQixFQUF6QjtBQUNBLFFBQU1DLGtCQUFrQixHQUFHWixpQkFBaUIsQ0FBQ2Esb0JBQWxCLEVBQTNCOztBQUVBLFFBQ0NILGdCQUFnQixDQUFDSSxJQUFqQixDQUFzQixVQUFTQyxPQUFULEVBQW1EO0FBQ3hFLGFBQU9BLE9BQU8sQ0FBQ0MsU0FBUixLQUFzQlosUUFBN0I7QUFDQSxLQUZELENBREQsRUFJRTtBQUNESCxNQUFBQSxZQUFZLEdBQUdHLFFBQWY7QUFDQSxLQU5ELE1BTU8sSUFBSVEsa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDLENBQUQsQ0FBNUMsRUFBaUQ7QUFD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SixVQUFBQSxnQkFBZ0IsQ0FDZHFKLGNBREYsR0FFRUMsUUFGRixDQUVXQyxhQUFhLENBQUNDLFVBRnpCLEVBRXFDQyxhQUFhLENBQUNDLElBRm5ELEVBRXlEQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDRSxtQkFGM0Y7QUFHQTtBQUNELE9BL05ELE1BK05PO0FBQ045SixRQUFBQSxnQkFBZ0IsQ0FDZHFKLGNBREYsR0FFRUMsUUFGRixDQUVXQyxhQUFhLENBQUNDLFVBRnpCLEVBRXFDQyxhQUFhLENBQUNDLElBRm5ELEVBRXlEQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDRyxTQUYzRjtBQUdBO0FBQ0QsS0ExT0QsTUEwT087QUFDTi9KLE1BQUFBLGdCQUFnQixDQUFDcUosY0FBakIsR0FBa0NDLFFBQWxDLENBQTJDQyxhQUFhLENBQUNTLFFBQXpELEVBQW1FUCxhQUFhLENBQUNDLElBQWpGLEVBQXVGQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDRyxTQUF6SDtBQUNBOztBQUNELFFBQUlFLE1BQU0sQ0FBQ2xHLElBQVAsQ0FBWTVCLFlBQVosRUFBMEJSLE1BQTFCLEdBQW1DLENBQXZDLEVBQTBDO0FBQ3pDLGFBQU9RLFlBQVA7QUFDQTtBQUNEIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eUZpbHRlcmFibGUsIGdldElzUmVxdWlyZWQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWx0ZXJUZW1wbGF0aW5nXCI7XG5pbXBvcnQgeyBjb21waWxlQmluZGluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IElzc3VlVHlwZSwgSXNzdWVTZXZlcml0eSwgSXNzdWVDYXRlZ29yeSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvblRlcm0gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IEN1c3RvbUFnZ3JlZ2F0ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9BZ2dyZWdhdGlvblwiO1xuXG5leHBvcnQgdHlwZSBWaXN1YWxGaWx0ZXJzID0ge1xuXHRkaW1lbnNpb25QYXRoPzogc3RyaW5nO1xuXHRtZWFzdXJlUGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdGNoYXJ0QW5ub3RhdGlvbj86IHN0cmluZztcblx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbj86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdG91dFBhcmFtZXRlcj86IHN0cmluZztcblx0aW5QYXJhbWV0ZXJzPzogb2JqZWN0W107XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRzaG93T3ZlcmxheUluaXRpYWxseT86IGJvb2xlYW47XG5cdHJlbmRlckxpbmVDaGFydD86IGJvb2xlYW47XG5cdHJlcXVpcmVkUHJvcGVydGllcz86IG9iamVjdFtdO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBtZWFzdXJlcyBhbmQgZGltZW5zaW9ucyBvZiB0aGUgdmlzdWFsIGZpbHRlciBjaGFydCBjYW4gYmUgYWdncmVnYXRlZCBhbmQgZ3JvdXBlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIHtib29sZWFuIHwgdW5kZWZpbmVkIH1cbiAqL1xuY29uc3QgX2NoZWNrVkZBZ2dyZWdhdGlvbiA9IGZ1bmN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjaGFydEFubm90YXRpb246IGFueSxcblx0YWdncmVnYXRpb25IZWxwZXI6IGFueVxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdGxldCBzTWVhc3VyZVBhdGgsIGJHcm91cGFibGUsIGJBZ2dyZWdhdGFibGU7XG5cdGNvbnN0IHNNZWFzdXJlOiBzdHJpbmcgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/Lk1lYXN1cmVzWzBdPy52YWx1ZTtcblx0Y29uc3Qgc0RpbWVuc2lvbjogc3RyaW5nID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy52YWx1ZTtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IGFUcmFuc0FnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldFRyYW5zQWdncmVnYXRpb25zKCk7XG5cblx0aWYgKFxuXHRcdGN1c3RvbUFnZ3JlZ2F0ZXMuc29tZShmdW5jdGlvbihjdXN0QWdnOiBBbm5vdGF0aW9uVGVybTxDdXN0b21BZ2dyZWdhdGU+KSB7XG5cdFx0XHRyZXR1cm4gY3VzdEFnZy5xdWFsaWZpZXIgPT09IHNNZWFzdXJlO1xuXHRcdH0pXG5cdCkge1xuXHRcdHNNZWFzdXJlUGF0aCA9IHNNZWFzdXJlO1xuXHR9IGVsc2UgaWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucyAmJiBhVHJhbnNBZ2dyZWdhdGlvbnNbMF0pIHtcblx0XHRjb25zdCBhQWdncmVnYXRpb25zID0gYVRyYW5zQWdncmVnYXRpb25zWzBdO1xuXHRcdGFBZ2dyZWdhdGlvbnMuc29tZShmdW5jdGlvbihvQWdncmVnYXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQWdncmVnYXRlLk5hbWUgPT09IHNNZWFzdXJlKSB7XG5cdFx0XHRcdHNNZWFzdXJlUGF0aCA9IG9BZ2dyZWdhdGU/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCk7XG5cdGNvbnN0IGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRHcm91cGFibGVQcm9wZXJ0aWVzKCk7XG5cdGlmIChhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyICYmIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGFibGVQcm9wIG9mIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdGlmIChhZ2dyZWdhdGFibGVQcm9wPy5Qcm9wZXJ0eT8udmFsdWUgPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRiQWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGdyb3VwYWJsZVByb3Agb2YgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGdyb3VwYWJsZVByb3A/LnZhbHVlID09PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRcdGJHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYkFnZ3JlZ2F0YWJsZSAmJiBiR3JvdXBhYmxlO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IHRoZSB2aXN1YWwgZmlsdGVycyBvYmplY3QgZm9yIGEgcHJvcGVydHkuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gc1Byb3BlcnR5UGF0aCBUaGUgYWdncmVnYXRpb24gaGVscGVyXG4gKiBAcGFyYW0gRmlsdGVyRmllbGRzIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIHtWaXN1YWxGaWx0ZXJzIHwgdW5kZWZpbmVkIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc3VhbEZpbHRlcnMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj5cbik6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCB2aXN1YWxGaWx0ZXI6IFZpc3VhbEZpbHRlcnMgPSB7fTtcblx0Y29uc3Qgb1Zpc3VhbEZpbHRlcjogRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBGaWx0ZXJGaWVsZHNbc1Byb3BlcnR5UGF0aF07XG5cdGlmIChvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXI/LnZhbHVlTGlzdCkge1xuXHRcdGNvbnN0IG9WRlBhdGggPSBvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXI/LnZhbHVlTGlzdDtcblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBvVkZQYXRoLnNwbGl0KFwiI1wiKTtcblx0XHRjb25zdCBxdWFsaWZpZXJWTCA9IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdC5sZW5ndGggPiAxID8gXCJWYWx1ZUxpc3QjXCIgKyBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMV0gOiBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMF07XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHNQcm9wZXJ0eVBhdGgpO1xuXHRcdGNvbnN0IHZhbHVlTGlzdDogYW55ID0gcHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb25bcXVhbGlmaWVyVkxdO1xuXHRcdGlmICh2YWx1ZUxpc3QpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoID0gdmFsdWVMaXN0Py5Db2xsZWN0aW9uUGF0aDtcblx0XHRcdGxldCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFwiL1wiICsgKGNvbGxlY3Rpb25QYXRoIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWUpXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0UGFyYW1zID0gdmFsdWVMaXN0Py5QYXJhbWV0ZXJzO1xuXHRcdFx0bGV0IG91dFBhcmFtZXRlcjogYW55O1xuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJzOiBBcnJheTxvYmplY3Q+ID0gW107XG5cdFx0XHRsZXQgYVBhcmFtZXRlcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcblx0XHRcdGlmICghY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJcIik7XG5cdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldFBhcmFtZXRlckVudGl0eVR5cGUoKTtcblx0XHRcdGFQYXJhbWV0ZXJzID0gcGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUua2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgPT09IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKSB7XG5cdFx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0XHRpblBhcmFtZXRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eTogcGFyYW1ldGVyLFxuXHRcdFx0XHRcdFx0dmFsdWVMaXN0UHJvcGVydHk6IHBhcmFtZXRlclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZUxpc3RQYXJhbSBvZiB2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbERhdGFQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbSBhcyBhbnkpLkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbSBhcyBhbnkpLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggPT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvdXRQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RQYXJhbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluXCIpICYmXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoICE9PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYk5vdEZpbHRlcmFibGUgPSBpc1Byb3BlcnR5RmlsdGVyYWJsZShjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsIHZhbHVlTGlzdFByb3BlcnR5KTtcblx0XHRcdFx0XHRcdGlmICghYk5vdEZpbHRlcmFibGUpIHtcblx0XHRcdFx0XHRcdFx0aW5QYXJhbWV0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBsb2NhbERhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogdmFsdWVMaXN0UHJvcGVydHlcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5QYXJhbWV0ZXJzICYmIGluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0aW5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ob0luUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LmxvY2FsRGF0YVByb3BlcnR5KSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LnZhbHVlTGlzdFByb3BlcnR5KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID09PSBcInRydWVcIiAmJiBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRcIkZpbHRlclJlc3RyaWN0aW9ucyBvZiBcIiArIHNQcm9wZXJ0eVBhdGggKyBcIiBpbiBNYWluRW50aXR5U2V0IGFuZCBWYWx1ZUxpc3RFbnRpdHlTZXQgYXJlIGRpZmZlcmVudFwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHN2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5TZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3QgcHZBbm5vdGF0aW9uOiBhbnkgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKFwiQFVJLlByZXNlbnRhdGlvblZhcmlhbnQjXCIgKyBwdlF1YWxpZmllcilcblx0XHRcdFx0Py5hbm5vdGF0aW9uO1xuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAocHZBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFWaXN1YWxpemF0aW9ucyA9IHB2QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gXCIvXCIgKyB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoIHx8IFwiL1wiICsgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKT8ubmFtZTtcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoID0gY29udGV4dFBhdGg7XG5cdFx0XHRcdGxldCBjaGFydEFubm90YXRpb247XG5cdFx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBhVmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi4kdGFyZ2V0Py50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpIHtcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IF9iZ2V0VkZBZ2dyZWdhdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IF9jaGVja1ZGQWdncmVnYXRpb24oXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlclxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKCFfYmdldFZGQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYkRpbWVuc2lvbkhpZGRlbjogYm9vbGVhbiA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKTtcblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuRmlsdGVyOiBib29sZWFuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGlmIChiRGltZW5zaW9uSGlkZGVuID09PSB0cnVlIHx8IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFWaXN1YWxpemF0aW9ucyAmJiBhVmlzdWFsaXphdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uID0gY2hhcnRBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSArIFwiLyRBbm5vdGF0aW9uUGF0aC9cIlxuXHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IHB2QW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChwdkFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lICsgXCIvXCIpXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm91dFBhcmFtZXRlciA9IG91dFBhcmFtZXRlcj8uTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycyA9IGluUGFyYW1ldGVycztcblx0XHRcdFx0XHRcdGNvbnN0IGJJc1JhbmdlID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiXVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKGNvbXBpbGVCaW5kaW5nKGJJc1JhbmdlKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmFuZ2UgQWxsb3dlZEV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdmlzdWFsIGZpbHRlcnNcIik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb246IGFueSA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5tdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQgPSBjb21waWxlQmluZGluZyghYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbi52YWx1ZSkgYXMgYW55O1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkID0gZ2V0SXNSZXF1aXJlZChjb252ZXJ0ZXJDb250ZXh0LCBzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdGxldCBzdkFubm90YXRpb246IGFueTtcblx0XHRcdFx0XHRcdGlmIChzdlF1YWxpZmllcikge1xuXHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKFwiQFVJLlNlbGVjdGlvblZhcmlhbnQjXCIgKyBzdlF1YWxpZmllcilcblx0XHRcdFx0XHRcdFx0XHQ/LmFubm90YXRpb247XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9IHN2QW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHN2QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgKyBcIi9cIilcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGxldCByZXF1aXJlZFByb3BlcnRpZXMgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMF07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUHJvcGVydHkgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMV07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFwiL1wiICsgc0VudGl0eVNldCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9IG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXRcblx0XHRcdFx0XHRcdFx0XHQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/Lk5hdmlnYXRpb25SZXN0cmljdGlvbnM/LlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvUmVzdHJpY3RlZFByb3BlcnR5ID0gYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzPy5maW5kKFxuXHRcdFx0XHRcdFx0XHRcdChyZXN0cmljdGVkTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb25UeXBlcykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3RyaWN0ZWROYXZQcm9wLk5hdmlnYXRpb25Qcm9wZXJ0eT8udHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3RyaWN0ZWROYXZQcm9wLk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25Qcm9wZXJ0eTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IG9SZXN0cmljdGVkUHJvcGVydHk/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzIGFzIGFueVtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZW50aXR5U2V0QW5ub3RhdGlvbnMgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zO1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMgPSBlbnRpdHlTZXRBbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyBhcyBhbnlbXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGxldCByZXF1aXJlZFByb3BlcnR5UGF0aHM6IEFycmF5PG9iamVjdD4gPSBbXTtcblx0XHRcdFx0XHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihvUmVxdWlyZVByb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMucHVzaChvUmVxdWlyZVByb3BlcnR5LnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuY29uY2F0KGFQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZXF1aXJlZFByb3BlcnRpZXMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHM7XG5cdFx0XHRcdFx0XHRpZiAodmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycyB8fCAhdmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNlbGVjdE9wdGlvbnMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24/LlNlbGVjdE9wdGlvbnM/Lm1hcCgob1NlbGVjdE9wdGlvbjogYW55KSA9PiBvU2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS52YWx1ZSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJPcHRpb25zID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uPy5QYXJhbWV0ZXJzPy5tYXAoKG9QYXJhbWV0ZXJPcHRpb246IGFueSkgPT4gb1BhcmFtZXRlck9wdGlvbi5Qcm9wZXJ0eU5hbWUudmFsdWUpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuY29uY2F0KHBhcmFtZXRlck9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5zb21lKGZ1bmN0aW9uKHNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3RPcHRpb25zLmluZGV4T2Yoc1BhdGgpID09PSAtMTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBzRGltZW5zaW9uVHlwZSA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8udHlwZTtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0IShcblx0XHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlXCIgfHxcblx0XHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCJcblx0XHRcdFx0XHRcdFx0KSAmJlxuXHRcdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24uJHRhcmdldC5DaGFydFR5cGUgPT09IFwiVUkuQ2hhcnRUeXBlL0xpbmVcIlxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZW5kZXJMaW5lQ2hhcnQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZW5kZXJMaW5lQ2hhcnQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuQ0hBUlQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5QUkVTRU5UQVRJT05WQVJJQU5UKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCkuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5NYW5pZmVzdCwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0fVxuXHRpZiAoT2JqZWN0LmtleXModmlzdWFsRmlsdGVyKS5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIHZpc3VhbEZpbHRlcjtcblx0fVxufVxuIl19
|
|
@@ -95,7 +95,7 @@ export function getVisualFilters(
|
|
|
95
95
|
): VisualFilters | undefined {
|
|
96
96
|
const visualFilter: VisualFilters = {};
|
|
97
97
|
const oVisualFilter: FilterFieldManifestConfiguration = FilterFields[sPropertyPath];
|
|
98
|
-
if (oVisualFilter
|
|
98
|
+
if (oVisualFilter?.visualFilter?.valueList) {
|
|
99
99
|
const oVFPath = oVisualFilter?.visualFilter?.valueList;
|
|
100
100
|
const annotationQualifierSplit = oVFPath.split("#");
|
|
101
101
|
const qualifierVL = annotationQualifierSplit.length > 1 ? "ValueList#" + annotationQualifierSplit[1] : annotationQualifierSplit[0];
|
|
@@ -146,7 +146,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
146
146
|
function createCustomHeaderFacetSubSections(converterContext) {
|
|
147
147
|
var customHeaderFacets = getHeaderFacetsFromManifest(converterContext.getManifestWrapper().getHeaderFacets());
|
|
148
148
|
var aCustomHeaderFacets = [];
|
|
149
|
-
Object.keys(customHeaderFacets).
|
|
149
|
+
Object.keys(customHeaderFacets).forEach(function (key) {
|
|
150
150
|
aCustomHeaderFacets.push(customHeaderFacets[key]);
|
|
151
151
|
return aCustomHeaderFacets;
|
|
152
152
|
});
|
|
@@ -276,13 +276,19 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
276
276
|
var subSectionID = SubSectionID({
|
|
277
277
|
Facet: facetDefinition
|
|
278
278
|
});
|
|
279
|
+
var oHiddenAnnotation = (_facetDefinition$anno = facetDefinition.annotations) === null || _facetDefinition$anno === void 0 ? void 0 : (_facetDefinition$anno2 = _facetDefinition$anno.UI) === null || _facetDefinition$anno2 === void 0 ? void 0 : _facetDefinition$anno2.Hidden;
|
|
280
|
+
var isVisible = compileBinding(not(equal(true, annotationExpression(oHiddenAnnotation))));
|
|
281
|
+
var isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0 && (oHiddenAnnotation === null || oHiddenAnnotation === void 0 ? void 0 : oHiddenAnnotation.type) !== "Path";
|
|
282
|
+
var isVisibleDynamicExpression = isVisible && isDynamicExpression ? isVisible.substring(isVisible.indexOf("{=") + 2, isVisible.lastIndexOf("}")) : false;
|
|
283
|
+
var title = compileBinding(annotationExpression(facetDefinition.Label));
|
|
279
284
|
var subSection = {
|
|
280
285
|
id: subSectionID,
|
|
281
286
|
key: getSubSectionKey(facetDefinition, subSectionID),
|
|
282
|
-
title:
|
|
287
|
+
title: title,
|
|
283
288
|
type: SubSectionType.Unknown,
|
|
284
289
|
annotationPath: converterContext.getEntitySetBasedAnnotationPath(facetDefinition.fullyQualifiedName),
|
|
285
|
-
visible:
|
|
290
|
+
visible: isVisible,
|
|
291
|
+
isVisibilityDynamic: isDynamicExpression,
|
|
286
292
|
level: level,
|
|
287
293
|
sideContent: undefined
|
|
288
294
|
};
|
|
@@ -340,7 +346,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
340
346
|
var actions = getFacetActions(facetDefinition, converterContext),
|
|
341
347
|
formCollectionSubSection = _objectSpread(_objectSpread({}, subSection), {}, {
|
|
342
348
|
type: SubSectionType.Form,
|
|
343
|
-
formDefinition: createFormDefinition(facetDefinition, converterContext, actions),
|
|
349
|
+
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
|
|
344
350
|
level: level,
|
|
345
351
|
actions: actions.filter(function (action) {
|
|
346
352
|
return action.facetName === undefined;
|
|
@@ -360,14 +366,16 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
360
366
|
case "com.sap.vocabularies.UI.v1.PresentationVariant":
|
|
361
367
|
case "com.sap.vocabularies.UI.v1.SelectionPresentationVariant":
|
|
362
368
|
var presentation = getDataVisualizationConfiguration(facetDefinition.Target.value, getCondensedTableLayoutCompliance(facetDefinition, facetsToCreate, converterContext), converterContext, undefined, isHeaderSection);
|
|
363
|
-
var controlTitle = (_presentation$visuali = presentation.visualizations[0]) === null || _presentation$visuali === void 0 ? void 0 : (_presentation$visuali2 = _presentation$visuali.annotation) === null || _presentation$visuali2 === void 0 ? void 0 : _presentation$visuali2.title;
|
|
364
|
-
|
|
369
|
+
var controlTitle = ((_presentation$visuali = presentation.visualizations[0]) === null || _presentation$visuali === void 0 ? void 0 : (_presentation$visuali2 = _presentation$visuali.annotation) === null || _presentation$visuali2 === void 0 ? void 0 : _presentation$visuali2.title) || ((_presentation$visuali3 = presentation.visualizations[0]) === null || _presentation$visuali3 === void 0 ? void 0 : _presentation$visuali3.title);
|
|
370
|
+
var showTitle = isSubsectionTitleShown(hasSingleContent, subSection.title, controlTitle);
|
|
371
|
+
var titleVisibleExpression = isVisible && title !== "undefined" && (title ? isVisible : false);
|
|
365
372
|
|
|
366
373
|
var dataVisualizationSubSection = _objectSpread(_objectSpread({}, subSection), {}, {
|
|
367
374
|
type: SubSectionType.DataVisualization,
|
|
368
375
|
level: level,
|
|
369
376
|
presentation: presentation,
|
|
370
|
-
showTitle:
|
|
377
|
+
showTitle: showTitle,
|
|
378
|
+
titleVisible: isDynamicExpression ? "{= (".concat(isVisibleDynamicExpression, ") && ('").concat(title, "' !=='undefined') && (").concat(showTitle, " ? true : false) }") : titleVisibleExpression
|
|
371
379
|
});
|
|
372
380
|
|
|
373
381
|
return dataVisualizationSubSection;
|
|
@@ -382,7 +390,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
382
390
|
formElementSubSection = _objectSpread(_objectSpread({}, subSection), {}, {
|
|
383
391
|
type: SubSectionType.Form,
|
|
384
392
|
level: level,
|
|
385
|
-
formDefinition: createFormDefinition(facetDefinition, converterContext, _actions),
|
|
393
|
+
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, _actions),
|
|
386
394
|
actions: _actions.filter(function (action) {
|
|
387
395
|
return action.facetName === undefined;
|
|
388
396
|
})
|
|
@@ -671,4 +679,4 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
671
679
|
|
|
672
680
|
return _exports;
|
|
673
681
|
}, false);
|
|
674
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwibmFtZXMiOlsiU3ViU2VjdGlvblR5cGUiLCJ0YXJnZXRUZXJtcyIsImhhc1RhYmxlIiwiZmFjZXRzIiwic29tZSIsImZhY2V0VHlwZSIsImluZGV4T2YiLCJUYXJnZXQiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsImN1c3RvbUhlYWRlckZhY2V0IiwidGVtcGxhdGVFZGl0IiwiY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uIiwic3ViU2VjdGlvbklEIiwiQ3VzdG9tU3ViU2VjdGlvbklEIiwic3ViU2VjdGlvbiIsImlkIiwidGl0bGUiLCJ0eXBlIiwiWE1MRnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsInZpc2libGUiLCJsZXZlbCIsInNpZGVDb250ZW50IiwidW5kZWZpbmVkIiwic3Rhc2hlZCIsImZsZXhTZXR0aW5ncyIsImFjdGlvbnMiLCJnZXRTdWJTZWN0aW9uS2V5IiwiZmFsbGJhY2siLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJhZGRGb3JtTWVudUFjdGlvbnMiLCJoaWRkZW5BY3Rpb25zIiwiZ2V0Rm9ybUhpZGRlbkFjdGlvbnMiLCJmb3JtQWN0aW9ucyIsImdldEZvcm1BY3Rpb25zIiwiZm9ybUFsbEFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJnZXRGYWNldEFjdGlvbnMiLCJBcnJheSIsImZpbHRlciIsImlzUmVmZXJlbmNlRmFjZXQiLCJjcmVhdGVGb3JtQWN0aW9uUmVkdWNlciIsImdldEJ1dHRvblR5cGUiLCJFbXBoYXNpemVkIiwiUGF0aEZvckJ1dHRvblR5cGUiLCJwYXRoIiwiQnV0dG9uVHlwZSIsIlRyYW5zcGFyZW50IiwiR2hvc3QiLCJoYXNTaW5nbGVDb250ZW50IiwiU3ViU2VjdGlvbklEIiwiRmFjZXQiLCJjb21waWxlQmluZGluZyIsImFubm90YXRpb25FeHByZXNzaW9uIiwiVW5rbm93biIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIm5vdCIsImVxdWFsIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJjb250ZW50IiwidGFibGVDb250ZW50IiwiaW5kZXgiLCJ1bnN1cHBvcnRlZFRleHQiLCJpIiwiY29uY2F0IiwibWl4ZWRTdWJTZWN0aW9uIiwiTWl4ZWQiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImFjdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwicHJlc2VudGF0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlIiwiY29udHJvbFRpdGxlIiwidmlzdWFsaXphdGlvbnMiLCJhbm5vdGF0aW9uIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJzaG93VGl0bGUiLCJpc1N1YnNlY3Rpb25UaXRsZVNob3duIiwiZm9ybUVsZW1lbnRTdWJTZWN0aW9uIiwidW5zdXBwb3J0ZWRTdWJTZWN0aW9uIiwidGV4dCIsInN1YlNlY3Rpb25UaXRsZSIsInJlZmVyZW5jZVRhcmdldCIsInRhcmdldFZhbHVlIiwibWFuaWZlc3RBY3Rpb25zIiwiZGF0YUZpZWxkQ29sbGVjdGlvbiIsInNwbGl0IiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImxhc3RJbmRleE9mIiwic3Vic3RyIiwiRGF0YSIsImdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJxdWFsaWZpZXIiLCJkYXRhRmllbGQiLCJVSUFubm90YXRpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJ2YWx1ZU9mIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsIkZvcm1JRCIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImVuYWJsZWQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiYnV0dG9uVHlwZSIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJBY3Rpb25UYXJnZXQiLCJiaW5kaW5nIiwicmVxdWlyZXNEaWFsb2ciLCJpc0RpYWxvZyIsImNvbnRleHRzIiwiYmluZGluZ0V4cHJlc3Npb24iLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIm1vZGVsIiwiaXNOYXZpZ2FibGUiLCJpc0FjdGlvbk5hdmlnYWJsZSIsInJlZiIsImFjdGlvbkRlZmluaXRpb24iLCJiQ3JpdGljYWwiLCJDb21tb24iLCJJc0FjdGlvbkNyaXRpY2FsIiwicGFyYW1ldGVycyIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zIiwibWFuaWZlc3RTdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25zIiwiZm9yRWFjaCIsInN1YlNlY3Rpb25LZXkiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9uIiwibWFuaWZlc3RTdWJTZWN0aW9uIiwiU2lkZUNvbnRlbnRJRCIsImVxdWFsU3BsaXQiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwic3ViU2VjdGlvbkRlZmluaXRpb24iLCJuYW1lIiwiUGxhY2Vob2xkZXIiLCJjdXJyZW50RmFjZXQiLCJmYWNldHNUb0NyZWF0ZUluU2VjdGlvbiIsIm1hbmlmZXN0V3JhcHBlciIsInVzZUljb25UYWJCYXIiLCJoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJldmVyeSIsInN1YkZhY2V0IiwicmVmRmFjZXQiLCJzdWJDb2xsZWN0aW9uRmFjZXQiLCJzdWJSZWZGYWNldCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QVdBO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0EsS0E1Qk0sQ0FBUDtBQTZCQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uVHlwZSwgTWFuaWZlc3RTdWJTZWN0aW9uLCBNYW5pZmVzdEFjdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQge1xuXHRBbm5vdGF0aW9uVGVybSxcblx0Q29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdEZhY2V0VHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdElkZW50aWZpY2F0aW9uLFxuXHRPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdFN0YXR1c0luZm8sXG5cdFVJQW5ub3RhdGlvblRlcm1zLFxuXHRVSUFubm90YXRpb25UeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQ29tbXVuaWNhdGlvblwiO1xuaW1wb3J0IHsgQ3VzdG9tU3ViU2VjdGlvbklELCBGb3JtSUQsIFN1YlNlY3Rpb25JRCwgU2lkZUNvbnRlbnRJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBjcmVhdGVGb3JtRGVmaW5pdGlvbiwgRm9ybURlZmluaXRpb24sIGlzUmVmZXJlbmNlRmFjZXQgfSBmcm9tIFwiLi4vQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDb25maWd1cmFibGVSZWNvcmQsIEN1c3RvbUVsZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzLCBQbGFjZW1lbnQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7XG5cdENvbnZlcnRlckFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRpc0FjdGlvbk5hdmlnYWJsZSxcblx0QnV0dG9uVHlwZSxcblx0Z2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zLFxuXHRCYXNlQWN0aW9uLFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHtcblx0YW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGJpbmRpbmdFeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdGVxdWFsLFxuXHRmbixcblx0bm90LFxuXHRyZWZcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IElzc3VlVHlwZSwgSXNzdWVTZXZlcml0eSwgSXNzdWVDYXRlZ29yeSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQge1xuXHRGbGV4U2V0dGluZ3MsXG5cdGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQsXG5cdGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0LFxuXHRDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQsXG5cdGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQgeyBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucywgZ2V0Rm9ybUhpZGRlbkFjdGlvbnMsIGdldEZvcm1BY3Rpb25zIH0gZnJvbSBcIi4uLy4uL29iamVjdFBhZ2UvRm9ybU1lbnVBY3Rpb25zXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuXG5leHBvcnQgZW51bSBTdWJTZWN0aW9uVHlwZSB7XG5cdFVua25vd24gPSBcIlVua25vd25cIiwgLy8gRGVmYXVsdCBUeXBlXG5cdEZvcm0gPSBcIkZvcm1cIixcblx0RGF0YVZpc3VhbGl6YXRpb24gPSBcIkRhdGFWaXN1YWxpemF0aW9uXCIsXG5cdFhNTEZyYWdtZW50ID0gXCJYTUxGcmFnbWVudFwiLFxuXHRQbGFjZWhvbGRlciA9IFwiUGxhY2Vob2xkZXJcIixcblx0TWl4ZWQgPSBcIk1peGVkXCJcbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gPVxuXHR8IFVuc3VwcG9ydGVkU3ViU2VjdGlvblxuXHR8IEZvcm1TdWJTZWN0aW9uXG5cdHwgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uXG5cdHwgQ29udGFjdFN1YlNlY3Rpb25cblx0fCBYTUxGcmFnbWVudFN1YlNlY3Rpb25cblx0fCBQbGFjZWhvbGRlckZyYWdtZW50U3ViU2VjdGlvblxuXHR8IE1peGVkU3ViU2VjdGlvbjtcblxudHlwZSBCYXNlU3ViU2VjdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0a2V5OiBzdHJpbmc7XG5cdHRpdGxlOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZTtcblx0dmlzaWJsZTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdGZsZXhTZXR0aW5ncz86IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZD86IGJvb2xlYW47XG5cdGxldmVsOiBudW1iZXI7XG5cdGNvbnRlbnQ/OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cdHNpZGVDb250ZW50PzogU2lkZUNvbnRlbnREZWY7XG59O1xuXG50eXBlIFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0ZXh0OiBzdHJpbmc7XG59O1xuXG50eXBlIERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbjtcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNob3dUaXRsZTogYm9vbGVhbjtcbn07XG5cbnR5cGUgQ29udGFjdFN1YlNlY3Rpb24gPSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gJiB7fTtcblxudHlwZSBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudDtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgRW1waGFzaXplZCA9IHtcblx0cGF0aDogc3RyaW5nO1xufTtcblxudHlwZSBQbGFjZWhvbGRlckZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBNaXhlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0Y29udGVudDogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybTtcblx0Zm9ybURlZmluaXRpb246IEZvcm1EZWZpbml0aW9uO1xuXHRhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSB8IEJhc2VBY3Rpb25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRpZDogc3RyaW5nO1xuXHR0aXRsZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPjtcblx0c2hvd1RpdGxlPzogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdHZpc2libGU6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcbn07XG5cbnR5cGUgU2lkZUNvbnRlbnREZWYgPSB7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0c2lkZUNvbnRlbnRGYWxsRG93bj86IHN0cmluZztcblx0Y29udGFpbmVyUXVlcnk/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRlcXVhbFNwbGl0PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlU2VjdGlvbj47XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cbmNvbnN0IHRhcmdldFRlcm1zOiBzdHJpbmdbXSA9IFtcblx0VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0sXG5cdFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbl07XG5cbi8vIFRPRE86IE5lZWQgdG8gaGFuZGxlIFRhYmxlIGNhc2UgaW5zaWRlIGNyZWF0ZVN1YlNlY3Rpb24gZnVuY3Rpb24gaWYgQ29sbGVjdGlvbkZhY2V0IGhhcyBUYWJsZSBSZWZlcmVuY2VGYWNldFxuY29uc3QgaGFzVGFibGUgPSAoZmFjZXRzOiBhbnlbXSA9IFtdKSA9PiB7XG5cdHJldHVybiBmYWNldHMuc29tZShmYWNldFR5cGUgPT4gdGFyZ2V0VGVybXMuaW5kZXhPZihmYWNldFR5cGU/LlRhcmdldD8uJHRhcmdldD8udGVybSkgPiAtMSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBzdWJzZWN0aW9ucyBiYXNlZCBvbiBmYWNldCBkZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSB7RmFjZXRUeXBlc1tdfSBmYWNldENvbGxlY3Rpb24gQ29sbGVjdGlvbiBvZiBmYWNldHNcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIZWFkZXJTZWN0aW9uIFRydWUgaWYgaGVhZGVyIHNlY3Rpb24gaXMgZ2VuZXJhdGVkIGluIHRoaXMgaXRlcmF0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb25bXX0gVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YlNlY3Rpb25zKFxuXHRmYWNldENvbGxlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhblxuKTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdC8vIEZpcnN0IHdlIGRldGVybWluZSB3aGljaCBzdWIgc2VjdGlvbiB3ZSBuZWVkIHRvIGNyZWF0ZVxuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGZhY2V0Q29sbGVjdGlvbi5yZWR1Y2UoKGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sIGZhY2V0RGVmaW5pdGlvbikgPT4ge1xuXHRcdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRcdC8vIFRPRE8gSWYgdGhlIENvbGxlY3Rpb24gRmFjZXQgaGFzIGEgY2hpbGQgb2YgdHlwZSBDb2xsZWN0aW9uIEZhY2V0IHdlIGJyaW5nIHRoZW0gdXAgb25lIGxldmVsIChGb3JtICsgVGFibGUgdXNlIGNhc2UpID9cblx0XHRcdFx0Ly8gZmlyc3QgY2FzZSBmYWNldCBDb2xsZWN0aW9uIGlzIGNvbWJpbmF0aW9uIG9mIGNvbGxlY3Rpb24gYW5kIHJlZmVyZW5jZSBmYWNldCBvciBub3QgYWxsIGZhY2V0cyBhcmUgcmVmZXJlbmNlIGZhY2V0cy5cblx0XHRcdFx0aWYgKGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZmluZChmYWNldFR5cGUgPT4gZmFjZXRUeXBlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpKSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUuc3BsaWNlKGZhY2V0c1RvQ3JlYXRlLmxlbmd0aCwgMCwgLi4uZmFjZXREZWZpbml0aW9uLkZhY2V0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdFx0Ly8gTm90IHN1cHBvcnRlZFxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlO1xuXHR9LCBbXSk7XG5cblx0Ly8gVGhlbiB3ZSBjcmVhdGUgdGhlIGFjdHVhbCBzdWJzZWN0aW9uc1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKGZhY2V0ID0+XG5cdFx0Y3JlYXRlU3ViU2VjdGlvbihmYWNldCwgZmFjZXRzVG9DcmVhdGUsIGNvbnZlcnRlckNvbnRleHQsIDAsICEoZmFjZXQgYXMgYW55KT8uRmFjZXRzPy5sZW5ndGgsIGlzSGVhZGVyU2VjdGlvbilcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHN1YnNlY3Rpb25zIGJhc2VkIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU3ViU2VjdGlvbltdfSBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0PiA9IGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEhlYWRlckZhY2V0cygpXG5cdCk7XG5cdGNvbnN0IGFDdXN0b21IZWFkZXJGYWNldHM6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldFtdID0gW107XG5cdE9iamVjdC5rZXlzKGN1c3RvbUhlYWRlckZhY2V0cykubWFwKGZ1bmN0aW9uKGtleSkge1xuXHRcdGFDdXN0b21IZWFkZXJGYWNldHMucHVzaChjdXN0b21IZWFkZXJGYWNldHNba2V5XSk7XG5cdFx0cmV0dXJuIGFDdXN0b21IZWFkZXJGYWNldHM7XG5cdH0pO1xuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGFDdXN0b21IZWFkZXJGYWNldHMucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10sIGN1c3RvbUhlYWRlckZhY2V0KSA9PiB7XG5cdFx0aWYgKGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCkge1xuXHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChjdXN0b21IZWFkZXJGYWNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoY3VzdG9tSGVhZGVyRmFjZXQgPT4gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN1YnNlY3Rpb24gYmFzZWQgb24gYSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBjdXN0b21IZWFkZXJGYWNldCBBIGN1c3RvbSBoZWFkZXIgZmFjZXRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb259IEEgZGVmaW5pdGlvbiBmb3IgYSBzdWJzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbihjdXN0b21IZWFkZXJGYWNldDogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBDdXN0b21TdWJTZWN0aW9uSUQoY3VzdG9tSGVhZGVyRmFjZXQua2V5KTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBjdXN0b21IZWFkZXJGYWNldC5rZXksXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0LnRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50LFxuXHRcdHRlbXBsYXRlOiBjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQgfHwgXCJcIixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldC52aXNpYmxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWQsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXQuc3Rhc2hlZCxcblx0XHRmbGV4U2V0dGluZ3M6IGN1c3RvbUhlYWRlckZhY2V0LmZsZXhTZXR0aW5ncyxcblx0XHRhY3Rpb25zOiB7fVxuXHR9O1xuXHRyZXR1cm4gc3ViU2VjdGlvbjtcbn1cblxuLy8gZnVuY3Rpb24gaXNUYXJnZXRGb3JDb21wbGlhbnQoYW5ub3RhdGlvblBhdGg6IEFubm90YXRpb25QYXRoKSB7XG4vLyBcdHJldHVybiAvLipjb21cXC5zYXBcXC52b2NhYnVsYXJpZXNcXC5VSVxcLnYxXFwuKEZpZWxkR3JvdXB8SWRlbnRpZmljYXRpb258RGF0YVBvaW50fFN0YXR1c0luZm8pLiovLnRlc3QoYW5ub3RhdGlvblBhdGgudmFsdWUpO1xuLy8gfVxuY29uc3QgZ2V0U3ViU2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG4vKipcbiAqIEFkZHMgRm9ybSBtZW51IGFjdGlvbiB0byBhbGwgZm9ybSBhY3Rpb25zLCByZW1vdmVzIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBoaWRkZW4gYWN0aW9ucy5cbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0Jhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdfVxuICovXG5mdW5jdGlvbiBhZGRGb3JtTWVudUFjdGlvbnMoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgaGlkZGVuQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0Rm9ybUhpZGRlbkFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSB8fCBbXSxcblx0XHRmb3JtQWN0aW9uczogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiA9IGdldEZvcm1BY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Zm9ybUFsbEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRcdGFjdGlvbnMsXG5cdFx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGZvcm1BY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlkZGVuQWN0aW9ucylcblx0XHQpO1xuXHRyZXR1cm4gZm9ybUFsbEFjdGlvbnMgPyBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyhyZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGZvcm1BbGxBY3Rpb25zKSkgOiBhY3Rpb25zO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0aW9uIGZvcm0gYSBmYWNldC5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7Q29udmVydGVyQWN0aW9uW10gfCBCYXNlQWN0aW9uW119IFRoZSBjdXJyZW50IGZhY2V0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0bGV0IGFjdGlvbnMgPSBuZXcgQXJyYXk8Q29udmVydGVyQWN0aW9uPigpO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IChmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbHRlcihmYWNldERlZmluaXRpb24gPT4gaXNSZWZlcmVuY2VGYWNldChmYWNldERlZmluaXRpb24pKSBhcyBSZWZlcmVuY2VGYWNldFR5cGVzW10pLnJlZHVjZShcblx0XHRcdFx0KGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLCBmYWNldERlZmluaXRpb24pID0+IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKGFjdGlvbnMsIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFtdXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdGFjdGlvbnMgPSBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihbXSwgZmFjZXREZWZpbml0aW9uIGFzIFJlZmVyZW5jZUZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBSZXRydW5zIHRoZSBidXR0b24gdHlwZSBiYXNlZCBvbiBAVUkuRW1waGFzaXplZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIEVtcGhhc2l6ZWQgRW1waGFzaXplZCBhbm5vdGF0aW9uIHZhbHVlLlxuICogQHJldHVybnMge0J1dHRvblR5cGUgfCBzdHJpbmd9IFRoZSBidXR0b24gdHlwZSBvciBwYXRoIGJhc2VkIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGdldEJ1dHRvblR5cGUoRW1waGFzaXplZDogRW1waGFzaXplZCk6IEJ1dHRvblR5cGUgfCBzdHJpbmcge1xuXHRjb25zdCBQYXRoRm9yQnV0dG9uVHlwZTogc3RyaW5nID0gRW1waGFzaXplZD8ucGF0aDtcblx0aWYgKFBhdGhGb3JCdXR0b25UeXBlKSB7XG5cdFx0cmV0dXJuIFwiez0gXCIgKyBcIiEke1wiICsgUGF0aEZvckJ1dHRvblR5cGUgKyBcIn0gPyAnXCIgKyBCdXR0b25UeXBlLlRyYW5zcGFyZW50ICsgXCInIDogJHtcIiArIFBhdGhGb3JCdXR0b25UeXBlICsgXCJ9XCIgKyBcIn1cIjtcblx0fSBlbHNlIGlmIChFbXBoYXNpemVkKSB7XG5cdFx0cmV0dXJuIEJ1dHRvblR5cGUuR2hvc3Q7XG5cdH1cblx0cmV0dXJuIEJ1dHRvblR5cGUuVHJhbnNwYXJlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBGYWNldFR5cGVzLlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxldmVsXG4gKiBAcGFyYW0gaGFzU2luZ2xlQ29udGVudFxuICogQHBhcmFtIGlzSGVhZGVyU2VjdGlvblxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9ufSBBIHN1YnNlY3Rpb24gZGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbihcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsZXZlbDogbnVtYmVyLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IFN1YlNlY3Rpb25JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSk7XG5cdGNvbnN0IHN1YlNlY3Rpb246IEJhc2VTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBnZXRTdWJTZWN0aW9uS2V5KGZhY2V0RGVmaW5pdGlvbiwgc3ViU2VjdGlvbklEKSxcblx0XHR0aXRsZTogY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oZmFjZXREZWZpbml0aW9uLkxhYmVsKSksXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpLFxuXHRcdGxldmVsOiBsZXZlbCxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkXG5cdH07XG5cdGlmIChpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRzdWJTZWN0aW9uLnN0YXNoZWQgPSBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0c3ViU2VjdGlvbi5mbGV4U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0bGV0IGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCB0YWJsZUNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCBpbmRleDogQXJyYXk8bnVtYmVyPiA9IFtdO1xuXHRsZXQgdW5zdXBwb3J0ZWRUZXh0ID0gXCJcIjtcblx0bGV2ZWwrKztcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGNvbnN0IGZhY2V0cyA9IGZhY2V0RGVmaW5pdGlvbi5GYWNldHM7XG5cdFx0XHRpZiAoaGFzVGFibGUoZmFjZXRzKSkge1xuXHRcdFx0XHQvLyBpZiB3ZSBoYXZlIHRhYmxlcyBpbiBhIGNvbGxlY3Rpb24gZmFjZXQgdGhlbiB3ZSBjcmVhdGUgc2VwYXJhdGUgc3Vic2VjdGlvbiBmb3IgdGhlbVxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZhY2V0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICh0YXJnZXRUZXJtcy5pbmRleE9mKChmYWNldHNbaV0gYXMgYW55KS5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0pID4gLTEpIHtcblx0XHRcdFx0XHRcdC8vY3JlYXRpbmcgc2VwYXJhdGUgYXJyYXkgZm9yIHRhYmxlc1xuXHRcdFx0XHRcdFx0dGFibGVDb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldHNbaV0sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgZmFjZXRzLmxlbmd0aCA9PT0gMSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdFx0XHRpbmRleC5wdXNoKGkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGxldCBpID0gaW5kZXgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHQvL3JlbW92ZSB0YWJsZSBmYWNldHMgZnJvbSBmYWNldCBkZWZpbml0aW9uXG5cdFx0XHRcdFx0ZmFjZXRzLnNwbGljZShpbmRleFtpXSwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGZhY2V0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uRmFjZXRzID0gZmFjZXRzO1xuXHRcdFx0XHRcdC8vY3JlYXRlIGEgZm9ybSBzdWJzZWN0aW9uIGZyb20gdGhlIHJlbWFpbmluZyBmYWNldHNcblx0XHRcdFx0XHRjb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldERlZmluaXRpb24sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGVudCA9IGNvbnRlbnQuY29uY2F0KHRhYmxlQ29udGVudCk7XG5cdFx0XHRcdGNvbnN0IG1peGVkU3ViU2VjdGlvbjogTWl4ZWRTdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTWl4ZWQsXG5cdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGNvbnRlbnRcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIG1peGVkU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zKSxcblx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdGFjdGlvbnM6IGFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjtcblx0XHRcdH1cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aWYgKCFmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYFVuYWJsZSB0byBmaW5kIGFubm90YXRpb25QYXRoICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW06XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdFx0XHRnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoZmFjZXREZWZpbml0aW9uLCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0aXNIZWFkZXJTZWN0aW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0bGV0IGNvbnRyb2xUaXRsZSA9IChwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgYW55KT8uYW5ub3RhdGlvbj8udGl0bGU7XG5cdFx0XHRcdFx0XHRjb250cm9sVGl0bGUgPyBjb250cm9sVGl0bGUgOiAoY29udHJvbFRpdGxlID0gKHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBhbnkpPy50aXRsZSk7XG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uOiBwcmVzZW50YXRpb24sXG5cdFx0XHRcdFx0XHRcdHNob3dUaXRsZTogaXNTdWJzZWN0aW9uVGl0bGVTaG93bihoYXNTaW5nbGVDb250ZW50LCBzdWJTZWN0aW9uLnRpdGxlLCBjb250cm9sVGl0bGUpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjtcblxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRGF0YVBvaW50OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU3RhdHVzSW5mbzpcblx0XHRcdFx0XHRjYXNlIENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMuQ29udGFjdDpcblx0XHRcdFx0XHRcdC8vIEFsbCB0aG9zZSBlbGVtZW50IGJlbG9uZyB0byBhIGZvcm0gZmFjZXRcblx0XHRcdFx0XHRcdGNvbnN0IGFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRTdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbnM6IGFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybUVsZW1lbnRTdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBGb3IgJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybX0gRnJhZ21lbnRgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBcIkZvciBSZWZlcmVuY2UgVVJMIEZhY2V0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0Ly8gSWYgd2UgcmVhY2ggaGVyZSB3ZSBlbmRlZCB1cCB3aXRoIGFuIHVuc3VwcG9ydGVkIFN1YlNlY3Rpb24gdHlwZVxuXHRjb25zdCB1bnN1cHBvcnRlZFN1YlNlY3Rpb246IFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IHtcblx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdHRleHQ6IHVuc3VwcG9ydGVkVGV4dFxuXHR9O1xuXHRyZXR1cm4gdW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xufVxuZnVuY3Rpb24gaXNTdWJzZWN0aW9uVGl0bGVTaG93bihoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLCBzdWJTZWN0aW9uVGl0bGU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4sIGNvbnRyb2xUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGlmIChoYXNTaW5nbGVDb250ZW50ICYmIGNvbnRyb2xUaXRsZSA9PT0gc3ViU2VjdGlvblRpdGxlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgcmVmZXJlbmNlVGFyZ2V0OiBBbm5vdGF0aW9uVGVybTxhbnk+ID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0O1xuXHRjb25zdCB0YXJnZXRWYWx1ZSA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWU7XG5cdGxldCBtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblx0bGV0IGRhdGFGaWVsZENvbGxlY3Rpb246IERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXSA9IFtdO1xuXHRsZXQgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGhdOiBhbnkgPSB0YXJnZXRWYWx1ZS5zcGxpdChcIkBcIik7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA+IDApIHtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAocmVmZXJlbmNlVGFyZ2V0KSB7XG5cdFx0c3dpdGNoIChyZWZlcmVuY2VUYXJnZXQudGVybSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gKHJlZmVyZW5jZVRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhO1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnMsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSBhcyBzdHJpbmdcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TdGF0dXNJbmZvOlxuXHRcdFx0XHRpZiAocmVmZXJlbmNlVGFyZ2V0LnF1YWxpZmllcikge1xuXHRcdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSByZWZlcmVuY2VUYXJnZXQgYXMgSWRlbnRpZmljYXRpb24gfCBTdGF0dXNJbmZvO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGFjdGlvbnMgPSBkYXRhRmllbGRDb2xsZWN0aW9uLnJlZHVjZSgoYWN0aW9ucywgZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0Y29uc3QgVUlBbm5vdGF0aW9uOiBhbnkgPSBkYXRhRmllbGQ/LmFubm90YXRpb25zPy5VSTtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uUkVRVUlSRVNDT05URVhUKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLklubGluZT8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLklOTElORSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLkRFVEVSTUlOSU5HKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGRhdGFGaWVsZC5NYXBwaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdGlkOiBGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdD8gY29tcGlsZUJpbmRpbmcoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSksIHRydWUpKVxuXHRcdFx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKFVJQW5ub3RhdGlvbj8uRW1waGFzaXplZCksXG5cdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Zm4oXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLCBbXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBjb21waWxlQmluZGluZyh7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdGFjdGlvbjogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkFjdGlvbilcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0Y29uc3QgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb246IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGtleTogc3RyaW5nID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0XHRhY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdGlkOiBGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRcdGJpbmRpbmc6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBcInsgJ3BhdGgnIDogJ1wiICsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCArIFwiJ31cIiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdHJlcXVpcmVzRGlhbG9nOiBpc0RpYWxvZyhkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKFVJQW5ub3RhdGlvbj8uRW1waGFzaXplZCksXG5cdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0XHRcdFwiaW52b2tlQWN0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRzOiBmbihcImdldEJpbmRpbmdDb250ZXh0XCIsIFtdLCBiaW5kaW5nRXhwcmVzc2lvbihcIlwiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiAoZGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyA9PT0gXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiKSBhcyBPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkxhYmVsKSxcblx0XHRcdFx0XHRcdFx0XHRcdG1vZGVsOiBmbihcImdldE1vZGVsXCIsIFtdLCBiaW5kaW5nRXhwcmVzc2lvbihcIi9cIiwgXCIkc291cmNlXCIpKSxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiBpc0FjdGlvbk5hdmlnYWJsZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24gJiYgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb25ba2V5XVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0cmVmKFwiLmVkaXRGbG93XCIpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmYWNldE5hbWU6IGRhdGFGaWVsZC5JbmxpbmUgPyAoZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGFjdGlvbnM7XG5cdH0sIGFjdGlvbnMpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nKGFjdGlvbkRlZmluaXRpb246IGFueSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGlmIChhY3Rpb25EZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgYkNyaXRpY2FsID0gYWN0aW9uRGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0FjdGlvbkNyaXRpY2FsO1xuXHRcdGlmIChhY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMubGVuZ3RoID4gMSB8fCBiQ3JpdGljYWwpIHtcblx0XHRcdHJldHVybiBcIkRpYWxvZ1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMoXG5cdG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uPiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4gPSB7fTtcblx0T2JqZWN0LmtleXMobWFuaWZlc3RTdWJTZWN0aW9ucykuZm9yRWFjaChcblx0XHRzdWJTZWN0aW9uS2V5ID0+XG5cdFx0XHQoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0gPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKG1hbmlmZXN0U3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0sIHN1YlNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xuXHRyZXR1cm4gc3ViU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb246IE1hbmlmZXN0U3ViU2VjdGlvbixcblx0c3ViU2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHNpZGVDb250ZW50OiBTaWRlQ29udGVudERlZiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudFxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LnRlbXBsYXRlLFxuXHRcdFx0XHRpZDogU2lkZUNvbnRlbnRJRChzdWJTZWN0aW9uS2V5KSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdGVxdWFsU3BsaXQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC5lcXVhbFNwbGl0XG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGxldCBwb3NpdGlvbiA9IG1hbmlmZXN0U3ViU2VjdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25EZWZpbml0aW9uID0ge1xuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0aWQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5pZCB8fCBDdXN0b21TdWJTZWN0aW9uSUQoc3ViU2VjdGlvbktleSksXG5cdFx0YWN0aW9uczogZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFN1YlNlY3Rpb24uYWN0aW9ucywgY29udmVydGVyQ29udGV4dCksXG5cdFx0a2V5OiBzdWJTZWN0aW9uS2V5LFxuXHRcdHRpdGxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udGl0bGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHZpc2libGU6IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSA6IHRydWUsXG5cdFx0c2lkZUNvbnRlbnQ6IHNpZGVDb250ZW50XG5cdH07XG5cdGlmIChtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUpIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdFx0KChzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyB1bmtub3duKSBhcyBYTUxGcmFnbWVudFN1YlNlY3Rpb24pLnRlbXBsYXRlID1cblx0XHRcdG1hbmlmZXN0U3ViU2VjdGlvbi50ZW1wbGF0ZSB8fCBtYW5pZmVzdFN1YlNlY3Rpb24ubmFtZSB8fCBcIlwiO1xuXHR9IGVsc2Uge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0fVxuXHRyZXR1cm4gc3ViU2VjdGlvbkRlZmluaXRpb24gYXMgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIGNvbmRlbnNlZCBtb2RlIGNhbiBiZSBhcHBsaTNlZCBvbiB0aGUgdGFibGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnRGYWNldFxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgZm9yIGNvbXBsaWFudCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZShcblx0Y3VycmVudEZhY2V0OiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBib29sZWFuIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKCkpIHtcblx0XHQvLyBJZiB0aGUgT1AgdXNlIHRoZSB0YWIgYmFzZWQgd2UgY2hlY2sgaWYgdGhlIGZhY2V0cyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBzZWN0aW9uIGFyZSBhbGwgbm9uIHZpc2libGVcblx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0aWYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCAmJiBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggPiAxKSB7XG5cdFx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0OiBGYWNldFR5cGVzLCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbi5ldmVyeShmdW5jdGlvbihzdWJGYWNldCkge1xuXHRcdGlmIChzdWJGYWNldCAhPT0gY3VycmVudEZhY2V0KSB7XG5cdFx0XHRpZiAoc3ViRmFjZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRcdGNvbnN0IHJlZkZhY2V0ID0gc3ViRmFjZXQgYXMgUmVmZXJlbmNlRmFjZXRUeXBlcztcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQgfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQuJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gIT09IHVuZGVmaW5lZCA/IHJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuIDogZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzdWJDb2xsZWN0aW9uRmFjZXQgPSBzdWJGYWNldCBhcyBDb2xsZWN0aW9uRmFjZXRUeXBlcztcblx0XHRcdFx0cmV0dXJuIHN1YkNvbGxlY3Rpb25GYWNldC5GYWNldHMuZXZlcnkoZnVuY3Rpb24oZmFjZXQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJSZWZGYWNldCA9IGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59XG4iXX0=
|
|
682
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwibmFtZXMiOlsiU3ViU2VjdGlvblR5cGUiLCJ0YXJnZXRUZXJtcyIsImhhc1RhYmxlIiwiZmFjZXRzIiwic29tZSIsImZhY2V0VHlwZSIsImluZGV4T2YiLCJUYXJnZXQiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjdXN0b21IZWFkZXJGYWNldCIsInRlbXBsYXRlRWRpdCIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbiIsInN1YlNlY3Rpb25JRCIsIkN1c3RvbVN1YlNlY3Rpb25JRCIsInN1YlNlY3Rpb24iLCJpZCIsInRpdGxlIiwidHlwZSIsIlhNTEZyYWdtZW50IiwidGVtcGxhdGUiLCJ2aXNpYmxlIiwibGV2ZWwiLCJzaWRlQ29udGVudCIsInVuZGVmaW5lZCIsInN0YXNoZWQiLCJmbGV4U2V0dGluZ3MiLCJhY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbktleSIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiYWRkRm9ybU1lbnVBY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImdldEZvcm1IaWRkZW5BY3Rpb25zIiwiZm9ybUFjdGlvbnMiLCJnZXRGb3JtQWN0aW9ucyIsImZvcm1BbGxBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0RmFjZXRBY3Rpb25zIiwiQXJyYXkiLCJmaWx0ZXIiLCJpc1JlZmVyZW5jZUZhY2V0IiwiY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIiLCJnZXRCdXR0b25UeXBlIiwiRW1waGFzaXplZCIsIlBhdGhGb3JCdXR0b25UeXBlIiwicGF0aCIsIkJ1dHRvblR5cGUiLCJUcmFuc3BhcmVudCIsIkdob3N0IiwiaGFzU2luZ2xlQ29udGVudCIsIlN1YlNlY3Rpb25JRCIsIkZhY2V0Iiwib0hpZGRlbkFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwiaXNWaXNpYmxlIiwiY29tcGlsZUJpbmRpbmciLCJub3QiLCJlcXVhbCIsImFubm90YXRpb25FeHByZXNzaW9uIiwiaXNEeW5hbWljRXhwcmVzc2lvbiIsImlzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9uIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJVbmtub3duIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJjb250ZW50IiwidGFibGVDb250ZW50IiwiaW5kZXgiLCJ1bnN1cHBvcnRlZFRleHQiLCJpIiwiY29uY2F0IiwibWl4ZWRTdWJTZWN0aW9uIiwiTWl4ZWQiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImFjdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwicHJlc2VudGF0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlIiwiY29udHJvbFRpdGxlIiwidmlzdWFsaXphdGlvbnMiLCJhbm5vdGF0aW9uIiwic2hvd1RpdGxlIiwiaXNTdWJzZWN0aW9uVGl0bGVTaG93biIsInRpdGxlVmlzaWJsZUV4cHJlc3Npb24iLCJkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24iLCJEYXRhVmlzdWFsaXphdGlvbiIsInRpdGxlVmlzaWJsZSIsImZvcm1FbGVtZW50U3ViU2VjdGlvbiIsInVuc3VwcG9ydGVkU3ViU2VjdGlvbiIsInRleHQiLCJzdWJTZWN0aW9uVGl0bGUiLCJyZWZlcmVuY2VUYXJnZXQiLCJ0YXJnZXRWYWx1ZSIsIm1hbmlmZXN0QWN0aW9ucyIsImRhdGFGaWVsZENvbGxlY3Rpb24iLCJzcGxpdCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzdWJzdHIiLCJEYXRhIiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsInF1YWxpZmllciIsImRhdGFGaWVsZCIsIlVJQW5ub3RhdGlvbiIsIlJlcXVpcmVzQ29udGV4dCIsInZhbHVlT2YiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTG93IiwiSXNzdWVUeXBlIiwiTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOIiwiUkVRVUlSRVNDT05URVhUIiwiSW5saW5lIiwiSU5MSU5FIiwiRGV0ZXJtaW5pbmciLCJERVRFUk1JTklORyIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiRm9ybUlEIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiZW5hYmxlZCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJidXR0b25UeXBlIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiIsIkFjdGlvblRhcmdldCIsImJpbmRpbmciLCJyZXF1aXJlc0RpYWxvZyIsImlzRGlhbG9nIiwiY29udGV4dHMiLCJiaW5kaW5nRXhwcmVzc2lvbiIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImxhYmVsIiwibW9kZWwiLCJpc05hdmlnYWJsZSIsImlzQWN0aW9uTmF2aWdhYmxlIiwicmVmIiwiYWN0aW9uRGVmaW5pdGlvbiIsImJDcml0aWNhbCIsIkNvbW1vbiIsIklzQWN0aW9uQ3JpdGljYWwiLCJwYXJhbWV0ZXJzIiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbnMiLCJzdWJTZWN0aW9uS2V5IiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbiIsIm1hbmlmZXN0U3ViU2VjdGlvbiIsIlNpZGVDb250ZW50SUQiLCJlcXVhbFNwbGl0IiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInN1YlNlY3Rpb25EZWZpbml0aW9uIiwibmFtZSIsIlBsYWNlaG9sZGVyIiwiY3VycmVudEZhY2V0IiwiZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24iLCJtYW5pZmVzdFdyYXBwZXIiLCJ1c2VJY29uVGFiQmFyIiwiaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZXZlcnkiLCJzdWJGYWNldCIsInJlZkZhY2V0Iiwic3ViQ29sbGVjdGlvbkZhY2V0Iiwic3ViUmVmRmFjZXQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Ba0RZQSxjOzthQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0tBQUFBLGMsS0FBQUEsYzs7O0FBNEZaLE1BQU1DLFdBQXFCLEdBQUcsb0pBQTlCLEMsQ0FNQTs7QUFDQSxNQUFNQyxRQUFRLEdBQUcsWUFBd0I7QUFBQSxRQUF2QkMsTUFBdUIsdUVBQVAsRUFBTztBQUN4QyxXQUFPQSxNQUFNLENBQUNDLElBQVAsQ0FBWSxVQUFBQyxTQUFTO0FBQUE7O0FBQUEsYUFBSUosV0FBVyxDQUFDSyxPQUFaLENBQW9CRCxTQUFwQixhQUFvQkEsU0FBcEIsNENBQW9CQSxTQUFTLENBQUVFLE1BQS9CLCtFQUFvQixrQkFBbUJDLE9BQXZDLDBEQUFvQixzQkFBNEJDLElBQWhELElBQXdELENBQUMsQ0FBN0Q7QUFBQSxLQUFyQixDQUFQO0FBQ0EsR0FGRDtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFdBQVNDLGlCQUFULENBQ05DLGVBRE0sRUFFTkMsZ0JBRk0sRUFHTkMsZUFITSxFQUltQjtBQUN6QjtBQUNBLFFBQU1DLGNBQWMsR0FBR0gsZUFBZSxDQUFDSSxNQUFoQixDQUF1QixVQUFDRCxjQUFELEVBQStCRSxlQUEvQixFQUFtRDtBQUNoRyxjQUFRQSxlQUFlLENBQUNDLEtBQXhCO0FBQ0M7QUFDQ0gsVUFBQUEsY0FBYyxDQUFDSSxJQUFmLENBQW9CRixlQUFwQjtBQUNBOztBQUNEO0FBQ0M7QUFDQTtBQUNBLGNBQUlBLGVBQWUsQ0FBQ0csTUFBaEIsQ0FB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c291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25UeXBlLCBNYW5pZmVzdFN1YlNlY3Rpb24sIE1hbmlmZXN0QWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7XG5cdEFubm90YXRpb25UZXJtLFxuXHRDb2xsZWN0aW9uRmFjZXRUeXBlcyxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0SWRlbnRpZmljYXRpb24sXG5cdE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0U3RhdHVzSW5mbyxcblx0VUlBbm5vdGF0aW9uVGVybXMsXG5cdFVJQW5ub3RhdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgeyBDdXN0b21TdWJTZWN0aW9uSUQsIEZvcm1JRCwgU3ViU2VjdGlvbklELCBTaWRlQ29udGVudElEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IGNyZWF0ZUZvcm1EZWZpbml0aW9uLCBGb3JtRGVmaW5pdGlvbiwgaXNSZWZlcmVuY2VGYWNldCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHsgRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uLCBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIENvbmZpZ3VyYWJsZVJlY29yZCwgQ3VzdG9tRWxlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0Q29udmVydGVyQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGlzQWN0aW9uTmF2aWdhYmxlLFxuXHRCdXR0b25UeXBlLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMsXG5cdEJhc2VBY3Rpb24sXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQge1xuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0YmluZGluZ0V4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0ZXF1YWwsXG5cdGZuLFxuXHRub3QsXG5cdHJlZlxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSXNzdWVUeXBlLCBJc3N1ZVNldmVyaXR5LCBJc3N1ZUNhdGVnb3J5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7XG5cdEZsZXhTZXR0aW5ncyxcblx0Z2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCxcblx0Z2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQsXG5cdEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCxcblx0Z2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0XG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB7IGdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zLCBnZXRGb3JtSGlkZGVuQWN0aW9ucywgZ2V0Rm9ybUFjdGlvbnMgfSBmcm9tIFwiLi4vLi4vb2JqZWN0UGFnZS9Gb3JtTWVudUFjdGlvbnNcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5cbmV4cG9ydCBlbnVtIFN1YlNlY3Rpb25UeXBlIHtcblx0VW5rbm93biA9IFwiVW5rbm93blwiLCAvLyBEZWZhdWx0IFR5cGVcblx0Rm9ybSA9IFwiRm9ybVwiLFxuXHREYXRhVmlzdWFsaXphdGlvbiA9IFwiRGF0YVZpc3VhbGl6YXRpb25cIixcblx0WE1MRnJhZ21lbnQgPSBcIlhNTEZyYWdtZW50XCIsXG5cdFBsYWNlaG9sZGVyID0gXCJQbGFjZWhvbGRlclwiLFxuXHRNaXhlZCA9IFwiTWl4ZWRcIlxufVxuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiA9XG5cdHwgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uXG5cdHwgRm9ybVN1YlNlY3Rpb25cblx0fCBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb25cblx0fCBDb250YWN0U3ViU2VjdGlvblxuXHR8IFhNTEZyYWdtZW50U3ViU2VjdGlvblxuXHR8IFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgTWl4ZWRTdWJTZWN0aW9uO1xuXG50eXBlIEJhc2VTdWJTZWN0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0dGl0bGU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz47XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlO1xuXHR2aXNpYmxlOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0aXNWaXNpYmlsaXR5RHluYW1pYz86IGJvb2xlYW4gfCBcIlwiO1xuXHRmbGV4U2V0dGluZ3M/OiBGbGV4U2V0dGluZ3M7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRsZXZlbDogbnVtYmVyO1xuXHRjb250ZW50PzogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXHRzaWRlQ29udGVudD86IFNpZGVDb250ZW50RGVmO1xufTtcblxudHlwZSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dGV4dDogc3RyaW5nO1xufTtcblxudHlwZSBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb247XG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzaG93VGl0bGU6IGJvb2xlYW47XG5cdHRpdGxlVmlzaWJsZT86IHN0cmluZyB8IGJvb2xlYW47XG59O1xuXG50eXBlIENvbnRhY3RTdWJTZWN0aW9uID0gVW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xuXG50eXBlIFhNTEZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBFbXBoYXNpemVkID0ge1xuXHRwYXRoOiBzdHJpbmc7XG59O1xuXG50eXBlIFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uID0gT21pdDxCYXNlU3ViU2VjdGlvbiwgXCJhbm5vdGF0aW9uUGF0aFwiPiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG50eXBlIE1peGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHRjb250ZW50OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtO1xuXHRmb3JtRGVmaW5pdGlvbjogRm9ybURlZmluaXRpb247XG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdIHwgQmFzZUFjdGlvbltdO1xufTtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHRpdGxlOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRzaG93VGl0bGU/OiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0dmlzaWJsZTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xufTtcblxudHlwZSBTaWRlQ29udGVudERlZiA9IHtcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGlkPzogc3RyaW5nO1xuXHRzaWRlQ29udGVudEZhbGxEb3duPzogc3RyaW5nO1xuXHRjb250YWluZXJRdWVyeT86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdGVxdWFsU3BsaXQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTZWN0aW9uPjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblxuY29uc3QgdGFyZ2V0VGVybXM6IHN0cmluZ1tdID0gW1xuXHRVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSxcblx0VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCxcblx0VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXTtcblxuLy8gVE9ETzogTmVlZCB0byBoYW5kbGUgVGFibGUgY2FzZSBpbnNpZGUgY3JlYXRlU3ViU2VjdGlvbiBmdW5jdGlvbiBpZiBDb2xsZWN0aW9uRmFjZXQgaGFzIFRhYmxlIFJlZmVyZW5jZUZhY2V0XG5jb25zdCBoYXNUYWJsZSA9IChmYWNldHM6IGFueVtdID0gW10pID0+IHtcblx0cmV0dXJuIGZhY2V0cy5zb21lKGZhY2V0VHlwZSA9PiB0YXJnZXRUZXJtcy5pbmRleE9mKGZhY2V0VHlwZT8uVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtKSA+IC0xKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHN1YnNlY3Rpb25zIGJhc2VkIG9uIGZhY2V0IGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIHtGYWNldFR5cGVzW119IGZhY2V0Q29sbGVjdGlvbiBDb2xsZWN0aW9uIG9mIGZhY2V0c1xuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHtib29sZWFufSBpc0hlYWRlclNlY3Rpb24gVHJ1ZSBpZiBoZWFkZXIgc2VjdGlvbiBpcyBnZW5lcmF0ZWQgaW4gdGhpcyBpdGVyYXRpb25cbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU3ViU2VjdGlvbltdfSBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbnMoXG5cdGZhY2V0Q29sbGVjdGlvbjogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Ly8gRmlyc3Qgd2UgZGV0ZXJtaW5lIHdoaWNoIHN1YiBzZWN0aW9uIHdlIG5lZWQgdG8gY3JlYXRlXG5cdGNvbnN0IGZhY2V0c1RvQ3JlYXRlID0gZmFjZXRDb2xsZWN0aW9uLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEZhY2V0VHlwZXNbXSwgZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdFx0Ly8gVE9ETyBJZiB0aGUgQ29sbGVjdGlvbiBGYWNldCBoYXMgYSBjaGlsZCBvZiB0eXBlIENvbGxlY3Rpb24gRmFjZXQgd2UgYnJpbmcgdGhlbSB1cCBvbmUgbGV2ZWwgKEZvcm0gKyBUYWJsZSB1c2UgY2FzZSkgP1xuXHRcdFx0XHQvLyBmaXJzdCBjYXNlIGZhY2V0IENvbGxlY3Rpb24gaXMgY29tYmluYXRpb24gb2YgY29sbGVjdGlvbiBhbmQgcmVmZXJlbmNlIGZhY2V0IG9yIG5vdCBhbGwgZmFjZXRzIGFyZSByZWZlcmVuY2UgZmFjZXRzLlxuXHRcdFx0XHRpZiAoZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maW5kKGZhY2V0VHlwZSA9PiBmYWNldFR5cGUuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkpIHtcblx0XHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5zcGxpY2UoZmFjZXRzVG9DcmVhdGUubGVuZ3RoLCAwLCAuLi5mYWNldERlZmluaXRpb24uRmFjZXRzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0OlxuXHRcdFx0XHQvLyBOb3Qgc3VwcG9ydGVkXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZXRzVG9DcmVhdGU7XG5cdH0sIFtdKTtcblxuXHQvLyBUaGVuIHdlIGNyZWF0ZSB0aGUgYWN0dWFsIHN1YnNlY3Rpb25zXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoZmFjZXQgPT5cblx0XHRjcmVhdGVTdWJTZWN0aW9uKGZhY2V0LCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCwgMCwgIShmYWNldCBhcyBhbnkpPy5GYWNldHM/Lmxlbmd0aCwgaXNIZWFkZXJTZWN0aW9uKVxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgc3Vic2VjdGlvbnMgYmFzZWQgb24gdGhlIGRlZmluaXRpb24gb2YgdGhlIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9uW119IFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKClcblx0KTtcblx0Y29uc3QgYUN1c3RvbUhlYWRlckZhY2V0czogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0T2JqZWN0LmtleXMoY3VzdG9tSGVhZGVyRmFjZXRzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuXHRcdGFDdXN0b21IZWFkZXJGYWNldHMucHVzaChjdXN0b21IZWFkZXJGYWNldHNba2V5XSk7XG5cdFx0cmV0dXJuIGFDdXN0b21IZWFkZXJGYWNldHM7XG5cdH0pO1xuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGFDdXN0b21IZWFkZXJGYWNldHMucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10sIGN1c3RvbUhlYWRlckZhY2V0KSA9PiB7XG5cdFx0aWYgKGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCkge1xuXHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChjdXN0b21IZWFkZXJGYWNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoY3VzdG9tSGVhZGVyRmFjZXQgPT4gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN1YnNlY3Rpb24gYmFzZWQgb24gYSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBjdXN0b21IZWFkZXJGYWNldCBBIGN1c3RvbSBoZWFkZXIgZmFjZXRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb259IEEgZGVmaW5pdGlvbiBmb3IgYSBzdWJzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbihjdXN0b21IZWFkZXJGYWNldDogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBDdXN0b21TdWJTZWN0aW9uSUQoY3VzdG9tSGVhZGVyRmFjZXQua2V5KTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBjdXN0b21IZWFkZXJGYWNldC5rZXksXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0LnRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50LFxuXHRcdHRlbXBsYXRlOiBjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQgfHwgXCJcIixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldC52aXNpYmxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWQsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXQuc3Rhc2hlZCxcblx0XHRmbGV4U2V0dGluZ3M6IGN1c3RvbUhlYWRlckZhY2V0LmZsZXhTZXR0aW5ncyxcblx0XHRhY3Rpb25zOiB7fVxuXHR9O1xuXHRyZXR1cm4gc3ViU2VjdGlvbjtcbn1cblxuLy8gZnVuY3Rpb24gaXNUYXJnZXRGb3JDb21wbGlhbnQoYW5ub3RhdGlvblBhdGg6IEFubm90YXRpb25QYXRoKSB7XG4vLyBcdHJldHVybiAvLipjb21cXC5zYXBcXC52b2NhYnVsYXJpZXNcXC5VSVxcLnYxXFwuKEZpZWxkR3JvdXB8SWRlbnRpZmljYXRpb258RGF0YVBvaW50fFN0YXR1c0luZm8pLiovLnRlc3QoYW5ub3RhdGlvblBhdGgudmFsdWUpO1xuLy8gfVxuY29uc3QgZ2V0U3ViU2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG4vKipcbiAqIEFkZHMgRm9ybSBtZW51IGFjdGlvbiB0byBhbGwgZm9ybSBhY3Rpb25zLCByZW1vdmVzIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBoaWRkZW4gYWN0aW9ucy5cbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0Jhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdfVxuICovXG5mdW5jdGlvbiBhZGRGb3JtTWVudUFjdGlvbnMoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgaGlkZGVuQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0Rm9ybUhpZGRlbkFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSB8fCBbXSxcblx0XHRmb3JtQWN0aW9uczogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiA9IGdldEZvcm1BY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Zm9ybUFsbEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRcdGFjdGlvbnMsXG5cdFx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGZvcm1BY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlkZGVuQWN0aW9ucylcblx0XHQpO1xuXHRyZXR1cm4gZm9ybUFsbEFjdGlvbnMgPyBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyhyZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGZvcm1BbGxBY3Rpb25zKSkgOiBhY3Rpb25zO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0aW9uIGZvcm0gYSBmYWNldC5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7Q29udmVydGVyQWN0aW9uW10gfCBCYXNlQWN0aW9uW119IFRoZSBjdXJyZW50IGZhY2V0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0bGV0IGFjdGlvbnMgPSBuZXcgQXJyYXk8Q29udmVydGVyQWN0aW9uPigpO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IChmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbHRlcihmYWNldERlZmluaXRpb24gPT4gaXNSZWZlcmVuY2VGYWNldChmYWNldERlZmluaXRpb24pKSBhcyBSZWZlcmVuY2VGYWNldFR5cGVzW10pLnJlZHVjZShcblx0XHRcdFx0KGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLCBmYWNldERlZmluaXRpb24pID0+IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKGFjdGlvbnMsIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFtdXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdGFjdGlvbnMgPSBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihbXSwgZmFjZXREZWZpbml0aW9uIGFzIFJlZmVyZW5jZUZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBSZXRydW5zIHRoZSBidXR0b24gdHlwZSBiYXNlZCBvbiBAVUkuRW1waGFzaXplZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIEVtcGhhc2l6ZWQgRW1waGFzaXplZCBhbm5vdGF0aW9uIHZhbHVlLlxuICogQHJldHVybnMge0J1dHRvblR5cGUgfCBzdHJpbmd9IFRoZSBidXR0b24gdHlwZSBvciBwYXRoIGJhc2VkIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGdldEJ1dHRvblR5cGUoRW1waGFzaXplZDogRW1waGFzaXplZCk6IEJ1dHRvblR5cGUgfCBzdHJpbmcge1xuXHRjb25zdCBQYXRoRm9yQnV0dG9uVHlwZTogc3RyaW5nID0gRW1waGFzaXplZD8ucGF0aDtcblx0aWYgKFBhdGhGb3JCdXR0b25UeXBlKSB7XG5cdFx0cmV0dXJuIFwiez0gXCIgKyBcIiEke1wiICsgUGF0aEZvckJ1dHRvblR5cGUgKyBcIn0gPyAnXCIgKyBCdXR0b25UeXBlLlRyYW5zcGFyZW50ICsgXCInIDogJHtcIiArIFBhdGhGb3JCdXR0b25UeXBlICsgXCJ9XCIgKyBcIn1cIjtcblx0fSBlbHNlIGlmIChFbXBoYXNpemVkKSB7XG5cdFx0cmV0dXJuIEJ1dHRvblR5cGUuR2hvc3Q7XG5cdH1cblx0cmV0dXJuIEJ1dHRvblR5cGUuVHJhbnNwYXJlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBGYWNldFR5cGVzLlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxldmVsXG4gKiBAcGFyYW0gaGFzU2luZ2xlQ29udGVudFxuICogQHBhcmFtIGlzSGVhZGVyU2VjdGlvblxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9ufSBBIHN1YnNlY3Rpb24gZGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbihcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsZXZlbDogbnVtYmVyLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IFN1YlNlY3Rpb25JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSk7XG5cdGNvbnN0IG9IaWRkZW5Bbm5vdGF0aW9uOiBhbnkgPSBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdGNvbnN0IGlzVmlzaWJsZSA9IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbCh0cnVlLCBhbm5vdGF0aW9uRXhwcmVzc2lvbihvSGlkZGVuQW5ub3RhdGlvbikpKSk7XG5cdGNvbnN0IGlzRHluYW1pY0V4cHJlc3Npb24gPVxuXHRcdGlzVmlzaWJsZSAmJiB0eXBlb2YgaXNWaXNpYmxlID09PSBcInN0cmluZ1wiICYmIGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgPT09IDAgJiYgb0hpZGRlbkFubm90YXRpb24/LnR5cGUgIT09IFwiUGF0aFwiO1xuXHRjb25zdCBpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbiA9XG5cdFx0aXNWaXNpYmxlICYmIGlzRHluYW1pY0V4cHJlc3Npb24gPyBpc1Zpc2libGUuc3Vic3RyaW5nKGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgKyAyLCBpc1Zpc2libGUubGFzdEluZGV4T2YoXCJ9XCIpKSA6IGZhbHNlO1xuXHRjb25zdCB0aXRsZSA9IGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGZhY2V0RGVmaW5pdGlvbi5MYWJlbCkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBCYXNlU3ViU2VjdGlvbiA9IHtcblx0XHRpZDogc3ViU2VjdGlvbklELFxuXHRcdGtleTogZ2V0U3ViU2VjdGlvbktleShmYWNldERlZmluaXRpb24sIHN1YlNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHR2aXNpYmxlOiBpc1Zpc2libGUsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvbixcblx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZFxuXHR9O1xuXHRpZiAoaXNIZWFkZXJTZWN0aW9uKSB7XG5cdFx0c3ViU2VjdGlvbi5zdGFzaGVkID0gZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdHN1YlNlY3Rpb24uZmxleFNldHRpbmdzID0ge1xuXHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0XHR9O1xuXHR9XG5cdGxldCBjb250ZW50OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj4gPSBbXTtcblx0Y29uc3QgdGFibGVDb250ZW50OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj4gPSBbXTtcblx0Y29uc3QgaW5kZXg6IEFycmF5PG51bWJlcj4gPSBbXTtcblx0bGV0IHVuc3VwcG9ydGVkVGV4dCA9IFwiXCI7XG5cdGxldmVsKys7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRjb25zdCBmYWNldHMgPSBmYWNldERlZmluaXRpb24uRmFjZXRzO1xuXHRcdFx0aWYgKGhhc1RhYmxlKGZhY2V0cykpIHtcblx0XHRcdFx0Ly8gaWYgd2UgaGF2ZSB0YWJsZXMgaW4gYSBjb2xsZWN0aW9uIGZhY2V0IHRoZW4gd2UgY3JlYXRlIHNlcGFyYXRlIHN1YnNlY3Rpb24gZm9yIHRoZW1cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBmYWNldHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZiAodGFyZ2V0VGVybXMuaW5kZXhPZigoZmFjZXRzW2ldIGFzIGFueSkuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHQvL2NyZWF0aW5nIHNlcGFyYXRlIGFycmF5IGZvciB0YWJsZXNcblx0XHRcdFx0XHRcdHRhYmxlQ29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXRzW2ldLCBbXSwgY29udmVydGVyQ29udGV4dCwgbGV2ZWwsIGZhY2V0cy5sZW5ndGggPT09IDEsIGlzSGVhZGVyU2VjdGlvbikpO1xuXHRcdFx0XHRcdFx0aW5kZXgucHVzaChpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChsZXQgaSA9IGluZGV4Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0Ly9yZW1vdmUgdGFibGUgZmFjZXRzIGZyb20gZmFjZXQgZGVmaW5pdGlvblxuXHRcdFx0XHRcdGZhY2V0cy5zcGxpY2UoaW5kZXhbaV0sIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChmYWNldHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLkZhY2V0cyA9IGZhY2V0cztcblx0XHRcdFx0XHQvL2NyZWF0ZSBhIGZvcm0gc3Vic2VjdGlvbiBmcm9tIHRoZSByZW1haW5pbmcgZmFjZXRzXG5cdFx0XHRcdFx0Y29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXREZWZpbml0aW9uLCBbXSwgY29udmVydGVyQ29udGV4dCwgbGV2ZWwsIGhhc1NpbmdsZUNvbnRlbnQsIGlzSGVhZGVyU2VjdGlvbikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRlbnQgPSBjb250ZW50LmNvbmNhdCh0YWJsZUNvbnRlbnQpO1xuXHRcdFx0XHRjb25zdCBtaXhlZFN1YlNlY3Rpb246IE1peGVkU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLk1peGVkLFxuXHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRjb250ZW50OiBjb250ZW50XG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBtaXhlZFN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25zID0gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0Zm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtLFxuXHRcdFx0XHRcdFx0Zm9ybURlZmluaXRpb246IGNyZWF0ZUZvcm1EZWZpbml0aW9uKGZhY2V0RGVmaW5pdGlvbiwgaXNWaXNpYmxlLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zKSxcblx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdGFjdGlvbnM6IGFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjtcblx0XHRcdH1cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aWYgKCFmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYFVuYWJsZSB0byBmaW5kIGFubm90YXRpb25QYXRoICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW06XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdFx0XHRnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoZmFjZXREZWZpbml0aW9uLCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0aXNIZWFkZXJTZWN0aW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFRpdGxlID1cblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBhbnkpPy5hbm5vdGF0aW9uPy50aXRsZSB8fCAocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIGFueSk/LnRpdGxlO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2hvd1RpdGxlID0gaXNTdWJzZWN0aW9uVGl0bGVTaG93bihoYXNTaW5nbGVDb250ZW50LCBzdWJTZWN0aW9uLnRpdGxlLCBjb250cm9sVGl0bGUpO1xuXHRcdFx0XHRcdFx0Y29uc3QgdGl0bGVWaXNpYmxlRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0aXRsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAodGl0bGUgPyBpc1Zpc2libGUgOiBmYWxzZSk7XG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uOiBwcmVzZW50YXRpb24sXG5cdFx0XHRcdFx0XHRcdHNob3dUaXRsZTogc2hvd1RpdGxlLFxuXHRcdFx0XHRcdFx0XHR0aXRsZVZpc2libGU6IGlzRHluYW1pY0V4cHJlc3Npb25cblx0XHRcdFx0XHRcdFx0XHQ/IGB7PSAoJHtpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbn0pICYmICgnJHt0aXRsZX0nICE9PSd1bmRlZmluZWQnKSAmJiAoJHtzaG93VGl0bGV9ID8gdHJ1ZSA6IGZhbHNlKSB9YFxuXHRcdFx0XHRcdFx0XHRcdDogdGl0bGVWaXNpYmxlRXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRcdFx0XHQvLyBBbGwgdGhvc2UgZWxlbWVudCBiZWxvbmcgdG8gYSBmb3JtIGZhY2V0XG5cdFx0XHRcdFx0XHRjb25zdCBhY3Rpb25zID0gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50U3ViU2VjdGlvbjogRm9ybVN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtLFxuXHRcdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oZmFjZXREZWZpbml0aW9uLCBpc1Zpc2libGUsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbnM6IGFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybUVsZW1lbnRTdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBGb3IgJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybX0gRnJhZ21lbnRgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBcIkZvciBSZWZlcmVuY2UgVVJMIEZhY2V0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0Ly8gSWYgd2UgcmVhY2ggaGVyZSB3ZSBlbmRlZCB1cCB3aXRoIGFuIHVuc3VwcG9ydGVkIFN1YlNlY3Rpb24gdHlwZVxuXHRjb25zdCB1bnN1cHBvcnRlZFN1YlNlY3Rpb246IFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IHtcblx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdHRleHQ6IHVuc3VwcG9ydGVkVGV4dFxuXHR9O1xuXHRyZXR1cm4gdW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xufVxuZnVuY3Rpb24gaXNTdWJzZWN0aW9uVGl0bGVTaG93bihoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLCBzdWJTZWN0aW9uVGl0bGU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4sIGNvbnRyb2xUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGlmIChoYXNTaW5nbGVDb250ZW50ICYmIGNvbnRyb2xUaXRsZSA9PT0gc3ViU2VjdGlvblRpdGxlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgcmVmZXJlbmNlVGFyZ2V0OiBBbm5vdGF0aW9uVGVybTxhbnk+ID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0O1xuXHRjb25zdCB0YXJnZXRWYWx1ZSA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWU7XG5cdGxldCBtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblx0bGV0IGRhdGFGaWVsZENvbGxlY3Rpb246IERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXSA9IFtdO1xuXHRsZXQgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGhdOiBhbnkgPSB0YXJnZXRWYWx1ZS5zcGxpdChcIkBcIik7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA+IDApIHtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAocmVmZXJlbmNlVGFyZ2V0KSB7XG5cdFx0c3dpdGNoIChyZWZlcmVuY2VUYXJnZXQudGVybSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gKHJlZmVyZW5jZVRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhO1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnMsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSBhcyBzdHJpbmdcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TdGF0dXNJbmZvOlxuXHRcdFx0XHRpZiAocmVmZXJlbmNlVGFyZ2V0LnF1YWxpZmllcikge1xuXHRcdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSByZWZlcmVuY2VUYXJnZXQgYXMgSWRlbnRpZmljYXRpb24gfCBTdGF0dXNJbmZvO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGFjdGlvbnMgPSBkYXRhRmllbGRDb2xsZWN0aW9uLnJlZHVjZSgoYWN0aW9ucywgZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0Y29uc3QgVUlBbm5vdGF0aW9uOiBhbnkgPSBkYXRhRmllbGQ/LmFubm90YXRpb25zPy5VSTtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uUkVRVUlSRVNDT05URVhUKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLklubGluZT8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLklOTElORSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLkRFVEVSTUlOSU5HKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGRhdGFGaWVsZC5NYXBwaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdGlkOiBGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdD8gY29tcGlsZUJpbmRpbmcoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSksIHRydWUpKVxuXHRcdFx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKFVJQW5ub3RhdGlvbj8uRW1waGFzaXplZCksXG5cdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Zm4oXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLCBbXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBjb21waWxlQmluZGluZyh7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdGFjdGlvbjogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkFjdGlvbilcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0Y29uc3QgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb246IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGtleTogc3RyaW5nID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0XHRhY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdGlkOiBGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRcdGJpbmRpbmc6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBcInsgJ3BhdGgnIDogJ1wiICsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCArIFwiJ31cIiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdHJlcXVpcmVzRGlhbG9nOiBpc0RpYWxvZyhkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKFVJQW5ub3RhdGlvbj8uRW1waGFzaXplZCksXG5cdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0XHRcdFwiaW52b2tlQWN0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRzOiBmbihcImdldEJpbmRpbmdDb250ZXh0XCIsIFtdLCBiaW5kaW5nRXhwcmVzc2lvbihcIlwiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiAoZGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyA9PT0gXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiKSBhcyBPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkxhYmVsKSxcblx0XHRcdFx0XHRcdFx0XHRcdG1vZGVsOiBmbihcImdldE1vZGVsXCIsIFtdLCBiaW5kaW5nRXhwcmVzc2lvbihcIi9cIiwgXCIkc291cmNlXCIpKSxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiBpc0FjdGlvbk5hdmlnYWJsZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24gJiYgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb25ba2V5XVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0cmVmKFwiLmVkaXRGbG93XCIpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmYWNldE5hbWU6IGRhdGFGaWVsZC5JbmxpbmUgPyAoZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGFjdGlvbnM7XG5cdH0sIGFjdGlvbnMpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nKGFjdGlvbkRlZmluaXRpb246IGFueSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGlmIChhY3Rpb25EZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgYkNyaXRpY2FsID0gYWN0aW9uRGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0FjdGlvbkNyaXRpY2FsO1xuXHRcdGlmIChhY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMubGVuZ3RoID4gMSB8fCBiQ3JpdGljYWwpIHtcblx0XHRcdHJldHVybiBcIkRpYWxvZ1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMoXG5cdG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uPiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4gPSB7fTtcblx0T2JqZWN0LmtleXMobWFuaWZlc3RTdWJTZWN0aW9ucykuZm9yRWFjaChcblx0XHRzdWJTZWN0aW9uS2V5ID0+XG5cdFx0XHQoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0gPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKG1hbmlmZXN0U3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0sIHN1YlNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xuXHRyZXR1cm4gc3ViU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb246IE1hbmlmZXN0U3ViU2VjdGlvbixcblx0c3ViU2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHNpZGVDb250ZW50OiBTaWRlQ29udGVudERlZiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudFxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LnRlbXBsYXRlLFxuXHRcdFx0XHRpZDogU2lkZUNvbnRlbnRJRChzdWJTZWN0aW9uS2V5KSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdGVxdWFsU3BsaXQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC5lcXVhbFNwbGl0XG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGxldCBwb3NpdGlvbiA9IG1hbmlmZXN0U3ViU2VjdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25EZWZpbml0aW9uID0ge1xuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0aWQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5pZCB8fCBDdXN0b21TdWJTZWN0aW9uSUQoc3ViU2VjdGlvbktleSksXG5cdFx0YWN0aW9uczogZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFN1YlNlY3Rpb24uYWN0aW9ucywgY29udmVydGVyQ29udGV4dCksXG5cdFx0a2V5OiBzdWJTZWN0aW9uS2V5LFxuXHRcdHRpdGxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udGl0bGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHZpc2libGU6IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSA6IHRydWUsXG5cdFx0c2lkZUNvbnRlbnQ6IHNpZGVDb250ZW50XG5cdH07XG5cdGlmIChtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUpIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdFx0KChzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyB1bmtub3duKSBhcyBYTUxGcmFnbWVudFN1YlNlY3Rpb24pLnRlbXBsYXRlID1cblx0XHRcdG1hbmlmZXN0U3ViU2VjdGlvbi50ZW1wbGF0ZSB8fCBtYW5pZmVzdFN1YlNlY3Rpb24ubmFtZSB8fCBcIlwiO1xuXHR9IGVsc2Uge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0fVxuXHRyZXR1cm4gc3ViU2VjdGlvbkRlZmluaXRpb24gYXMgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIGNvbmRlbnNlZCBtb2RlIGNhbiBiZSBhcHBsaTNlZCBvbiB0aGUgdGFibGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnRGYWNldFxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgZm9yIGNvbXBsaWFudCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZShcblx0Y3VycmVudEZhY2V0OiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBib29sZWFuIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKCkpIHtcblx0XHQvLyBJZiB0aGUgT1AgdXNlIHRoZSB0YWIgYmFzZWQgd2UgY2hlY2sgaWYgdGhlIGZhY2V0cyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBzZWN0aW9uIGFyZSBhbGwgbm9uIHZpc2libGVcblx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0aWYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCAmJiBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggPiAxKSB7XG5cdFx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0OiBGYWNldFR5cGVzLCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbi5ldmVyeShmdW5jdGlvbihzdWJGYWNldCkge1xuXHRcdGlmIChzdWJGYWNldCAhPT0gY3VycmVudEZhY2V0KSB7XG5cdFx0XHRpZiAoc3ViRmFjZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRcdGNvbnN0IHJlZkZhY2V0ID0gc3ViRmFjZXQgYXMgUmVmZXJlbmNlRmFjZXRUeXBlcztcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQgfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQuJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gIT09IHVuZGVmaW5lZCA/IHJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuIDogZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzdWJDb2xsZWN0aW9uRmFjZXQgPSBzdWJGYWNldCBhcyBDb2xsZWN0aW9uRmFjZXRUeXBlcztcblx0XHRcdFx0cmV0dXJuIHN1YkNvbGxlY3Rpb25GYWNldC5GYWNldHMuZXZlcnkoZnVuY3Rpb24oZmFjZXQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJSZWZGYWNldCA9IGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59XG4iXX0=
|