@sapui5/sap.fe.core 1.134.0 → 1.136.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 +6 -62
- package/src/sap/fe/core/ActionRuntime.ts +14 -65
- package/src/sap/fe/core/AppComponent.js +10 -2
- package/src/sap/fe/core/AppComponent.ts +6 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -7
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/BaseController.js +1 -1
- package/src/sap/fe/core/CommonUtils.js +8 -4
- package/src/sap/fe/core/CommonUtils.ts +19 -4
- package/src/sap/fe/core/ExtensionAPI.js +7 -5
- package/src/sap/fe/core/ExtensionAPI.ts +5 -3
- package/src/sap/fe/core/IRowBindingInterface.js +1 -1
- package/src/sap/fe/core/InsightsFormattersExtension.js +1 -1
- package/src/sap/fe/core/PageController.js +36 -6
- package/src/sap/fe/core/PageController.ts +30 -0
- package/src/sap/fe/core/ResourceModel.js +1 -1
- package/src/sap/fe/core/ReuseComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/UIProvider.js +2 -2
- package/src/sap/fe/core/UIProvider.ts +3 -32
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +34 -16
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +39 -18
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +7 -7
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +9 -9
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -3
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +15 -15
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +19 -19
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -93
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +89 -108
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -1
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +355 -0
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +387 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +36 -11
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +36 -10
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +36 -6
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +5 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Paginator.js +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +1 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -9
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js +13 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -6
- package/src/sap/fe/core/controllerextensions/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +14 -11
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +20 -14
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +4 -12
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +12 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +111 -89
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +140 -105
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +137 -79
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +133 -120
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +26 -17
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +32 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +103 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +144 -53
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +29 -11
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +39 -15
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +24 -22
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +28 -26
- package/src/sap/fe/core/controllerextensions/editFlow/operations/actionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -572
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +25 -873
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +98 -56
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -80
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -3
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -4
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +1 -1
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +1 -1
- package/src/sap/fe/core/controls/Any.js +1 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/ComponentLoader.js +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/DataWatcher.js +4 -3
- package/src/sap/fe/core/controls/DataWatcher.tsx +4 -1
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +10 -4
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +13 -2
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +1 -1
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +42 -20
- package/src/sap/fe/core/converters/ManifestWrapper.js +8 -2
- package/src/sap/fe/core/converters/ManifestWrapper.ts +8 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +2 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +55 -6
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +45 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +60 -9
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.js +21 -5
- package/src/sap/fe/core/converters/controls/Common/Form.ts +25 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -1686
- package/src/sap/fe/core/converters/controls/Common/Table.ts +254 -2513
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +1701 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +2377 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +64 -15
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +76 -14
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -36
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +8 -46
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +10 -5
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +11 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +7 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +30 -8
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +5 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +184 -0
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +240 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
- package/src/sap/fe/core/designtime/messagebundle.properties +11 -0
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +27 -12
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -11
- package/src/sap/fe/core/fpm/Component.js +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +25 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +4 -3
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +6 -12
- package/src/sap/fe/core/helpers/DeleteHelper.ts +4 -9
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +9 -3
- package/src/sap/fe/core/helpers/FPMHelper.ts +13 -1
- package/src/sap/fe/core/helpers/HTTP503Handler.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
- package/src/sap/fe/core/helpers/MetaPath.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +15 -5
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +39 -40
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/WebSocket.js +11 -2
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +16 -4
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +1 -0
- package/src/sap/fe/core/manifestMerger/AddNewPage.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +25 -4
- package/src/sap/fe/core/messagebundle_bg.properties +25 -4
- package/src/sap/fe/core/messagebundle_ca.properties +24 -3
- package/src/sap/fe/core/messagebundle_cnr.properties +25 -4
- package/src/sap/fe/core/messagebundle_cs.properties +23 -2
- package/src/sap/fe/core/messagebundle_cy.properties +24 -3
- package/src/sap/fe/core/messagebundle_da.properties +25 -4
- package/src/sap/fe/core/messagebundle_de.properties +28 -7
- package/src/sap/fe/core/messagebundle_el.properties +23 -2
- package/src/sap/fe/core/messagebundle_en.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -5
- package/src/sap/fe/core/messagebundle_es.properties +23 -2
- package/src/sap/fe/core/messagebundle_es_MX.properties +23 -2
- package/src/sap/fe/core/messagebundle_et.properties +23 -2
- package/src/sap/fe/core/messagebundle_fi.properties +23 -2
- package/src/sap/fe/core/messagebundle_fr.properties +26 -5
- package/src/sap/fe/core/messagebundle_fr_CA.properties +23 -2
- package/src/sap/fe/core/messagebundle_hi.properties +24 -3
- package/src/sap/fe/core/messagebundle_hr.properties +27 -6
- package/src/sap/fe/core/messagebundle_hu.properties +23 -2
- package/src/sap/fe/core/messagebundle_id.properties +23 -2
- package/src/sap/fe/core/messagebundle_it.properties +25 -4
- package/src/sap/fe/core/messagebundle_iw.properties +24 -3
- package/src/sap/fe/core/messagebundle_ja.properties +24 -3
- package/src/sap/fe/core/messagebundle_kk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ko.properties +25 -4
- package/src/sap/fe/core/messagebundle_lt.properties +23 -2
- package/src/sap/fe/core/messagebundle_lv.properties +25 -4
- package/src/sap/fe/core/messagebundle_mk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ms.properties +24 -3
- package/src/sap/fe/core/messagebundle_nl.properties +23 -2
- package/src/sap/fe/core/messagebundle_no.properties +23 -2
- package/src/sap/fe/core/messagebundle_pl.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt_PT.properties +24 -3
- package/src/sap/fe/core/messagebundle_ro.properties +25 -4
- package/src/sap/fe/core/messagebundle_ru.properties +24 -3
- package/src/sap/fe/core/messagebundle_sh.properties +25 -4
- package/src/sap/fe/core/messagebundle_sk.properties +24 -3
- package/src/sap/fe/core/messagebundle_sl.properties +28 -7
- package/src/sap/fe/core/messagebundle_sr.properties +25 -4
- package/src/sap/fe/core/messagebundle_sv.properties +23 -2
- package/src/sap/fe/core/messagebundle_th.properties +25 -4
- package/src/sap/fe/core/messagebundle_tr.properties +23 -2
- package/src/sap/fe/core/messagebundle_uk.properties +25 -4
- package/src/sap/fe/core/messagebundle_vi.properties +25 -4
- package/src/sap/fe/core/messagebundle_zh_CN.properties +26 -5
- package/src/sap/fe/core/messagebundle_zh_TW.properties +24 -3
- package/src/sap/fe/core/rootView/Fcl.controller.js +11 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +16 -7
- package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -3
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +87 -35
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +113 -57
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +29 -13
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +8 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/InlineEditServiceFactory.js +11 -5
- package/src/sap/fe/core/services/InlineEditServiceFactory.ts +9 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +14 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +11 -5
- package/src/sap/fe/core/services/ShellServicesFactory.js +5 -4
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +28 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +199 -59
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +8 -10
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +11 -10
- package/src/sap/fe/core/templating/UIFormatters.js +5 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +3 -0
- package/src/sap/fe/core/type/Date.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +1 -1
- package/src/sap/fe/core/type/InputMask.js +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +0 -288
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.tsx +0 -208
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +0 -404
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +0 -502
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.js +0 -100
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.ts +0 -134
- package/src/sap/fe/core/operationsHelper.js +0 -192
- package/src/sap/fe/core/operationsHelper.ts +0 -277
|
@@ -156,7 +156,7 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
156
156
|
enabled = false;
|
|
157
157
|
|
|
158
158
|
routingHints?: Record<string, { parentOf: string[] }>;
|
|
159
|
-
|
|
159
|
+
|
|
160
160
|
bindingCleanupPromises: Promise<void>[] = [];
|
|
161
161
|
|
|
162
162
|
init(): void {
|
|
@@ -758,7 +758,8 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
758
758
|
target: {
|
|
759
759
|
semanticObject: parsedUrl.semanticObject,
|
|
760
760
|
action: parsedUrl.action
|
|
761
|
-
}
|
|
761
|
+
},
|
|
762
|
+
params: parsedUrl.params
|
|
762
763
|
});
|
|
763
764
|
const applicationUrlBasedOnIframe = await shellServiceHelper.getInframeUrl();
|
|
764
765
|
let url, targetUrl: string;
|
|
@@ -873,13 +874,18 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
873
874
|
}
|
|
874
875
|
}
|
|
875
876
|
|
|
876
|
-
|
|
877
|
+
/**
|
|
878
|
+
* Returns the path used to navigate back from a specified path.
|
|
879
|
+
* @param sPath
|
|
880
|
+
* @returns The path
|
|
881
|
+
*/
|
|
882
|
+
getPathToNavigateBack(sPath: string): string {
|
|
877
883
|
const regex = new RegExp("/[^/]*$");
|
|
878
884
|
sPath = sPath.replace(regex, "");
|
|
879
885
|
if (this.oRouter.match(sPath) || sPath === "") {
|
|
880
886
|
return sPath;
|
|
881
887
|
} else {
|
|
882
|
-
return this.
|
|
888
|
+
return this.getPathToNavigateBack(sPath);
|
|
883
889
|
}
|
|
884
890
|
}
|
|
885
891
|
|
|
@@ -923,7 +929,7 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
923
929
|
|
|
924
930
|
if (parameters.updateFCLLevel === -1) {
|
|
925
931
|
// When navigating back from a context, we need to remove the last component of the path
|
|
926
|
-
sPath = this.
|
|
932
|
+
sPath = this.getPathToNavigateBack(sPath);
|
|
927
933
|
|
|
928
934
|
// Check if we're navigating back to a semantic path that was previously resolved
|
|
929
935
|
if (this.oLastSemanticMapping?.technicalPath === sPath) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory"], function (Log, Service, ServiceFactory) {
|
|
6
6
|
"use strict";
|
|
@@ -646,9 +646,10 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
646
646
|
* Will call setTitle method of ShellUIService
|
|
647
647
|
* that displays the given title in the shell header.
|
|
648
648
|
* @param [sTitle] The new title. The default title is set if this argument is not given.
|
|
649
|
+
* @param [additionalInformation] An object of additional information to be displayed in the browser window title.
|
|
649
650
|
*/;
|
|
650
|
-
_proto2.setTitle = async function setTitle(sTitle) {
|
|
651
|
-
(await this.getShellUIService()).setTitle(sTitle);
|
|
651
|
+
_proto2.setTitle = async function setTitle(sTitle, additionalInformation) {
|
|
652
|
+
(await this.getShellUIService()).setTitle(sTitle, additionalInformation);
|
|
652
653
|
}
|
|
653
654
|
|
|
654
655
|
/**
|
|
@@ -835,4 +836,4 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
835
836
|
}(ServiceFactory);
|
|
836
837
|
return ShellServicesFactory;
|
|
837
838
|
}, false);
|
|
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=
|
|
839
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaGVsbFNlcnZpY2VNb2NrIiwiX1NlcnZpY2UiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnN0YW5jZVR5cGUiLCJnZXRMaW5rcyIsIl9fZmV0Y2hTZW1hbnRpY09iamVjdCIsImdldExpbmtzV2l0aENhY2hlIiwidG9FeHRlcm5hbCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImlzSmFtQWN0aXZlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJnZXRIcmVmIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYyIsIm5hdmlnYXRlIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwiaXNJbml0aWFsTmF2aWdhdGlvbiIsImV4cGFuZENvbXBhY3RIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJzcGxpdEhhc2giLCJzSGFzaCIsInJlZ2V4IiwiZXhlYyIsInNoZWxsUGFydCIsImFwcFNwZWNpZmljUm91dGUiLCJsZW5ndGgiLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJzZXREaXJ0eUZsYWciLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJnZXRVc2VyIiwiZ2V0VXNlckluaXRpYWxzIiwiaGFzVVNoZWxsIiwicmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwidW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInNldEhpZXJhcmNoeSIsInNldFRpdGxlIiwiZ2V0Q29udGVudERlbnNpdHkiLCJkb2N1bWVudCIsImJvZHkiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImdldFByaW1hcnlJbnRlbnQiLCJ3YWl0Rm9yUGx1Z2luc0xvYWQiLCJnZXRUaXRsZSIsImdldFBlcnNvbmFsaXplciIsIl9wZXJzSWQiLCJfc2NvcGUiLCJfY29tcG9uZW50IiwiZ2V0UGVyc0RhdGEiLCJoaXN0b3J5RW5hYmxlZCIsInN1Z2dlc3Rpb25zRW5hYmxlZCIsImFwcHMiLCJzZXRQZXJzRGF0YSIsImdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyIiwiX2l0ZW1OYW1lIiwiZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhIiwic2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhIiwiX29iamVjdCIsImRlbGV0ZVBlcnNvbmFsaXphdGlvbkNvbnRhaW5lciIsIl9rZXkiLCJnZXRTaGVsbENvbmZpZyIsImdldFJlZ2lzdGVyZWRQbHVnaW5zIiwiQXBwV2FybXVwIiwiUmVuZGVyZXJFeHRlbnNpb25zIiwiVXNlckRlZmF1bHRzIiwiVXNlckltYWdlIiwiaXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQiLCJwYXJzZVBhcmFtZXRlcnMiLCJnZXRFeHRlbnNpb25TZXJ2aWNlIiwiZ2V0SW5mcmFtZVVybCIsIlNlcnZpY2UiLCJTaGVsbFNlcnZpY2VzIiwiX1NlcnZpY2UyIiwiX3RoaXMiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleTIiLCJjYWxsIiwiYXBwbGljYXRpb25QZXJzb25uYWxpemVycyIsIl9leHBvcnRzIiwiX3Byb3RvMiIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsImFwcENvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib1NoZWxsQ29udGFpbmVyIiwic2V0dGluZ3MiLCJzaGVsbENvbnRhaW5lciIsImxpbmtzQ2FjaGUiLCJmbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlIiwib0FyZ3MiLCJhQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwiYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cyIsImxpbmtGaWx0ZXIiLCJzZW1hbnRpY09iamVjdCIsInB1c2giLCJsaW5rcyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJvbGRBcmdzIiwibmV3QXJncyIsImNhY2hlZExpbmtzIiwicmVqZWN0IiwicmVzb2x2ZUZuIiwicmVqZWN0Rm4iLCJuYXZpZ2F0aW9uU2VydmljZVAiLCJnZXRTZXJ2aWNlQXN5bmMiLCJ1c2VySW5mb1NlcnZpY2VQIiwib1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbFBsdWdpbk1hbmFnZXJQcm9taXNlIiwib1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZVByb21pc2UiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZSIsImFsbCIsInRoZW4iLCJfcmVmIiwibmF2aWdhdGlvblNlcnZpY2UiLCJ1c2VySW5mb1NlcnZpY2UiLCJvVXJsUGFyc2luZ1NlcnZpY2UiLCJvU2hlbGxOYXZpZ2F0aW9uIiwib1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSIsIm9TaGVsbFBsdWdpbk1hbmFnZXIiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlIiwiYXBwbGljYXRpb25OYXZpZ2F0aW9uIiwidXJsUGFyc2luZ1NlcnZpY2UiLCJzaGVsbE5hdmlnYXRpb24iLCJzaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UiLCJzaGVsbFBsdWdpbk1hbmFnZXIiLCJleHRlbnNpb25TZXJ2aWNlIiwiY2F0Y2giLCJnZXRTZW1hbnRpY09iamVjdHMiLCJvQ2FjaGVSZXN1bHRzIiwiYUxpbmtzIiwib1NlbWFudGljT2JqZWN0c0xpbmtzIiwiaSIsImFzc2lnbiIsImFNZXJnZWRMaW5rcyIsImoiLCJpdGVtIiwiZ2V0U2hlbGxVSVNlcnZpY2UiLCJnZXRTZXJ2aWNlIiwiZ2V0U2hlbGxDb250YWluZXIiLCJ1c2hlbGxDb250YWluZXIiLCJhcHBVcmwiLCJpbkFwcFJ1bnRpbWUiLCJnZXRGTFBVcmxBc3luYyIsImVycm9yIiwiTG9nIiwib05hdkFyZ3VtZW50c0FyciIsIm9Db21wb25lbnQiLCJvVGFyZ2V0Iiwic0FwcFN0YXRlS2V5IiwiYVRhcmdldHMiLCJzSGFzaEZyYWdtZW50IiwiZ2V0U2hlbGxIYXNoIiwiZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucyIsImhhc093blByb3BlcnR5IiwiTUFOQUdFX0ZFX0NBQ0hFUyIsImVuYWJsZWQiLCJvTmV3U2hlbGxIYXNoIiwiYkRpcnR5IiwiZm5EaXJ0eVN0YXRlUHJvdmlkZXIiLCJnZXRJbml0aWFscyIsImZuTmF2RmlsdGVyIiwiZm5DYWxsQmFjayIsImFIaWVyYXJjaHlMZXZlbHMiLCJzVGl0bGUiLCJhZGRpdGlvbmFsSW5mb3JtYXRpb24iLCJzU2VtYW50aWNPYmplY3QiLCJtUGFyYW1ldGVycyIsInByaW1hcnlJbnRlbnQiLCJpc0FycmF5IiwiZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UiLCJmYWlsIiwib0Vycm9yIiwicGVyc0lkIiwic2NvcGUiLCJjb21wb25lbnQiLCJrZXlDYXRlZ29yeSIsImNvbnN0YW50cyIsIkZJWEVEX0tFWSIsIndyaXRlRnJlcXVlbmN5IiwiTE9XIiwiY2xpZW50U3RvcmFnZUFsbG93ZWQiLCJ2YWxpZGl0eSIsIkluZmluaXR5Iiwia2V5IiwiZGVsZXRlQ29udGFpbmVyIiwiaXRlbU5hbWUiLCJjb250YWluZXIiLCJnZXRNYW5pZmVzdCIsImlkIiwiZGF0YSIsInVybCIsIlNoZWxsU2VydmljZXNGYWN0b3J5IiwiX1NlcnZpY2VGYWN0b3J5IiwiX3Byb3RvMyIsImNyZWF0ZUluc3RhbmNlIiwic2VydmljZUNvbnRleHQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJzaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwic2VtYW50aWNPYmplY3RzIiwic2V0UHJvcGVydHkiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL0V4dGVuc2lvblwiO1xuaW1wb3J0IHR5cGUgTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IExpbmssIExpbmtGaWx0ZXIsIFRhcmdldCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFBlcnNvbmFsaXphdGlvblYyIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1BlcnNvbmFsaXphdGlvblYyXCI7XG5pbXBvcnQgeyB0eXBlIFBlcnNJZCwgdHlwZSBTY29wZSB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1BlcnNvbmFsaXphdGlvblYyXCI7XG5pbXBvcnQgdHlwZSBTaGVsbE5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvU2hlbGxOYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBVUkxQYXJzaW5nIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkSGFzaCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcbmltcG9ydCB0eXBlIFVzZXJJbmZvIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VzZXJJbmZvXCI7XG5pbXBvcnQgdHlwZSBTaGVsbFVJU2VydmljZSBmcm9tIFwic2FwL3VzaGVsbC91aTVzZXJ2aWNlL1NoZWxsVUlTZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlQWRkaXRpb25hbEluZm8gfSBmcm9tIFwic2FwL3VzaGVsbC91aTVzZXJ2aWNlL1NoZWxsVUlTZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi9BcHBDb21wb25lbnRcIjtcblxuZXhwb3J0IHR5cGUgU3RhcnR1cEFwcFN0YXRlID0ge1xuXHRnZXREYXRhKCk6IHtcblx0XHRzZWxlY3Rpb25WYXJpYW50Pzoge1xuXHRcdFx0U2VsZWN0T3B0aW9ucz86IHtcblx0XHRcdFx0UHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFJhbmdlczoge1xuXHRcdFx0XHRcdE9wdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdFNpZ246IHN0cmluZztcblx0XHRcdFx0XHRMb3c6IHN0cmluZztcblx0XHRcdFx0fVtdO1xuXHRcdFx0fVtdO1xuXHRcdH07XG5cdH07XG59O1xuXG4vLyBzZWU6IHNhcFxcdXNoZWxsXFxzZXJ2aWNlc1xcX1BlcnNvbmFsaXphdGlvblxcY29uc3RhbnRzLmpzXG5leHBvcnQgdHlwZSBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzID0gUGVyc29uYWxpemF0aW9uVjIgJiB7XG5cdGNvbnN0YW50czoge1xuXHRcdGtleUNhdGVnb3J5OiB7XG5cdFx0XHRGSVhFRF9LRVk6IHN0cmluZztcblx0XHRcdEdFTkVSQVRFRF9LRVk6IHN0cmluZztcblx0XHR9O1xuXHRcdHdyaXRlRnJlcXVlbmN5OiB7XG5cdFx0XHRISUdIOiBzdHJpbmc7XG5cdFx0XHRMT1c6IHN0cmluZztcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgUGVyc29uYWxpemVyVHlwZSA9IHtcblx0Z2V0UGVyc0RhdGE6ICgpID0+IFByb21pc2U8b2JqZWN0Pjtcblx0c2V0UGVyc0RhdGE6IChwZXJzRGF0YTogb2JqZWN0KSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgU2hlbGxDb25maWdUeXBlID0ge1xuXHRhcHBzOiB7XG5cdFx0aW5wdXRGaWVsZEhpc3Rvcnk6IHtcblx0XHRcdGVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIEZMUFBsdWdpbiA9IHtcblx0Y29tcG9uZW50OiBzdHJpbmc7XG5cdGVuYWJsZWQ6IGJvb2xlYW47XG5cdHVybDogc3RyaW5nO1xuXHRjb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUgPSB7XG5cdEFwcFdhcm11cDogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xuXHRSZW5kZXJlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcblx0VXNlckRlZmF1bHRzOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG5cdFVzZXJJbWFnZTogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xufTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNoZWxsU2VydmljZXMge1xuXHRpbml0UHJvbWlzZTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cdGluc3RhbmNlVHlwZTogc3RyaW5nO1xuXHRzZW1hbnRpY09iamVjdHM6IHN0cmluZ1tdO1xuXG5cdGdldExpbmtzKG9BcmdzPzogT21pdDxMaW5rRmlsdGVyLCBcInVpNUNvbXBvbmVudFwiPltdKTogUHJvbWlzZTxMaW5rW11bXT47XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBPbWl0PExpbmtGaWx0ZXIsIFwidWk1Q29tcG9uZW50XCI+W10pOiBQcm9taXNlPExpbmtbXVtdPjtcblxuXHR0b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnI6IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCk6IHZvaWQ7XG5cblx0Z2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzOiBvYmplY3QpOiBQcm9taXNlPHVuZGVmaW5lZCB8IFN0YXJ0dXBBcHBTdGF0ZT47XG5cblx0YmFja1RvUHJldmlvdXNBcHAoKTogdm9pZDtcblxuXHRocmVmRm9yRXh0ZXJuYWwob0FyZ3M/OiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0SHJlZihvVGFyZ2V0OiBvYmplY3QsIG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8c3RyaW5nPjtcblxuXHRnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPjtcblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IG9iamVjdDtcblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj47XG5cblx0bmF2aWdhdGUob1RhcmdldDogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTx1bmRlZmluZWQ+O1xuXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+O1xuXG5cdGlzSW5pdGlhbE5hdmlnYXRpb24oKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHRleHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0SGFzaCgpOiBzdHJpbmc7XG5cblx0cGFyc2VTaGVsbEhhc2goc0hhc2g6IHN0cmluZyk6IFBhcnNlZEhhc2g7XG5cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpOiBSZXR1cm5UeXBlPFVSTFBhcnNpbmdbXCJzcGxpdEhhc2hcIl0+O1xuXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmc7XG5cblx0c2V0RGlydHlGbGFnKGJEaXJ0eTogYm9vbGVhbik6IHZvaWQ7XG5cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0Z2V0VXNlcigpOiBVc2VySW5mbztcblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZztcblxuXHRoYXNVU2hlbGwoKTogYm9vbGVhbjtcblxuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2s/OiBGdW5jdGlvbik6IFByb21pc2U8dm9pZD47XG5cblx0c2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHM6IEFycmF5PG9iamVjdD4pOiBQcm9taXNlPHZvaWQ+O1xuXG5cdHNldFRpdGxlKHNUaXRsZTogc3RyaW5nLCBhZGRpdGlvbmFsSW5mb3JtYXRpb24/OiBUaXRsZUFkZGl0aW9uYWxJbmZvKTogUHJvbWlzZTx2b2lkPjtcblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZztcblxuXHRnZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCk6IFByb21pc2U8TGluaz47XG5cblx0d2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj47XG5cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlO1xuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW47XG5cblx0Z2V0VGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+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+IHtcblx0XHQoYXdhaXQgdGhpcy5nZXRTaGVsbFVJU2VydmljZSgpKS5zZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0SGllcmFyY2h5IG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBnaXZlbiBoaWVyYXJjaHkgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICogQHBhcmFtIFthSGllcmFyY2h5TGV2ZWxzXSBBbiBhcnJheSByZXByZXNlbnRpbmcgaGllcmFyY2hpZXMgb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgYXBwLlxuXHQgKi9cblx0YXN5bmMgc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHM6IG9iamVjdFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0KGF3YWl0IHRoaXMuZ2V0U2hlbGxVSVNlcnZpY2UoKSkuc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICogQHBhcmFtIFtzVGl0bGVdIFRoZSBuZXcgdGl0bGUuIFRoZSBkZWZhdWx0IHRpdGxlIGlzIHNldCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBnaXZlbi5cblx0ICogQHBhcmFtIFthZGRpdGlvbmFsSW5mb3JtYXRpb25dIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgYnJvd3NlciB3aW5kb3cgdGl0bGUuXG5cdCAqL1xuXHRhc3luYyBzZXRUaXRsZShzVGl0bGU6IHN0cmluZywgYWRkaXRpb25hbEluZm9ybWF0aW9uPzogVGl0bGVBZGRpdGlvbmFsSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdChhd2FpdCB0aGlzLmdldFNoZWxsVUlTZXJ2aWNlKCkpLnNldFRpdGxlKHNUaXRsZSwgYWRkaXRpb25hbEluZm9ybWF0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0VGl0bGUgbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGdpdmVuIHRpdGxlIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBvZiB0aGUgYXBwbGljYXRpb24uXG5cdCAqL1xuXHRhc3luYyBnZXRUaXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiAoYXdhaXQgdGhpcy5nZXRTaGVsbFVJU2VydmljZSgpKS5nZXRUaXRsZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudGx5IGRlZmluZWQgY29udGVudCBkZW5zaXR5LlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGVudCBkZW5zaXR5IHZhbHVlXG5cdCAqL1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRVc2VyKCkuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QsIHRoaXMgbWV0aG9kIGNvbnNpZGVycyBhbGwgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbWFudGljIG9iamVjdCBhbmRcblx0ICogcmV0dXJucyB0aGUgb25lIHRhZ2dlZCBhcyBhIFwicHJpbWFyeUFjdGlvblwiLiBJZiBubyBpbmJvdW5kIHRhZ2dlZCBhcyBcInByaW1hcnlBY3Rpb25cIiBleGlzdHMsIHRoZW4gaXQgcmV0dXJuc1xuXHQgKiB0aGUgaW50ZW50IG9mIHRoZSBmaXJzdCBpbmJvdW5kIChhZnRlciBzb3J0aW5nIGhhcyBiZWVuIGFwcGxpZWQpIG1hdGNoaW5nIHRoZSBhY3Rpb24gXCJkaXNwbGF5RmFjdFNoZWV0XCIuXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNPYmplY3QgU2VtYW50aWMgb2JqZWN0LlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgU2VlICNDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiNnZXRMaW5rcyBmb3IgZGVzY3JpcHRpb24uXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnRlbnQgaWYgaXQgZXhpc3RzLlxuXHQgKi9cblx0YXN5bmMgZ2V0UHJpbWFyeUludGVudChzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgbVBhcmFtZXRlcnM/OiBMaW5rRmlsdGVyKTogUHJvbWlzZTxMaW5rPiB7XG5cdFx0Y29uc3QgcHJpbWFyeUludGVudCA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0LCBtUGFyYW1ldGVycyk7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkocHJpbWFyeUludGVudCkpIHtcblx0XHRcdHJldHVybiBwcmltYXJ5SW50ZW50WzBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcHJpbWFyeUludGVudDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBmb3IgdGhlIHJlbmRlciBleHRlbnNpb25zIHBsdWdpbiB0byBiZSBsb2FkZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgd2UgYXJlIGFibGUgdG8gd2FpdCBmb3IgaXQsIG90aGVyd2lzZSB3ZSBjb3VsZG4ndCBhbmQgY2Fubm90IHJlbHkgb24gaXQuXG5cdCAqL1xuXHRhc3luYyB3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMuc2hlbGxQbHVnaW5NYW5hZ2VyPy5nZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZSkge1xuXHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlclxuXHRcdFx0XHRcdC5nZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShcIlJlbmRlcmVyRXh0ZW5zaW9uc1wiKVxuXHRcdFx0XHRcdC5mYWlsKChvRXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihvRXJyb3IgYXMgc3RyaW5nLCBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNoZWxsU2VydmljZXNGYWN0b3J5LndhaXRGb3JQbHVnaW5zTG9hZFwiKTtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwZXJzb25hbGl6ZXIgZnJvbSB0aGUgc2hlbGwgc2VydmljZS5cblx0ICogV2Ugc2V0IHNvbWUgZGVmYXVsdHMgZm9yIHRoZSBzY29wZSBvYmplY3QuXG5cdCAqIEBwYXJhbSBwZXJzSWQgUGVyc29uYWxpemF0aW9uIG9iamVjdFxuXHQgKiBAcGFyYW0gc2NvcGUgU2NvcGUgb2JqZWN0XG5cdCAqIEBwYXJhbSBjb21wb25lbnRcblx0ICogQHJldHVybnMgUGVyc29uYWxpemVyIG9iamVjdCB3aGljaCBoYW5kbGVzIHBlcnNvbmFsaXphdGlvblxuXHQgKi9cblx0YXN5bmMgZ2V0UGVyc29uYWxpemVyKHBlcnNJZDogUGVyc0lkLCBzY29wZTogU2NvcGUsIGNvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8UGVyc29uYWxpemVyVHlwZT4ge1xuXHRcdHNjb3BlID0ge1xuXHRcdFx0Ly8gbWVyZ2Ugc29tZSBkZWZhdWx0c1xuXHRcdFx0a2V5Q2F0ZWdvcnk6IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmNvbnN0YW50cy5rZXlDYXRlZ29yeS5GSVhFRF9LRVksXG5cdFx0XHR3cml0ZUZyZXF1ZW5jeTogdGhpcy5zaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UuY29uc3RhbnRzLndyaXRlRnJlcXVlbmN5LkxPVyxcblx0XHRcdGNsaWVudFN0b3JhZ2VBbGxvd2VkOiBmYWxzZSxcblx0XHRcdHZhbGlkaXR5OiBJbmZpbml0eSxcblx0XHRcdC4uLnNjb3BlXG5cdFx0fTtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmdldFBlcnNvbmFsaXplcihwZXJzSWQsIHNjb3BlLCBjb21wb25lbnQpKSBhcyBQZXJzb25hbGl6ZXJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgYSBjb250YWluZXIgaWRlbnRpZmllZCBieSBzQ29udGFpbmVyS2V5LlxuXHQgKiBAcGFyYW0ga2V5IENvbnRhaW5lciBrZXlcblx0ICogQHBhcmFtIHNjb3BlIFNjb3BlIG9iamVjdFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gdGhlIGNvbnRhaW5lciBpcyBkZWxldGVkXG5cdCAqL1xuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoa2V5OiBzdHJpbmcsIHNjb3BlPzogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmRlbGV0ZUNvbnRhaW5lcihrZXksIHNjb3BlIGFzIHVua25vd24gYXMgb2JqZWN0KSBhcyBQcm9taXNlPHZvaWQ+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBwZXJzb25hbGl6ZXIgdG8gYWNjZXNzIHRoZSBBcHBsaWNhdGlvbiBkYXRhIHN0b3JlZCBpbiB0aGUgc2hlbGwgUGVyc29uYWxpemF0aW9uLlxuXHQgKiBAcGFyYW0gaXRlbU5hbWUgVGhlIG5hbWUgb2YgdGhlIGl0ZW0gZm9yIHdoaWNoIHRoZSBwZXJzb25hbGl6ZXIgaXMgY3JlYXRlZC5cblx0ICogQHJldHVybnMgQSBwZXJzb25hbGl6ZXJcblx0ICovXG5cdHB1YmxpYyBhc3luYyBnZXRBcHBsaWNhdGlvblBlcnNvbmFsaXplcihpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPiB7XG5cdFx0aWYgKCF0aGlzLmFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnNbaXRlbU5hbWVdKSB7XG5cdFx0XHR0aGlzLmFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnNbaXRlbU5hbWVdID0gdGhpcy5nZXRQZXJzb25hbGl6ZXIoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb250YWluZXI6IGBBcHBsaWNhdGlvbiMkeyh0aGlzLmFwcENvbXBvbmVudCBhcyBBcHBDb21wb25lbnQpLmdldE1hbmlmZXN0KClbXCJzYXAuYXBwXCJdLmlkfWAsXG5cdFx0XHRcdFx0aXRlbTogaXRlbU5hbWVcblx0XHRcdFx0fSxcblx0XHRcdFx0e30sXG5cdFx0XHRcdHRoaXMuYXBwQ29tcG9uZW50XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvblBlcnNvbm5hbGl6ZXJzW2l0ZW1OYW1lXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGRhdGEgZnJvbSB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBpdGVtTmFtZVxuXHQgKiBAcmV0dXJucyBEYXRhXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKGl0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiAoYXdhaXQgKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6ZXIoaXRlbU5hbWUpKT8uZ2V0UGVyc0RhdGEoKSkgYXMgb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHN0b3JlcyBhbiBvYmplY3QgaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcGFyYW0gaXRlbU5hbWVcblx0ICogQHBhcmFtIGRhdGFcblx0ICogQHJldHVybnMgQSBwcm9taXNlXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgc2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKGl0ZW1OYW1lOiBzdHJpbmcsIGRhdGE6IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyKGl0ZW1OYW1lKSkuc2V0UGVyc0RhdGEoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzaGVsbCBjb25maWcgZnJvbSB0aGUgd2luZG93cyBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFNoZWxsIGNvbmZpZyBvYmplY3Rcblx0ICovXG5cdGdldFNoZWxsQ29uZmlnKCk6IFNoZWxsQ29uZmlnVHlwZSB7XG5cdFx0cmV0dXJuICh3aW5kb3cgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+KVtcInNhcC11c2hlbGwtY29uZmlnXCJdIGFzIFNoZWxsQ29uZmlnVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBwYXJhbWV0ZXJzIGZyb20gYSBVUkkgcXVlcnkgc3RyaW5nIChzdGFydGluZyB3aXRoID8pIGludG8gYSBwYXJhbWV0ZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gdXJsIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIFBhcmFtZXRlciBzdHJpbmdcblx0ICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5nIHN0cmluZyBhcnJheXNcblx0ICovXG5cdHBhcnNlUGFyYW1ldGVycyh1cmw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UucGFyc2VQYXJhbWV0ZXJzKHVybCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzaGVsbCBleHRlbnNpb24gc2VydmljZS5cblx0ICogQHJldHVybnMgU2hlbGwgZXh0ZW5zaW9uIHNlcnZpY2Vcblx0ICovXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25TZXJ2aWNlO1xuXHR9XG59XG5cbi8qKlxuICogU2VydmljZSBGYWN0b3J5IGZvciB0aGUgU2hlbGxTZXJ2aWNlc1xuICpcbiAqL1xuY2xhc3MgU2hlbGxTZXJ2aWNlc0ZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+IHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgZWl0aGVyIGEgc3RhbmRhcmQgb3IgYSBtb2NrIFNoZWxsIHNlcnZpY2UgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuXHQgKiBAcGFyYW0gc2VydmljZUNvbnRleHQgVGhlIHNoZWxsc2VydmljZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYSBzaGVsbCBzZXJ2aWNlIGltcGxlbWVudGF0aW9uXG5cdCAqIEBzZWUgU2VydmljZUZhY3RvcnkjY3JlYXRlSW5zdGFuY2Vcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKHNlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+KTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz4ge1xuXHRcdHNlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyID0gc2FwLnVpLnJlcXVpcmUoXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiKTtcblx0XHRjb25zdCBzaGVsbFNlcnZpY2UgPSBzZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lclxuXHRcdFx0PyBuZXcgU2hlbGxTZXJ2aWNlcyhzZXJ2aWNlQ29udGV4dCBhcyBTZXJ2aWNlQ29udGV4dDxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+Pilcblx0XHRcdDogbmV3IFNoZWxsU2VydmljZU1vY2soc2VydmljZUNvbnRleHQpO1xuXHRcdGF3YWl0IHNoZWxsU2VydmljZS5pbml0UHJvbWlzZTtcblx0XHQvLyBFbnJpY2ggdGhlIGFwcENvbXBvbmVudCB3aXRoIHRoaXMgbWV0aG9kXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gc2VydmljZUNvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0YXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMgPSAoKTogSVNoZWxsU2VydmljZXMgPT4gc2hlbGxTZXJ2aWNlO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoaW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0bGV0IHNlbWFudGljT2JqZWN0czogc3RyaW5nW10gPSBbXTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0cyA9IGF3YWl0IHNoZWxsU2VydmljZS5fX2ZldGNoU2VtYW50aWNPYmplY3QoKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNhbGxpbmcgZ2V0U2VtYW50aWNPYmplY3RzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHQoaW50ZXJuYWxNb2RlbCBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL3NlbWFudGljT2JqZWN0c1wiLCBzZW1hbnRpY09iamVjdHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2hlbGxTZXJ2aWNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoZWxsU2VydmljZXNGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBbUNBO0VBeUNBO0FBQ0E7QUFDQTtFQTBHQTtBQUNBO0FBQ0E7QUFDQTtFQUhBLElBSU1BLGdCQUFnQiwwQkFBQUMsUUFBQTtJQUFBLFNBQUFELGlCQUFBO01BQUEsT0FBQUMsUUFBQSxDQUFBQyxLQUFBLE9BQUFDLFNBQUE7SUFBQTtJQUFBQyxjQUFBLENBQUFKLGdCQUFBLEVBQUFDLFFBQUE7SUFBQSxJQUFBSSxNQUFBLEdBQUFMLGdCQUFBLENBQUFNLFNBQUE7SUFBQUQsTUFBQSxDQU9yQkUsSUFBSSxHQUFKLFNBQUFBLElBQUlBLENBQUEsRUFBUztNQUNaLElBQUksQ0FBQ0MsV0FBVyxHQUFHQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFzQixDQUFDO01BQzFELElBQUksQ0FBQ0MsWUFBWSxHQUFHLE1BQU07SUFDM0IsQ0FBQztJQUFBTixNQUFBLENBRUtPLFFBQVEsR0FBZCxlQUFNQSxRQUFRQSxDQUFDO0lBQUEsRUFBc0M7TUFDcEQsT0FBT0gsT0FBTyxDQUFDQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFBQUwsTUFBQSxDQUVLUSxxQkFB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
|
|
@@ -14,6 +14,7 @@ import type URLParsing from "sap/ushell/services/URLParsing";
|
|
|
14
14
|
import type { ParsedHash } from "sap/ushell/services/URLParsing";
|
|
15
15
|
import type UserInfo from "sap/ushell/services/UserInfo";
|
|
16
16
|
import type ShellUIService from "sap/ushell/ui5service/ShellUIService";
|
|
17
|
+
import type { TitleAdditionalInfo } from "sap/ushell/ui5service/ShellUIService";
|
|
17
18
|
import type { ServiceContext } from "types/metamodel_types";
|
|
18
19
|
import type AppComponent from "../AppComponent";
|
|
19
20
|
|
|
@@ -136,7 +137,7 @@ export interface IShellServices {
|
|
|
136
137
|
|
|
137
138
|
setHierarchy(aHierarchyLevels: Array<object>): Promise<void>;
|
|
138
139
|
|
|
139
|
-
setTitle(sTitle: string): Promise<void>;
|
|
140
|
+
setTitle(sTitle: string, additionalInformation?: TitleAdditionalInfo): Promise<void>;
|
|
140
141
|
|
|
141
142
|
isJamActive(): boolean;
|
|
142
143
|
|
|
@@ -905,9 +906,10 @@ export class ShellServices extends Service<Required<ShellServicesSettings>> impl
|
|
|
905
906
|
* Will call setTitle method of ShellUIService
|
|
906
907
|
* that displays the given title in the shell header.
|
|
907
908
|
* @param [sTitle] The new title. The default title is set if this argument is not given.
|
|
909
|
+
* @param [additionalInformation] An object of additional information to be displayed in the browser window title.
|
|
908
910
|
*/
|
|
909
|
-
async setTitle(sTitle: string): Promise<void> {
|
|
910
|
-
(await this.getShellUIService()).setTitle(sTitle);
|
|
911
|
+
async setTitle(sTitle: string, additionalInformation?: TitleAdditionalInfo): Promise<void> {
|
|
912
|
+
(await this.getShellUIService()).setTitle(sTitle, additionalInformation);
|
|
911
913
|
}
|
|
912
914
|
|
|
913
915
|
/**
|