@sapui5/sap.fe.core 1.131.0 → 1.133.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +17 -23
- package/src/sap/fe/core/AppComponent.js +74 -36
- package/src/sap/fe/core/AppComponent.ts +70 -3
- package/src/sap/fe/core/AppStateHandler.js +44 -13
- package/src/sap/fe/core/AppStateHandler.ts +38 -0
- package/src/sap/fe/core/BaseController.js +3 -3
- package/src/sap/fe/core/CommonUtils.js +30 -37
- package/src/sap/fe/core/CommonUtils.ts +15 -13
- package/src/sap/fe/core/ExtensionAPI.js +29 -34
- package/src/sap/fe/core/ExtensionAPI.ts +3 -0
- package/src/sap/fe/core/InsightsFormattersExtension.js +2 -2
- package/src/sap/fe/core/PageController.js +40 -31
- package/src/sap/fe/core/PageController.ts +14 -1
- package/src/sap/fe/core/ResourceModel.js +4 -4
- package/src/sap/fe/core/ReuseComponent.js +27 -13
- package/src/sap/fe/core/ReuseComponent.ts +18 -0
- package/src/sap/fe/core/TemplateComponent.js +102 -89
- package/src/sap/fe/core/TemplateComponent.ts +20 -1
- package/src/sap/fe/core/TemplateModel.js +6 -7
- package/src/sap/fe/core/UIProvider.js +1 -1
- package/src/sap/fe/core/UIProvider.ts +2 -9
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +63 -48
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +56 -27
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +9 -0
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.ts +48 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -6
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +32 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +30 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +9 -13
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +2 -1
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +19 -25
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +3 -4
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +20 -24
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +10 -15
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +3 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +296 -246
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -175
- package/src/sap/fe/core/controllerextensions/Feedback.js +10 -11
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +6 -6
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -36
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +57 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +42 -50
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +12 -19
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +23 -17
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -7
- package/src/sap/fe/core/controllerextensions/PageReady.js +15 -21
- package/src/sap/fe/core/controllerextensions/Paginator.js +3 -3
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.js +23 -36
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +3 -3
- package/src/sap/fe/core/controllerextensions/Share.js +19 -28
- package/src/sap/fe/core/controllerextensions/SideEffects.js +68 -32
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -6
- package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -5
- package/src/sap/fe/core/controllerextensions/ViewState.js +23 -24
- package/src/sap/fe/core/controllerextensions/ViewState.ts +6 -1
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +13 -10
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +13 -8
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +15 -16
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +3 -4
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +288 -0
- package/src/sap/fe/core/controllerextensions/dialog/{OperationsDialog.block.tsx → OperationsDialog.tsx} +27 -29
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +41 -5
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +61 -8
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +404 -0
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +502 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +35 -43
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +34 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -27
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +27 -15
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +51 -39
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +75 -34
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +88 -427
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +82 -620
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +9 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +6 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +116 -79
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +87 -13
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +4 -6
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +5 -7
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +6 -7
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +4 -4
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +58 -20
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +9 -12
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.js +20 -21
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +250 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/{DraftDataLossDialog.block.tsx → DraftDataLossDialog.tsx} +31 -19
- package/src/sap/fe/core/controls/FormElementWrapper.js +19 -21
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +114 -0
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +115 -0
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +454 -0
- package/src/sap/fe/core/controls/Recommendations/{ConfirmRecommendationDialog.block.tsx → ConfirmRecommendationDialog.tsx} +5 -9
- package/src/sap/fe/core/converters/ConverterContext.js +17 -18
- package/src/sap/fe/core/converters/ConverterContext.ts +10 -15
- package/src/sap/fe/core/converters/ManifestSettings.js +29 -28
- package/src/sap/fe/core/converters/ManifestSettings.ts +22 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +26 -48
- package/src/sap/fe/core/converters/MetaModelConverter.js +21 -28
- package/src/sap/fe/core/converters/MetaModelConverter.ts +2 -0
- package/src/sap/fe/core/converters/TemplateConverter.js +17 -21
- package/src/sap/fe/core/converters/TemplateConverter.ts +5 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +69 -66
- package/src/sap/fe/core/converters/annotations/DataField.ts +30 -0
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +20 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +178 -43
- package/src/sap/fe/core/converters/controls/Common/Action.ts +202 -19
- package/src/sap/fe/core/converters/controls/Common/Chart.js +47 -22
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +50 -5
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +16 -23
- package/src/sap/fe/core/converters/controls/Common/Form.js +25 -38
- package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -0
- package/src/sap/fe/core/converters/controls/Common/KPI.js +32 -47
- package/src/sap/fe/core/converters/controls/Common/Table.js +464 -506
- package/src/sap/fe/core/converters/controls/Common/Table.ts +335 -219
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +17 -28
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -2
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +66 -90
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +10 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +49 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +6 -10
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +35 -50
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +110 -60
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +137 -41
- package/src/sap/fe/core/converters/helpers/Aggregation.js +19 -30
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +5 -5
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +11 -14
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +14 -21
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +4 -6
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -3
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +18 -52
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -34
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +103 -74
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -39
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +28 -31
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +17 -9
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +61 -52
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +60 -21
- package/src/sap/fe/core/definition/FEDefinition.js +104 -44
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +37 -7
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +42 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -5
- package/src/sap/fe/core/formatters/FiscalFormat.js +24 -24
- package/src/sap/fe/core/formatters/ValueFormatter.js +4 -23
- package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -18
- package/src/sap/fe/core/fpm/Component.js +12 -14
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +20 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +22 -13
- package/src/sap/fe/core/helpers/BindingHelper.js +3 -3
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +55 -62
- package/src/sap/fe/core/helpers/DeleteHelper.ts +48 -51
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +4 -7
- package/src/sap/fe/core/helpers/FPMHelper.js +4 -7
- package/src/sap/fe/core/helpers/HTTP503Handler.js +2 -1
- package/src/sap/fe/core/helpers/HTTP503Handler.ts +4 -3
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +5 -5
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +6 -6
- package/src/sap/fe/core/helpers/LoaderUtils.js +8 -3
- package/src/sap/fe/core/helpers/LoaderUtils.ts +15 -4
- package/src/sap/fe/core/helpers/MessageStrip.js +3 -4
- package/src/sap/fe/core/helpers/MetaModelFunction.js +26 -40
- package/src/sap/fe/core/helpers/MetaPath.js +9 -7
- package/src/sap/fe/core/helpers/MetaPath.ts +9 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +33 -57
- package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
- package/src/sap/fe/core/helpers/PasteHelper.js +11 -19
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +3 -4
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +3 -5
- package/src/sap/fe/core/helpers/SizeHelper.js +3 -5
- package/src/sap/fe/core/helpers/StableIdHelper.js +13 -11
- package/src/sap/fe/core/helpers/StableIdHelper.ts +5 -1
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +28 -38
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +19 -40
- package/src/sap/fe/core/helpers/TitleHelper.ts +5 -25
- package/src/sap/fe/core/helpers/TypeGuards.js +25 -18
- package/src/sap/fe/core/helpers/TypeGuards.ts +7 -0
- package/src/sap/fe/core/helpers/WebSocket.js +4 -4
- package/src/sap/fe/core/library.js +8 -7
- package/src/sap/fe/core/library.ts +2 -0
- package/src/sap/fe/core/manifestMerger/AddNewPage.js +9 -11
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +14 -25
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +15 -17
- package/src/sap/fe/core/messagebundle.properties +21 -0
- package/src/sap/fe/core/messagebundle_ar.properties +5 -1
- package/src/sap/fe/core/messagebundle_bg.properties +4 -0
- package/src/sap/fe/core/messagebundle_ca.properties +4 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +4 -0
- package/src/sap/fe/core/messagebundle_cs.properties +8 -4
- package/src/sap/fe/core/messagebundle_cy.properties +4 -0
- package/src/sap/fe/core/messagebundle_da.properties +4 -0
- package/src/sap/fe/core/messagebundle_de.properties +4 -0
- package/src/sap/fe/core/messagebundle_el.properties +4 -0
- package/src/sap/fe/core/messagebundle_en.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +249 -231
- package/src/sap/fe/core/messagebundle_es.properties +5 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +4 -0
- package/src/sap/fe/core/messagebundle_et.properties +4 -0
- package/src/sap/fe/core/messagebundle_fi.properties +4 -0
- package/src/sap/fe/core/messagebundle_fr.properties +6 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +4 -0
- package/src/sap/fe/core/messagebundle_hi.properties +4 -0
- package/src/sap/fe/core/messagebundle_hr.properties +4 -0
- package/src/sap/fe/core/messagebundle_hu.properties +4 -0
- package/src/sap/fe/core/messagebundle_id.properties +4 -0
- package/src/sap/fe/core/messagebundle_it.properties +4 -0
- package/src/sap/fe/core/messagebundle_iw.properties +4 -0
- package/src/sap/fe/core/messagebundle_ja.properties +4 -0
- package/src/sap/fe/core/messagebundle_kk.properties +4 -0
- package/src/sap/fe/core/messagebundle_ko.properties +4 -0
- package/src/sap/fe/core/messagebundle_lt.properties +4 -0
- package/src/sap/fe/core/messagebundle_lv.properties +4 -0
- package/src/sap/fe/core/messagebundle_mk.properties +4 -0
- package/src/sap/fe/core/messagebundle_ms.properties +4 -0
- package/src/sap/fe/core/messagebundle_nl.properties +4 -0
- package/src/sap/fe/core/messagebundle_no.properties +4 -0
- package/src/sap/fe/core/messagebundle_pl.properties +4 -0
- package/src/sap/fe/core/messagebundle_pt.properties +4 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +4 -0
- package/src/sap/fe/core/messagebundle_ro.properties +4 -0
- package/src/sap/fe/core/messagebundle_ru.properties +4 -0
- package/src/sap/fe/core/messagebundle_sh.properties +4 -0
- package/src/sap/fe/core/messagebundle_sk.properties +4 -0
- package/src/sap/fe/core/messagebundle_sl.properties +4 -0
- package/src/sap/fe/core/messagebundle_sr.properties +4 -0
- package/src/sap/fe/core/messagebundle_sv.properties +4 -0
- package/src/sap/fe/core/messagebundle_th.properties +4 -0
- package/src/sap/fe/core/messagebundle_tr.properties +5 -1
- package/src/sap/fe/core/messagebundle_uk.properties +4 -0
- package/src/sap/fe/core/messagebundle_vi.properties +4 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +4 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +4 -0
- package/src/sap/fe/core/operationsHelper.js +23 -27
- package/src/sap/fe/core/operationsHelper.ts +6 -7
- package/src/sap/fe/core/rootView/Fcl.controller.js +53 -40
- package/src/sap/fe/core/rootView/Fcl.controller.ts +42 -7
- package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -10
- package/src/sap/fe/core/rootView/RootViewBaseController.js +22 -21
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +4 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -0
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +12 -10
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +6 -2
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +8 -13
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +5 -7
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +31 -8
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +31 -5
- package/src/sap/fe/core/services/InlineEditServiceFactory.js +190 -0
- package/src/sap/fe/core/services/InlineEditServiceFactory.ts +226 -0
- package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -15
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +76 -56
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +47 -14
- package/src/sap/fe/core/services/ShellServicesFactory.js +32 -34
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +75 -60
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +58 -12
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -9
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +13 -18
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +7 -9
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +12 -16
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +4 -7
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +5 -6
- package/src/sap/fe/core/support/CommonHelper.js +2 -3
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +3 -4
- package/src/sap/fe/core/templating/CommonFormatters.js +6 -8
- package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.js +53 -5
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +129 -7
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -11
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +33 -56
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/EntitySetHelper.js +11 -19
- package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
- package/src/sap/fe/core/templating/FieldControlHelper.js +13 -20
- package/src/sap/fe/core/templating/FilterTemplating.js +6 -9
- package/src/sap/fe/core/templating/PropertyHelper.js +33 -63
- package/src/sap/fe/core/templating/PropertyHelper.ts +0 -1
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +13 -21
- package/src/sap/fe/core/templating/UIFormatters.js +57 -78
- package/src/sap/fe/core/templating/UIFormatters.ts +2 -1
- package/src/sap/fe/core/type/Date.js +2 -2
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
- package/src/sap/fe/core/type/EDM.js +3 -5
- package/src/sap/fe/core/type/Email.js +17 -6
- package/src/sap/fe/core/type/Email.ts +23 -4
- package/src/sap/fe/core/type/FiscalDate.js +8 -9
- package/src/sap/fe/core/type/InputMask.js +3 -4
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +0 -299
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +0 -87
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +0 -43
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +0 -251
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +0 -471
|
@@ -17,31 +17,31 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
17
17
|
*
|
|
18
18
|
*/
|
|
19
19
|
let ShellServiceMock = /*#__PURE__*/function (_Service) {
|
|
20
|
-
_inheritsLoose(ShellServiceMock, _Service);
|
|
21
20
|
function ShellServiceMock() {
|
|
22
21
|
return _Service.apply(this, arguments) || this;
|
|
23
22
|
}
|
|
23
|
+
_inheritsLoose(ShellServiceMock, _Service);
|
|
24
24
|
var _proto = ShellServiceMock.prototype;
|
|
25
25
|
_proto.init = function init() {
|
|
26
26
|
this.initPromise = Promise.resolve(this);
|
|
27
27
|
this.instanceType = "mock";
|
|
28
28
|
};
|
|
29
|
-
_proto.getLinks = async function getLinks(
|
|
29
|
+
_proto.getLinks = async function getLinks(/*oArgs: object*/
|
|
30
30
|
) {
|
|
31
31
|
return Promise.resolve([]);
|
|
32
32
|
};
|
|
33
33
|
_proto.__fetchSemanticObject = async function __fetchSemanticObject() {
|
|
34
34
|
return Promise.resolve([]);
|
|
35
35
|
};
|
|
36
|
-
_proto.getLinksWithCache = async function getLinksWithCache(
|
|
36
|
+
_proto.getLinksWithCache = async function getLinksWithCache(/*oArgs: object*/
|
|
37
37
|
) {
|
|
38
38
|
return Promise.resolve([]);
|
|
39
39
|
};
|
|
40
|
-
_proto.toExternal = function toExternal(
|
|
40
|
+
_proto.toExternal = function toExternal(/*oNavArgumentsArr: Array<object>, oComponent: object*/
|
|
41
41
|
) {
|
|
42
42
|
/* Do Nothing */
|
|
43
43
|
};
|
|
44
|
-
_proto.getStartupAppState = async function getStartupAppState(
|
|
44
|
+
_proto.getStartupAppState = async function getStartupAppState(/*oArgs: object*/
|
|
45
45
|
) {
|
|
46
46
|
return Promise.resolve(undefined);
|
|
47
47
|
};
|
|
@@ -51,45 +51,45 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
51
51
|
_proto.backToPreviousApp = function backToPreviousApp() {
|
|
52
52
|
/* Do Nothing */
|
|
53
53
|
};
|
|
54
|
-
_proto.hrefForExternal = async function hrefForExternal(
|
|
54
|
+
_proto.hrefForExternal = async function hrefForExternal(/*oArgs?: object, oComponent?: object, bAsync?: boolean*/
|
|
55
55
|
) {
|
|
56
56
|
return Promise.resolve("");
|
|
57
57
|
};
|
|
58
|
-
_proto.getHref = async function getHref(
|
|
58
|
+
_proto.getHref = async function getHref(/*oArgs?: object, oComponent?: object, bAsync?: boolean*/
|
|
59
59
|
) {
|
|
60
60
|
return Promise.resolve("");
|
|
61
61
|
};
|
|
62
62
|
_proto.getHash = function getHash() {
|
|
63
63
|
return window.location.href;
|
|
64
64
|
};
|
|
65
|
-
_proto.getAppState = async function getAppState(
|
|
65
|
+
_proto.getAppState = async function getAppState(/*oComponent: object, sAppStateKey: string*/
|
|
66
66
|
) {
|
|
67
67
|
return Promise.resolve({});
|
|
68
68
|
};
|
|
69
|
-
_proto.createEmptyAppState = async function createEmptyAppState(
|
|
69
|
+
_proto.createEmptyAppState = async function createEmptyAppState(/*oComponent: object*/
|
|
70
70
|
) {
|
|
71
71
|
return Promise.resolve({});
|
|
72
72
|
};
|
|
73
|
-
_proto.createEmptyAppStateAsync = async function createEmptyAppStateAsync(
|
|
73
|
+
_proto.createEmptyAppStateAsync = async function createEmptyAppStateAsync(/*oComponent: object*/
|
|
74
74
|
) {
|
|
75
75
|
return Promise.resolve({});
|
|
76
76
|
};
|
|
77
|
-
_proto.navigate = async function navigate(
|
|
77
|
+
_proto.navigate = async function navigate(/*oTarget: Target,oComponent?: Component*/
|
|
78
78
|
) {
|
|
79
79
|
return Promise.resolve(undefined);
|
|
80
80
|
};
|
|
81
|
-
_proto.isNavigationSupported = async function isNavigationSupported(
|
|
81
|
+
_proto.isNavigationSupported = async function isNavigationSupported(/*oNavArgumentsArr: Array<object>, oComponent: object*/
|
|
82
82
|
) {
|
|
83
83
|
return Promise.resolve([]);
|
|
84
84
|
};
|
|
85
85
|
_proto.isInitialNavigation = async function isInitialNavigation() {
|
|
86
86
|
return Promise.resolve(false);
|
|
87
87
|
};
|
|
88
|
-
_proto.expandCompactHash = async function expandCompactHash(
|
|
88
|
+
_proto.expandCompactHash = async function expandCompactHash(/*sHashFragment: string*/
|
|
89
89
|
) {
|
|
90
90
|
return Promise.resolve("");
|
|
91
91
|
};
|
|
92
|
-
_proto.parseShellHash = function parseShellHash(
|
|
92
|
+
_proto.parseShellHash = function parseShellHash(/*sHash: string*/
|
|
93
93
|
) {
|
|
94
94
|
return {};
|
|
95
95
|
};
|
|
@@ -105,22 +105,22 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
105
105
|
const regex = /#[^/]*\/(.*)/.exec(sHash);
|
|
106
106
|
return {
|
|
107
107
|
shellPart: "",
|
|
108
|
-
appSpecificRoute:
|
|
108
|
+
appSpecificRoute: regex?.length === 2 ? regex[1] : ""
|
|
109
109
|
};
|
|
110
110
|
};
|
|
111
|
-
_proto.constructShellHash = function constructShellHash(
|
|
111
|
+
_proto.constructShellHash = function constructShellHash(/*oNewShellHash: object*/
|
|
112
112
|
) {
|
|
113
113
|
return "";
|
|
114
114
|
};
|
|
115
|
-
_proto.setDirtyFlag = function setDirtyFlag(
|
|
115
|
+
_proto.setDirtyFlag = function setDirtyFlag(/*bDirty: boolean*/
|
|
116
116
|
) {
|
|
117
117
|
/* Do Nothing */
|
|
118
118
|
};
|
|
119
|
-
_proto.registerDirtyStateProvider = function registerDirtyStateProvider(
|
|
119
|
+
_proto.registerDirtyStateProvider = function registerDirtyStateProvider(/*fnDirtyStateProvider: Function*/
|
|
120
120
|
) {
|
|
121
121
|
/* Do Nothing */
|
|
122
122
|
};
|
|
123
|
-
_proto.deregisterDirtyStateProvider = function deregisterDirtyStateProvider(
|
|
123
|
+
_proto.deregisterDirtyStateProvider = function deregisterDirtyStateProvider(/*fnDirtyStateProvider: Function*/
|
|
124
124
|
) {
|
|
125
125
|
/* Do Nothing */
|
|
126
126
|
};
|
|
@@ -133,25 +133,25 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
133
133
|
_proto.hasUShell = function hasUShell() {
|
|
134
134
|
return false;
|
|
135
135
|
};
|
|
136
|
-
_proto.registerNavigationFilter = function registerNavigationFilter(
|
|
136
|
+
_proto.registerNavigationFilter = function registerNavigationFilter(/*fnNavFilter: Function*/
|
|
137
137
|
) {
|
|
138
138
|
/* Do Nothing */
|
|
139
139
|
};
|
|
140
|
-
_proto.unregisterNavigationFilter = function unregisterNavigationFilter(
|
|
140
|
+
_proto.unregisterNavigationFilter = function unregisterNavigationFilter(/*fnNavFilter: Function*/
|
|
141
141
|
) {
|
|
142
142
|
/* Do Nothing */
|
|
143
143
|
};
|
|
144
|
-
_proto.setBackNavigation = async function setBackNavigation(
|
|
144
|
+
_proto.setBackNavigation = async function setBackNavigation(/*fnCallBack?: Function*/
|
|
145
145
|
) {
|
|
146
146
|
/* Do Nothing */
|
|
147
147
|
return Promise.resolve();
|
|
148
148
|
};
|
|
149
|
-
_proto.setHierarchy = async function setHierarchy(
|
|
149
|
+
_proto.setHierarchy = async function setHierarchy(/*aHierarchyLevels: Array<object>*/
|
|
150
150
|
) {
|
|
151
151
|
/* Do Nothing */
|
|
152
152
|
return Promise.resolve();
|
|
153
153
|
};
|
|
154
|
-
_proto.setTitle = async function setTitle(
|
|
154
|
+
_proto.setTitle = async function setTitle(/*sTitle: string*/
|
|
155
155
|
) {
|
|
156
156
|
/* Do Nothing */
|
|
157
157
|
return Promise.resolve();
|
|
@@ -166,7 +166,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
166
166
|
return "";
|
|
167
167
|
}
|
|
168
168
|
};
|
|
169
|
-
_proto.getPrimaryIntent = async function getPrimaryIntent(
|
|
169
|
+
_proto.getPrimaryIntent = async function getPrimaryIntent(/*sSemanticObject: string, mParameters?: object*/
|
|
170
170
|
) {
|
|
171
171
|
return Promise.resolve(undefined);
|
|
172
172
|
};
|
|
@@ -234,7 +234,6 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
234
234
|
*
|
|
235
235
|
*/
|
|
236
236
|
let ShellServices = /*#__PURE__*/function (_Service2) {
|
|
237
|
-
_inheritsLoose(ShellServices, _Service2);
|
|
238
237
|
function ShellServices() {
|
|
239
238
|
var _this;
|
|
240
239
|
for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {
|
|
@@ -245,6 +244,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
245
244
|
return _this;
|
|
246
245
|
}
|
|
247
246
|
_exports.ShellServices = ShellServices;
|
|
247
|
+
_inheritsLoose(ShellServices, _Service2);
|
|
248
248
|
var _proto2 = ShellServices.prototype;
|
|
249
249
|
_proto2.init = function init() {
|
|
250
250
|
const oContext = this.getContext();
|
|
@@ -384,7 +384,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
384
384
|
_proto2.getInframeUrl = async function getInframeUrl() {
|
|
385
385
|
const ushellContainer = this.getShellContainer();
|
|
386
386
|
let appUrl;
|
|
387
|
-
if (ushellContainer
|
|
387
|
+
if (ushellContainer?.inAppRuntime()) {
|
|
388
388
|
try {
|
|
389
389
|
appUrl = await ushellContainer.getFLPUrlAsync(true);
|
|
390
390
|
} catch (error) {
|
|
@@ -525,7 +525,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
525
525
|
*/;
|
|
526
526
|
_proto2.isFlpOptimisticBatchPluginLoaded = function isFlpOptimisticBatchPluginLoaded() {
|
|
527
527
|
const flpPluginsRendererExtensions = this.getRegisteredPlugins().RendererExtensions;
|
|
528
|
-
if (flpPluginsRendererExtensions
|
|
528
|
+
if (flpPluginsRendererExtensions?.hasOwnProperty("MANAGE_FE_CACHES") && !!flpPluginsRendererExtensions.MANAGE_FE_CACHES.enabled) {
|
|
529
529
|
return true;
|
|
530
530
|
} else {
|
|
531
531
|
return false;
|
|
@@ -691,8 +691,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
691
691
|
*/;
|
|
692
692
|
_proto2.waitForPluginsLoad = async function waitForPluginsLoad() {
|
|
693
693
|
return new Promise(resolve => {
|
|
694
|
-
|
|
695
|
-
if (!((_this$shellPluginMana = this.shellPluginManager) !== null && _this$shellPluginMana !== void 0 && _this$shellPluginMana.getPluginLoadingPromise)) {
|
|
694
|
+
if (!this.shellPluginManager?.getPluginLoadingPromise) {
|
|
696
695
|
resolve(false);
|
|
697
696
|
} else {
|
|
698
697
|
// eslint-disable-next-line promise/catch-or-return
|
|
@@ -755,8 +754,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
755
754
|
* @returns Data
|
|
756
755
|
*/;
|
|
757
756
|
_proto2.getApplicationPersonalizationData = async function getApplicationPersonalizationData(itemName) {
|
|
758
|
-
|
|
759
|
-
return await ((_await$this$getApplic = await this.getApplicationPersonalizer(itemName)) === null || _await$this$getApplic === void 0 ? void 0 : _await$this$getApplic.getPersData());
|
|
757
|
+
return await (await this.getApplicationPersonalizer(itemName))?.getPersData();
|
|
760
758
|
}
|
|
761
759
|
|
|
762
760
|
/**
|
|
@@ -802,10 +800,10 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
802
800
|
*/
|
|
803
801
|
_exports.ShellServices = ShellServices;
|
|
804
802
|
let ShellServicesFactory = /*#__PURE__*/function (_ServiceFactory) {
|
|
805
|
-
_inheritsLoose(ShellServicesFactory, _ServiceFactory);
|
|
806
803
|
function ShellServicesFactory() {
|
|
807
804
|
return _ServiceFactory.apply(this, arguments) || this;
|
|
808
805
|
}
|
|
806
|
+
_inheritsLoose(ShellServicesFactory, _ServiceFactory);
|
|
809
807
|
var _proto3 = ShellServicesFactory.prototype;
|
|
810
808
|
/**
|
|
811
809
|
* Creates either a standard or a mock Shell service depending on the configuration.
|
|
@@ -837,4 +835,4 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
837
835
|
}(ServiceFactory);
|
|
838
836
|
return ShellServicesFactory;
|
|
839
837
|
}, false);
|
|
840
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaGVsbFNlcnZpY2VNb2NrIiwiX1NlcnZpY2UiLCJfaW5oZXJpdHNMb29zZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnN0YW5jZVR5cGUiLCJnZXRMaW5rcyIsIl9fZmV0Y2hTZW1hbnRpY09iamVjdCIsImdldExpbmtzV2l0aENhY2hlIiwidG9FeHRlcm5hbCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImlzSmFtQWN0aXZlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJnZXRIcmVmIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYyIsIm5hdmlnYXRlIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwiaXNJbml0aWFsTmF2aWdhdGlvbiIsImV4cGFuZENvbXBhY3RIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJzcGxpdEhhc2giLCJzSGFzaCIsInJlZ2V4IiwiZXhlYyIsInNoZWxsUGFydCIsImFwcFNwZWNpZmljUm91dGUiLCJsZW5ndGgiLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJzZXREaXJ0eUZsYWciLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJnZXRVc2VyIiwiZ2V0VXNlckluaXRpYWxzIiwiaGFzVVNoZWxsIiwicmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwidW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInNldEhpZXJhcmNoeSIsInNldFRpdGxlIiwiZ2V0Q29udGVudERlbnNpdHkiLCJkb2N1bWVudCIsImJvZHkiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImdldFByaW1hcnlJbnRlbnQiLCJ3YWl0Rm9yUGx1Z2luc0xvYWQiLCJnZXRUaXRsZSIsImdldFBlcnNvbmFsaXplciIsIl9wZXJzSWQiLCJfc2NvcGUiLCJfY29tcG9uZW50IiwiZ2V0UGVyc0RhdGEiLCJoaXN0b3J5RW5hYmxlZCIsInN1Z2dlc3Rpb25zRW5hYmxlZCIsImFwcHMiLCJzZXRQZXJzRGF0YSIsImdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyIiwiX2l0ZW1OYW1lIiwiZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhIiwic2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhIiwiX29iamVjdCIsImRlbGV0ZVBlcnNvbmFsaXphdGlvbkNvbnRhaW5lciIsIl9rZXkiLCJnZXRTaGVsbENvbmZpZyIsImdldFJlZ2lzdGVyZWRQbHVnaW5zIiwiQXBwV2FybXVwIiwiUmVuZGVyZXJFeHRlbnNpb25zIiwiVXNlckRlZmF1bHRzIiwiVXNlckltYWdlIiwiaXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQiLCJwYXJzZVBhcmFtZXRlcnMiLCJnZXRFeHRlbnNpb25TZXJ2aWNlIiwiZ2V0SW5mcmFtZVVybCIsIlNlcnZpY2UiLCJTaGVsbFNlcnZpY2VzIiwiX1NlcnZpY2UyIiwiX3RoaXMiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleTIiLCJjYWxsIiwiYXBwbGljYXRpb25QZXJzb25uYWxpemVycyIsIl9leHBvcnRzIiwiX3Byb3RvMiIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsImFwcENvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib1NoZWxsQ29udGFpbmVyIiwic2V0dGluZ3MiLCJzaGVsbENvbnRhaW5lciIsImxpbmtzQ2FjaGUiLCJmbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlIiwib0FyZ3MiLCJhQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwiYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cyIsImxpbmtGaWx0ZXIiLCJzZW1hbnRpY09iamVjdCIsInB1c2giLCJsaW5rcyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJvbGRBcmdzIiwibmV3QXJncyIsImNhY2hlZExpbmtzIiwicmVqZWN0IiwicmVzb2x2ZUZuIiwicmVqZWN0Rm4iLCJuYXZpZ2F0aW9uU2VydmljZVAiLCJnZXRTZXJ2aWNlQXN5bmMiLCJ1c2VySW5mb1NlcnZpY2VQIiwib1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbFBsdWdpbk1hbmFnZXJQcm9taXNlIiwib1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZVByb21pc2UiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZSIsImFsbCIsInRoZW4iLCJfcmVmIiwibmF2aWdhdGlvblNlcnZpY2UiLCJ1c2VySW5mb1NlcnZpY2UiLCJvVXJsUGFyc2luZ1NlcnZpY2UiLCJvU2hlbGxOYXZpZ2F0aW9uIiwib1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSIsIm9TaGVsbFBsdWdpbk1hbmFnZXIiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlIiwiYXBwbGljYXRpb25OYXZpZ2F0aW9uIiwidXJsUGFyc2luZ1NlcnZpY2UiLCJzaGVsbE5hdmlnYXRpb24iLCJzaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UiLCJzaGVsbFBsdWdpbk1hbmFnZXIiLCJleHRlbnNpb25TZXJ2aWNlIiwiY2F0Y2giLCJnZXRTZW1hbnRpY09iamVjdHMiLCJvQ2FjaGVSZXN1bHRzIiwiYUxpbmtzIiwib1NlbWFudGljT2JqZWN0c0xpbmtzIiwiaSIsImFzc2lnbiIsImFNZXJnZWRMaW5rcyIsImoiLCJpdGVtIiwiZ2V0U2hlbGxVSVNlcnZpY2UiLCJnZXRTZXJ2aWNlIiwiZ2V0U2hlbGxDb250YWluZXIiLCJ1c2hlbGxDb250YWluZXIiLCJhcHBVcmwiLCJpbkFwcFJ1bnRpbWUiLCJnZXRGTFBVcmxBc3luYyIsImVycm9yIiwiTG9nIiwib05hdkFyZ3VtZW50c0FyciIsIm9Db21wb25lbnQiLCJvVGFyZ2V0Iiwic0FwcFN0YXRlS2V5IiwiYVRhcmdldHMiLCJzSGFzaEZyYWdtZW50IiwiZ2V0U2hlbGxIYXNoIiwiZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucyIsImhhc093blByb3BlcnR5IiwiTUFOQUdFX0ZFX0NBQ0hFUyIsImVuYWJsZWQiLCJvTmV3U2hlbGxIYXNoIiwiYkRpcnR5IiwiZm5EaXJ0eVN0YXRlUHJvdmlkZXIiLCJnZXRJbml0aWFscyIsImZuTmF2RmlsdGVyIiwiZm5DYWxsQmFjayIsImFIaWVyYXJjaHlMZXZlbHMiLCJzVGl0bGUiLCJzU2VtYW50aWNPYmplY3QiLCJtUGFyYW1ldGVycyIsInByaW1hcnlJbnRlbnQiLCJpc0FycmF5IiwiX3RoaXMkc2hlbGxQbHVnaW5NYW5hIiwiZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UiLCJmYWlsIiwib0Vycm9yIiwicGVyc0lkIiwic2NvcGUiLCJjb21wb25lbnQiLCJrZXlDYXRlZ29yeSIsImNvbnN0YW50cyIsIkZJWEVEX0tFWSIsIndyaXRlRnJlcXVlbmN5IiwiTE9XIiwiY2xpZW50U3RvcmFnZUFsbG93ZWQiLCJ2YWxpZGl0eSIsIkluZmluaXR5Iiwia2V5IiwiZGVsZXRlQ29udGFpbmVyIiwiaXRlbU5hbWUiLCJjb250YWluZXIiLCJnZXRNYW5pZmVzdCIsImlkIiwiX2F3YWl0JHRoaXMkZ2V0QXBwbGljIiwiZGF0YSIsInVybCIsIlNoZWxsU2VydmljZXNGYWN0b3J5IiwiX1NlcnZpY2VGYWN0b3J5IiwiX3Byb3RvMyIsImNyZWF0ZUluc3RhbmNlIiwic2VydmljZUNvbnRleHQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJzaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwic2VtYW50aWNPYmplY3RzIiwic2V0UHJvcGVydHkiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL0V4dGVuc2lvblwiO1xuaW1wb3J0IHR5cGUgTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IExpbmssIExpbmtGaWx0ZXIsIFRhcmdldCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFBlcnNvbmFsaXphdGlvblYyIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1BlcnNvbmFsaXphdGlvblYyXCI7XG5pbXBvcnQgeyB0eXBlIFBlcnNJZCwgdHlwZSBTY29wZSB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1BlcnNvbmFsaXphdGlvblYyXCI7XG5pbXBvcnQgdHlwZSBTaGVsbE5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvU2hlbGxOYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBVUkxQYXJzaW5nIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkSGFzaCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcbmltcG9ydCB0eXBlIFVzZXJJbmZvIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VzZXJJbmZvXCI7XG5pbXBvcnQgdHlwZSBTaGVsbFVJU2VydmljZSBmcm9tIFwic2FwL3VzaGVsbC91aTVzZXJ2aWNlL1NoZWxsVUlTZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi9BcHBDb21wb25lbnRcIjtcblxuZXhwb3J0IHR5cGUgU3RhcnR1cEFwcFN0YXRlID0ge1xuXHRnZXREYXRhKCk6IHtcblx0XHRzZWxlY3Rpb25WYXJpYW50Pzoge1xuXHRcdFx0U2VsZWN0T3B0aW9ucz86IHtcblx0XHRcdFx0UHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFJhbmdlczoge1xuXHRcdFx0XHRcdE9wdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdFNpZ246IHN0cmluZztcblx0XHRcdFx0XHRMb3c6IHN0cmluZztcblx0XHRcdFx0fVtdO1xuXHRcdFx0fVtdO1xuXHRcdH07XG5cdH07XG59O1xuXG4vLyBzZWU6IHNhcFxcdXNoZWxsXFxzZXJ2aWNlc1xcX1BlcnNvbmFsaXphdGlvblxcY29uc3RhbnRzLmpzXG5leHBvcnQgdHlwZSBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzID0gUGVyc29uYWxpemF0aW9uVjIgJiB7XG5cdGNvbnN0YW50czoge1xuXHRcdGtleUNhdGVnb3J5OiB7XG5cdFx0XHRGSVhFRF9LRVk6IHN0cmluZztcblx0XHRcdEdFTkVSQVRFRF9LRVk6IHN0cmluZztcblx0XHR9O1xuXHRcdHdyaXRlRnJlcXVlbmN5OiB7XG5cdFx0XHRISUdIOiBzdHJpbmc7XG5cdFx0XHRMT1c6IHN0cmluZztcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgUGVyc29uYWxpemVyVHlwZSA9IHtcblx0Z2V0UGVyc0RhdGE6ICgpID0+IFByb21pc2U8b2JqZWN0Pjtcblx0c2V0UGVyc0RhdGE6IChwZXJzRGF0YTogb2JqZWN0KSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgU2hlbGxDb25maWdUeXBlID0ge1xuXHRhcHBzOiB7XG5cdFx0aW5wdXRGaWVsZEhpc3Rvcnk6IHtcblx0XHRcdGVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIEZMUFBsdWdpbiA9IHtcblx0Y29tcG9uZW50OiBzdHJpbmc7XG5cdGVuYWJsZWQ6IGJvb2xlYW47XG5cdHVybDogc3RyaW5nO1xuXHRjb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUgPSB7XG5cdEFwcFdhcm11cDogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xuXHRSZW5kZXJlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcblx0VXNlckRlZmF1bHRzOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG5cdFVzZXJJbWFnZTogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xufTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNoZWxsU2VydmljZXMge1xuXHRpbml0UHJvbWlzZTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cdGluc3RhbmNlVHlwZTogc3RyaW5nO1xuXHRzZW1hbnRpY09iamVjdHM6IHN0cmluZ1tdO1xuXG5cdGdldExpbmtzKG9BcmdzPzogT21pdDxMaW5rRmlsdGVyLCBcInVpNUNvbXBvbmVudFwiPltdKTogUHJvbWlzZTxMaW5rW11bXT47XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBPbWl0PExpbmtGaWx0ZXIsIFwidWk1Q29tcG9uZW50XCI+W10pOiBQcm9taXNlPExpbmtbXVtdPjtcblxuXHR0b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnI6IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCk6IHZvaWQ7XG5cblx0Z2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzOiBvYmplY3QpOiBQcm9taXNlPHVuZGVmaW5lZCB8IFN0YXJ0dXBBcHBTdGF0ZT47XG5cblx0YmFja1RvUHJldmlvdXNBcHAoKTogdm9pZDtcblxuXHRocmVmRm9yRXh0ZXJuYWwob0FyZ3M/OiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0SHJlZihvVGFyZ2V0OiBvYmplY3QsIG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8c3RyaW5nPjtcblxuXHRnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPjtcblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IG9iamVjdDtcblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj47XG5cblx0bmF2aWdhdGUob1RhcmdldDogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTx1bmRlZmluZWQ+O1xuXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+O1xuXG5cdGlzSW5pdGlhbE5hdmlnYXRpb24oKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHRleHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0SGFzaCgpOiBzdHJpbmc7XG5cblx0cGFyc2VTaGVsbEhhc2goc0hhc2g6IHN0cmluZyk6IFBhcnNlZEhhc2g7XG5cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpOiBSZXR1cm5UeXBlPFVSTFBhcnNpbmdbXCJzcGxpdEhhc2hcIl0+O1xuXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmc7XG5cblx0c2V0RGlydHlGbGFnKGJEaXJ0eTogYm9vbGVhbik6IHZvaWQ7XG5cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0Z2V0VXNlcigpOiBVc2VySW5mbztcblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZztcblxuXHRoYXNVU2hlbGwoKTogYm9vbGVhbjtcblxuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2s/OiBGdW5jdGlvbik6IFByb21pc2U8dm9pZD47XG5cblx0c2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHM6IEFycmF5PG9iamVjdD4pOiBQcm9taXNlPHZvaWQ+O1xuXG5cdHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZztcblxuXHRnZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCk6IFByb21pc2U8TGluaz47XG5cblx0d2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj47XG5cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlO1xuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW47XG5cblx0Z2V0VGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldFBlcnNvbmFsaXplcihwZXJzSWQ6IFBlcnNJZCwgc2NvcGU6IFNjb3BlLCBjb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+O1xuXG5cdGRlbGV0ZVBlcnNvbmFsaXphdGlvbkNvbnRhaW5lcihrZXk6IHN0cmluZywgc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdGdldFNoZWxsQ29uZmlnKCk6IFNoZWxsQ29uZmlnVHlwZTtcblxuXHRwYXJzZVBhcmFtZXRlcnModXJsOiBzdHJpbmcpOiBSZXR1cm5UeXBlPFVSTFBhcnNpbmdbXCJwYXJzZVBhcmFtZXRlcnNcIl0+O1xuXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uO1xuXG5cdGdldEluZnJhbWVVcmwoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG5cdGdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyKGl0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+O1xuXG5cdGdldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YShpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxPYmplY3QgfCB1bmRlZmluZWQ+O1xuXG5cdHNldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YShpdGVtTmFtZTogc3RyaW5nLCBvYmplY3Q6IE9iamVjdCk6IFByb21pc2U8dm9pZD47XG59XG50eXBlIE5hdmlnYXRpb25FeHRlbnNpb24gPSBOYXZpZ2F0aW9uICYge1xuXHRnZXRTdGFydHVwQXBwU3RhdGUob0FwcENvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTxTdGFydHVwQXBwU3RhdGUgfCB1bmRlZmluZWQ+O1xuXHRnZXRBcHBTdGF0ZShvQXBwQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTxvYmplY3Q+O1xuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKFxuXHRcdG9BcHBDb21wb25lbnQ6IENvbXBvbmVudCxcblx0XHRiVHJhbnNpZW50RW5mb3JjZWQ/OiBib29sZWFuLFxuXHRcdHNQZXJzaXN0ZW5jeU1ldGhvZD86IHN0cmluZyxcblx0XHRvUGVyc2lzdGVuY3lTZXR0aW5ncz86IG9iamVjdFxuXHQpOiBQcm9taXNlPG9iamVjdD47XG59O1xuXG4vKipcbiAqIE1vY2sgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZSBmb3IgT3BlbkZFXG4gKlxuICovXG5jbGFzcyBTaGVsbFNlcnZpY2VNb2NrIGV4dGVuZHMgU2VydmljZTxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+IGltcGxlbWVudHMgSVNoZWxsU2VydmljZXMge1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblxuXHRzZW1hbnRpY09iamVjdHMhOiBzdHJpbmdbXTtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyBhcyBJU2hlbGxTZXJ2aWNlcyk7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcIm1vY2tcIjtcblx0fVxuXG5cdGFzeW5jIGdldExpbmtzKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgX19mZXRjaFNlbWFudGljT2JqZWN0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdGFzeW5jIGdldExpbmtzV2l0aENhY2hlKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0dG9FeHRlcm5hbCgvKm9OYXZBcmd1bWVudHNBcnI6IEFycmF5PG9iamVjdD4sIG9Db21wb25lbnQ6IG9iamVjdCovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0YXN5bmMgZ2V0U3RhcnR1cEFwcFN0YXRlKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxTdGFydHVwQXBwU3RhdGUgfCB1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRiYWNrVG9QcmV2aW91c0FwcCgpOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRhc3luYyBocmVmRm9yRXh0ZXJuYWwoLypvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbiovKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiXCIpO1xuXHR9XG5cblx0YXN5bmMgZ2V0SHJlZigvKm9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRnZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHR9XG5cblx0YXN5bmMgZ2V0QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QsIHNBcHBTdGF0ZUtleTogc3RyaW5nKi8pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGFzeW5jIGNyZWF0ZUVtcHR5QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZUFzeW5jKC8qb0NvbXBvbmVudDogb2JqZWN0Ki8pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGFzeW5jIG5hdmlnYXRlKC8qb1RhcmdldDogVGFyZ2V0LG9Db21wb25lbnQ/OiBDb21wb25lbnQqLyk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG5cblx0YXN5bmMgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKC8qb05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0Ki8pOiBQcm9taXNlPHsgc3VwcG9ydGVkOiBib29sZWFuIH1bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgaXNJbml0aWFsTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0fVxuXG5cdGFzeW5jIGV4cGFuZENvbXBhY3RIYXNoKC8qc0hhc2hGcmFnbWVudDogc3RyaW5nKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRwYXJzZVNoZWxsSGFzaCgvKnNIYXNoOiBzdHJpbmcqLyk6IFBhcnNlZEhhc2gge1xuXHRcdHJldHVybiB7fSBhcyB1bmtub3duIGFzIFBhcnNlZEhhc2g7XG5cdH1cblxuXHRzcGxpdEhhc2goc0hhc2g6IHN0cmluZyk6IFJldHVyblR5cGU8VVJMUGFyc2luZ1tcInNwbGl0SGFzaFwiXT4ge1xuXHRcdC8qKlxuXHRcdCAqIEZvciBhbiBBcHBsaWNhdGlvbiB3aXRob3V0IFNoZWxsLCB0aGUgaGFzaCBpcyBzaW1pbGFyIHRvIDogIy9TYWxlc09yZGVyTWFuYWdlKDExMTExMTExLWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcblx0XHQgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgOlxuXHRcdCAqIHtcblx0XHRcdHNoZWxsUGFydDogXCJcIixcblx0XHRcdGFwcFNwZWNpZmljUm91dGU6IFwiU2FsZXNPcmRlck1hbmFnZSgxMTExMTExMS1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmYpXCJcblx0XHR9XG5cdFx0ICovXG5cdFx0Y29uc3QgcmVnZXggPSAvI1teL10qXFwvKC4qKS8uZXhlYyhzSGFzaCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNoZWxsUGFydDogXCJcIixcblx0XHRcdGFwcFNwZWNpZmljUm91dGU6IHJlZ2V4Py5sZW5ndGggPT09IDIgPyByZWdleFsxXSA6IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0Y29uc3RydWN0U2hlbGxIYXNoKC8qb05ld1NoZWxsSGFzaDogb2JqZWN0Ki8pOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0c2V0RGlydHlGbGFnKC8qYkRpcnR5OiBib29sZWFuKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcigvKmZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcigvKmZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0Z2V0VXNlcigpOiBVc2VySW5mbyB7XG5cdFx0cmV0dXJuIHt9IGFzIFVzZXJJbmZvO1xuXHR9XG5cblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRoYXNVU2hlbGwoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKC8qZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcigvKmZuTmF2RmlsdGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0YXN5bmMgc2V0QmFja05hdmlnYXRpb24oLypmbkNhbGxCYWNrPzogRnVuY3Rpb24qLyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRhc3luYyBzZXRIaWVyYXJjaHkoLyphSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+Ki8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0YXN5bmMgc2V0VGl0bGUoLypzVGl0bGU6IHN0cmluZyovKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZyB7XG5cdFx0Ly8gaW4gY2FzZSB0aGVyZSBpcyBubyBzaGVsbCB3ZSBwcm9iYWJseSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNsYXNzZXMgYmVpbmcgZGVmaW5lZCBvbiB0aGUgYm9keVxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvenlcIikpIHtcblx0XHRcdHJldHVybiBcImNvenlcIjtcblx0XHR9IGVsc2UgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2FwVWlTaXplQ29tcGFjdFwiKSkge1xuXHRcdFx0cmV0dXJuIFwiY29tcGFjdFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBnZXRQcmltYXJ5SW50ZW50KC8qc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0Ki8pOiBQcm9taXNlPExpbms+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIExpbmspO1xuXHR9XG5cblx0YXN5bmMgd2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cblxuXHRhc3luYyBnZXRUaXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRhc3luYyBnZXRQZXJzb25hbGl6ZXIoX3BlcnNJZDogUGVyc0lkLCBfc2NvcGU6IFNjb3BlLCBfY29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHRnZXRQZXJzRGF0YTogYXN5bmMgKCkgPT5cblx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdFx0XHRoaXN0b3J5RW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0c3VnZ2VzdGlvbnNFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRhcHBzOiB7fVxuXHRcdFx0XHR9KSxcblx0XHRcdHNldFBlcnNEYXRhOiAoKSA9PiB7fVxuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6ZXIoX2l0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdGdldFBlcnNEYXRhOiBhc3luYyAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pLFxuXHRcdFx0c2V0UGVyc0RhdGE6ICgpID0+IHt9XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBnZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGEoX2l0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgc2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKF9pdGVtTmFtZTogc3RyaW5nLCBfb2JqZWN0OiBPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoX2tleTogc3RyaW5nLCBfc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRnZXRTaGVsbENvbmZpZygpOiBTaGVsbENvbmZpZ1R5cGUge1xuXHRcdHJldHVybiB7fSBhcyBTaGVsbENvbmZpZ1R5cGU7XG5cdH1cblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRBcHBXYXJtdXA6IHt9LFxuXHRcdFx0UmVuZGVyZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdFVzZXJEZWZhdWx0czoge30sXG5cdFx0XHRVc2VySW1hZ2U6IHt9XG5cdFx0fTtcblx0fVxuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHBhcnNlUGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4ge30gYXMgRXh0ZW5zaW9uO1xuXHR9XG5cblx0YXN5bmMgZ2V0SW5mcmFtZVVybCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBTaGVsbFNlcnZpY2VzU2V0dGluZ3NcbiAqL1xuZXhwb3J0IHR5cGUgU2hlbGxTZXJ2aWNlc1NldHRpbmdzID0ge1xuXHRzaGVsbENvbnRhaW5lcj86IENvbnRhaW5lcjtcbn07XG5cbnR5cGUgU2hlbGxQbHVnaW5NYW5hZ2VyID0ge1xuXHRnZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShjYXRlZ29yeTogc3RyaW5nKTogalF1ZXJ5LlByb21pc2U7XG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZTtcbn07XG5cbnR5cGUgUHJpdmF0ZVNoZWxsVXNlciA9IHtcblx0Z2V0SW5pdGlhbHMoKTogc3RyaW5nO1xuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZXNcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBTaGVsbFNlcnZpY2VzIGV4dGVuZHMgU2VydmljZTxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+PiBpbXBsZW1lbnRzIElTaGVsbFNlcnZpY2VzIHtcblx0cmVzb2x2ZUZuITogRnVuY3Rpb247XG5cblx0cmVqZWN0Rm4hOiAoKSA9PiB2b2lkO1xuXG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cblx0YXBwbGljYXRpb25OYXZpZ2F0aW9uITogTmF2aWdhdGlvbkV4dGVuc2lvbjtcblxuXHR1c2VySW5mb1NlcnZpY2UhOiBVc2VySW5mbztcblxuXHR1cmxQYXJzaW5nU2VydmljZSE6IFVSTFBhcnNpbmc7XG5cblx0c2hlbGxOYXZpZ2F0aW9uITogU2hlbGxOYXZpZ2F0aW9uO1xuXG5cdHNoZWxsUGx1Z2luTWFuYWdlciE6IFNoZWxsUGx1Z2luTWFuYWdlcjtcblxuXHRvU2hlbGxDb250YWluZXIhOiBDb250YWluZXIgJiB7IGdldFVzZXI6ICgpID0+IFByaXZhdGVTaGVsbFVzZXIgfTtcblxuXHRzaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UhOiBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzO1xuXG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblxuXHRsaW5rc0NhY2hlITogUmVjb3JkPHN0cmluZywgeyBsaW5rczogTGlua1tdIH0+O1xuXG5cdHNlbWFudGljT2JqZWN0cyE6IHN0cmluZ1tdO1xuXG5cdGZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUhOiBGdW5jdGlvbjtcblxuXHRleHRlbnNpb25TZXJ2aWNlITogRXh0ZW5zaW9uO1xuXG5cdGFwcENvbXBvbmVudCE6IENvbXBvbmVudDtcblxuXHRwcml2YXRlIGFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnM6IFJlY29yZDxzdHJpbmcsIFByb21pc2U8UGVyc29uYWxpemVyVHlwZT4+ID0ge307XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdHRoaXMuYXBwQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3QgYXMgQ29tcG9uZW50O1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyID0gb0NvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXI7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcInJlYWxcIjtcblx0XHR0aGlzLmxpbmtzQ2FjaGUgPSB7fTtcblx0XHR0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUgPSBmdW5jdGlvbiAob0FyZ3M6IExpbmtGaWx0ZXJbXSk6IG9iamVjdCB7XG5cdFx0XHRjb25zdCBhQ2FjaGVkU2VtYW50aWNPYmplY3RzOiBMaW5rW11bXSA9IFtdO1xuXHRcdFx0Y29uc3QgYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0czogTGlua0ZpbHRlcltdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtGaWx0ZXIgb2Ygb0FyZ3MpIHtcblx0XHRcdFx0aWYgKCEhbGlua0ZpbHRlciAmJiAhIWxpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdKSB7XG5cdFx0XHRcdFx0XHRhQ2FjaGVkU2VtYW50aWNPYmplY3RzLnB1c2godGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdLmxpbmtzKTtcblx0XHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsaW5rRmlsdGVyLCBcImxpbmtzXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHRoaXMubGlua3NDYWNoZVtsaW5rRmlsdGVyLnNlbWFudGljT2JqZWN0XS5saW5rc1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMucHVzaChsaW5rRmlsdGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB7IG9sZEFyZ3M6IG9BcmdzLCBuZXdBcmdzOiBhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzLCBjYWNoZWRMaW5rczogYUNhY2hlZFNlbWFudGljT2JqZWN0cyB9O1xuXHRcdH07XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucmVzb2x2ZUZuID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucmVqZWN0Rm4gPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblNlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiTmF2aWdhdGlvblwiKTtcblx0XHRjb25zdCB1c2VySW5mb1NlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiVXNlckluZm9cIik7XG5cdFx0Y29uc3Qgb1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlVSTFBhcnNpbmdcIik7XG5cdFx0Y29uc3Qgb1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiU2hlbGxOYXZpZ2F0aW9uSW50ZXJuYWxcIik7XG5cdFx0Y29uc3Qgb1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJQbHVnaW5NYW5hZ2VyXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiUGVyc29uYWxpemF0aW9uVjJcIik7XG5cdFx0Y29uc3Qgb1NoZWxsRXh0ZW5zaW9uU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJFeHRlbnNpb25cIik7XG5cblx0XHRQcm9taXNlLmFsbChbXG5cdFx0XHRuYXZpZ2F0aW9uU2VydmljZVAsXG5cdFx0XHR1c2VySW5mb1NlcnZpY2VQLFxuXHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlLFxuXHRcdFx0b1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UsXG5cdFx0XHRvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZVxuXHRcdF0pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0KFtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZSxcblx0XHRcdFx0XHR1c2VySW5mb1NlcnZpY2UsXG5cdFx0XHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0b1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSxcblx0XHRcdFx0XHRvU2hlbGxQbHVnaW5NYW5hZ2VyLFxuXHRcdFx0XHRcdG9TaGVsbEV4dGVuc2lvblNlcnZpY2Vcblx0XHRcdFx0XSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uID0gbmF2aWdhdGlvblNlcnZpY2UgYXMgTmF2aWdhdGlvbkV4dGVuc2lvbjtcblx0XHRcdFx0XHR0aGlzLnVzZXJJbmZvU2VydmljZSA9IHVzZXJJbmZvU2VydmljZSBhcyBVc2VySW5mbztcblx0XHRcdFx0XHR0aGlzLnVybFBhcnNpbmdTZXJ2aWNlID0gb1VybFBhcnNpbmdTZXJ2aWNlIGFzIFVSTFBhcnNpbmc7XG5cdFx0XHRcdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24gPSBvU2hlbGxOYXZpZ2F0aW9uIGFzIFNoZWxsTmF2aWdhdGlvbjtcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSA9IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UgYXMgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cztcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlciA9IG9TaGVsbFBsdWdpbk1hbmFnZXIgYXMgU2hlbGxQbHVnaW5NYW5hZ2VyO1xuXHRcdFx0XHRcdHRoaXMuZXh0ZW5zaW9uU2VydmljZSA9IG9TaGVsbEV4dGVuc2lvblNlcnZpY2UgYXMgRXh0ZW5zaW9uO1xuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZUZuKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHQpXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb25cblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3Mob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9BcmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbGlzdCBvZiBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZSB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLCBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgbWVzc2FnZVxuXHQgKi9cblx0YXN5bmMgX19mZXRjaFNlbWFudGljT2JqZWN0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0U2VtYW50aWNPYmplY3RzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb24gaW4gY2FjaGVcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0aWYgKChvQXJncyBhcyBPYmplY3RbXSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9DYWNoZVJlc3VsdHMgPSB0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUob0FyZ3MpO1xuXG5cdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5uZXdBcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gb0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFMaW5rcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9DYWNoZVJlc3VsdHMubmV3QXJncyk7XG5cdFx0XHRcdGlmIChhTGlua3MubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0c0xpbmtzOiBSZWNvcmQ8c3RyaW5nLCB7IGxpbmtzOiBMaW5rW10gfT4gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2ldLmxlbmd0aCA+IDAgJiYgb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2ldWzBdLmxpbmtzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0c0xpbmtzW29DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0bGlua3M6IGFMaW5rc1tpXVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR0aGlzLmxpbmtzQ2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMubGlua3NDYWNoZSwgb1NlbWFudGljT2JqZWN0c0xpbmtzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gYUxpbmtzO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGFNZXJnZWRMaW5rcyA9IFtdO1xuXHRcdFx0XHRcdGxldCBqID0gMDtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBvQ2FjaGVSZXN1bHRzLm9sZEFyZ3MpIHtcblx0XHRcdFx0XHRcdGlmIChqIDwgYUxpbmtzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2pdLmxlbmd0aCA+IDAgJiYgaXRlbVswXS5zZW1hbnRpY09iamVjdCA9PT0gb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2pdWzBdLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goYUxpbmtzW2pdKTtcblx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goaXRlbVswXS5saW5rcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFNZXJnZWRMaW5rcy5wdXNoKGl0ZW1bMF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gYU1lcmdlZExpbmtzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgZ2V0U2hlbGxVSVNlcnZpY2UoKTogUHJvbWlzZTxTaGVsbFVJU2VydmljZT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcENvbXBvbmVudC5nZXRTZXJ2aWNlKFwiU2hlbGxVSVNlcnZpY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgU2hlbGxDb250YWluZXIuXG5cdCAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHByZWRlZmluZWQgc2hlbGxDb250YWluZXIgbWV0aG9kc1xuXHQgKi9cblx0Z2V0U2hlbGxDb250YWluZXIoKTogQ29udGFpbmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXI7XG5cdH1cblxuXHRhc3luYyBnZXRJbmZyYW1lVXJsKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgdXNoZWxsQ29udGFpbmVyID0gdGhpcy5nZXRTaGVsbENvbnRhaW5lcigpO1xuXHRcdGxldCBhcHBVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRpZiAodXNoZWxsQ29udGFpbmVyPy5pbkFwcFJ1bnRpbWUoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXBwVXJsID0gYXdhaXQgdXNoZWxsQ29udGFpbmVyLmdldEZMUFVybEFzeW5jKHRydWUpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgRkxQIFVSTFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYXBwVXJsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCB0b0V4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqIEBwYXJhbSBvTmF2QXJndW1lbnRzQXJyIEFuZFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT50b0V4dGVybmFsIGFyZ3VtZW50c1xuXHQgKi9cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLm5hdmlnYXRlKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IHN0YXJ0dXBBcHBTdGF0ZVxuXHQgKiBXaWxsIGNoZWNrIHRoZSBleGlzdGFuY2Ugb2YgdGhlIFNoZWxsQ29udGFpbmVyIGFuZCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0U3RhcnR1cEFwcFN0YXRlIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0U3RhcnR1cEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gT2JqZWN0XG5cdCAqL1xuXHRhc3luYyBnZXRTdGFydHVwQXBwU3RhdGUob0FyZ3M6IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkIHwgU3RhcnR1cEFwcFN0YXRlPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFN0YXJ0dXBBcHBTdGF0ZShvQXJncyk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGJhY2tUb1ByZXZpb3VzQXBwIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBTb21ldGhpbmcgdGhhdCBpbmRpY2F0ZSB3ZSd2ZSBuYXZpZ2F0ZWRcblx0ICovXG5cdGFzeW5jIGJhY2tUb1ByZXZpb3VzQXBwKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5iYWNrVG9QcmV2aW91c0FwcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBocmVmRm9yRXh0ZXJuYWwgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmhyZWZGb3JFeHRlcm5hbCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHN0cmluZ1xuXHQgKi9cblx0YXN5bmMgaHJlZkZvckV4dGVybmFsKG9BcmdzOiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRIcmVmKG9BcmdzLCBvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gYSBVUkwgdGhhdCBsYXVuY2hlcyBhbiBhcHAgd2l0aCBjZXJ0YWluIHBhcmFtZXRlcnMuXG5cdCAqIFRoaXMgQVBJIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIGludGVybmFsIHNoZWxsIGhhc2ggZm9ybWF0IGludG8gdGhlIFVSTCBmb3JtYXQgZm9yIHVzZSBpbiBsaW5rIHRhZ3MuXG5cdCAqIFRoZSByZXN1bHRpbmcgaHJlZiBpcyBmdWxseSBlbmNvZGVkIGFuZCBjYW5ub3QgYmUgdXNlZCBpbiBvdGhlciBBUElzIHRoYXQgZXhwZWN0IHRoZSBpbnRlcm5hbCBkZWNvZGVkIGhhc2guXG5cdCAqIEBwYXJhbSBbb1RhcmdldF0gVGhlIG5hdmlnYXRpb24gdGFyZ2V0IHRvIHRyYW5zZm9ybS4gV2hlbiwgb21pdHRlZCB0aGUgY3VycmVudCBoYXNoIGlzIHVzZWQgYXMgdGhlIGJhc2lzIGZvciB0aGUgY2FsY3VsYXRpb24uXG5cdCAqIEBwYXJhbSBbb0NvbXBvbmVudF0gQSBVSTUgY29tcG9uZW50LCB1c2VkIHRvIGxvZ2ljYWxseSBhdHRhY2ggYW55IHJlbGF0ZWQgYXBwIHN0YXRlLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRoZSBlbmNvZGVkIGhyZWYuXG5cdCAqL1xuXHRhc3luYyBnZXRIcmVmKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldEhyZWYob1RhcmdldCwgb0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGdldEFwcFN0YXRlIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggb0NvbXBvbmVudCBhbmQgb0FwcFN0YXRlS2V5LlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudFxuXHQgKiBAcGFyYW0gc0FwcFN0YXRlS2V5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldEFwcFN0YXRlKG9Db21wb25lbnQsIHNBcHBTdGF0ZUtleSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNyZWF0ZUVtcHR5QXBwU3RhdGUgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBvQ29tcG9uZW50LlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5jcmVhdGVFbXB0eUFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5jcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBpc05hdmlnYXRpb25TdXBwb3J0ZWQgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBOYXZpZ2F0aW9uIEFyZ3VtZW50cyBhbmQgb0NvbXBvbmVudC5cblx0ICogQHBhcmFtIGFUYXJnZXRzXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmlzTmF2aWdhdGlvblN1cHBvcnRlZCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKGFUYXJnZXRzOiBUYXJnZXRbXSwgb0NvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKGFUYXJnZXRzLCBvQ29tcG9uZW50KSBhcyB1bmtub3duIGFzIFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpZWQgdGFyZ2V0IG91dHNpZGUgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGFwcGxpY2F0aW9uLlxuXHQgKiBAcGFyYW0gb1RhcmdldCBUaGUgbmF2aWdhdGlvbiB0YXJnZXQuXG5cdCAqIEBwYXJhbSBbb0NvbXBvbmVudF0gQSBVSTUgY29tcG9uZW50LCB1c2VkIHRvIGxvZ2ljYWxseSBhdHRhY2ggYW55IHJlbGF0ZWQgYXBwIHN0YXRlLlxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2aW5nIG9uY2UgdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZC4gVGhlIFByb21pc2UgbWlnaHQgbmV2ZXIgcmVqZWN0IG9yIHJlc29sdmVcblx0ICogICAgICAgICAgICAgICAgICAgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgbmF2aWdhdGlvbi5cblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0LCBvQ29tcG9uZW50KSkgYXMgdW5rbm93biBhcyBQcm9taXNlPHVuZGVmaW5lZD47XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGlzSW5pdGlhbE5hdmlnYXRpb25Bc3luYyBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIGJvb2xlYW5cblx0ICovXG5cdGFzeW5jIGlzSW5pdGlhbE5hdmlnYXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmlzSW5pdGlhbE5hdmlnYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZXhwYW5kQ29tcGFjdEhhc2ggbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBzSGFzaEZyYWdtZW50IEFuIChpbnRlcm5hbCBmb3JtYXQpIHNoZWxsIGhhc2hcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoZSBzdWNjZXNzIGhhbmRsZXIgb2YgdGhlIHJlc29sdmUgcHJvbWlzZSBnZXQgYW4gZXhwYW5kZWQgc2hlbGwgaGFzaCBhcyBmaXJzdCBhcmd1bWVudFxuXHQgKi9cblx0YXN5bmMgZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNIYXNoRnJhZ21lbnQpOyAvL3RoaXMubmF2VGFyZ2V0UmVzb2x1dGlvbi5leHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50KTtcblx0fVxuXG5cdGdldEhhc2goKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYCMke3RoaXMudXJsUGFyc2luZ1NlcnZpY2UuZ2V0U2hlbGxIYXNoKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgYWxsIHRoZSBwbHVnaW5zIHdoaWNoIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIFBsdWdpbk1hbmFnZXIsIHNvcnRlZCBieSBzdXBwb3J0ZWQgcGx1Z2luIGNhdGVnb3JpZXMuXG5cdCAqIEByZXR1cm5zIE1hcCBvZiByZWdpc3RlcmVkIHBsdWdpbnNcblx0ICovXG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxQbHVnaW5NYW5hZ2VyLmdldFJlZ2lzdGVyZWRQbHVnaW5zKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIHBsdWdpbiBzZXR1cCBpbiB0aGUgRkxQLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvcHRpbWlzdGljIGJhdGNoIHBsdWdpbiBpcyBzZXQgdXAgYW5kIGVuYWJsZWQuXG5cdCAqL1xuXHRpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zID0gdGhpcy5nZXRSZWdpc3RlcmVkUGx1Z2lucygpLlJlbmRlcmVyRXh0ZW5zaW9ucztcblx0XHRpZiAoXG5cdFx0XHRmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zPy5oYXNPd25Qcm9wZXJ0eShcIk1BTkFHRV9GRV9DQUNIRVNcIikgJiZcblx0XHRcdCEhKGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnMgYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgb2JqZWN0Pj4pLk1BTkFHRV9GRV9DQUNIRVMuZW5hYmxlZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHBhcnNlU2hlbGxIYXNoIG1ldGhvZCBvZiBVUkxQYXJzaW5nIHNlcnZpY2Ugd2l0aCBnaXZlbiBzSGFzaC5cblx0ICogQHBhcmFtIHNIYXNoIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuVVJMUGFyc2luZz0+cGFyc2VTaGVsbEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJzZWQgdXJsXG5cdCAqL1xuXHRwYXJzZVNoZWxsSGFzaChzSGFzaDogc3RyaW5nKTogUGFyc2VkSGFzaCB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UucGFyc2VTaGVsbEhhc2goc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzcGxpdEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKiBAcGFyYW0gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5zcGxpdEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogeyBzaGVsbFBhcnQ/OiBzdHJpbmc7IGFwcFNwZWNpZmljUm91dGU/OiBzdHJpbmcgfSB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2Uuc3BsaXRIYXNoKHNIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY29uc3RydWN0U2hlbGxIYXNoIG1ldGhvZCBvZiBVUkxQYXJzaW5nIHNlcnZpY2Ugd2l0aCBnaXZlbiBzSGFzaC5cblx0ICogQHBhcmFtIG9OZXdTaGVsbEhhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5jb25zdHJ1Y3RTaGVsbEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFNoZWxsIEhhc2ggc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaDogb2JqZWN0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5jb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldERpcnR5RmxhZyBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZS5cblx0ICogQHBhcmFtIGJEaXJ0eSBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5zZXREaXJ0eUZsYWcgYXJndW1lbnRzXG5cdCAqL1xuXHRzZXREaXJ0eUZsYWcoYkRpcnR5OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIuc2V0RGlydHlGbGFnKGJEaXJ0eSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlIHByb3ZpZGVyIGNhbGxiYWNrIG1ldGhvZC5cblx0ICogQHBhcmFtIGZuRGlydHlTdGF0ZVByb3ZpZGVyIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIGFyZ3VtZW50c1xuXHQgKi9cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6ICgpID0+IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKiBAcGFyYW0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBhcmd1bWVudHNcblx0ICovXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6ICgpID0+IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5kZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0VXNlciBtZXRob2Qgb2YgdXNoZWxsIGNvbnRhaW5lci5cblx0ICogQHJldHVybnMgUmV0dXJucyBVc2VyIG9iamVjdFxuXHQgKi9cblx0Z2V0VXNlcigpOiBVc2VySW5mbyB7XG5cdFx0cmV0dXJuIHRoaXMudXNlckluZm9TZXJ2aWNlO1xuXHR9XG5cblx0aXNKYW1BY3RpdmUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFVzZXIoKS5pc0phbUFjdGl2ZSgpO1xuXHR9XG5cblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFVzZXIoKS5nZXRJbml0aWFscygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2hlY2sgaWYgdXNoZWxsIGNvbnRhaW5lciBpcyBhdmFpbGFibGUgb3Igbm90LlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWVcblx0ICovXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIG1ldGhvZCBvZiBzaGVsbE5hdmlnYXRpb24uXG5cdCAqIEBwYXJhbSBmbk5hdkZpbHRlciBUaGUgZmlsdGVyIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyXG5cdCAqL1xuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24ucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgdW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICogQHBhcmFtIGZuTmF2RmlsdGVyIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gdW5yZWdpc3RlclxuXHQgKi9cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24udW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRCYWNrTmF2aWdhdGlvbiBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgYmFjayBidXR0b24gaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICogQHBhcmFtIGZuQ2FsbEJhY2sgQSBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgaW4gdGhlIFVJLlxuXHQgKi9cblx0YXN5bmMgc2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjazogRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQoYXdhaXQgdGhpcy5nZXRTaGVsbFVJU2VydmljZSgpKS5zZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0SGllcmFyY2h5IG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBnaXZlbiBoaWVyYXJjaHkgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICogQHBhcmFtIFthSGllcmFyY2h5TGV2ZWxzXSBBbiBhcnJheSByZXByZXNlbnRpbmcgaGllcmFyY2hpZXMgb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgYXBwLlxuXHQgKi9cblx0YXN5bmMgc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHM6IG9iamVjdFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0KGF3YWl0IHRoaXMuZ2V0U2hlbGxVSVNlcnZpY2UoKSkuc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICogQHBhcmFtIFtzVGl0bGVdIFRoZSBuZXcgdGl0bGUuIFRoZSBkZWZhdWx0IHRpdGxlIGlzIHNldCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBnaXZlbi5cblx0ICovXG5cdGFzeW5jIHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0KGF3YWl0IHRoaXMuZ2V0U2hlbGxVSVNlcnZpY2UoKSkuc2V0VGl0bGUoc1RpdGxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0VGl0bGUgbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGdpdmVuIHRpdGxlIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBvZiB0aGUgYXBwbGljYXRpb24uXG5cdCAqL1xuXHRhc3luYyBnZXRUaXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiAoYXdhaXQgdGhpcy5nZXRTaGVsbFVJU2VydmljZSgpKS5nZXRUaXRsZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudGx5IGRlZmluZWQgY29udGVudCBkZW5zaXR5LlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGVudCBkZW5zaXR5IHZhbHVlXG5cdCAqL1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRVc2VyKCkuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QsIHRoaXMgbWV0aG9kIGNvbnNpZGVycyBhbGwgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbWFudGljIG9iamVjdCBhbmRcblx0ICogcmV0dXJucyB0aGUgb25lIHRhZ2dlZCBhcyBhIFwicHJpbWFyeUFjdGlvblwiLiBJZiBubyBpbmJvdW5kIHRhZ2dlZCBhcyBcInByaW1hcnlBY3Rpb25cIiBleGlzdHMsIHRoZW4gaXQgcmV0dXJuc1xuXHQgKiB0aGUgaW50ZW50IG9mIHRoZSBmaXJzdCBpbmJvdW5kIChhZnRlciBzb3J0aW5nIGhhcyBiZWVuIGFwcGxpZWQpIG1hdGNoaW5nIHRoZSBhY3Rpb24gXCJkaXNwbGF5RmFjdFNoZWV0XCIuXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNPYmplY3QgU2VtYW50aWMgb2JqZWN0LlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgU2VlICNDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiNnZXRMaW5rcyBmb3IgZGVzY3JpcHRpb24uXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnRlbnQgaWYgaXQgZXhpc3RzLlxuXHQgKi9cblx0YXN5bmMgZ2V0UHJpbWFyeUludGVudChzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgbVBhcmFtZXRlcnM/OiBMaW5rRmlsdGVyKTogUHJvbWlzZTxMaW5rPiB7XG5cdFx0Y29uc3QgcHJpbWFyeUludGVudCA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0LCBtUGFyYW1ldGVycyk7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkocHJpbWFyeUludGVudCkpIHtcblx0XHRcdHJldHVybiBwcmltYXJ5SW50ZW50WzBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcHJpbWFyeUludGVudDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBmb3IgdGhlIHJlbmRlciBleHRlbnNpb25zIHBsdWdpbiB0byBiZSBsb2FkZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgd2UgYXJlIGFibGUgdG8gd2FpdCBmb3IgaXQsIG90aGVyd2lzZSB3ZSBjb3VsZG4ndCBhbmQgY2Fubm90IHJlbHkgb24gaXQuXG5cdCAqL1xuXHRhc3luYyB3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMuc2hlbGxQbHVnaW5NYW5hZ2VyPy5nZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZSkge1xuXHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlclxuXHRcdFx0XHRcdC5nZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShcIlJlbmRlcmVyRXh0ZW5zaW9uc1wiKVxuXHRcdFx0XHRcdC5mYWlsKChvRXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihvRXJyb3IgYXMgc3RyaW5nLCBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNoZWxsU2VydmljZXNGYWN0b3J5LndhaXRGb3JQbHVnaW5zTG9hZFwiKTtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwZXJzb25hbGl6ZXIgZnJvbSB0aGUgc2hlbGwgc2VydmljZS5cblx0ICogV2Ugc2V0IHNvbWUgZGVmYXVsdHMgZm9yIHRoZSBzY29wZSBvYmplY3QuXG5cdCAqIEBwYXJhbSBwZXJzSWQgUGVyc29uYWxpemF0aW9uIG9iamVjdFxuXHQgKiBAcGFyYW0gc2NvcGUgU2NvcGUgb2JqZWN0XG5cdCAqIEBwYXJhbSBjb21wb25lbnRcblx0ICogQHJldHVybnMgUGVyc29uYWxpemVyIG9iamVjdCB3aGljaCBoYW5kbGVzIHBlcnNvbmFsaXphdGlvblxuXHQgKi9cblx0YXN5bmMgZ2V0UGVyc29uYWxpemVyKHBlcnNJZDogUGVyc0lkLCBzY29wZTogU2NvcGUsIGNvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8UGVyc29uYWxpemVyVHlwZT4ge1xuXHRcdHNjb3BlID0ge1xuXHRcdFx0Ly8gbWVyZ2Ugc29tZSBkZWZhdWx0c1xuXHRcdFx0a2V5Q2F0ZWdvcnk6IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmNvbnN0YW50cy5rZXlDYXRlZ29yeS5GSVhFRF9LRVksXG5cdFx0XHR3cml0ZUZyZXF1ZW5jeTogdGhpcy5zaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UuY29uc3RhbnRzLndyaXRlRnJlcXVlbmN5LkxPVyxcblx0XHRcdGNsaWVudFN0b3JhZ2VBbGxvd2VkOiBmYWxzZSxcblx0XHRcdHZhbGlkaXR5OiBJbmZpbml0eSxcblx0XHRcdC4uLnNjb3BlXG5cdFx0fTtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmdldFBlcnNvbmFsaXplcihwZXJzSWQsIHNjb3BlLCBjb21wb25lbnQpKSBhcyBQZXJzb25hbGl6ZXJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgYSBjb250YWluZXIgaWRlbnRpZmllZCBieSBzQ29udGFpbmVyS2V5LlxuXHQgKiBAcGFyYW0ga2V5IENvbnRhaW5lciBrZXlcblx0ICogQHBhcmFtIHNjb3BlIFNjb3BlIG9iamVjdFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gdGhlIGNvbnRhaW5lciBpcyBkZWxldGVkXG5cdCAqL1xuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoa2V5OiBzdHJpbmcsIHNjb3BlPzogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmRlbGV0ZUNvbnRhaW5lcihrZXksIHNjb3BlIGFzIHVua25vd24gYXMgb2JqZWN0KSBhcyBQcm9taXNlPHZvaWQ+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBwZXJzb25hbGl6ZXIgdG8gYWNjZXNzIHRoZSBBcHBsaWNhdGlvbiBkYXRhIHN0b3JlZCBpbiB0aGUgc2hlbGwgUGVyc29uYWxpemF0aW9uLlxuXHQgKiBAcGFyYW0gaXRlbU5hbWUgVGhlIG5hbWUgb2YgdGhlIGl0ZW0gZm9yIHdoaWNoIHRoZSBwZXJzb25hbGl6ZXIgaXMgY3JlYXRlZC5cblx0ICogQHJldHVybnMgQSBwZXJzb25hbGl6ZXJcblx0ICovXG5cdHB1YmxpYyBhc3luYyBnZXRBcHBsaWNhdGlvblBlcnNvbmFsaXplcihpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPiB7XG5cdFx0aWYgKCF0aGlzLmFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnNbaXRlbU5hbWVdKSB7XG5cdFx0XHR0aGlzLmFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnNbaXRlbU5hbWVdID0gdGhpcy5nZXRQZXJzb25hbGl6ZXIoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb250YWluZXI6IGBBcHBsaWNhdGlvbiMkeyh0aGlzLmFwcENvbXBvbmVudCBhcyBBcHBDb21wb25lbnQpLmdldE1hbmlmZXN0KClbXCJzYXAuYXBwXCJdLmlkfWAsXG5cdFx0XHRcdFx0aXRlbTogaXRlbU5hbWVcblx0XHRcdFx0fSxcblx0XHRcdFx0e30sXG5cdFx0XHRcdHRoaXMuYXBwQ29tcG9uZW50XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvblBlcnNvbm5hbGl6ZXJzW2l0ZW1OYW1lXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGRhdGEgZnJvbSB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBpdGVtTmFtZVxuXHQgKiBAcmV0dXJucyBEYXRhXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKGl0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiAoYXdhaXQgKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6ZXIoaXRlbU5hbWUpKT8uZ2V0UGVyc0RhdGEoKSkgYXMgb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHN0b3JlcyBhbiBvYmplY3QgaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcGFyYW0gaXRlbU5hbWVcblx0ICogQHBhcmFtIGRhdGFcblx0ICogQHJldHVybnMgQSBwcm9taXNlXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgc2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKGl0ZW1OYW1lOiBzdHJpbmcsIGRhdGE6IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyKGl0ZW1OYW1lKSkuc2V0UGVyc0RhdGEoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzaGVsbCBjb25maWcgZnJvbSB0aGUgd2luZG93cyBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFNoZWxsIGNvbmZpZyBvYmplY3Rcblx0ICovXG5cdGdldFNoZWxsQ29uZmlnKCk6IFNoZWxsQ29uZmlnVHlwZSB7XG5cdFx0cmV0dXJuICh3aW5kb3cgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+KVtcInNhcC11c2hlbGwtY29uZmlnXCJdIGFzIFNoZWxsQ29uZmlnVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBwYXJhbWV0ZXJzIGZyb20gYSBVUkkgcXVlcnkgc3RyaW5nIChzdGFydGluZyB3aXRoID8pIGludG8gYSBwYXJhbWV0ZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gdXJsIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIFBhcmFtZXRlciBzdHJpbmdcblx0ICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5nIHN0cmluZyBhcnJheXNcblx0ICovXG5cdHBhcnNlUGFyYW1ldGVycyh1cmw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UucGFyc2VQYXJhbWV0ZXJzKHVybCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzaGVsbCBleHRlbnNpb24gc2VydmljZS5cblx0ICogQHJldHVybnMgU2hlbGwgZXh0ZW5zaW9uIHNlcnZpY2Vcblx0ICovXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25TZXJ2aWNlO1xuXHR9XG59XG5cbi8qKlxuICogU2VydmljZSBGYWN0b3J5IGZvciB0aGUgU2hlbGxTZXJ2aWNlc1xuICpcbiAqL1xuY2xhc3MgU2hlbGxTZXJ2aWNlc0ZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+IHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgZWl0aGVyIGEgc3RhbmRhcmQgb3IgYSBtb2NrIFNoZWxsIHNlcnZpY2UgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuXHQgKiBAcGFyYW0gc2VydmljZUNvbnRleHQgVGhlIHNoZWxsc2VydmljZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYSBzaGVsbCBzZXJ2aWNlIGltcGxlbWVudGF0aW9uXG5cdCAqIEBzZWUgU2VydmljZUZhY3RvcnkjY3JlYXRlSW5zdGFuY2Vcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKHNlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+KTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz4ge1xuXHRcdHNlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyID0gc2FwLnVpLnJlcXVpcmUoXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiKTtcblx0XHRjb25zdCBzaGVsbFNlcnZpY2UgPSBzZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lclxuXHRcdFx0PyBuZXcgU2hlbGxTZXJ2aWNlcyhzZXJ2aWNlQ29udGV4dCBhcyBTZXJ2aWNlQ29udGV4dDxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+Pilcblx0XHRcdDogbmV3IFNoZWxsU2VydmljZU1vY2soc2VydmljZUNvbnRleHQpO1xuXHRcdGF3YWl0IHNoZWxsU2VydmljZS5pbml0UHJvbWlzZTtcblx0XHQvLyBFbnJpY2ggdGhlIGFwcENvbXBvbmVudCB3aXRoIHRoaXMgbWV0aG9kXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gc2VydmljZUNvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0YXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMgPSAoKTogSVNoZWxsU2VydmljZXMgPT4gc2hlbGxTZXJ2aWNlO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoaW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0bGV0IHNlbWFudGljT2JqZWN0czogc3RyaW5nW10gPSBbXTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0cyA9IGF3YWl0IHNoZWxsU2VydmljZS5fX2ZldGNoU2VtYW50aWNPYmplY3QoKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNhbGxpbmcgZ2V0U2VtYW50aWNPYmplY3RzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHQoaW50ZXJuYWxNb2RlbCBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL3NlbWFudGljT2JqZWN0c1wiLCBzZW1hbnRpY09iamVjdHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2hlbGxTZXJ2aWNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoZWxsU2VydmljZXNGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBa0NBO0VBeUNBO0FBQ0E7QUFDQTtFQTBHQTtBQUNBO0FBQ0E7QUFDQTtFQUhBLElBSU1BLGdCQUFnQiwwQkFBQUMsUUFBQTtJQUFBQyxjQUFBLENBQUFGLGdCQUFBLEVBQUFDLFFBQUE7SUFBQSxTQUFBRCxpQkFBQTtNQUFBLE9BQUFDLFFBQUEsQ0FBQUUsS0FBQSxPQUFBQyxTQUFBO0lBQUE7SUFBQSxJQUFBQyxNQUFBLEdBQUFMLGdCQUFBLENBQUFNLFNBQUE7SUFBQUQsTUFBQSxDQU9yQkUsSUFBSSxHQUFKLFNBQUFBLEtBQUEsRUFBYTtNQUNaLElBQUksQ0FBQ0MsV0FBVyxHQUFHQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFzQixDQUFDO01BQzFELElBQUksQ0FBQ0MsWUFBWSxHQUFHLE1BQU07SUFDM0IsQ0FBQztJQUFBTixNQUFBLENBRUtPLFFBQVEsR0FBZCxlQUFBQSxTQUFBLENBQWU7SUFBQSxFQUFzQztNQUNwRCxPQUFPSCxPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFBTCxNQUFBLENBRUtRLHFCQUFxQixHQUEzQixlQUFBQSxzQkFBQSxFQUFpRDtNQUNoRCxPQUFPSixPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFBTCxNQUFBLENBRUtTLGlCQUFpQixHQUF2QixlQUFBQSxrQkFBQSxDQUF3QjtJQUFBLEVBQXNDO01BQzdELE9BQU9MLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUFMLE1BQUEsQ0FFRFUsVUFBVSxHQUFWLFNBQUFBLFdBQUEsQ0FBVztJQUFBLEVBQStEO01BQ3pFO0lBQUEsQ0FDQTtJQUFBVixNQUFBLENBRUtXLGtCQUFrQixHQUF4QixlQUFB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
|
|
838
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaGVsbFNlcnZpY2VNb2NrIiwiX1NlcnZpY2UiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnN0YW5jZVR5cGUiLCJnZXRMaW5rcyIsIl9fZmV0Y2hTZW1hbnRpY09iamVjdCIsImdldExpbmtzV2l0aENhY2hlIiwidG9FeHRlcm5hbCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImlzSmFtQWN0aXZlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJnZXRIcmVmIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYyIsIm5hdmlnYXRlIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwiaXNJbml0aWFsTmF2aWdhdGlvbiIsImV4cGFuZENvbXBhY3RIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJzcGxpdEhhc2giLCJzSGFzaCIsInJlZ2V4IiwiZXhlYyIsInNoZWxsUGFydCIsImFwcFNwZWNpZmljUm91dGUiLCJsZW5ndGgiLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJzZXREaXJ0eUZsYWciLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJnZXRVc2VyIiwiZ2V0VXNlckluaXRpYWxzIiwiaGFzVVNoZWxsIiwicmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwidW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInNldEhpZXJhcmNoeSIsInNldFRpdGxlIiwiZ2V0Q29udGVudERlbnNpdHkiLCJkb2N1bWVudCIsImJvZHkiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImdldFByaW1hcnlJbnRlbnQiLCJ3YWl0Rm9yUGx1Z2luc0xvYWQiLCJnZXRUaXRsZSIsImdldFBlcnNvbmFsaXplciIsIl9wZXJzSWQiLCJfc2NvcGUiLCJfY29tcG9uZW50IiwiZ2V0UGVyc0RhdGEiLCJoaXN0b3J5RW5hYmxlZCIsInN1Z2dlc3Rpb25zRW5hYmxlZCIsImFwcHMiLCJzZXRQZXJzRGF0YSIsImdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyIiwiX2l0ZW1OYW1lIiwiZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhIiwic2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhIiwiX29iamVjdCIsImRlbGV0ZVBlcnNvbmFsaXphdGlvbkNvbnRhaW5lciIsIl9rZXkiLCJnZXRTaGVsbENvbmZpZyIsImdldFJlZ2lzdGVyZWRQbHVnaW5zIiwiQXBwV2FybXVwIiwiUmVuZGVyZXJFeHRlbnNpb25zIiwiVXNlckRlZmF1bHRzIiwiVXNlckltYWdlIiwiaXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQiLCJwYXJzZVBhcmFtZXRlcnMiLCJnZXRFeHRlbnNpb25TZXJ2aWNlIiwiZ2V0SW5mcmFtZVVybCIsIlNlcnZpY2UiLCJTaGVsbFNlcnZpY2VzIiwiX1NlcnZpY2UyIiwiX3RoaXMiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleTIiLCJjYWxsIiwiYXBwbGljYXRpb25QZXJzb25uYWxpemVycyIsIl9leHBvcnRzIiwiX3Byb3RvMiIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsImFwcENvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib1NoZWxsQ29udGFpbmVyIiwic2V0dGluZ3MiLCJzaGVsbENvbnRhaW5lciIsImxpbmtzQ2FjaGUiLCJmbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlIiwib0FyZ3MiLCJhQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwiYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cyIsImxpbmtGaWx0ZXIiLCJzZW1hbnRpY09iamVjdCIsInB1c2giLCJsaW5rcyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJvbGRBcmdzIiwibmV3QXJncyIsImNhY2hlZExpbmtzIiwicmVqZWN0IiwicmVzb2x2ZUZuIiwicmVqZWN0Rm4iLCJuYXZpZ2F0aW9uU2VydmljZVAiLCJnZXRTZXJ2aWNlQXN5bmMiLCJ1c2VySW5mb1NlcnZpY2VQIiwib1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbFBsdWdpbk1hbmFnZXJQcm9taXNlIiwib1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZVByb21pc2UiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZSIsImFsbCIsInRoZW4iLCJfcmVmIiwibmF2aWdhdGlvblNlcnZpY2UiLCJ1c2VySW5mb1NlcnZpY2UiLCJvVXJsUGFyc2luZ1NlcnZpY2UiLCJvU2hlbGxOYXZpZ2F0aW9uIiwib1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSIsIm9TaGVsbFBsdWdpbk1hbmFnZXIiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlIiwiYXBwbGljYXRpb25OYXZpZ2F0aW9uIiwidXJsUGFyc2luZ1NlcnZpY2UiLCJzaGVsbE5hdmlnYXRpb24iLCJzaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UiLCJzaGVsbFBsdWdpbk1hbmFnZXIiLCJleHRlbnNpb25TZXJ2aWNlIiwiY2F0Y2giLCJnZXRTZW1hbnRpY09iamVjdHMiLCJvQ2FjaGVSZXN1bHRzIiwiYUxpbmtzIiwib1NlbWFudGljT2JqZWN0c0xpbmtzIiwiaSIsImFzc2lnbiIsImFNZXJnZWRMaW5rcyIsImoiLCJpdGVtIiwiZ2V0U2hlbGxVSVNlcnZpY2UiLCJnZXRTZXJ2aWNlIiwiZ2V0U2hlbGxDb250YWluZXIiLCJ1c2hlbGxDb250YWluZXIiLCJhcHBVcmwiLCJpbkFwcFJ1bnRpbWUiLCJnZXRGTFBVcmxBc3luYyIsImVycm9yIiwiTG9nIiwib05hdkFyZ3VtZW50c0FyciIsIm9Db21wb25lbnQiLCJvVGFyZ2V0Iiwic0FwcFN0YXRlS2V5IiwiYVRhcmdldHMiLCJzSGFzaEZyYWdtZW50IiwiZ2V0U2hlbGxIYXNoIiwiZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucyIsImhhc093blByb3BlcnR5IiwiTUFOQUdFX0ZFX0NBQ0hFUyIsImVuYWJsZWQiLCJvTmV3U2hlbGxIYXNoIiwiYkRpcnR5IiwiZm5EaXJ0eVN0YXRlUHJvdmlkZXIiLCJnZXRJbml0aWFscyIsImZuTmF2RmlsdGVyIiwiZm5DYWxsQmFjayIsImFIaWVyYXJjaHlMZXZlbHMiLCJzVGl0bGUiLCJzU2VtYW50aWNPYmplY3QiLCJtUGFyYW1ldGVycyIsInByaW1hcnlJbnRlbnQiLCJpc0FycmF5IiwiZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UiLCJmYWlsIiwib0Vycm9yIiwicGVyc0lkIiwic2NvcGUiLCJjb21wb25lbnQiLCJrZXlDYXRlZ29yeSIsImNvbnN0YW50cyIsIkZJWEVEX0tFWSIsIndyaXRlRnJlcXVlbmN5IiwiTE9XIiwiY2xpZW50U3RvcmFnZUFsbG93ZWQiLCJ2YWxpZGl0eSIsIkluZmluaXR5Iiwia2V5IiwiZGVsZXRlQ29udGFpbmVyIiwiaXRlbU5hbWUiLCJjb250YWluZXIiLCJnZXRNYW5pZmVzdCIsImlkIiwiZGF0YSIsInVybCIsIlNoZWxsU2VydmljZXNGYWN0b3J5IiwiX1NlcnZpY2VGYWN0b3J5IiwiX3Byb3RvMyIsImNyZWF0ZUluc3RhbmNlIiwic2VydmljZUNvbnRleHQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJzaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwic2VtYW50aWNPYmplY3RzIiwic2V0UHJvcGVydHkiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL0V4dGVuc2lvblwiO1xuaW1wb3J0IHR5cGUgTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IExpbmssIExpbmtGaWx0ZXIsIFRhcmdldCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFBlcnNvbmFsaXphdGlvblYyIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1BlcnNvbmFsaXphdGlvblYyXCI7XG5pbXBvcnQgeyB0eXBlIFBlcnNJZCwgdHlwZSBTY29wZSB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1BlcnNvbmFsaXphdGlvblYyXCI7XG5pbXBvcnQgdHlwZSBTaGVsbE5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvU2hlbGxOYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBVUkxQYXJzaW5nIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkSGFzaCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcbmltcG9ydCB0eXBlIFVzZXJJbmZvIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VzZXJJbmZvXCI7XG5pbXBvcnQgdHlwZSBTaGVsbFVJU2VydmljZSBmcm9tIFwic2FwL3VzaGVsbC91aTVzZXJ2aWNlL1NoZWxsVUlTZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi9BcHBDb21wb25lbnRcIjtcblxuZXhwb3J0IHR5cGUgU3RhcnR1cEFwcFN0YXRlID0ge1xuXHRnZXREYXRhKCk6IHtcblx0XHRzZWxlY3Rpb25WYXJpYW50Pzoge1xuXHRcdFx0U2VsZWN0T3B0aW9ucz86IHtcblx0XHRcdFx0UHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFJhbmdlczoge1xuXHRcdFx0XHRcdE9wdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdFNpZ246IHN0cmluZztcblx0XHRcdFx0XHRMb3c6IHN0cmluZztcblx0XHRcdFx0fVtdO1xuXHRcdFx0fVtdO1xuXHRcdH07XG5cdH07XG59O1xuXG4vLyBzZWU6IHNhcFxcdXNoZWxsXFxzZXJ2aWNlc1xcX1BlcnNvbmFsaXphdGlvblxcY29uc3RhbnRzLmpzXG5leHBvcnQgdHlwZSBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzID0gUGVyc29uYWxpemF0aW9uVjIgJiB7XG5cdGNvbnN0YW50czoge1xuXHRcdGtleUNhdGVnb3J5OiB7XG5cdFx0XHRGSVhFRF9LRVk6IHN0cmluZztcblx0XHRcdEdFTkVSQVRFRF9LRVk6IHN0cmluZztcblx0XHR9O1xuXHRcdHdyaXRlRnJlcXVlbmN5OiB7XG5cdFx0XHRISUdIOiBzdHJpbmc7XG5cdFx0XHRMT1c6IHN0cmluZztcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgUGVyc29uYWxpemVyVHlwZSA9IHtcblx0Z2V0UGVyc0RhdGE6ICgpID0+IFByb21pc2U8b2JqZWN0Pjtcblx0c2V0UGVyc0RhdGE6IChwZXJzRGF0YTogb2JqZWN0KSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgU2hlbGxDb25maWdUeXBlID0ge1xuXHRhcHBzOiB7XG5cdFx0aW5wdXRGaWVsZEhpc3Rvcnk6IHtcblx0XHRcdGVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIEZMUFBsdWdpbiA9IHtcblx0Y29tcG9uZW50OiBzdHJpbmc7XG5cdGVuYWJsZWQ6IGJvb2xlYW47XG5cdHVybDogc3RyaW5nO1xuXHRjb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUgPSB7XG5cdEFwcFdhcm11cDogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xuXHRSZW5kZXJlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcblx0VXNlckRlZmF1bHRzOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG5cdFVzZXJJbWFnZTogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xufTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNoZWxsU2VydmljZXMge1xuXHRpbml0UHJvbWlzZTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cdGluc3RhbmNlVHlwZTogc3RyaW5nO1xuXHRzZW1hbnRpY09iamVjdHM6IHN0cmluZ1tdO1xuXG5cdGdldExpbmtzKG9BcmdzPzogT21pdDxMaW5rRmlsdGVyLCBcInVpNUNvbXBvbmVudFwiPltdKTogUHJvbWlzZTxMaW5rW11bXT47XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBPbWl0PExpbmtGaWx0ZXIsIFwidWk1Q29tcG9uZW50XCI+W10pOiBQcm9taXNlPExpbmtbXVtdPjtcblxuXHR0b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnI6IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCk6IHZvaWQ7XG5cblx0Z2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzOiBvYmplY3QpOiBQcm9taXNlPHVuZGVmaW5lZCB8IFN0YXJ0dXBBcHBTdGF0ZT47XG5cblx0YmFja1RvUHJldmlvdXNBcHAoKTogdm9pZDtcblxuXHRocmVmRm9yRXh0ZXJuYWwob0FyZ3M/OiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0SHJlZihvVGFyZ2V0OiBvYmplY3QsIG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8c3RyaW5nPjtcblxuXHRnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPjtcblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IG9iamVjdDtcblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj47XG5cblx0bmF2aWdhdGUob1RhcmdldDogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTx1bmRlZmluZWQ+O1xuXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+O1xuXG5cdGlzSW5pdGlhbE5hdmlnYXRpb24oKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHRleHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0SGFzaCgpOiBzdHJpbmc7XG5cblx0cGFyc2VTaGVsbEhhc2goc0hhc2g6IHN0cmluZyk6IFBhcnNlZEhhc2g7XG5cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpOiBSZXR1cm5UeXBlPFVSTFBhcnNpbmdbXCJzcGxpdEhhc2hcIl0+O1xuXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmc7XG5cblx0c2V0RGlydHlGbGFnKGJEaXJ0eTogYm9vbGVhbik6IHZvaWQ7XG5cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0Z2V0VXNlcigpOiBVc2VySW5mbztcblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZztcblxuXHRoYXNVU2hlbGwoKTogYm9vbGVhbjtcblxuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2s/OiBGdW5jdGlvbik6IFByb21pc2U8dm9pZD47XG5cblx0c2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHM6IEFycmF5PG9iamVjdD4pOiBQcm9taXNlPHZvaWQ+O1xuXG5cdHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZztcblxuXHRnZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCk6IFByb21pc2U8TGluaz47XG5cblx0d2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj47XG5cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlO1xuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW47XG5cblx0Z2V0VGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldFBlcnNvbmFsaXplcihwZXJzSWQ6IFBlcnNJZCwgc2NvcGU6IFNjb3BlLCBjb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+O1xuXG5cdGRlbGV0ZVBlcnNvbmFsaXphdGlvbkNvbnRhaW5lcihrZXk6IHN0cmluZywgc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdGdldFNoZWxsQ29uZmlnKCk6IFNoZWxsQ29uZmlnVHlwZTtcblxuXHRwYXJzZVBhcmFtZXRlcnModXJsOiBzdHJpbmcpOiBSZXR1cm5UeXBlPFVSTFBhcnNpbmdbXCJwYXJzZVBhcmFtZXRlcnNcIl0+O1xuXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uO1xuXG5cdGdldEluZnJhbWVVcmwoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG5cdGdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyKGl0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+O1xuXG5cdGdldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YShpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxPYmplY3QgfCB1bmRlZmluZWQ+O1xuXG5cdHNldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YShpdGVtTmFtZTogc3RyaW5nLCBvYmplY3Q6IE9iamVjdCk6IFByb21pc2U8dm9pZD47XG59XG50eXBlIE5hdmlnYXRpb25FeHRlbnNpb24gPSBOYXZpZ2F0aW9uICYge1xuXHRnZXRTdGFydHVwQXBwU3RhdGUob0FwcENvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTxTdGFydHVwQXBwU3RhdGUgfCB1bmRlZmluZWQ+O1xuXHRnZXRBcHBTdGF0ZShvQXBwQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTxvYmplY3Q+O1xuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKFxuXHRcdG9BcHBDb21wb25lbnQ6IENvbXBvbmVudCxcblx0XHRiVHJhbnNpZW50RW5mb3JjZWQ/OiBib29sZWFuLFxuXHRcdHNQZXJzaXN0ZW5jeU1ldGhvZD86IHN0cmluZyxcblx0XHRvUGVyc2lzdGVuY3lTZXR0aW5ncz86IG9iamVjdFxuXHQpOiBQcm9taXNlPG9iamVjdD47XG59O1xuXG4vKipcbiAqIE1vY2sgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZSBmb3IgT3BlbkZFXG4gKlxuICovXG5jbGFzcyBTaGVsbFNlcnZpY2VNb2NrIGV4dGVuZHMgU2VydmljZTxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+IGltcGxlbWVudHMgSVNoZWxsU2VydmljZXMge1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblxuXHRzZW1hbnRpY09iamVjdHMhOiBzdHJpbmdbXTtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyBhcyBJU2hlbGxTZXJ2aWNlcyk7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcIm1vY2tcIjtcblx0fVxuXG5cdGFzeW5jIGdldExpbmtzKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgX19mZXRjaFNlbWFudGljT2JqZWN0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdGFzeW5jIGdldExpbmtzV2l0aENhY2hlKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0dG9FeHRlcm5hbCgvKm9OYXZBcmd1bWVudHNBcnI6IEFycmF5PG9iamVjdD4sIG9Db21wb25lbnQ6IG9iamVjdCovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0YXN5bmMgZ2V0U3RhcnR1cEFwcFN0YXRlKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxTdGFydHVwQXBwU3RhdGUgfCB1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRiYWNrVG9QcmV2aW91c0FwcCgpOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRhc3luYyBocmVmRm9yRXh0ZXJuYWwoLypvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbiovKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiXCIpO1xuXHR9XG5cblx0YXN5bmMgZ2V0SHJlZigvKm9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRnZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHR9XG5cblx0YXN5bmMgZ2V0QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QsIHNBcHBTdGF0ZUtleTogc3RyaW5nKi8pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGFzeW5jIGNyZWF0ZUVtcHR5QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZUFzeW5jKC8qb0NvbXBvbmVudDogb2JqZWN0Ki8pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGFzeW5jIG5hdmlnYXRlKC8qb1RhcmdldDogVGFyZ2V0LG9Db21wb25lbnQ/OiBDb21wb25lbnQqLyk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG5cblx0YXN5bmMgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKC8qb05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0Ki8pOiBQcm9taXNlPHsgc3VwcG9ydGVkOiBib29sZWFuIH1bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgaXNJbml0aWFsTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0fVxuXG5cdGFzeW5jIGV4cGFuZENvbXBhY3RIYXNoKC8qc0hhc2hGcmFnbWVudDogc3RyaW5nKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRwYXJzZVNoZWxsSGFzaCgvKnNIYXNoOiBzdHJpbmcqLyk6IFBhcnNlZEhhc2gge1xuXHRcdHJldHVybiB7fSBhcyB1bmtub3duIGFzIFBhcnNlZEhhc2g7XG5cdH1cblxuXHRzcGxpdEhhc2goc0hhc2g6IHN0cmluZyk6IFJldHVyblR5cGU8VVJMUGFyc2luZ1tcInNwbGl0SGFzaFwiXT4ge1xuXHRcdC8qKlxuXHRcdCAqIEZvciBhbiBBcHBsaWNhdGlvbiB3aXRob3V0IFNoZWxsLCB0aGUgaGFzaCBpcyBzaW1pbGFyIHRvIDogIy9TYWxlc09yZGVyTWFuYWdlKDExMTExMTExLWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcblx0XHQgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgOlxuXHRcdCAqIHtcblx0XHRcdHNoZWxsUGFydDogXCJcIixcblx0XHRcdGFwcFNwZWNpZmljUm91dGU6IFwiU2FsZXNPcmRlck1hbmFnZSgxMTExMTExMS1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmYpXCJcblx0XHR9XG5cdFx0ICovXG5cdFx0Y29uc3QgcmVnZXggPSAvI1teL10qXFwvKC4qKS8uZXhlYyhzSGFzaCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNoZWxsUGFydDogXCJcIixcblx0XHRcdGFwcFNwZWNpZmljUm91dGU6IHJlZ2V4Py5sZW5ndGggPT09IDIgPyByZWdleFsxXSA6IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0Y29uc3RydWN0U2hlbGxIYXNoKC8qb05ld1NoZWxsSGFzaDogb2JqZWN0Ki8pOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0c2V0RGlydHlGbGFnKC8qYkRpcnR5OiBib29sZWFuKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcigvKmZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcigvKmZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0Z2V0VXNlcigpOiBVc2VySW5mbyB7XG5cdFx0cmV0dXJuIHt9IGFzIFVzZXJJbmZvO1xuXHR9XG5cblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRoYXNVU2hlbGwoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKC8qZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcigvKmZuTmF2RmlsdGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0YXN5bmMgc2V0QmFja05hdmlnYXRpb24oLypmbkNhbGxCYWNrPzogRnVuY3Rpb24qLyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRhc3luYyBzZXRIaWVyYXJjaHkoLyphSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+Ki8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0YXN5bmMgc2V0VGl0bGUoLypzVGl0bGU6IHN0cmluZyovKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZyB7XG5cdFx0Ly8gaW4gY2FzZSB0aGVyZSBpcyBubyBzaGVsbCB3ZSBwcm9iYWJseSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNsYXNzZXMgYmVpbmcgZGVmaW5lZCBvbiB0aGUgYm9keVxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvenlcIikpIHtcblx0XHRcdHJldHVybiBcImNvenlcIjtcblx0XHR9IGVsc2UgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2FwVWlTaXplQ29tcGFjdFwiKSkge1xuXHRcdFx0cmV0dXJuIFwiY29tcGFjdFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBnZXRQcmltYXJ5SW50ZW50KC8qc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0Ki8pOiBQcm9taXNlPExpbms+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIExpbmspO1xuXHR9XG5cblx0YXN5bmMgd2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cblxuXHRhc3luYyBnZXRUaXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRhc3luYyBnZXRQZXJzb25hbGl6ZXIoX3BlcnNJZDogUGVyc0lkLCBfc2NvcGU6IFNjb3BlLCBfY29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHRnZXRQZXJzRGF0YTogYXN5bmMgKCkgPT5cblx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdFx0XHRoaXN0b3J5RW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0c3VnZ2VzdGlvbnNFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRhcHBzOiB7fVxuXHRcdFx0XHR9KSxcblx0XHRcdHNldFBlcnNEYXRhOiAoKSA9PiB7fVxuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6ZXIoX2l0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdGdldFBlcnNEYXRhOiBhc3luYyAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pLFxuXHRcdFx0c2V0UGVyc0RhdGE6ICgpID0+IHt9XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBnZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGEoX2l0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgc2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKF9pdGVtTmFtZTogc3RyaW5nLCBfb2JqZWN0OiBPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoX2tleTogc3RyaW5nLCBfc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRnZXRTaGVsbENvbmZpZygpOiBTaGVsbENvbmZpZ1R5cGUge1xuXHRcdHJldHVybiB7fSBhcyBTaGVsbENvbmZpZ1R5cGU7XG5cdH1cblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRBcHBXYXJtdXA6IHt9LFxuXHRcdFx0UmVuZGVyZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdFVzZXJEZWZhdWx0czoge30sXG5cdFx0XHRVc2VySW1hZ2U6IHt9XG5cdFx0fTtcblx0fVxuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHBhcnNlUGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4ge30gYXMgRXh0ZW5zaW9uO1xuXHR9XG5cblx0YXN5bmMgZ2V0SW5mcmFtZVVybCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBTaGVsbFNlcnZpY2VzU2V0dGluZ3NcbiAqL1xuZXhwb3J0IHR5cGUgU2hlbGxTZXJ2aWNlc1NldHRpbmdzID0ge1xuXHRzaGVsbENvbnRhaW5lcj86IENvbnRhaW5lcjtcbn07XG5cbnR5cGUgU2hlbGxQbHVnaW5NYW5hZ2VyID0ge1xuXHRnZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShjYXRlZ29yeTogc3RyaW5nKTogalF1ZXJ5LlByb21pc2U7XG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZTtcbn07XG5cbnR5cGUgUHJpdmF0ZVNoZWxsVXNlciA9IHtcblx0Z2V0SW5pdGlhbHMoKTogc3RyaW5nO1xuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZXNcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBTaGVsbFNlcnZpY2VzIGV4dGVuZHMgU2VydmljZTxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+PiBpbXBsZW1lbnRzIElTaGVsbFNlcnZpY2VzIHtcblx0cmVzb2x2ZUZuITogRnVuY3Rpb247XG5cblx0cmVqZWN0Rm4hOiAoKSA9PiB2b2lkO1xuXG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cblx0YXBwbGljYXRpb25OYXZpZ2F0aW9uITogTmF2aWdhdGlvbkV4dGVuc2lvbjtcblxuXHR1c2VySW5mb1NlcnZpY2UhOiBVc2VySW5mbztcblxuXHR1cmxQYXJzaW5nU2VydmljZSE6IFVSTFBhcnNpbmc7XG5cblx0c2hlbGxOYXZpZ2F0aW9uITogU2hlbGxOYXZpZ2F0aW9uO1xuXG5cdHNoZWxsUGx1Z2luTWFuYWdlciE6IFNoZWxsUGx1Z2luTWFuYWdlcjtcblxuXHRvU2hlbGxDb250YWluZXIhOiBDb250YWluZXIgJiB7IGdldFVzZXI6ICgpID0+IFByaXZhdGVTaGVsbFVzZXIgfTtcblxuXHRzaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UhOiBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzO1xuXG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblxuXHRsaW5rc0NhY2hlITogUmVjb3JkPHN0cmluZywgeyBsaW5rczogTGlua1tdIH0+O1xuXG5cdHNlbWFudGljT2JqZWN0cyE6IHN0cmluZ1tdO1xuXG5cdGZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUhOiBGdW5jdGlvbjtcblxuXHRleHRlbnNpb25TZXJ2aWNlITogRXh0ZW5zaW9uO1xuXG5cdGFwcENvbXBvbmVudCE6IENvbXBvbmVudDtcblxuXHRwcml2YXRlIGFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnM6IFJlY29yZDxzdHJpbmcsIFByb21pc2U8UGVyc29uYWxpemVyVHlwZT4+ID0ge307XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdHRoaXMuYXBwQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3QgYXMgQ29tcG9uZW50O1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyID0gb0NvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXI7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcInJlYWxcIjtcblx0XHR0aGlzLmxpbmtzQ2FjaGUgPSB7fTtcblx0XHR0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUgPSBmdW5jdGlvbiAob0FyZ3M6IExpbmtGaWx0ZXJbXSk6IG9iamVjdCB7XG5cdFx0XHRjb25zdCBhQ2FjaGVkU2VtYW50aWNPYmplY3RzOiBMaW5rW11bXSA9IFtdO1xuXHRcdFx0Y29uc3QgYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0czogTGlua0ZpbHRlcltdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtGaWx0ZXIgb2Ygb0FyZ3MpIHtcblx0XHRcdFx0aWYgKCEhbGlua0ZpbHRlciAmJiAhIWxpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdKSB7XG5cdFx0XHRcdFx0XHRhQ2FjaGVkU2VtYW50aWNPYmplY3RzLnB1c2godGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdLmxpbmtzKTtcblx0XHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsaW5rRmlsdGVyLCBcImxpbmtzXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHRoaXMubGlua3NDYWNoZVtsaW5rRmlsdGVyLnNlbWFudGljT2JqZWN0XS5saW5rc1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMucHVzaChsaW5rRmlsdGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB7IG9sZEFyZ3M6IG9BcmdzLCBuZXdBcmdzOiBhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzLCBjYWNoZWRMaW5rczogYUNhY2hlZFNlbWFudGljT2JqZWN0cyB9O1xuXHRcdH07XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucmVzb2x2ZUZuID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucmVqZWN0Rm4gPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblNlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiTmF2aWdhdGlvblwiKTtcblx0XHRjb25zdCB1c2VySW5mb1NlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiVXNlckluZm9cIik7XG5cdFx0Y29uc3Qgb1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlVSTFBhcnNpbmdcIik7XG5cdFx0Y29uc3Qgb1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiU2hlbGxOYXZpZ2F0aW9uSW50ZXJuYWxcIik7XG5cdFx0Y29uc3Qgb1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJQbHVnaW5NYW5hZ2VyXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiUGVyc29uYWxpemF0aW9uVjJcIik7XG5cdFx0Y29uc3Qgb1NoZWxsRXh0ZW5zaW9uU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJFeHRlbnNpb25cIik7XG5cblx0XHRQcm9taXNlLmFsbChbXG5cdFx0XHRuYXZpZ2F0aW9uU2VydmljZVAsXG5cdFx0XHR1c2VySW5mb1NlcnZpY2VQLFxuXHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlLFxuXHRcdFx0b1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UsXG5cdFx0XHRvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZVxuXHRcdF0pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0KFtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZSxcblx0XHRcdFx0XHR1c2VySW5mb1NlcnZpY2UsXG5cdFx0XHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0b1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSxcblx0XHRcdFx0XHRvU2hlbGxQbHVnaW5NYW5hZ2VyLFxuXHRcdFx0XHRcdG9TaGVsbEV4dGVuc2lvblNlcnZpY2Vcblx0XHRcdFx0XSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uID0gbmF2aWdhdGlvblNlcnZpY2UgYXMgTmF2aWdhdGlvbkV4dGVuc2lvbjtcblx0XHRcdFx0XHR0aGlzLnVzZXJJbmZvU2VydmljZSA9IHVzZXJJbmZvU2VydmljZSBhcyBVc2VySW5mbztcblx0XHRcdFx0XHR0aGlzLnVybFBhcnNpbmdTZXJ2aWNlID0gb1VybFBhcnNpbmdTZXJ2aWNlIGFzIFVSTFBhcnNpbmc7XG5cdFx0XHRcdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24gPSBvU2hlbGxOYXZpZ2F0aW9uIGFzIFNoZWxsTmF2aWdhdGlvbjtcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSA9IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UgYXMgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cztcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlciA9IG9TaGVsbFBsdWdpbk1hbmFnZXIgYXMgU2hlbGxQbHVnaW5NYW5hZ2VyO1xuXHRcdFx0XHRcdHRoaXMuZXh0ZW5zaW9uU2VydmljZSA9IG9TaGVsbEV4dGVuc2lvblNlcnZpY2UgYXMgRXh0ZW5zaW9uO1xuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZUZuKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHQpXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb25cblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3Mob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9BcmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbGlzdCBvZiBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZSB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLCBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgbWVzc2FnZVxuXHQgKi9cblx0YXN5bmMgX19mZXRjaFNlbWFudGljT2JqZWN0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0U2VtYW50aWNPYmplY3RzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb24gaW4gY2FjaGVcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0aWYgKChvQXJncyBhcyBPYmplY3RbXSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9DYWNoZVJlc3VsdHMgPSB0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUob0FyZ3MpO1xuXG5cdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5uZXdBcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gb0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFMaW5rcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9DYWNoZVJlc3VsdHMubmV3QXJncyk7XG5cdFx0XHRcdGlmIChhTGlua3MubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0c0xpbmtzOiBSZWNvcmQ8c3RyaW5nLCB7IGxpbmtzOiBMaW5rW10gfT4gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2ldLmxlbmd0aCA+IDAgJiYgb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2ldWzBdLmxpbmtzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0c0xpbmtzW29DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0bGlua3M6IGFMaW5rc1tpXVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR0aGlzLmxpbmtzQ2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMubGlua3NDYWNoZSwgb1NlbWFudGljT2JqZWN0c0xpbmtzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gYUxpbmtzO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGFNZXJnZWRMaW5rcyA9IFtdO1xuXHRcdFx0XHRcdGxldCBqID0gMDtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBvQ2FjaGVSZXN1bHRzLm9sZEFyZ3MpIHtcblx0XHRcdFx0XHRcdGlmIChqIDwgYUxpbmtzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2pdLmxlbmd0aCA+IDAgJiYgaXRlbVswXS5zZW1hbnRpY09iamVjdCA9PT0gb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2pdWzBdLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goYUxpbmtzW2pdKTtcblx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goaXRlbVswXS5saW5rcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFNZXJnZWRMaW5rcy5wdXNoKGl0ZW1bMF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gYU1lcmdlZExpbmtzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgZ2V0U2hlbGxVSVNlcnZpY2UoKTogUHJvbWlzZTxTaGVsbFVJU2VydmljZT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcENvbXBvbmVudC5nZXRTZXJ2aWNlKFwiU2hlbGxVSVNlcnZpY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgU2hlbGxDb250YWluZXIuXG5cdCAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHByZWRlZmluZWQgc2hlbGxDb250YWluZXIgbWV0aG9kc1xuXHQgKi9cblx0Z2V0U2hlbGxDb250YWluZXIoKTogQ29udGFpbmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXI7XG5cdH1cblxuXHRhc3luYyBnZXRJbmZyYW1lVXJsKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgdXNoZWxsQ29udGFpbmVyID0gdGhpcy5nZXRTaGVsbENvbnRhaW5lcigpO1xuXHRcdGxldCBhcHBVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRpZiAodXNoZWxsQ29udGFpbmVyPy5pbkFwcFJ1bnRpbWUoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXBwVXJsID0gYXdhaXQgdXNoZWxsQ29udGFpbmVyLmdldEZMUFVybEFzeW5jKHRydWUpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgRkxQIFVSTFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYXBwVXJsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCB0b0V4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqIEBwYXJhbSBvTmF2QXJndW1lbnRzQXJyIEFuZFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT50b0V4dGVybmFsIGFyZ3VtZW50c1xuXHQgKi9cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLm5hdmlnYXRlKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IHN0YXJ0dXBBcHBTdGF0ZVxuXHQgKiBXaWxsIGNoZWNrIHRoZSBleGlzdGFuY2Ugb2YgdGhlIFNoZWxsQ29udGFpbmVyIGFuZCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0U3RhcnR1cEFwcFN0YXRlIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0U3RhcnR1cEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gT2JqZWN0XG5cdCAqL1xuXHRhc3luYyBnZXRTdGFydHVwQXBwU3RhdGUob0FyZ3M6IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkIHwgU3RhcnR1cEFwcFN0YXRlPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFN0YXJ0dXBBcHBTdGF0ZShvQXJncyk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGJhY2tUb1ByZXZpb3VzQXBwIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBTb21ldGhpbmcgdGhhdCBpbmRpY2F0ZSB3ZSd2ZSBuYXZpZ2F0ZWRcblx0ICovXG5cdGFzeW5jIGJhY2tUb1ByZXZpb3VzQXBwKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5iYWNrVG9QcmV2aW91c0FwcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBocmVmRm9yRXh0ZXJuYWwgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmhyZWZGb3JFeHRlcm5hbCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHN0cmluZ1xuXHQgKi9cblx0YXN5bmMgaHJlZkZvckV4dGVybmFsKG9BcmdzOiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRIcmVmKG9BcmdzLCBvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gYSBVUkwgdGhhdCBsYXVuY2hlcyBhbiBhcHAgd2l0aCBjZXJ0YWluIHBhcmFtZXRlcnMuXG5cdCAqIFRoaXMgQVBJIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIGludGVybmFsIHNoZWxsIGhhc2ggZm9ybWF0IGludG8gdGhlIFVSTCBmb3JtYXQgZm9yIHVzZSBpbiBsaW5rIHRhZ3MuXG5cdCAqIFRoZSByZXN1bHRpbmcgaHJlZiBpcyBmdWxseSBlbmNvZGVkIGFuZCBjYW5ub3QgYmUgdXNlZCBpbiBvdGhlciBBUElzIHRoYXQgZXhwZWN0IHRoZSBpbnRlcm5hbCBkZWNvZGVkIGhhc2guXG5cdCAqIEBwYXJhbSBbb1RhcmdldF0gVGhlIG5hdmlnYXRpb24gdGFyZ2V0IHRvIHRyYW5zZm9ybS4gV2hlbiwgb21pdHRlZCB0aGUgY3VycmVudCBoYXNoIGlzIHVzZWQgYXMgdGhlIGJhc2lzIGZvciB0aGUgY2FsY3VsYXRpb24uXG5cdCAqIEBwYXJhbSBbb0NvbXBvbmVudF0gQSBVSTUgY29tcG9uZW50LCB1c2VkIHRvIGxvZ2ljYWxseSBhdHRhY2ggYW55IHJlbGF0ZWQgYXBwIHN0YXRlLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRoZSBlbmNvZGVkIGhyZWYuXG5cdCAqL1xuXHRhc3luYyBnZXRIcmVmKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldEhyZWYob1RhcmdldCwgb0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGdldEFwcFN0YXRlIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggb0NvbXBvbmVudCBhbmQgb0FwcFN0YXRlS2V5LlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudFxuXHQgKiBAcGFyYW0gc0FwcFN0YXRlS2V5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldEFwcFN0YXRlKG9Db21wb25lbnQsIHNBcHBTdGF0ZUtleSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNyZWF0ZUVtcHR5QXBwU3RhdGUgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBvQ29tcG9uZW50LlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5jcmVhdGVFbXB0eUFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5jcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBpc05hdmlnYXRpb25TdXBwb3J0ZWQgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBOYXZpZ2F0aW9uIEFyZ3VtZW50cyBhbmQgb0NvbXBvbmVudC5cblx0ICogQHBhcmFtIGFUYXJnZXRzXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmlzTmF2aWdhdGlvblN1cHBvcnRlZCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKGFUYXJnZXRzOiBUYXJnZXRbXSwgb0NvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKGFUYXJnZXRzLCBvQ29tcG9uZW50KSBhcyB1bmtub3duIGFzIFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpZWQgdGFyZ2V0IG91dHNpZGUgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGFwcGxpY2F0aW9uLlxuXHQgKiBAcGFyYW0gb1RhcmdldCBUaGUgbmF2aWdhdGlvbiB0YXJnZXQuXG5cdCAqIEBwYXJhbSBbb0NvbXBvbmVudF0gQSBVSTUgY29tcG9uZW50LCB1c2VkIHRvIGxvZ2ljYWxseSBhdHRhY2ggYW55IHJlbGF0ZWQgYXBwIHN0YXRlLlxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2aW5nIG9uY2UgdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZC4gVGhlIFByb21pc2UgbWlnaHQgbmV2ZXIgcmVqZWN0IG9yIHJlc29sdmVcblx0ICogICAgICAgICAgICAgICAgICAgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgbmF2aWdhdGlvbi5cblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0LCBvQ29tcG9uZW50KSkgYXMgdW5rbm93biBhcyBQcm9taXNlPHVuZGVmaW5lZD47XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGlzSW5pdGlhbE5hdmlnYXRpb25Bc3luYyBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIGJvb2xlYW5cblx0ICovXG5cdGFzeW5jIGlzSW5pdGlhbE5hdmlnYXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmlzSW5pdGlhbE5hdmlnYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZXhwYW5kQ29tcGFjdEhhc2ggbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBzSGFzaEZyYWdtZW50IEFuIChpbnRlcm5hbCBmb3JtYXQpIHNoZWxsIGhhc2hcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoZSBzdWNjZXNzIGhhbmRsZXIgb2YgdGhlIHJlc29sdmUgcHJvbWlzZSBnZXQgYW4gZXhwYW5kZWQgc2hlbGwgaGFzaCBhcyBmaXJzdCBhcmd1bWVudFxuXHQgKi9cblx0YXN5bmMgZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNIYXNoRnJhZ21lbnQpOyAvL3RoaXMubmF2VGFyZ2V0UmVzb2x1dGlvbi5leHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50KTtcblx0fVxuXG5cdGdldEhhc2goKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYCMke3RoaXMudXJsUGFyc2luZ1NlcnZpY2UuZ2V0U2hlbGxIYXNoKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgYWxsIHRoZSBwbHVnaW5zIHdoaWNoIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIFBsdWdpbk1hbmFnZXIsIHNvcnRlZCBieSBzdXBwb3J0ZWQgcGx1Z2luIGNhdGVnb3JpZXMuXG5cdCAqIEByZXR1cm5zIE1hcCBvZiByZWdpc3RlcmVkIHBsdWdpbnNcblx0ICovXG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxQbHVnaW5NYW5hZ2VyLmdldFJlZ2lzdGVyZWRQbHVnaW5zKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIHBsdWdpbiBzZXR1cCBpbiB0aGUgRkxQLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvcHRpbWlzdGljIGJhdGNoIHBsdWdpbiBpcyBzZXQgdXAgYW5kIGVuYWJsZWQuXG5cdCAqL1xuXHRpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zID0gdGhpcy5nZXRSZWdpc3RlcmVkUGx1Z2lucygpLlJlbmRlcmVyRXh0ZW5zaW9ucztcblx0XHRpZiAoXG5cdFx0XHRmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zPy5oYXNPd25Qcm9wZXJ0eShcIk1BTkFHRV9GRV9DQUNIRVNcIikgJiZcblx0XHRcdCEhKGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnMgYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgb2JqZWN0Pj4pLk1BTkFHRV9GRV9DQUNIRVMuZW5hYmxlZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHBhcnNlU2hlbGxIYXNoIG1ldGhvZCBvZiBVUkxQYXJzaW5nIHNlcnZpY2Ugd2l0aCBnaXZlbiBzSGFzaC5cblx0ICogQHBhcmFtIHNIYXNoIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuVVJMUGFyc2luZz0+cGFyc2VTaGVsbEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJzZWQgdXJsXG5cdCAqL1xuXHRwYXJzZVNoZWxsSGFzaChzSGFzaDogc3RyaW5nKTogUGFyc2VkSGFzaCB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UucGFyc2VTaGVsbEhhc2goc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzcGxpdEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKiBAcGFyYW0gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5zcGxpdEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogeyBzaGVsbFBhcnQ/OiBzdHJpbmc7IGFwcFNwZWNpZmljUm91dGU/OiBzdHJpbmcgfSB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2Uuc3BsaXRIYXNoKHNIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY29uc3RydWN0U2hlbGxIYXNoIG1ldGhvZCBvZiBVUkxQYXJzaW5nIHNlcnZpY2Ugd2l0aCBnaXZlbiBzSGFzaC5cblx0ICogQHBhcmFtIG9OZXdTaGVsbEhhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5jb25zdHJ1Y3RTaGVsbEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFNoZWxsIEhhc2ggc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaDogb2JqZWN0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5jb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldERpcnR5RmxhZyBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZS5cblx0ICogQHBhcmFtIGJEaXJ0eSBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5zZXREaXJ0eUZsYWcgYXJndW1lbnRzXG5cdCAqL1xuXHRzZXREaXJ0eUZsYWcoYkRpcnR5OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIuc2V0RGlydHlGbGFnKGJEaXJ0eSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlIHByb3ZpZGVyIGNhbGxiYWNrIG1ldGhvZC5cblx0ICogQHBhcmFtIGZuRGlydHlTdGF0ZVByb3ZpZGVyIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIGFyZ3VtZW50c1xuXHQgKi9cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6ICgpID0+IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKiBAcGFyYW0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBhcmd1bWVudHNcblx0ICovXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6ICgpID0+IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5kZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0VXNlciBtZXRob2Qgb2YgdXNoZWxsIGNvbnRhaW5lci5cblx0ICogQHJldHVybnMgUmV0dXJucyBVc2VyIG9iamVjdFxuXHQgKi9cblx0Z2V0VXNlcigpOiBVc2VySW5mbyB7XG5cdFx0cmV0dXJuIHRoaXMudXNlckluZm9TZXJ2aWNlO1xuXHR9XG5cblx0aXNKYW1BY3RpdmUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFVzZXIoKS5pc0phbUFjdGl2ZSgpO1xuXHR9XG5cblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFVzZXIoKS5nZXRJbml0aWFscygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2hlY2sgaWYgdXNoZWxsIGNvbnRhaW5lciBpcyBhdmFpbGFibGUgb3Igbm90LlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWVcblx0ICovXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIG1ldGhvZCBvZiBzaGVsbE5hdmlnYXRpb24uXG5cdCAqIEBwYXJhbSBmbk5hdkZpbHRlciBUaGUgZmlsdGVyIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyXG5cdCAqL1xuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24ucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgdW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICogQHBhcmFtIGZuTmF2RmlsdGVyIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gdW5yZWdpc3RlclxuXHQgKi9cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24udW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRCYWNrTmF2aWdhdGlvbiBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgYmFjayBidXR0b24gaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICogQHBhcmFtIGZuQ2FsbEJhY2sgQSBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgaW4gdGhlIFVJLlxuXHQgKi9cblx0YXN5bmMgc2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjazogRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQoYXdhaXQgdGhpcy5nZXRTaGVsbFVJU2VydmljZSgpKS5zZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0SGllcmFyY2h5IG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBnaXZlbiBoaWVyYXJjaHkgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICogQHBhcmFtIFthSGllcmFyY2h5TGV2ZWxzXSBBbiBhcnJheSByZXByZXNlbnRpbmcgaGllcmFyY2hpZXMgb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgYXBwLlxuXHQgKi9cblx0YXN5bmMgc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHM6IG9iamVjdFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0KGF3YWl0IHRoaXMuZ2V0U2hlbGxVSVNlcnZpY2UoKSkuc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICogQHBhcmFtIFtzVGl0bGVdIFRoZSBuZXcgdGl0bGUuIFRoZSBkZWZhdWx0IHRpdGxlIGlzIHNldCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBnaXZlbi5cblx0ICovXG5cdGFzeW5jIHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0KGF3YWl0IHRoaXMuZ2V0U2hlbGxVSVNlcnZpY2UoKSkuc2V0VGl0bGUoc1RpdGxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0VGl0bGUgbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGdpdmVuIHRpdGxlIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBvZiB0aGUgYXBwbGljYXRpb24uXG5cdCAqL1xuXHRhc3luYyBnZXRUaXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiAoYXdhaXQgdGhpcy5nZXRTaGVsbFVJU2VydmljZSgpKS5nZXRUaXRsZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudGx5IGRlZmluZWQgY29udGVudCBkZW5zaXR5LlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGVudCBkZW5zaXR5IHZhbHVlXG5cdCAqL1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRVc2VyKCkuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QsIHRoaXMgbWV0aG9kIGNvbnNpZGVycyBhbGwgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbWFudGljIG9iamVjdCBhbmRcblx0ICogcmV0dXJucyB0aGUgb25lIHRhZ2dlZCBhcyBhIFwicHJpbWFyeUFjdGlvblwiLiBJZiBubyBpbmJvdW5kIHRhZ2dlZCBhcyBcInByaW1hcnlBY3Rpb25cIiBleGlzdHMsIHRoZW4gaXQgcmV0dXJuc1xuXHQgKiB0aGUgaW50ZW50IG9mIHRoZSBmaXJzdCBpbmJvdW5kIChhZnRlciBzb3J0aW5nIGhhcyBiZWVuIGFwcGxpZWQpIG1hdGNoaW5nIHRoZSBhY3Rpb24gXCJkaXNwbGF5RmFjdFNoZWV0XCIuXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNPYmplY3QgU2VtYW50aWMgb2JqZWN0LlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgU2VlICNDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiNnZXRMaW5rcyBmb3IgZGVzY3JpcHRpb24uXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnRlbnQgaWYgaXQgZXhpc3RzLlxuXHQgKi9cblx0YXN5bmMgZ2V0UHJpbWFyeUludGVudChzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgbVBhcmFtZXRlcnM/OiBMaW5rRmlsdGVyKTogUHJvbWlzZTxMaW5rPiB7XG5cdFx0Y29uc3QgcHJpbWFyeUludGVudCA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0LCBtUGFyYW1ldGVycyk7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkocHJpbWFyeUludGVudCkpIHtcblx0XHRcdHJldHVybiBwcmltYXJ5SW50ZW50WzBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcHJpbWFyeUludGVudDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBmb3IgdGhlIHJlbmRlciBleHRlbnNpb25zIHBsdWdpbiB0byBiZSBsb2FkZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgd2UgYXJlIGFibGUgdG8gd2FpdCBmb3IgaXQsIG90aGVyd2lzZSB3ZSBjb3VsZG4ndCBhbmQgY2Fubm90IHJlbHkgb24gaXQuXG5cdCAqL1xuXHRhc3luYyB3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMuc2hlbGxQbHVnaW5NYW5hZ2VyPy5nZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZSkge1xuXHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlclxuXHRcdFx0XHRcdC5nZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShcIlJlbmRlcmVyRXh0ZW5zaW9uc1wiKVxuXHRcdFx0XHRcdC5mYWlsKChvRXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihvRXJyb3IgYXMgc3RyaW5nLCBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNoZWxsU2VydmljZXNGYWN0b3J5LndhaXRGb3JQbHVnaW5zTG9hZFwiKTtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwZXJzb25hbGl6ZXIgZnJvbSB0aGUgc2hlbGwgc2VydmljZS5cblx0ICogV2Ugc2V0IHNvbWUgZGVmYXVsdHMgZm9yIHRoZSBzY29wZSBvYmplY3QuXG5cdCAqIEBwYXJhbSBwZXJzSWQgUGVyc29uYWxpemF0aW9uIG9iamVjdFxuXHQgKiBAcGFyYW0gc2NvcGUgU2NvcGUgb2JqZWN0XG5cdCAqIEBwYXJhbSBjb21wb25lbnRcblx0ICogQHJldHVybnMgUGVyc29uYWxpemVyIG9iamVjdCB3aGljaCBoYW5kbGVzIHBlcnNvbmFsaXphdGlvblxuXHQgKi9cblx0YXN5bmMgZ2V0UGVyc29uYWxpemVyKHBlcnNJZDogUGVyc0lkLCBzY29wZTogU2NvcGUsIGNvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8UGVyc29uYWxpemVyVHlwZT4ge1xuXHRcdHNjb3BlID0ge1xuXHRcdFx0Ly8gbWVyZ2Ugc29tZSBkZWZhdWx0c1xuXHRcdFx0a2V5Q2F0ZWdvcnk6IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmNvbnN0YW50cy5rZXlDYXRlZ29yeS5GSVhFRF9LRVksXG5cdFx0XHR3cml0ZUZyZXF1ZW5jeTogdGhpcy5zaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UuY29uc3RhbnRzLndyaXRlRnJlcXVlbmN5LkxPVyxcblx0XHRcdGNsaWVudFN0b3JhZ2VBbGxvd2VkOiBmYWxzZSxcblx0XHRcdHZhbGlkaXR5OiBJbmZpbml0eSxcblx0XHRcdC4uLnNjb3BlXG5cdFx0fTtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmdldFBlcnNvbmFsaXplcihwZXJzSWQsIHNjb3BlLCBjb21wb25lbnQpKSBhcyBQZXJzb25hbGl6ZXJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgYSBjb250YWluZXIgaWRlbnRpZmllZCBieSBzQ29udGFpbmVyS2V5LlxuXHQgKiBAcGFyYW0ga2V5IENvbnRhaW5lciBrZXlcblx0ICogQHBhcmFtIHNjb3BlIFNjb3BlIG9iamVjdFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gdGhlIGNvbnRhaW5lciBpcyBkZWxldGVkXG5cdCAqL1xuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoa2V5OiBzdHJpbmcsIHNjb3BlPzogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmRlbGV0ZUNvbnRhaW5lcihrZXksIHNjb3BlIGFzIHVua25vd24gYXMgb2JqZWN0KSBhcyBQcm9taXNlPHZvaWQ+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBwZXJzb25hbGl6ZXIgdG8gYWNjZXNzIHRoZSBBcHBsaWNhdGlvbiBkYXRhIHN0b3JlZCBpbiB0aGUgc2hlbGwgUGVyc29uYWxpemF0aW9uLlxuXHQgKiBAcGFyYW0gaXRlbU5hbWUgVGhlIG5hbWUgb2YgdGhlIGl0ZW0gZm9yIHdoaWNoIHRoZSBwZXJzb25hbGl6ZXIgaXMgY3JlYXRlZC5cblx0ICogQHJldHVybnMgQSBwZXJzb25hbGl6ZXJcblx0ICovXG5cdHB1YmxpYyBhc3luYyBnZXRBcHBsaWNhdGlvblBlcnNvbmFsaXplcihpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPiB7XG5cdFx0aWYgKCF0aGlzLmFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnNbaXRlbU5hbWVdKSB7XG5cdFx0XHR0aGlzLmFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnNbaXRlbU5hbWVdID0gdGhpcy5nZXRQZXJzb25hbGl6ZXIoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb250YWluZXI6IGBBcHBsaWNhdGlvbiMkeyh0aGlzLmFwcENvbXBvbmVudCBhcyBBcHBDb21wb25lbnQpLmdldE1hbmlmZXN0KClbXCJzYXAuYXBwXCJdLmlkfWAsXG5cdFx0XHRcdFx0aXRlbTogaXRlbU5hbWVcblx0XHRcdFx0fSxcblx0XHRcdFx0e30sXG5cdFx0XHRcdHRoaXMuYXBwQ29tcG9uZW50XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvblBlcnNvbm5hbGl6ZXJzW2l0ZW1OYW1lXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGRhdGEgZnJvbSB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBpdGVtTmFtZVxuXHQgKiBAcmV0dXJucyBEYXRhXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKGl0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiAoYXdhaXQgKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6ZXIoaXRlbU5hbWUpKT8uZ2V0UGVyc0RhdGEoKSkgYXMgb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHN0b3JlcyBhbiBvYmplY3QgaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcGFyYW0gaXRlbU5hbWVcblx0ICogQHBhcmFtIGRhdGFcblx0ICogQHJldHVybnMgQSBwcm9taXNlXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgc2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKGl0ZW1OYW1lOiBzdHJpbmcsIGRhdGE6IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyKGl0ZW1OYW1lKSkuc2V0UGVyc0RhdGEoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzaGVsbCBjb25maWcgZnJvbSB0aGUgd2luZG93cyBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFNoZWxsIGNvbmZpZyBvYmplY3Rcblx0ICovXG5cdGdldFNoZWxsQ29uZmlnKCk6IFNoZWxsQ29uZmlnVHlwZSB7XG5cdFx0cmV0dXJuICh3aW5kb3cgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+KVtcInNhcC11c2hlbGwtY29uZmlnXCJdIGFzIFNoZWxsQ29uZmlnVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBwYXJhbWV0ZXJzIGZyb20gYSBVUkkgcXVlcnkgc3RyaW5nIChzdGFydGluZyB3aXRoID8pIGludG8gYSBwYXJhbWV0ZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gdXJsIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIFBhcmFtZXRlciBzdHJpbmdcblx0ICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5nIHN0cmluZyBhcnJheXNcblx0ICovXG5cdHBhcnNlUGFyYW1ldGVycyh1cmw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UucGFyc2VQYXJhbWV0ZXJzKHVybCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzaGVsbCBleHRlbnNpb24gc2VydmljZS5cblx0ICogQHJldHVybnMgU2hlbGwgZXh0ZW5zaW9uIHNlcnZpY2Vcblx0ICovXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25TZXJ2aWNlO1xuXHR9XG59XG5cbi8qKlxuICogU2VydmljZSBGYWN0b3J5IGZvciB0aGUgU2hlbGxTZXJ2aWNlc1xuICpcbiAqL1xuY2xhc3MgU2hlbGxTZXJ2aWNlc0ZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+IHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgZWl0aGVyIGEgc3RhbmRhcmQgb3IgYSBtb2NrIFNoZWxsIHNlcnZpY2UgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuXHQgKiBAcGFyYW0gc2VydmljZUNvbnRleHQgVGhlIHNoZWxsc2VydmljZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYSBzaGVsbCBzZXJ2aWNlIGltcGxlbWVudGF0aW9uXG5cdCAqIEBzZWUgU2VydmljZUZhY3RvcnkjY3JlYXRlSW5zdGFuY2Vcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKHNlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+KTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz4ge1xuXHRcdHNlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyID0gc2FwLnVpLnJlcXVpcmUoXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiKTtcblx0XHRjb25zdCBzaGVsbFNlcnZpY2UgPSBzZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lclxuXHRcdFx0PyBuZXcgU2hlbGxTZXJ2aWNlcyhzZXJ2aWNlQ29udGV4dCBhcyBTZXJ2aWNlQ29udGV4dDxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+Pilcblx0XHRcdDogbmV3IFNoZWxsU2VydmljZU1vY2soc2VydmljZUNvbnRleHQpO1xuXHRcdGF3YWl0IHNoZWxsU2VydmljZS5pbml0UHJvbWlzZTtcblx0XHQvLyBFbnJpY2ggdGhlIGFwcENvbXBvbmVudCB3aXRoIHRoaXMgbWV0aG9kXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gc2VydmljZUNvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0YXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMgPSAoKTogSVNoZWxsU2VydmljZXMgPT4gc2hlbGxTZXJ2aWNlO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoaW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0bGV0IHNlbWFudGljT2JqZWN0czogc3RyaW5nW10gPSBbXTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0cyA9IGF3YWl0IHNoZWxsU2VydmljZS5fX2ZldGNoU2VtYW50aWNPYmplY3QoKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNhbGxpbmcgZ2V0U2VtYW50aWNPYmplY3RzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHQoaW50ZXJuYWxNb2RlbCBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL3NlbWFudGljT2JqZWN0c1wiLCBzZW1hbnRpY09iamVjdHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2hlbGxTZXJ2aWNlO1xu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M0QsYUFBQTtFQUFBLEVBdm1CaUNELE9BQU87RUEwbUIxQztBQUNBO0FBQ0E7QUFDQTtFQUhBVSxRQUFBLENBQUFULGFBQUEsR0FBQUEsYUFBQTtFQUFBLElBSU00SCxvQkFBb0IsMEJBQUFDLGVBQUE7SUFBQSxTQUFBRCxxQkFBQTtNQUFBLE9BQUFDLGVBQUEsQ0FBQW5OLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0lBQUFDLGNBQUEsQ0FBQWdOLG9CQUFBLEVBQUFDLGVBQUE7SUFBQSxJQUFBQyxPQUFBLEdBQUFGLG9CQUFBLENBQUE5TSxTQUFBO0lBQ3pCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUxDZ04sT0FBQSxDQU1NQyxjQUFjLEdBQXBCLGVBQU1BLGNBQWNBLENBQUNDLGNBQXFELEVBQTJCO01BQ3BHQSxjQUFjLENBQUNoSCxRQUFRLENBQUNDLGNBQWMsR0FBR2dILEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7TUFDL0UsTUFBTUMsWUFBWSxHQUFHSixjQUFjLENBQUNoSCxRQUFRLENBQUNDLGNBQWMsR0FDeEQsSUFBSWpCLGFBQWEsQ0FBQ2dJLGNBQWlFLENBQUMsR0FDcEYsSUFBSXhOLGdCQUFnQixDQUFDd04sY0FBYyxDQUFDO01BQ3ZDLE1BQU1JLFlBQVksQ0FBQ3BOLFdBQVc7TUFDOUI7TUFDQSxNQUFNNkYsWUFBWSxHQUFHbUgsY0FBYyxDQUFDbEgsV0FBVztNQUMvQ0QsWUFBWSxDQUFDd0gsZ0JBQWdCLEdBQUcsTUFBc0JELFlBQVk7TUFDbEUsTUFBTUUsYUFBYSxHQUFHekgsWUFBWSxDQUFDMEgsUUFBUSxDQUFDLFVBQVUsQ0FBQztNQUN2RCxJQUFJRCxhQUFhLEVBQUU7UUFDbEIsSUFBSUUsZUFBeUIsR0FBRyxFQUFFO1FBQ2xDLElBQUk7VUFDSEEsZUFBZSxHQUFHLE1BQU1KLFlBQVksQ0FBQy9NLHFCQUFxQixDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLE9BQU93SixLQUFjLEVBQUU7VUFDeEJDLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLHdDQUF3QyxFQUFFQSxLQUFlLENBQUM7UUFDckUsQ0FBQyxTQUFTO1VBQ1J5RCxhQUFhLENBQWVHLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRUQsZUFBZSxDQUFDO1FBQzlFO01BQ0Q7TUFDQSxPQUFPSixZQUFZO0lBQ3BCLENBQUM7SUFBQSxPQUFBUixvQkFBQTtFQUFBLEVBNUJpQ2MsY0FBYztFQUFBLE9BK0JsQ2Qsb0JBQW9CO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|