@sapui5/sap.fe.core 1.127.2 → 1.129.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 +3 -9
- package/src/sap/fe/core/ActionRuntime.ts +3 -7
- package/src/sap/fe/core/AppComponent.js +9 -19
- package/src/sap/fe/core/AppComponent.ts +2 -12
- package/src/sap/fe/core/AppStateHandler.js +3 -11
- package/src/sap/fe/core/AppStateHandler.ts +0 -7
- package/src/sap/fe/core/BaseController.js +4 -8
- package/src/sap/fe/core/BaseController.ts +0 -5
- package/src/sap/fe/core/CommonUtils.js +1 -9
- package/src/sap/fe/core/CommonUtils.ts +4 -8
- package/src/sap/fe/core/ExtensionAPI.js +10 -25
- package/src/sap/fe/core/ExtensionAPI.ts +4 -19
- package/src/sap/fe/core/InsightsFormattersExtension.js +5 -3
- package/src/sap/fe/core/PageController.js +7 -10
- package/src/sap/fe/core/PageController.ts +0 -3
- package/src/sap/fe/core/ResourceModel.js +3 -5
- package/src/sap/fe/core/ResourceModel.ts +0 -2
- package/src/sap/fe/core/ReuseComponent.js +8 -14
- package/src/sap/fe/core/ReuseComponent.ts +0 -6
- package/src/sap/fe/core/TemplateComponent.js +37 -9
- package/src/sap/fe/core/TemplateComponent.ts +3 -2
- package/src/sap/fe/core/TemplateModel.js +5 -5
- package/src/sap/fe/core/TemplateModel.ts +0 -1
- package/src/sap/fe/core/UIProvider.js +1 -1
- package/src/sap/fe/core/UIProvider.ts +44 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +7 -12
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +0 -5
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +61 -65
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +60 -63
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +21 -5
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +0 -4
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +6 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -20
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -11
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +0 -6
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +11 -10
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +0 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -7
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +0 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +3 -10
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +0 -7
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +5 -8
- package/src/sap/fe/core/controllerextensions/ContextSharing.ts +0 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +225 -155
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +248 -164
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -3
- package/src/sap/fe/core/controllerextensions/Feedback.ts +0 -2
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +4 -7
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -3
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -25
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -21
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +22 -34
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +25 -31
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +8 -21
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +4 -15
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +68 -31
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +78 -32
- package/src/sap/fe/core/controllerextensions/PageReady.js +4 -4
- package/src/sap/fe/core/controllerextensions/Paginator.js +4 -8
- package/src/sap/fe/core/controllerextensions/Paginator.ts +0 -4
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -4
- package/src/sap/fe/core/controllerextensions/Recommendations.js +15 -24
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +13 -20
- package/src/sap/fe/core/controllerextensions/Routing.js +4 -10
- package/src/sap/fe/core/controllerextensions/Routing.ts +0 -6
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +17 -11
- package/src/sap/fe/core/controllerextensions/Share.ts +10 -5
- package/src/sap/fe/core/controllerextensions/SideEffects.js +49 -45
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +54 -41
- package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -4
- package/src/sap/fe/core/controllerextensions/ViewState.js +10 -34
- package/src/sap/fe/core/controllerextensions/ViewState.ts +3 -49
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +6 -8
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +4 -3
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +16 -12
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +126 -74
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +158 -91
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -22
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +0 -20
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -20
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +11 -17
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +191 -767
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +277 -1024
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -6
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +381 -250
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +467 -301
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +2 -6
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +0 -5
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +2 -6
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +4 -6
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -6
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +0 -4
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +4 -41
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -37
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -1
- package/src/sap/fe/core/controls/Any.js +1 -2
- package/src/sap/fe/core/controls/Any.ts +0 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -2
- package/src/sap/fe/core/controls/AnyElement.ts +0 -1
- package/src/sap/fe/core/controls/CommandExecution.js +3 -3
- package/src/sap/fe/core/controls/ComponentLoader.js +23 -10
- package/src/sap/fe/core/controls/ComponentLoader.ts +0 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +10 -13
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +0 -6
- package/src/sap/fe/core/controls/EventDelegateHook.js +8 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +7 -7
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +140 -24
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +141 -10
- package/src/sap/fe/core/converters/ConverterContext.js +8 -30
- package/src/sap/fe/core/converters/ConverterContext.ts +7 -29
- package/src/sap/fe/core/converters/ManifestSettings.js +37 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +12 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +12 -40
- package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -46
- package/src/sap/fe/core/converters/MetaModelConverter.js +44 -48
- package/src/sap/fe/core/converters/MetaModelConverter.ts +50 -48
- package/src/sap/fe/core/converters/TemplateConverter.js +3 -2
- package/src/sap/fe/core/converters/TemplateConverter.ts +0 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -28
- package/src/sap/fe/core/converters/annotations/DataField.ts +0 -26
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -19
- package/src/sap/fe/core/converters/controls/Common/Action.js +13 -26
- package/src/sap/fe/core/converters/controls/Common/Action.ts +13 -31
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -5
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +2 -4
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +1 -2
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -5
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +0 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -7
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +11 -6
- package/src/sap/fe/core/converters/controls/Common/Table.js +159 -141
- package/src/sap/fe/core/converters/controls/Common/Table.ts +166 -122
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +5 -30
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +3 -29
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +43 -55
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +43 -47
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +0 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -8
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +2 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -11
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +0 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -10
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +0 -9
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -7
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +0 -6
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -9
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +0 -8
- package/src/sap/fe/core/converters/helpers/ID.js +1 -2
- package/src/sap/fe/core/converters/helpers/ID.ts +0 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -2
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +0 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -5
- package/src/sap/fe/core/converters/helpers/Key.ts +0 -4
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -2
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +0 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +0 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +6 -27
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +9 -26
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -16
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +0 -15
- package/src/sap/fe/core/definition/FEDefinition.js +2550 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -12
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +9 -10
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +8 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +0 -2
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +0 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +9 -14
- package/src/sap/fe/core/formatters/FiscalFormat.ts +0 -11
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -4
- package/src/sap/fe/core/formatters/KPIFormatter.ts +0 -3
- package/src/sap/fe/core/formatters/StandardFormatter.js +6 -3
- package/src/sap/fe/core/formatters/StandardFormatter.ts +6 -2
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -3
- package/src/sap/fe/core/fpm/Component.js +14 -17
- package/src/sap/fe/core/fpm/Component.ts +7 -10
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +3 -10
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +0 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -13
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +0 -11
- package/src/sap/fe/core/helpers/BindingHelper.js +1 -4
- package/src/sap/fe/core/helpers/BindingHelper.ts +0 -3
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +0 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +61 -32
- package/src/sap/fe/core/helpers/DeleteHelper.ts +79 -33
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +0 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +0 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +0 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -8
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +0 -7
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +7 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +0 -2
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +3 -8
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +0 -5
- package/src/sap/fe/core/helpers/MetaPath.js +1 -7
- package/src/sap/fe/core/helpers/MetaPath.ts +0 -6
- package/src/sap/fe/core/helpers/ModelHelper.js +55 -35
- package/src/sap/fe/core/helpers/ModelHelper.ts +64 -38
- package/src/sap/fe/core/helpers/PasteHelper.js +77 -24
- package/src/sap/fe/core/helpers/PasteHelper.ts +105 -23
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -3
- package/src/sap/fe/core/helpers/PromiseKeeper.ts +0 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -4
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +0 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +3 -4
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -2
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +0 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -2
- package/src/sap/fe/core/helpers/SizeHelper.ts +0 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +7 -17
- package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -17
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -12
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +0 -11
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -10
- package/src/sap/fe/core/helpers/TitleHelper.ts +0 -9
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -2
- package/src/sap/fe/core/helpers/ToES6Promise.ts +0 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -15
- package/src/sap/fe/core/helpers/TypeGuards.ts +0 -14
- package/src/sap/fe/core/helpers/WebSocket.js +1 -1
- package/src/sap/fe/core/library.js +10 -44
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +8 -45
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -6
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -5
- package/src/sap/fe/core/messagebundle.properties +12 -1
- package/src/sap/fe/core/messagebundle_ar.properties +8 -0
- package/src/sap/fe/core/messagebundle_bg.properties +8 -0
- package/src/sap/fe/core/messagebundle_ca.properties +8 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +8 -0
- package/src/sap/fe/core/messagebundle_cs.properties +9 -1
- package/src/sap/fe/core/messagebundle_cy.properties +8 -0
- package/src/sap/fe/core/messagebundle_da.properties +8 -0
- package/src/sap/fe/core/messagebundle_de.properties +8 -0
- package/src/sap/fe/core/messagebundle_el.properties +8 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +144 -65
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +273 -194
- package/src/sap/fe/core/messagebundle_es.properties +9 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +8 -0
- package/src/sap/fe/core/messagebundle_et.properties +8 -0
- package/src/sap/fe/core/messagebundle_fi.properties +8 -0
- package/src/sap/fe/core/messagebundle_fr.properties +8 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -0
- package/src/sap/fe/core/messagebundle_hi.properties +9 -1
- package/src/sap/fe/core/messagebundle_hr.properties +8 -0
- package/src/sap/fe/core/messagebundle_hu.properties +8 -0
- package/src/sap/fe/core/messagebundle_id.properties +12 -4
- package/src/sap/fe/core/messagebundle_it.properties +8 -0
- package/src/sap/fe/core/messagebundle_iw.properties +8 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -0
- package/src/sap/fe/core/messagebundle_kk.properties +8 -0
- package/src/sap/fe/core/messagebundle_ko.properties +8 -0
- package/src/sap/fe/core/messagebundle_lt.properties +8 -0
- package/src/sap/fe/core/messagebundle_lv.properties +8 -0
- package/src/sap/fe/core/messagebundle_mk.properties +8 -0
- package/src/sap/fe/core/messagebundle_ms.properties +8 -0
- package/src/sap/fe/core/messagebundle_nl.properties +16 -8
- package/src/sap/fe/core/messagebundle_no.properties +8 -0
- package/src/sap/fe/core/messagebundle_pl.properties +8 -0
- package/src/sap/fe/core/messagebundle_pt.properties +8 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +8 -0
- package/src/sap/fe/core/messagebundle_ro.properties +8 -0
- package/src/sap/fe/core/messagebundle_ru.properties +8 -0
- package/src/sap/fe/core/messagebundle_sh.properties +8 -0
- package/src/sap/fe/core/messagebundle_sk.properties +8 -0
- package/src/sap/fe/core/messagebundle_sl.properties +8 -0
- package/src/sap/fe/core/messagebundle_sr.properties +8 -0
- package/src/sap/fe/core/messagebundle_sv.properties +8 -0
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +8 -0
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +8 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +8 -0
- package/src/sap/fe/core/operationsHelper.js +22 -7
- package/src/sap/fe/core/operationsHelper.ts +24 -5
- package/src/sap/fe/core/rootView/Fcl.controller.js +7 -27
- package/src/sap/fe/core/rootView/Fcl.controller.ts +0 -18
- package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -12
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +0 -5
- package/src/sap/fe/core/rootView/RootViewBaseController.js +10 -24
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +3 -16
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +4 -4
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +3 -3
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +3 -4
- package/src/sap/fe/core/services/ContextSharingServiceFactory.ts +0 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +13 -20
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +11 -17
- package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -21
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -17
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +7 -19
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +0 -12
- package/src/sap/fe/core/services/ShellServicesFactory.js +8 -44
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -41
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +19 -60
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +14 -57
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +6 -14
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +2 -10
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +17 -7
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +17 -3
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +11 -24
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +0 -19
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -31
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +0 -27
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -4
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.ts +0 -3
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +7 -7
- 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 +4 -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 -2
- package/src/sap/fe/core/templating/ActionHelper.ts +0 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -2
- package/src/sap/fe/core/templating/CommonFormatters.ts +0 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -6
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +0 -5
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +0 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +0 -17
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +6 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -4
- package/src/sap/fe/core/templating/EntitySetHelper.ts +0 -3
- package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +3 -4
- package/src/sap/fe/core/templating/FieldControlHelper.js +4 -9
- package/src/sap/fe/core/templating/FieldControlHelper.ts +3 -9
- 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 -31
- package/src/sap/fe/core/templating/PropertyHelper.ts +0 -30
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +1 -7
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +0 -6
- package/src/sap/fe/core/templating/UIFormatters.js +18 -14
- package/src/sap/fe/core/templating/UIFormatters.ts +30 -18
- package/src/sap/fe/core/type/Date.js +3 -6
- package/src/sap/fe/core/type/Date.ts +0 -3
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +3 -3
- package/src/sap/fe/core/type/FiscalDate.js +3 -9
- package/src/sap/fe/core/type/FiscalDate.ts +0 -6
- package/src/sap/fe/core/type/InputMask.js +3 -7
- package/src/sap/fe/core/type/InputMask.ts +0 -4
|
@@ -23,7 +23,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
23
23
|
var constant = BindingToolkit.constant;
|
|
24
24
|
/**
|
|
25
25
|
* Function that returns the relative path to the property from the DataModelObjectPath.
|
|
26
|
-
*
|
|
27
26
|
* @param contextPath The DataModelObjectPath object to the property
|
|
28
27
|
* @param skipCleanup Don't clean up circular navigation properties
|
|
29
28
|
* @returns The path from the root entity set
|
|
@@ -34,7 +33,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
34
33
|
|
|
35
34
|
/**
|
|
36
35
|
* Gets the navigation properties from a dataModelObjectPath to the targeted navigation properties.
|
|
37
|
-
*
|
|
38
36
|
* @param contextPath The dataModelObjectPath
|
|
39
37
|
* @param visitedNavProps The targeted navigation properties
|
|
40
38
|
* @param skipCleanup Don't clean up circular navigation properties
|
|
@@ -87,7 +85,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
87
85
|
|
|
88
86
|
/**
|
|
89
87
|
* Gets a new enhanced dataModelObjectPath matching with the provided property.
|
|
90
|
-
*
|
|
91
88
|
* @param dataModelObjectPath The initial dataModelObjectPath
|
|
92
89
|
* @param propertyPath The property path or property to reach
|
|
93
90
|
* @returns A new dataModelObjectPath
|
|
@@ -125,7 +122,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
125
122
|
/**
|
|
126
123
|
* Gets a new enhanced dataModelObjectPath matching with the provided path
|
|
127
124
|
* The targetObject is not updated by this internal function.
|
|
128
|
-
*
|
|
129
125
|
* @param dataModelObjectPath The initial dataModelObjectPath
|
|
130
126
|
* @param path The object path to reach
|
|
131
127
|
* @returns A new dataModelObjectPath
|
|
@@ -170,7 +166,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
170
166
|
|
|
171
167
|
/**
|
|
172
168
|
* Detects if the DataModelObjectPath has navigated threw a complexType.
|
|
173
|
-
*
|
|
174
169
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
175
170
|
* @returns Is there a complexType into the DataModelObjectPath.
|
|
176
171
|
*/
|
|
@@ -180,7 +175,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
180
175
|
|
|
181
176
|
/**
|
|
182
177
|
* Gets the navigation binding from the previous entitySet listed into the navigation properties.
|
|
183
|
-
*
|
|
184
178
|
* @param navigationProperties The navigation properties
|
|
185
179
|
* @returns A new dataModelObjectPath.
|
|
186
180
|
*/
|
|
@@ -207,7 +201,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
207
201
|
|
|
208
202
|
/**
|
|
209
203
|
* Gets the path of the targeted entitySet.
|
|
210
|
-
*
|
|
211
204
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
212
205
|
* @returns The path.
|
|
213
206
|
*/
|
|
@@ -230,7 +223,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
230
223
|
|
|
231
224
|
/**
|
|
232
225
|
* Gets the path of the targeted navigation.
|
|
233
|
-
*
|
|
234
226
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
235
227
|
* @param bRelative
|
|
236
228
|
* @returns The path.
|
|
@@ -254,7 +246,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
254
246
|
|
|
255
247
|
/**
|
|
256
248
|
* Gets the path of the targeted object.
|
|
257
|
-
*
|
|
258
249
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
259
250
|
* @param bRelative
|
|
260
251
|
* @returns The path.
|
|
@@ -319,7 +310,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
319
310
|
|
|
320
311
|
/**
|
|
321
312
|
* Gets an array of properties where a specific restriction is applied.
|
|
322
|
-
*
|
|
323
313
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
324
314
|
* @param checkFunction The function testing the restriction and returning the array of properties
|
|
325
315
|
* @param onContext Is the restriction tested on the target object or its context
|
|
@@ -343,7 +333,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
343
333
|
|
|
344
334
|
/**
|
|
345
335
|
* Gets the parent navigation property of the given node hierarchy.
|
|
346
|
-
*
|
|
347
336
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
348
337
|
* @param hierarchyQualifier The qualifier of the hierarchy set in the manifest
|
|
349
338
|
* @returns The parent navigation property.
|
|
@@ -356,7 +345,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
356
345
|
|
|
357
346
|
/**
|
|
358
347
|
* Gets an array of navigation properties where an update restriction is applied.
|
|
359
|
-
*
|
|
360
348
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
361
349
|
* @returns The navigation properties with the restriction.
|
|
362
350
|
*/
|
|
@@ -428,7 +416,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
428
416
|
* Gets the target entitySet, its parent and the navigation path from the parent to the target entitySet
|
|
429
417
|
* The target entitySet pointing to either null (in case of containment navprop a last part), or the actual target (non containment as target)
|
|
430
418
|
* The parent entitySet pointing to the previous entitySet used in the path.
|
|
431
|
-
*
|
|
432
419
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
433
420
|
* @returns The target entityset, its parent and the navigation path
|
|
434
421
|
*/
|
|
@@ -473,7 +460,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
473
460
|
|
|
474
461
|
/**
|
|
475
462
|
* Gets the restrictions set on the parent navigation.
|
|
476
|
-
*
|
|
477
463
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
478
464
|
* @param checkFunction The function to check the annotation
|
|
479
465
|
* @param extractionParametersOnPath The extraction parameters
|
|
@@ -518,7 +504,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
518
504
|
|
|
519
505
|
/**
|
|
520
506
|
* Gets the restrictions set on the target entitySet.
|
|
521
|
-
*
|
|
522
507
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
523
508
|
* @param checkFunction The function to check the annotation
|
|
524
509
|
* @param extractionParametersOnPath The extraction parameters
|
|
@@ -547,7 +532,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
547
532
|
/**
|
|
548
533
|
* Gets the restrictions applied on the target
|
|
549
534
|
* The restriction is caluclated according to the parent and the target.
|
|
550
|
-
*
|
|
551
535
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
552
536
|
* @param checkFunction The function to check the annotation
|
|
553
537
|
* @param extractionParametersOnPath The extraction parameters
|
|
@@ -567,7 +551,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
567
551
|
|
|
568
552
|
/**
|
|
569
553
|
* Set a trailing slash to a path if not already set.
|
|
570
|
-
*
|
|
571
554
|
* @param path The path
|
|
572
555
|
* @returns The path with a trailing slash
|
|
573
556
|
*/
|
|
@@ -589,4 +572,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"],
|
|
|
589
572
|
};
|
|
590
573
|
return _exports;
|
|
591
574
|
}, false);
|
|
592
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRSZWxhdGl2ZVBhdGhzIiwiY29udGV4dFBhdGgiLCJza2lwQ2xlYW51cCIsImdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uIiwiY29udGV4dExvY2F0aW9uIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYXAiLCJucCIsIm5hbWUiLCJ2aXNpdGVkTmF2UHJvcHMiLCJjbGVhblVwTmF2UHJvcCIsIm5hdlByb3BzIiwiY3VycmVudElkeCIsImxlbmd0aCIsImN1cnJlbnROYXYiLCJuZXh0TmF2UHJvcCIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwicGFydG5lciIsInNwbGljZSIsImdldEFkZGl0aW9uYWxOYXZQcm9wIiwicmVmZXJlbmNlUHJvcHMiLCJvdGhlclByb3BzIiwia2VlcFJlZmVyZW5jZSIsImFkZGl0aW9uYWxOYXZQcm9wcyIsImZvckVhY2giLCJuYXZQcm9wIiwibmF2SW5kZXgiLCJwdXNoIiwicmVtYWluaW5nTmF2UHJvcHMiLCJjb25jYXQiLCJzbGljZSIsImV4dHJhTmF2UHJvcCIsInRhcmdldFR5cGUiLCJmaW5kIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicHJvcGVydHlQYXRoIiwic1Byb3BlcnR5UGF0aCIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwicGF0aCIsInRhcmdldCIsIiR0YXJnZXQiLCJjb250YWluc0FDb21wbGV4VHlwZSIsImNvbnZlcnRlZFR5cGVzIiwicmVzb2x2ZVBhdGgiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJ0YXJnZXRFbnRpdHlUeXBlIiwicGF0aFNwbGl0cyIsInNwbGl0IiwibmV3RGF0YU1vZGVsT2JqZWN0UGF0aCIsInBhdGhQYXJ0IiwiZW5oYW5jZUZyb21QYXRoIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5U2V0IiwibmF2aWdhdGlvbkluZGV4IiwicmVmZXJlbmNlRW50aXR5VHlwZSIsImlzRW50aXR5VHlwZSIsImlzQ29tcGxleFR5cGUiLCJjdXJyZW50RW50aXR5U2V0IiwicG90ZW50aWFsTmF2UHJvcCIsIm5hdmlnYXRpb25QYXRoRnJvbVByZXZpb3VzRW50aXR5U2V0IiwiZ2V0TmF2aWdhdGlvbkJpbmRpbmdGcm9tUHJldmlvdXNFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiaGFzT3duUHJvcGVydHkiLCJwb3RlbnRpYWxDb21wbGV4VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiX3R5cGUiLCJzdGFydGluZ0VudGl0eVNldCIsIm5hdmlnYXRpb24iLCJ1bmRlZmluZWQiLCJuYXZpZ2F0aW9uUHJvcGVydHlMZW5ndGgiLCJsYXN0TmF2aWdhdGlvbiIsImlzQ29tcGxleFR5cGVMYXN0TmF2aWdhdGlvbiIsIm5hdmlnYXRpb25QYXRoIiwiaSIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImdldFRhcmdldEVudGl0eVNldFBhdGgiLCJpbml0aWFsUGF0aCIsInRhcmdldEVudGl0eVNldFBhdGgiLCJyZXBsYWNlIiwiYlJlbGF0aXZlIiwic2V0VHJhaWxpbmdTbGFzaCIsImpvaW4iLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiaXNTZXJ2aWNlT2JqZWN0IiwiaXNFbnRpdHlTZXQiLCJpc1Byb3BlcnR5IiwiaXNBbm5vdGF0aW9uVGVybSIsInRlcm0iLCJxdWFsaWZpZXIiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZm9yQmluZGluZ0V4cHJlc3Npb24iLCJmb3JGaWx0ZXJDb25kaXRpb25QYXRoIiwiX2dldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJuYXZQcm9wZXJ0aWVzIiwic29tZSIsImlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJpc0NvbGxlY3Rpb24iLCJpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24iLCJ2YWx1ZSIsImdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uIiwiY2hlY2tGdW5jdGlvbiIsIm9uQ29udGV4dCIsInNvdXJjZSIsImxhc3ROYXZQcm9wIiwiYW5ub3RhdGlvbnMiLCJDYXBhYmlsaXRpZXMiLCJpc1BhdGhVcGRhdGFibGUiLCJleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aCIsImNoZWNrT25QYXRoIiwiYW5ub3RhdGlvbk9iamVjdCIsIlVwZGF0ZVJlc3RyaWN0aW9ucyIsIlVwZGF0YWJsZSIsImdldEhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJBZ2dyZWdhdGlvbiIsIlBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdldE5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJOb25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJpc1BhdGhTZWFyY2hhYmxlIiwiU2VhcmNoUmVzdHJpY3Rpb25zIiwiU2VhcmNoYWJsZSIsImlzUGF0aERlbGV0YWJsZSIsIkRlbGV0ZVJlc3RyaWN0aW9ucyIsIkRlbGV0YWJsZSIsImlzUGF0aEluc2VydGFibGUiLCJJbnNlcnRSZXN0cmljdGlvbnMiLCJJbnNlcnRhYmxlIiwiaXNQYXRoRmlsdGVyYWJsZSIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlcmFibGUiLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJhbGxvd2VkRXhwcmVzc2lvbiIsImZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiY3VycmVudE9iamVjdFJlc3RyaWN0aW9uIiwicmVzdHJpY3Rpb24iLCJQcm9wZXJ0eSIsImluY2x1ZGVzIiwiQWxsb3dlZEV4cHJlc3Npb25zIiwidG9TdHJpbmciLCJnZXRUYXJnZXRFbnRpdHlTZXRJbmZvIiwicmVzZXRWaXNpdGVkTmF2UHJvcHMiLCJ2aXNpdGVkTmF2aWdhdGlvblByb3BzTmFtZSIsInBhcmVudEVudGl0eVNldCIsInBhcmVudE5hdmlnYXRpb25QYXRoIiwiY29udGFpbnNUYXJnZXQiLCJjaGVja09uUGFyZW50TmF2aWdhdGlvbiIsIm5hdmlnYXRpb25Qcm9wcyIsInJlc3RyaWN0aW9ucyIsInJlc3RyaWN0ZWROYXZQcm9wIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiTmF2aWdhdGlvblByb3BlcnR5IiwicmVzdHJpY3Rpb25EZWZpbml0aW9uIiwidmFsdWVPZiIsImlzQ29uc3RhbnQiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJjb25zdGFudCIsIl9uYXZpZ2F0aW9uUHJvcHMiLCJwYXRoUmVsYXRpdmVMb2NhdGlvbiIsInBhdGhWaXNpdG9yRnVuY3Rpb24iLCJwYXRoVmlzaXRvciIsImdldFBhdGhWaXNpdG9yRm9yU2luZ2xldG9uIiwiZXF1YWwiLCJjaGVja09uVGFyZ2V0IiwidGFyZ2V0UmVzdHJpY3Rpb25zIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsInVucmVzb2x2YWJsZUV4cHJlc3Npb24iLCJlbmRzV2l0aCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGF0YU1vZGVsUGF0aEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdENvbXBsZXhUeXBlLFxuXHRDb252ZXJ0ZWRNZXRhZGF0YSxcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eVBhdGgsXG5cdFNlcnZpY2VPYmplY3QsXG5cdFNpbmdsZXRvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZVR5cGVzLFxuXHROYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMsXG5cdEVudGl0eVR5cGVBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMsXG5cdFNpbmdsZXRvbkFubm90YXRpb25zX0NhcGFiaWxpdGllc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb25zdGFudCwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaXNDb25zdGFudCwgdW5yZXNvbHZhYmxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0aXNBbm5vdGF0aW9uVGVybSxcblx0aXNDb21wbGV4VHlwZSxcblx0aXNFbnRpdHlTZXQsXG5cdGlzRW50aXR5VHlwZSxcblx0aXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRpc1Byb3BlcnR5LFxuXHRpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24sXG5cdGlzU2VydmljZU9iamVjdFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5T3JQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcblxuZXhwb3J0IHR5cGUgRGF0YU1vZGVsT2JqZWN0Q29udGV4dCA9IHtcblx0c3RhcnRpbmdFbnRpdHlTZXQ6IFNpbmdsZXRvbiB8IEVudGl0eVNldDtcblx0bmF2aWdhdGlvblByb3BlcnRpZXM6IChOYXZpZ2F0aW9uUHJvcGVydHkgfCBQcm9wZXJ0eSlbXTtcblx0dGFyZ2V0RW50aXR5U2V0PzogU2luZ2xldG9uIHwgRW50aXR5U2V0O1xuXHR0YXJnZXRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlO1xuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGE7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+ID0gRGF0YU1vZGVsT2JqZWN0Q29udGV4dCAmIHtcblx0Y29udGV4dExvY2F0aW9uPzogRGF0YU1vZGVsT2JqZWN0Q29udGV4dDtcblx0dGFyZ2V0T2JqZWN0PzogVDtcbn07XG5cbnR5cGUgRXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGggPSB7XG5cdHByb3BlcnR5UGF0aD86IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pjtcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvbjtcblx0aWdub3JlVGFyZ2V0Q29sbGVjdGlvbj86IGJvb2xlYW47XG5cdGF1dGhvcml6ZVVucmVzb2x2YWJsZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgcHJvcGVydHkgZnJvbSB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2JqZWN0IHRvIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIHNraXBDbGVhbnVwIERvbid0IGNsZWFuIHVwIGNpcmN1bGFyIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRSZWxhdGl2ZVBhdGhzID0gZnVuY3Rpb24gKGNvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+IHwgdW5kZWZpbmVkLCBza2lwQ2xlYW51cD86IGJvb2xlYW4pOiBzdHJpbmdbXSB7XG5cdHJldHVybiBnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbihjb250ZXh0UGF0aD8uY29udGV4dExvY2F0aW9uLCBjb250ZXh0UGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXMsIHNraXBDbGVhbnVwKS5tYXAoKG5wKSA9PiBucC5uYW1lKTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGZyb20gYSBkYXRhTW9kZWxPYmplY3RQYXRoIHRvIHRoZSB0YXJnZXRlZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIGNvbnRleHRQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gdmlzaXRlZE5hdlByb3BzIFRoZSB0YXJnZXRlZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBza2lwQ2xlYW51cCBEb24ndCBjbGVhbiB1cCBjaXJjdWxhciBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIG5hdmlnYXRpb24gcHJvcGVydGllcyB0byByZWFjaCB0aGUgdGFyZ2V0ZWQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbiA9IGZ1bmN0aW9uIChcblx0Y29udGV4dFBhdGg/OiBEYXRhTW9kZWxPYmplY3RDb250ZXh0LFxuXHR2aXNpdGVkTmF2UHJvcHM6IChOYXZpZ2F0aW9uUHJvcGVydHkgfCBQcm9wZXJ0eSlbXSA9IFtdLFxuXHRza2lwQ2xlYW51cCA9IGZhbHNlXG4pOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10ge1xuXHRjb25zdCBjbGVhblVwTmF2UHJvcCA9IChuYXZQcm9wczogKE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFByb3BlcnR5KVtdKTogKE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFByb3BlcnR5KVtdID0+IHtcblx0XHRsZXQgY3VycmVudElkeCA9IDA7XG5cdFx0d2hpbGUgKG5hdlByb3BzLmxlbmd0aCA+IDEgJiYgY3VycmVudElkeCAhPSBuYXZQcm9wcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50TmF2ID0gbmF2UHJvcHNbY3VycmVudElkeF07XG5cdFx0XHRjb25zdCBuZXh0TmF2UHJvcCA9IG5hdlByb3BzW2N1cnJlbnRJZHggKyAxXTtcblx0XHRcdGlmIChpc05hdmlnYXRpb25Qcm9wZXJ0eShjdXJyZW50TmF2KSAmJiBjdXJyZW50TmF2LnBhcnRuZXIgPT09IG5leHROYXZQcm9wLm5hbWUpIHtcblx0XHRcdFx0bmF2UHJvcHMuc3BsaWNlKDAsIDIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3VycmVudElkeCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbmF2UHJvcHM7XG5cdH07XG5cblx0Y29uc3QgZ2V0QWRkaXRpb25hbE5hdlByb3AgPSAoXG5cdFx0cmVmZXJlbmNlUHJvcHM6IChOYXZpZ2F0aW9uUHJvcGVydHkgfCBQcm9wZXJ0eSlbXSxcblx0XHRvdGhlclByb3BzOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10sXG5cdFx0a2VlcFJlZmVyZW5jZTogYm9vbGVhblxuXHQpOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10gPT4ge1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxOYXZQcm9wczogKE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFByb3BlcnR5KVtdID0gW107XG5cdFx0cmVmZXJlbmNlUHJvcHMuZm9yRWFjaCgobmF2UHJvcCwgbmF2SW5kZXgpID0+IHtcblx0XHRcdGlmIChvdGhlclByb3BzW25hdkluZGV4XSAhPT0gbmF2UHJvcCkge1xuXHRcdFx0XHRhZGRpdGlvbmFsTmF2UHJvcHMucHVzaChrZWVwUmVmZXJlbmNlID8gbmF2UHJvcCA6IG90aGVyUHJvcHNbbmF2SW5kZXhdKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYWRkaXRpb25hbE5hdlByb3BzO1xuXHR9O1xuXG5cdGlmICghY29udGV4dFBhdGgpIHtcblx0XHRyZXR1cm4gdmlzaXRlZE5hdlByb3BzO1xuXHR9XG5cdGlmICh2aXNpdGVkTmF2UHJvcHMubGVuZ3RoID49IGNvbnRleHRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdGxldCByZW1haW5pbmdOYXZQcm9wcyA9IGdldEFkZGl0aW9uYWxOYXZQcm9wKGNvbnRleHRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLCB2aXNpdGVkTmF2UHJvcHMsIGZhbHNlKTtcblx0XHRyZW1haW5pbmdOYXZQcm9wcyA9IHJlbWFpbmluZ05hdlByb3BzLmNvbmNhdCh2aXNpdGVkTmF2UHJvcHMuc2xpY2UoY29udGV4dFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoKSk7XG5cdFx0cmV0dXJuIHNraXBDbGVhbnVwID8gcmVtYWluaW5nTmF2UHJvcHMgOiBjbGVhblVwTmF2UHJvcChyZW1haW5pbmdOYXZQcm9wcyk7XG5cdH1cblx0bGV0IGV4dHJhTmF2UHJvcCA9IGdldEFkZGl0aW9uYWxOYXZQcm9wKHZpc2l0ZWROYXZQcm9wcywgY29udGV4dFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMsIHRydWUpO1xuXHRleHRyYU5hdlByb3AgPSBleHRyYU5hdlByb3AuY29uY2F0KGNvbnRleHRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLnNsaWNlKHZpc2l0ZWROYXZQcm9wcy5sZW5ndGgpKTtcblx0aWYgKCFza2lwQ2xlYW51cCkge1xuXHRcdGNsZWFuVXBOYXZQcm9wKGV4dHJhTmF2UHJvcCk7XG5cdH1cblx0ZXh0cmFOYXZQcm9wID0gZXh0cmFOYXZQcm9wLm1hcCgobmF2UHJvcCkgPT4ge1xuXHRcdHJldHVybiBpc05hdmlnYXRpb25Qcm9wZXJ0eShuYXZQcm9wKVxuXHRcdFx0PyAobmF2UHJvcC50YXJnZXRUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKG5wKSA9PiBucC5uYW1lID09PSBuYXZQcm9wLnBhcnRuZXIpIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSlcblx0XHRcdDogbmF2UHJvcDtcblx0fSk7XG5cdHJldHVybiBleHRyYU5hdlByb3A7XG59O1xuXG4vKipcbiAqIEdldHMgYSBuZXcgZW5oYW5jZWQgZGF0YU1vZGVsT2JqZWN0UGF0aCBtYXRjaGluZyB3aXRoIHRoZSBwcm92aWRlZCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgaW5pdGlhbCBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIG9yIHByb3BlcnR5IHRvIHJlYWNoXG4gKiBAcmV0dXJucyBBIG5ldyBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBlbmhhbmNlRGF0YU1vZGVsUGF0aCA9IGZ1bmN0aW9uIDxUPihcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPiB8IERhdGFNb2RlbE9iamVjdENvbnRleHQsXG5cdHByb3BlcnR5UGF0aD86IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5PlxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB7XG5cdGxldCBzUHJvcGVydHlQYXRoID0gXCJcIjtcblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5UGF0aCkpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlQYXRoLnBhdGg7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHByb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGg7XG5cdH1cblx0bGV0IHRhcmdldDtcblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5UGF0aCkpIHtcblx0XHR0YXJnZXQgPSBwcm9wZXJ0eVBhdGguJHRhcmdldDtcblx0fSBlbHNlIGlmIChjb250YWluc0FDb21wbGV4VHlwZShkYXRhTW9kZWxPYmplY3RQYXRoKSkge1xuXHRcdHRhcmdldCA9IGRhdGFNb2RlbE9iamVjdFBhdGguY29udmVydGVkVHlwZXMucmVzb2x2ZVBhdGgoYCR7Z2V0VGFyZ2V0TmF2aWdhdGlvblBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCl9LyR7c1Byb3BlcnR5UGF0aH1gKT8udGFyZ2V0O1xuXHR9IGVsc2Uge1xuXHRcdGlmIChzUHJvcGVydHlQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHQvLyByZW1vdmUgdGhlIGxlYWRpbmcgXCIvXCIgYmVjYXVzZSB0aGUgcGF0aCBpcyBnb2luZyB0byBiZSByZXNvbHZlZCBmcm9tIHRoZSBlbnRpdHkgdHlwZSwgc28gaXQgc2hvdWxkIG5vdCBiZSBhYnNvbHV0ZVxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IHNQcm9wZXJ0eVBhdGguc3Vic3RyaW5nKDEpO1xuXHRcdH1cblx0XHR0YXJnZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgoc1Byb3BlcnR5UGF0aCk7XG5cdH1cblxuXHRjb25zdCBwYXRoU3BsaXRzID0gc1Byb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cblx0bGV0IG5ld0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gPSBkYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8VD47XG5cdGZvciAoY29uc3QgcGF0aFBhcnQgb2YgcGF0aFNwbGl0cykge1xuXHRcdG5ld0RhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRnJvbVBhdGgobmV3RGF0YU1vZGVsT2JqZWN0UGF0aCwgcGF0aFBhcnQpO1xuXHR9XG5cdG5ld0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ID0gdGFyZ2V0O1xuXHRyZXR1cm4gbmV3RGF0YU1vZGVsT2JqZWN0UGF0aDtcbn07XG5cbi8qKlxuICogR2V0cyBhIG5ldyBlbmhhbmNlZCBkYXRhTW9kZWxPYmplY3RQYXRoIG1hdGNoaW5nIHdpdGggdGhlIHByb3ZpZGVkIHBhdGhcbiAqIFRoZSB0YXJnZXRPYmplY3QgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyBpbnRlcm5hbCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgaW5pdGlhbCBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gcGF0aCBUaGUgb2JqZWN0IHBhdGggdG8gcmVhY2hcbiAqIEByZXR1cm5zIEEgbmV3IGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqL1xuXG5jb25zdCBlbmhhbmNlRnJvbVBhdGggPSBmdW5jdGlvbiA8VD4oZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPiwgcGF0aDogc3RyaW5nKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB7XG5cdGxldCB0YXJnZXRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZDtcblx0bGV0IHRhcmdldEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5jb25jYXQoKTtcblx0Y29uc3QgbmF2aWdhdGlvbkluZGV4ID0gbmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoO1xuXHRjb25zdCByZWZlcmVuY2VFbnRpdHlUeXBlID0gbmF2aWdhdGlvbkluZGV4XG5cdFx0PyBuYXZpZ2F0aW9uUHJvcGVydGllc1tuYXZpZ2F0aW9uSW5kZXggLSAxXS50YXJnZXRUeXBlXG5cdFx0OiBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGU7XG5cdGlmICghcmVmZXJlbmNlRW50aXR5VHlwZSkge1xuXHRcdHJldHVybiBkYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8VD47XG5cdH0gZWxzZSBpZiAoaXNFbnRpdHlUeXBlKHJlZmVyZW5jZUVudGl0eVR5cGUpIHx8IGlzQ29tcGxleFR5cGUocmVmZXJlbmNlRW50aXR5VHlwZSkpIHtcblx0XHRjb25zdCBjdXJyZW50RW50aXR5U2V0ID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdFx0Y29uc3QgcG90ZW50aWFsTmF2UHJvcCA9IHJlZmVyZW5jZUVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lID09PSBwYXRoKTtcblx0XHRpZiAocG90ZW50aWFsTmF2UHJvcCkge1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChwb3RlbnRpYWxOYXZQcm9wKTtcblx0XHRcdHRhcmdldEVudGl0eVR5cGUgPSBwb3RlbnRpYWxOYXZQcm9wLnRhcmdldFR5cGU7XG5cblx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoRnJvbVByZXZpb3VzRW50aXR5U2V0ID0gZ2V0TmF2aWdhdGlvbkJpbmRpbmdGcm9tUHJldmlvdXNFbnRpdHlTZXQobmF2aWdhdGlvblByb3BlcnRpZXMpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRuYXZpZ2F0aW9uUGF0aEZyb21QcmV2aW91c0VudGl0eVNldCAmJlxuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0Py5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLmhhc093blByb3BlcnR5KG5hdmlnYXRpb25QYXRoRnJvbVByZXZpb3VzRW50aXR5U2V0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRhcmdldEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUGF0aEZyb21QcmV2aW91c0VudGl0eVNldF0gYXMgRW50aXR5U2V0O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwb3RlbnRpYWxDb21wbGV4VHlwZSA9IChcblx0XHRcdFx0KHJlZmVyZW5jZUVudGl0eVR5cGUgYXMgRW50aXR5VHlwZSkuZW50aXR5UHJvcGVydGllcyB8fCAocmVmZXJlbmNlRW50aXR5VHlwZSBhcyBDb21wbGV4VHlwZSkucHJvcGVydGllc1xuXHRcdFx0KS5maW5kKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUgPT09IHBhdGgpO1xuXHRcdFx0aWYgKHBvdGVudGlhbENvbXBsZXhUeXBlPy50YXJnZXRUeXBlPy5fdHlwZSA9PT0gXCJDb21wbGV4VHlwZVwiKSB7XG5cdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2gocG90ZW50aWFsQ29tcGxleFR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRjb250ZXh0TG9jYXRpb246IGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdHRhcmdldEVudGl0eVNldDogdGFyZ2V0RW50aXR5U2V0ID8/IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IHRhcmdldEVudGl0eVR5cGUgPz8gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdHRhcmdldE9iamVjdDogZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgVCxcblx0XHRjb252ZXJ0ZWRUeXBlczogZGF0YU1vZGVsT2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlc1xuXHR9O1xufTtcblxuLyoqXG4gKiBEZXRlY3RzIGlmIHRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIGhhcyBuYXZpZ2F0ZWQgdGhyZXcgYSBjb21wbGV4VHlwZS5cbiAqXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgSXMgdGhlcmUgYSBjb21wbGV4VHlwZSBpbnRvIHRoZSBEYXRhTW9kZWxPYmplY3RQYXRoLlxuICovXG5jb25zdCBjb250YWluc0FDb21wbGV4VHlwZSA9IGZ1bmN0aW9uIChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RDb250ZXh0KTogYm9vbGVhbiB7XG5cdHJldHVybiBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKG5hdmlnYXRpb24pID0+IGlzQ29tcGxleFR5cGUobmF2aWdhdGlvbj8udGFyZ2V0VHlwZSkpICE9PSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdmlnYXRpb24gYmluZGluZyBmcm9tIHRoZSBwcmV2aW91cyBlbnRpdHlTZXQgbGlzdGVkIGludG8gdGhlIG5hdmlnYXRpb24gcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnRpZXMgVGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICogQHJldHVybnMgQSBuZXcgZGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqL1xuY29uc3QgZ2V0TmF2aWdhdGlvbkJpbmRpbmdGcm9tUHJldmlvdXNFbnRpdHlTZXQgPSBmdW5jdGlvbiAobmF2aWdhdGlvblByb3BlcnRpZXM6IChOYXZpZ2F0aW9uUHJvcGVydHkgfCBQcm9wZXJ0eSlbXSk6IHN0cmluZyB7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eUxlbmd0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aDtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eUxlbmd0aCkge1xuXHRcdGNvbnN0IGxhc3ROYXZpZ2F0aW9uID0gbmF2aWdhdGlvblByb3BlcnRpZXNbbmF2aWdhdGlvblByb3BlcnR5TGVuZ3RoIC0gMV07XG5cdFx0Y29uc3QgaXNDb21wbGV4VHlwZUxhc3ROYXZpZ2F0aW9uID0gaXNDb21wbGV4VHlwZShsYXN0TmF2aWdhdGlvbi50YXJnZXRUeXBlKTtcblx0XHRsZXQgbmF2aWdhdGlvblBhdGggPSBcIlwiO1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlMZW5ndGggPiAxICYmICFpc0NvbXBsZXhUeXBlTGFzdE5hdmlnYXRpb24pIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmF2aWdhdGlvblByb3BlcnR5TGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IG5hdmlnYXRpb25Qcm9wZXJ0aWVzW2ldO1xuXHRcdFx0XHRpZiAoaXNDb21wbGV4VHlwZShuYXZpZ2F0aW9uUHJvcGVydHkudGFyZ2V0VHlwZSkpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCArPSBgJHtuYXZpZ2F0aW9uUHJvcGVydHkubmFtZX0vYDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGlzQ29tcGxleFR5cGVMYXN0TmF2aWdhdGlvbiA/IFwiXCIgOiBgJHtuYXZpZ2F0aW9uUGF0aH0ke2xhc3ROYXZpZ2F0aW9uLm5hbWV9YDtcblx0fVxuXHRyZXR1cm4gXCJcIjtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0ZWQgZW50aXR5U2V0LlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRhcmdldEVudGl0eVNldFBhdGggPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPik6IHN0cmluZyB7XG5cdGNvbnN0IGluaXRpYWxQYXRoID0gYC8ke2RhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZX1gO1xuXHRsZXQgdGFyZ2V0RW50aXR5U2V0UGF0aCA9IGluaXRpYWxQYXRoO1xuXHRsZXQgY3VycmVudEVudGl0eVNldCA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQ7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcztcblx0bGV0IG5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRuYXZpZ2F0aW9uUGF0aCA9IGdldE5hdmlnYXRpb25CaW5kaW5nRnJvbVByZXZpb3VzRW50aXR5U2V0KG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnNsaWNlKDAsIGkgKyAxKSk7XG5cdFx0aWYgKGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLmhhc093blByb3BlcnR5KG5hdmlnYXRpb25QYXRoKSkge1xuXHRcdFx0dGFyZ2V0RW50aXR5U2V0UGF0aCArPSBgLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLyR7bmF2aWdhdGlvblBhdGgucmVwbGFjZShcIi9cIiwgXCIlMkZcIil9YDtcblx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGlvblBhdGhdIGFzIEVudGl0eVNldDtcblx0XHR9XG5cdH1cblxuXHR0YXJnZXRFbnRpdHlTZXRQYXRoICs9IFwiLyRcIjtcblx0cmV0dXJuIHRhcmdldEVudGl0eVNldFBhdGg7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHBhdGggb2YgdGhlIHRhcmdldGVkIG5hdmlnYXRpb24uXG4gKlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBiUmVsYXRpdmVcbiAqIEByZXR1cm5zIFRoZSBwYXRoLlxuICovXG5cbmV4cG9ydCBjb25zdCBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCA9IGZ1bmN0aW9uIChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LCBiUmVsYXRpdmUgPSBmYWxzZSk6IHN0cmluZyB7XG5cdGxldCBwYXRoID0gXCJcIjtcblx0aWYgKCFkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSB7XG5cdFx0cmV0dXJuIFwiL1wiO1xuXHR9XG5cdGlmICghYlJlbGF0aXZlKSB7XG5cdFx0cGF0aCArPSBgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWA7XG5cdH1cblx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdHBhdGggPSBzZXRUcmFpbGluZ1NsYXNoKHBhdGgpO1xuXHRcdHBhdGggKz0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSkuam9pbihcIi9cIik7XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHBhdGggb2YgdGhlIHRhcmdldGVkIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGJSZWxhdGl2ZVxuICogQHJldHVybnMgVGhlIHBhdGguXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUYXJnZXRPYmplY3RQYXRoID0gZnVuY3Rpb24gKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sIGJSZWxhdGl2ZSA9IGZhbHNlKTogc3RyaW5nIHtcblx0bGV0IHBhdGggPSBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChkYXRhTW9kZWxPYmplY3RQYXRoLCBiUmVsYXRpdmUpO1xuXHRpZiAoXG5cdFx0aXNTZXJ2aWNlT2JqZWN0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCFpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQhaXNFbnRpdHlUeXBlKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCFpc0VudGl0eVNldChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQoIWlzUHJvcGVydHkoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHx8ICFpc0NvbXBsZXhUeXBlKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py50YXJnZXRUeXBlKSkgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCAhPT0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldFxuXHQpIHtcblx0XHRwYXRoID0gc2V0VHJhaWxpbmdTbGFzaChwYXRoKTtcblx0XHRwYXRoICs9IGAke2RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Lm5hbWV9YDtcblx0fSBlbHNlIGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCAmJiBpc0Fubm90YXRpb25UZXJtKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdHBhdGggPSBzZXRUcmFpbGluZ1NsYXNoKHBhdGgpO1xuXHRcdHBhdGggKz0gYEAke2RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnRlcm19YDtcblx0XHRpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuaGFzT3duUHJvcGVydHkoXCJxdWFsaWZpZXJcIikgJiYgISFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5xdWFsaWZpZXIpIHtcblx0XHRcdHBhdGggKz0gYCMke2RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnF1YWxpZmllcn1gO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRmb3JCaW5kaW5nRXhwcmVzc2lvbiA9IGZhbHNlLFxuXHRmb3JGaWx0ZXJDb25kaXRpb25QYXRoID0gZmFsc2Vcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8uc3RhcnRpbmdFbnRpdHlTZXQgIT09IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpIHtcblx0XHRyZXR1cm4gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fVxuXHRyZXR1cm4gX2dldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCwgZm9yQmluZGluZ0V4cHJlc3Npb24sIGZvckZpbHRlckNvbmRpdGlvblBhdGgpO1xufTtcblxuY29uc3QgX2dldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGZvckJpbmRpbmdFeHByZXNzaW9uID0gZmFsc2UsXG5cdGZvckZpbHRlckNvbmRpdGlvblBhdGggPSBmYWxzZVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgbmF2UHJvcGVydGllcyA9IGdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uKGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLCBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzKTtcblx0aWYgKGZvckJpbmRpbmdFeHByZXNzaW9uKSB7XG5cdFx0aWYgKG5hdlByb3BlcnRpZXMuc29tZShpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0bGV0IHBhdGggPSBmb3JGaWx0ZXJDb25kaXRpb25QYXRoXG5cdFx0PyBuYXZQcm9wZXJ0aWVzXG5cdFx0XHRcdC5tYXAoKG5hdlByb3ApID0+IHtcblx0XHRcdFx0XHRjb25zdCBpc0NvbGxlY3Rpb24gPSBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KG5hdlByb3ApO1xuXHRcdFx0XHRcdHJldHVybiBpc0NvbGxlY3Rpb24gPyBgJHtuYXZQcm9wLm5hbWV9KmAgOiBuYXZQcm9wLm5hbWU7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5qb2luKFwiL1wiKVxuXHRcdDogbmF2UHJvcGVydGllcy5tYXAoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSkuam9pbihcIi9cIik7XG5cblx0aWYgKFxuXHRcdCgoaXNTZXJ2aWNlT2JqZWN0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJiBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5uYW1lKSB8fFxuXHRcdFx0KGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbihkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiYgZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QudmFsdWUpKSAmJlxuXHRcdCFpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQhaXNFbnRpdHlUeXBlKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCFpc0VudGl0eVNldChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQoIWlzUHJvcGVydHkoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHx8ICFpc0NvbXBsZXhUeXBlKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py50YXJnZXRUeXBlKSkgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCAhPT0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldFxuXHQpIHtcblx0XHRwYXRoID0gc2V0VHJhaWxpbmdTbGFzaChwYXRoKTtcblx0XHRwYXRoICs9IGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbihkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdClcblx0XHRcdD8gYCR7ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QudmFsdWV9YFxuXHRcdFx0OiBgJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5uYW1lfWA7XG5cdH0gZWxzZSBpZiAoaXNBbm5vdGF0aW9uVGVybShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkpIHtcblx0XHRwYXRoID0gc2V0VHJhaWxpbmdTbGFzaChwYXRoKTtcblx0XHRwYXRoICs9IGBAJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC50ZXJtfWA7XG5cdFx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Lmhhc093blByb3BlcnR5KFwicXVhbGlmaWVyXCIpICYmICEhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucXVhbGlmaWVyKSB7XG5cdFx0XHRwYXRoICs9IGAjJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5xdWFsaWZpZXJ9YDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuXG4vKipcbiAqIEdldHMgYW4gYXJyYXkgb2YgcHJvcGVydGllcyB3aGVyZSBhIHNwZWNpZmljIHJlc3RyaWN0aW9uIGlzIGFwcGxpZWQuXG4gKlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBjaGVja0Z1bmN0aW9uIFRoZSBmdW5jdGlvbiB0ZXN0aW5nIHRoZSByZXN0cmljdGlvbiBhbmQgcmV0dXJuaW5nIHRoZSBhcnJheSBvZiBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gb25Db250ZXh0IElzIHRoZSByZXN0cmljdGlvbiB0ZXN0ZWQgb24gdGhlIHRhcmdldCBvYmplY3Qgb3IgaXRzIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udGV4dFByb3BlcnR5UmVzdHJpY3Rpb24gPSAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGNoZWNrRnVuY3Rpb246IChcblx0XHRjYXBhYmlsaXRpZXM6IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcyB8IFNpbmdsZXRvbkFubm90YXRpb25zX0NhcGFiaWxpdGllcyB8IHVuZGVmaW5lZFxuXHQpID0+IFByb3BlcnR5UGF0aFtdIHwgdW5kZWZpbmVkLFxuXHRvbkNvbnRleHQgPSB0cnVlXG4pOiBQcm9wZXJ0eVBhdGhbXSA9PiB7XG5cdGNvbnN0IHNvdXJjZSA9IG9uQ29udGV4dCA/IGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uIDogZGF0YU1vZGVsT2JqZWN0UGF0aDtcblx0Y29uc3QgbGFzdE5hdlByb3AgPSBzb3VyY2U/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5zbGljZSgtMSlbMF07XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBjaGVja0Z1bmN0aW9uKGxhc3ROYXZQcm9wPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzKTtcblx0cmV0dXJuIHByb3BlcnRpZXM/Lmxlbmd0aCA/IHByb3BlcnRpZXMgOiBjaGVja0Z1bmN0aW9uKHNvdXJjZT8udGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzKSB8fCBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BhdGhVcGRhdGFibGUgPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4gfCB1bmRlZmluZWQsXG5cdGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPzogRXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjaGVja09uUGF0aChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdChhbm5vdGF0aW9uT2JqZWN0OiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcykgPT4ge1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25PYmplY3Q/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlO1xuXHRcdH0sXG5cdFx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcblx0KTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcGFyZW50IG5hdmlnYXRpb24gcHJvcGVydHkgb2YgdGhlIGdpdmVuIG5vZGUgaGllcmFyY2h5LlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gaGllcmFyY2h5UXVhbGlmaWVyIFRoZSBxdWFsaWZpZXIgb2YgdGhlIGhpZXJhcmNoeSBzZXQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBUaGUgcGFyZW50IG5hdmlnYXRpb24gcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRoaWVyYXJjaHlRdWFsaWZpZXI6IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5BZ2dyZWdhdGlvbj8uW2BSZWN1cnNpdmVIaWVyYXJjaHkjJHtoaWVyYXJjaHlRdWFsaWZpZXJ9YF1cblx0XHQ/LlBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eS4kdGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWU7XG59O1xuXG4vKipcbiAqIEdldHMgYW4gYXJyYXkgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHdoZXJlIGFuIHVwZGF0ZSByZXN0cmljdGlvbiBpcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHdpdGggdGhlIHJlc3RyaWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZ2V0Tm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZCB7XG5cdC8vIFVwZGF0ZVJlc3RyaWN0aW9ucy5Ob25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyBvbiB0aGUgcGFyZW50IG5hdmlnYXRpb246XG5cdC8vIFJFVklFVzogVGhpcyBpcyB3cm9uZyA/IHRoZSB1cGRhdGVSZXN0cmljdGlvbiBhbm5vdGF0aW9uIG5lZWRzIHRvIGJlIG9uIGVudGl0eXNldCBidXQgb3VyIHRlc3Qgc29tZXRpbWVzIHB1dCBpdCBvbiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRjb25zdCBub25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5VcGRhdGVSZXN0cmljdGlvbnNcblx0XHQ/Lk5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRpZiAobm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMgJiYgbm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gbm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMubWFwKFxuXHRcdFx0KG5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5UGF0aCkgPT5cblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24gJiZcblx0XHRcdFx0ZW5oYW5jZURhdGFNb2RlbFBhdGg8U2VydmljZU9iamVjdD4oZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24sIG5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSkudGFyZ2V0T2JqZWN0IVxuXHRcdFx0XHRcdC5mdWxseVF1YWxpZmllZE5hbWVcblx0XHQpO1xuXHR9XG5cdC8vIFVwZGF0ZVJlc3RyaWN0aW9ucy5Ob25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyBvbiB0aGUgZW50aXR5U2V0IChvciBlbnRpdHlUeXBlKTpcblx0cmV0dXJuIGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uTm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXM/Lm1hcChcblx0XHQobmF2aWdhdGlvblByb3BlcnR5UGF0aCkgPT4gbmF2aWdhdGlvblByb3BlcnR5UGF0aC4kdGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWVcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BhdGhTZWFyY2hhYmxlID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+IHwgdW5kZWZpbmVkLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY2hlY2tPblBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHQoYW5ub3RhdGlvbk9iamVjdDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24gfCBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMpID0+IHtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0Py5TZWFyY2hSZXN0cmljdGlvbnM/LlNlYXJjaGFibGU7XG5cdFx0fSxcblx0XHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUGF0aERlbGV0YWJsZSA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/OiBFeHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNoZWNrT25QYXRoKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0KGFubm90YXRpb25PYmplY3Q6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdD8uRGVsZXRlUmVzdHJpY3Rpb25zPy5EZWxldGFibGU7XG5cdFx0fSxcblx0XHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUGF0aEluc2VydGFibGUgPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4gfCB1bmRlZmluZWQsXG5cdGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPzogRXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjaGVja09uUGF0aChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdChhbm5vdGF0aW9uT2JqZWN0OiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcykgPT4ge1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25PYmplY3Q/Lkluc2VydFJlc3RyaWN0aW9ucz8uSW5zZXJ0YWJsZTtcblx0XHR9LFxuXHRcdGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQYXRoRmlsdGVyYWJsZSA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/OiBFeHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNoZWNrT25QYXRoKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0KGFubm90YXRpb25PYmplY3Q6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdD8uRmlsdGVyUmVzdHJpY3Rpb25zPy5GaWx0ZXJhYmxlO1xuXHRcdH0sXG5cdFx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGFsbG93ZWRFeHByZXNzaW9uOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY2hlY2tPblBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHQoYW5ub3RhdGlvbk9iamVjdDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24gfCBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfCBFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdCAmJiBcIkZpbHRlclJlc3RyaWN0aW9uc1wiIGluIGFubm90YXRpb25PYmplY3QpIHtcblx0XHRcdFx0Y29uc3QgZmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uczogRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZVR5cGVzW10gPVxuXHRcdFx0XHRcdChhbm5vdGF0aW9uT2JqZWN0Py5GaWx0ZXJSZXN0cmljdGlvbnM/LkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgYXMgRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZVR5cGVzW10pIHx8IFtdO1xuXHRcdFx0XHRjb25zdCBjdXJyZW50T2JqZWN0UmVzdHJpY3Rpb24gPSBmaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmZpbmQoKHJlc3RyaWN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChyZXN0cmljdGlvbi5Qcm9wZXJ0eSBhcyBQcm9wZXJ0eVBhdGgpLiR0YXJnZXQgPT09IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGN1cnJlbnRPYmplY3RSZXN0cmljdGlvbikge1xuXHRcdFx0XHRcdHJldHVybiBhbGxvd2VkRXhwcmVzc2lvbi5pbmNsdWRlcyhjdXJyZW50T2JqZWN0UmVzdHJpY3Rpb24/LkFsbG93ZWRFeHByZXNzaW9ucz8udG9TdHJpbmcoKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufTtcblxudHlwZSBFbnRpdHlPclNpbmdsZXRvbiA9IFNpbmdsZXRvbiB8IEVudGl0eVNldCB8IG51bGw7XG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBlbnRpdHlTZXQsIGl0cyBwYXJlbnQgYW5kIHRoZSBuYXZpZ2F0aW9uIHBhdGggZnJvbSB0aGUgcGFyZW50IHRvIHRoZSB0YXJnZXQgZW50aXR5U2V0XG4gKiBUaGUgdGFyZ2V0IGVudGl0eVNldCBwb2ludGluZyB0byBlaXRoZXIgbnVsbCAoaW4gY2FzZSBvZiBjb250YWlubWVudCBuYXZwcm9wIGEgbGFzdCBwYXJ0KSwgb3IgdGhlIGFjdHVhbCB0YXJnZXQgKG5vbiBjb250YWlubWVudCBhcyB0YXJnZXQpXG4gKiBUaGUgcGFyZW50IGVudGl0eVNldCBwb2ludGluZyB0byB0aGUgcHJldmlvdXMgZW50aXR5U2V0IHVzZWQgaW4gdGhlIHBhdGguXG4gKlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgZW50aXR5c2V0LCBpdHMgcGFyZW50IGFuZCB0aGUgbmF2aWdhdGlvbiBwYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUYXJnZXRFbnRpdHlTZXRJbmZvID0gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG4pOiB7XG5cdHBhcmVudEVudGl0eVNldDogRW50aXR5T3JTaW5nbGV0b247XG5cdHRhcmdldEVudGl0eVNldDogRW50aXR5T3JTaW5nbGV0b247XG5cdHBhcmVudE5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG59ID0+IHtcblx0bGV0IHJlc2V0VmlzaXRlZE5hdlByb3BzID0gZmFsc2U7XG5cdGxldCB2aXNpdGVkTmF2aWdhdGlvblByb3BzTmFtZTogc3RyaW5nW10gPSBbXTtcblx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eU9yU2luZ2xldG9uID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldDtcblx0bGV0IHBhcmVudEVudGl0eVNldDogRW50aXR5T3JTaW5nbGV0b24gPSBudWxsO1xuXHRsZXQgdGFyZ2V0RW50aXR5U2V0OiBFbnRpdHlPclNpbmdsZXRvbiA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdGxldCBwYXJlbnROYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cblx0Zm9yIChjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgb2YgZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcykge1xuXHRcdGlmIChyZXNldFZpc2l0ZWROYXZQcm9wcykge1xuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25Qcm9wc05hbWUgPSBbXTtcblx0XHR9XG5cdFx0dmlzaXRlZE5hdmlnYXRpb25Qcm9wc05hbWUucHVzaChuYXZpZ2F0aW9uUHJvcGVydHkubmFtZSk7XG5cdFx0cGFyZW50TmF2aWdhdGlvblBhdGggPSB2aXNpdGVkTmF2aWdhdGlvblByb3BzTmFtZS5qb2luKFwiL1wiKTtcblx0XHRpZiAoaXNQcm9wZXJ0eShuYXZpZ2F0aW9uUHJvcGVydHkpIHx8ICFuYXZpZ2F0aW9uUHJvcGVydHkuY29udGFpbnNUYXJnZXQpIHtcblx0XHRcdC8vIFdlIHNob3VsZCBoYXZlIGEgbmF2aWdhdGlvblByb3BlcnR5QmluZGluZyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhdGggc28gZmFyIHdoaWNoIGNhbiBjb25zaXN0IG9mIChbQ29udGFpbm1lbnROYXZQcm9wXS8pKltOYXZQcm9wXVxuXHRcdFx0aWYgKGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLmhhc093blByb3BlcnR5KHBhcmVudE5hdmlnYXRpb25QYXRoKSkge1xuXHRcdFx0XHRwYXJlbnRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0O1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW3BhcmVudE5hdmlnYXRpb25QYXRoXTtcblx0XHRcdFx0dGFyZ2V0RW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldDtcblx0XHRcdFx0Ly8gSWYgd2UgcmVhY2hlZCBhIG5hdmlnYXRpb24gcHJvcGVydHkgd2l0aCBhIG5hdmlnYXRpb25wcm9wZXJ0eWJpbmRpbmcsIHdlIG5lZWQgdG8gcmVzZXQgdGhlIHZpc2l0ZWQgcGF0aCBvbiB0aGUgbmV4dCBpdGVyYXRpb24gKGlmIHRoZXJlIGlzIG9uZSlcblx0XHRcdFx0cmVzZXRWaXNpdGVkTmF2UHJvcHMgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gV2UgcmVhbGx5IHNob3VsZCBub3QgZW5kIHVwIGhlcmUgYnV0IGF0IGxlYXN0IGxldCdzIHRyeSB0byBhdm9pZCBpbmNvcnJlY3QgYmVoYXZpb3Jcblx0XHRcdFx0cGFyZW50RW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldDtcblx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IG51bGw7XG5cdFx0XHRcdHJlc2V0VmlzaXRlZE5hdlByb3BzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFyZW50RW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldDtcblx0XHRcdHRhcmdldEVudGl0eVNldCA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgcGFyZW50RW50aXR5U2V0LCB0YXJnZXRFbnRpdHlTZXQsIHBhcmVudE5hdmlnYXRpb25QYXRoIH07XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHJlc3RyaWN0aW9ucyBzZXQgb24gdGhlIHBhcmVudCBuYXZpZ2F0aW9uLlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gY2hlY2tGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSBleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aCBUaGUgZXh0cmFjdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uLlxuICovXG5jb25zdCBjaGVja09uUGFyZW50TmF2aWdhdGlvbiA9IChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0Y2hlY2tGdW5jdGlvbjogRnVuY3Rpb24sXG5cdGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPzogRXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wcyA9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdGNvbnN0IHsgcGFyZW50RW50aXR5U2V0LCBwYXJlbnROYXZpZ2F0aW9uUGF0aCB9ID0gZ2V0VGFyZ2V0RW50aXR5U2V0SW5mbyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0bGV0IHJlc3RyaWN0aW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHwgdW5kZWZpbmVkLCB2aXNpdGVkTmF2UHJvcHM6IChQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSlbXTtcblx0Zm9yIChjb25zdCByZXN0cmljdGVkTmF2UHJvcCBvZiBwYXJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/Lk5hdmlnYXRpb25SZXN0cmljdGlvbnM/LlJlc3RyaWN0ZWRQcm9wZXJ0aWVzID8/IFtdKSB7XG5cdFx0aWYgKHBhcmVudE5hdmlnYXRpb25QYXRoID09PSByZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUpIHtcblx0XHRcdGNvbnN0IHJlc3RyaWN0aW9uRGVmaW5pdGlvbiA9IGNoZWNrRnVuY3Rpb24ocmVzdHJpY3RlZE5hdlByb3ApPy52YWx1ZU9mKCk7XG5cdFx0XHRpZiAocmVzdHJpY3Rpb25EZWZpbml0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKGlzQ29uc3RhbnQoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHJlc3RyaWN0aW9uRGVmaW5pdGlvbikpKSB7XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gY29uc3RhbnQocmVzdHJpY3Rpb25EZWZpbml0aW9uKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBfbmF2aWdhdGlvblByb3BzID0gbmF2aWdhdGlvblByb3BzLnNsaWNlKDAsIC0xKTtcblx0XHRcdFx0XHR2aXNpdGVkTmF2UHJvcHMgPSBfbmF2aWdhdGlvblByb3BzO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uICYmXG5cdFx0XHRcdFx0XHR2aXNpdGVkTmF2UHJvcHMubGVuZ3RoIDwgZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCAmJiAvLyBXZSBuZWVkIHRvIGdvIGJhY2t3YXJkIHRvIGdldCB0aGUgcmVsYXRpdmUgcGF0aFxuXHRcdFx0XHRcdFx0IShuYXZpZ2F0aW9uUHJvcHNbbmF2aWdhdGlvblByb3BzLmxlbmd0aCAtIDFdIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSkucGFydG5lclxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Ly8gVG8gZ28gYmFja3dhcmQgd2UgbmVlZCB0aGUgcGFydG5lclxuXHRcdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwYXRoUmVsYXRpdmVMb2NhdGlvbiA9IGdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uKGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLCB2aXNpdGVkTmF2UHJvcHMpLm1hcChcblx0XHRcdFx0XHRcdFx0KG5wKSA9PiBucC5uYW1lXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aFZpc2l0b3JGdW5jdGlvbiA9IGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPy5wYXRoVmlzaXRvclxuXHRcdFx0XHRcdFx0XHQ/IGdldFBhdGhWaXNpdG9yRm9yU2luZ2xldG9uKGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoLnBhdGhWaXNpdG9yLCBwYXRoUmVsYXRpdmVMb2NhdGlvbilcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7IC8vIHNlbmQgcGF0aFZpc2l0b3IgZnVuY3Rpb24gb25seSB3aGVuIGl0IGlzIGRlZmluZWQgYW5kIG9ubHkgc2VuZCBmdW5jdGlvbiBvciBkZWZpbmVkIGFzIGEgcGFyYW1ldGVyXG5cdFx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBlcXVhbChcblx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHJlc3RyaWN0aW9uRGVmaW5pdGlvbiwgcGF0aFJlbGF0aXZlTG9jYXRpb24sIHVuZGVmaW5lZCwgcGF0aFZpc2l0b3JGdW5jdGlvbiksXG5cdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXN0cmljdGlvbnM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHJlc3RyaWN0aW9ucyBzZXQgb24gdGhlIHRhcmdldCBlbnRpdHlTZXQuXG4gKlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBjaGVja0Z1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byBjaGVjayB0aGUgYW5ub3RhdGlvblxuICogQHBhcmFtIGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoIFRoZSBleHRyYWN0aW9uIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24uXG4gKi9cbmNvbnN0IGNoZWNrT25UYXJnZXQgPSAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGNoZWNrRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlIHwgbnVsbCA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0bGV0IHRhcmdldFJlc3RyaWN0aW9ucztcblx0Y29uc3QgeyB0YXJnZXRFbnRpdHlTZXQgfSA9IGdldFRhcmdldEVudGl0eVNldEluZm8oZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGxldCByZXN0cmljdGlvbkRlZmluaXRpb24gPSBjaGVja0Z1bmN0aW9uKHRhcmdldEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcyk7XG5cdGlmICh0YXJnZXRFbnRpdHlTZXQgPT09IG51bGwgJiYgcmVzdHJpY3Rpb25EZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXN0cmljdGlvbkRlZmluaXRpb24gPSBjaGVja0Z1bmN0aW9uKHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXMpO1xuXHR9XG5cdGlmIChyZXN0cmljdGlvbkRlZmluaXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IHBhdGhSZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRjb25zdCBwYXRoVmlzaXRvckZ1bmN0aW9uID0gZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/LnBhdGhWaXNpdG9yXG5cdFx0XHQ/IGdldFBhdGhWaXNpdG9yRm9yU2luZ2xldG9uKGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoLnBhdGhWaXNpdG9yLCBwYXRoUmVsYXRpdmVMb2NhdGlvbilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdHRhcmdldFJlc3RyaWN0aW9ucyA9IGVxdWFsKFxuXHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHJlc3RyaWN0aW9uRGVmaW5pdGlvbiwgcGF0aFJlbGF0aXZlTG9jYXRpb24sIHVuZGVmaW5lZCwgcGF0aFZpc2l0b3JGdW5jdGlvbiksXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdGFyZ2V0UmVzdHJpY3Rpb25zO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSByZXN0cmljdGlvbnMgYXBwbGllZCBvbiB0aGUgdGFyZ2V0XG4gKiBUaGUgcmVzdHJpY3Rpb24gaXMgY2FsdWNsYXRlZCBhY2NvcmRpbmcgdG8gdGhlIHBhcmVudCBhbmQgdGhlIHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGNoZWNrRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGggVGhlIGV4dHJhY3Rpb24gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGNoZWNrT25QYXRoID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+IHwgdW5kZWZpbmVkLFxuXHRjaGVja0Z1bmN0aW9uOiBGdW5jdGlvbixcblx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/OiBFeHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKCFkYXRhTW9kZWxPYmplY3RQYXRoIHx8ICFkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGgsIGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPy5wcm9wZXJ0eVBhdGgpO1xuXG5cdC8vIFJlc3RyaWN0aW9ucyBzaG91bGQgYmUgZXZhbHVhdGVkIGFzIFBhcmVudEVudGl0eVNldC5OYXZSZXN0cmljdGlvbnNbTmF2UHJvcGVydHlQYXRoXSB8fCBUYXJnZXRFbnRpdHlTZXQuUmVzdHJpY3Rpb25zXG5cdGNvbnN0IHJlc3RyaWN0aW9ucyA9IGNoZWNrT25QYXJlbnROYXZpZ2F0aW9uKGRhdGFNb2RlbE9iamVjdFBhdGgsIGNoZWNrRnVuY3Rpb24sIGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoKTtcblx0Y29uc3QgdGFyZ2V0UmVzdHJpY3Rpb25zID0gZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/Lmlnbm9yZVRhcmdldENvbGxlY3Rpb25cblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDogY2hlY2tPblRhcmdldChkYXRhTW9kZWxPYmplY3RQYXRoLCBjaGVja0Z1bmN0aW9uLCBleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aCk7XG5cblx0cmV0dXJuIChcblx0XHRyZXN0cmljdGlvbnMgfHwgdGFyZ2V0UmVzdHJpY3Rpb25zIHx8IChleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD8uYXV0aG9yaXplVW5yZXNvbHZhYmxlID8gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbiA6IGNvbnN0YW50KHRydWUpKVxuXHQpO1xufTtcblxuLyoqXG4gKiBTZXQgYSB0cmFpbGluZyBzbGFzaCB0byBhIHBhdGggaWYgbm90IGFscmVhZHkgc2V0LlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoXG4gKiBAcmV0dXJucyBUaGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2hcbiAqL1xuY29uc3Qgc2V0VHJhaWxpbmdTbGFzaCA9IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRpZiAocGF0aC5sZW5ndGggJiYgIXBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG5cdFx0cmV0dXJuIGAke3BhdGh9L2A7XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuXG4vLyBUaGlzIGhlbHBlciBtZXRob2QgaXMgdXNlZCB0byBhZGQgcmVsYXRpdmUgcGF0aCBsb2NhdGlvbiBhcmd1bWVudCB0byBzaW5nbGV0b25QYXRoVmlzaXRvckZ1bmN0aW9uIGkuZS4gcGF0aFZpc2l0b3Jcbi8vIHBhdGhWaXNpdG9yIG1ldGhvZCBpcyB1c2VkIGxhdGVyIHRvIGdldCB0aGUgY29ycmVjdCBiaW5kaW5ncyBmb3Igc2luZ2xldG9uIGVudGl0eVxuLy8gbWV0aG9kIGlzIGludm9rZWQgbGF0ZXIgaW4gcGF0aEluTW9kZWwoKSBtZXRob2QgdG8gZ2V0IHRoZSBjb3JyZWN0IGJpbmRpbmcuXG5jb25zdCBnZXRQYXRoVmlzaXRvckZvclNpbmdsZXRvbiA9IGZ1bmN0aW9uIChwYXRoVmlzaXRvcjogRnVuY3Rpb24sIHBhdGhSZWxhdGl2ZUxvY2F0aW9uOiBzdHJpbmdbXSk6IEZ1bmN0aW9uIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gcGF0aFZpc2l0b3IocGF0aCwgcGF0aFJlbGF0aXZlTG9jYXRpb24pO1xuXHR9O1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxnQkFBZ0IsR0FBRyxVQUFVQyxXQUFxRCxFQUFFQyxXQUFxQixFQUFZO0lBQ2pJLE9BQU9DLHVCQUF1QixDQUFDRixXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUcsZUFBZSxFQUFFSCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUksb0JBQW9CLEVBQUVILFdBQVcsQ0FBQyxDQUFDSSxHQUFHLENBQUVDLEVBQUUsSUFBS0EsRUFBRSxDQUFDQyxJQUFJLENBQUM7RUFDbEksQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUEE7RUFRTyxNQUFNTCx1QkFBdUIsR0FBRyxVQUN0Q0YsV0FBb0MsRUFHQTtJQUFBLElBRnBDUSxlQUFrRCx1RUFBRyxFQUFFO0lBQUEsSUFDdkRQLFdBQVcsdUVBQUcsS0FBSztJQUVuQixNQUFNUSxjQUFjLEdBQUlDLFFBQTJDLElBQXdDO01BQzFHLElBQUlDLFVBQVUsR0FBRyxDQUFDO01BQ2xCLE9BQU9ELFFBQVEsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsSUFBSUQsVUFBVSxJQUFJRCxRQUFRLENBQUNFLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDaEUsTUFBTUMsVUFBVSxH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
|
|
575
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRSZWxhdGl2ZVBhdGhzIiwiY29udGV4dFBhdGgiLCJza2lwQ2xlYW51cCIsImdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uIiwiY29udGV4dExvY2F0aW9uIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYXAiLCJucCIsIm5hbWUiLCJfZXhwb3J0cyIsInZpc2l0ZWROYXZQcm9wcyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNsZWFuVXBOYXZQcm9wIiwibmF2UHJvcHMiLCJjdXJyZW50SWR4IiwiY3VycmVudE5hdiIsIm5leHROYXZQcm9wIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJwYXJ0bmVyIiwic3BsaWNlIiwiZ2V0QWRkaXRpb25hbE5hdlByb3AiLCJyZWZlcmVuY2VQcm9wcyIsIm90aGVyUHJvcHMiLCJrZWVwUmVmZXJlbmNlIiwiYWRkaXRpb25hbE5hdlByb3BzIiwiZm9yRWFjaCIsIm5hdlByb3AiLCJuYXZJbmRleCIsInB1c2giLCJyZW1haW5pbmdOYXZQcm9wcyIsImNvbmNhdCIsInNsaWNlIiwiZXh0cmFOYXZQcm9wIiwidGFyZ2V0VHlwZSIsImZpbmQiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJwcm9wZXJ0eVBhdGgiLCJzUHJvcGVydHlQYXRoIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJwYXRoIiwidGFyZ2V0IiwiJHRhcmdldCIsImNvbnRhaW5zQUNvbXBsZXhUeXBlIiwiX2RhdGFNb2RlbE9iamVjdFBhdGgkIiwiY29udmVydGVkVHlwZXMiLCJyZXNvbHZlUGF0aCIsImdldFRhcmdldE5hdmlnYXRpb25QYXRoIiwic3RhcnRzV2l0aCIsInN1YnN0cmluZyIsInRhcmdldEVudGl0eVR5cGUiLCJwYXRoU3BsaXRzIiwic3BsaXQiLCJuZXdEYXRhTW9kZWxPYmplY3RQYXRoIiwicGF0aFBhcnQiLCJlbmhhbmNlRnJvbVBhdGgiLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uSW5kZXgiLCJyZWZlcmVuY2VFbnRpdHlUeXBlIiwiaXNFbnRpdHlUeXBlIiwiaXNDb21wbGV4VHlwZSIsImN1cnJlbnRFbnRpdHlTZXQiLCJwb3RlbnRpYWxOYXZQcm9wIiwibmF2aWdhdGlvblBhdGhGcm9tUHJldmlvdXNFbnRpdHlTZXQiLCJnZXROYXZpZ2F0aW9uQmluZGluZ0Zyb21QcmV2aW91c0VudGl0eVNldCIsIm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJoYXNPd25Qcm9wZXJ0eSIsIl9wb3RlbnRpYWxDb21wbGV4VHlwZSIsInBvdGVudGlhbENvbXBsZXhUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJfdHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmF2aWdhdGlvbiIsIm5hdmlnYXRpb25Qcm9wZXJ0eUxlbmd0aCIsImxhc3ROYXZpZ2F0aW9uIiwiaXNDb21wbGV4VHlwZUxhc3ROYXZpZ2F0aW9uIiwibmF2aWdhdGlvblBhdGgiLCJpIiwibmF2aWdhdGlvblByb3BlcnR5IiwiZ2V0VGFyZ2V0RW50aXR5U2V0UGF0aCIsImluaXRpYWxQYXRoIiwidGFyZ2V0RW50aXR5U2V0UGF0aCIsInJlcGxhY2UiLCJiUmVsYXRpdmUiLCJzZXRUcmFpbGluZ1NsYXNoIiwiam9pbiIsImdldFRhcmdldE9iamVjdFBhdGgiLCJfZGF0YU1vZGVsT2JqZWN0UGF0aCQyIiwiaXNTZXJ2aWNlT2JqZWN0IiwiaXNFbnRpdHlTZXQiLCJpc1Byb3BlcnR5IiwiaXNBbm5vdGF0aW9uVGVybSIsInRlcm0iLCJxdWFsaWZpZXIiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiX2RhdGFNb2RlbE9iamVjdFBhdGgkMyIsImZvckJpbmRpbmdFeHByZXNzaW9uIiwiZm9yRmlsdGVyQ29uZGl0aW9uUGF0aCIsIl9nZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiX2RhdGFNb2RlbE9iamVjdFBhdGgkNCIsIm5hdlByb3BlcnRpZXMiLCJzb21lIiwiaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzQ29sbGVjdGlvbiIsImlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbiIsInZhbHVlIiwiZ2V0Q29udGV4dFByb3BlcnR5UmVzdHJpY3Rpb24iLCJjaGVja0Z1bmN0aW9uIiwiX3NvdXJjZSRuYXZpZ2F0aW9uUHJvIiwiX2xhc3ROYXZQcm9wJGFubm90YXRpIiwiX3NvdXJjZSR0YXJnZXRFbnRpdHlTIiwiX3NvdXJjZSR0YXJnZXRFbnRpdHlTMiIsIm9uQ29udGV4dCIsInNvdXJjZSIsImxhc3ROYXZQcm9wIiwiYW5ub3RhdGlvbnMiLCJDYXBhYmlsaXRpZXMiLCJpc1BhdGhVcGRhdGFibGUiLCJleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aCIsImNoZWNrT25QYXRoIiwiYW5ub3RhdGlvbk9iamVjdCIsIl9hbm5vdGF0aW9uT2JqZWN0JFVwZCIsIlVwZGF0ZVJlc3RyaWN0aW9ucyIsIlVwZGF0YWJsZSIsImdldEhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJfZGF0YU1vZGVsT2JqZWN0UGF0aCQ1IiwiX2RhdGFNb2RlbE9iamVjdFBhdGgkNiIsIl9kYXRhTW9kZWxPYmplY3RQYXRoJDciLCJBZ2dyZWdhdGlvbiIsIlBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdldE5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiX2RhdGFNb2RlbE9iamVjdFBhdGgkOCIsIl9kYXRhTW9kZWxPYmplY3RQYXRoJDkiLCJfZGF0YU1vZGVsT2JqZWN0UGF0aCQxMCIsIl9kYXRhTW9kZWxPYmplY3RQYXRoJDExIiwiX2RhdGFNb2RlbE9iamVjdFBhdGgkMTIiLCJfZGF0YU1vZGVsT2JqZWN0UGF0aCQxMyIsIl9kYXRhTW9kZWxPYmplY3RQYXRoJDE0IiwiX2RhdGFNb2RlbE9iamVjdFBhdGgkMTUiLCJub25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsIk5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnR5IiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIl9uYXZpZ2F0aW9uUHJvcGVydHlQYSIsImlzUGF0aFNlYXJjaGFibGUiLCJfYW5ub3RhdGlvbk9iamVjdCRTZWEiLCJTZWFyY2hSZXN0cmljdGlvbnMiLCJTZWFyY2hhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwiX2Fubm90YXRpb25PYmplY3QkRGVsIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiRGVsZXRhYmxlIiwiaXNQYXRoSW5zZXJ0YWJsZSIsIl9hbm5vdGF0aW9uT2JqZWN0JElucyIsIkluc2VydFJlc3RyaWN0aW9ucyIsIkluc2VydGFibGUiLCJpc1BhdGhGaWx0ZXJhYmxlIiwiX2Fubm90YXRpb25PYmplY3QkRmlsIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiRmlsdGVyYWJsZSIsImNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsImFsbG93ZWRFeHByZXNzaW9uIiwiX2Fubm90YXRpb25PYmplY3QkRmlsMiIsImZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiY3VycmVudE9iamVjdFJlc3RyaWN0aW9uIiwicmVzdHJpY3Rpb24iLCJQcm9wZXJ0eSIsIl9jdXJyZW50T2JqZWN0UmVzdHJpYyIsImluY2x1ZGVzIiwiQWxsb3dlZEV4cHJlc3Npb25zIiwidG9TdHJpbmciLCJnZXRUYXJnZXRFbnRpdHlTZXRJbmZvIiwicmVzZXRWaXNpdGVkTmF2UHJvcHMiLCJ2aXNpdGVkTmF2aWdhdGlvblByb3BzTmFtZSIsInBhcmVudEVudGl0eVNldCIsInBhcmVudE5hdmlnYXRpb25QYXRoIiwiY29udGFpbnNUYXJnZXQiLCJjaGVja09uUGFyZW50TmF2aWdhdGlvbiIsIm5hdmlnYXRpb25Qcm9wcyIsInJlc3RyaWN0aW9ucyIsInJlc3RyaWN0ZWROYXZQcm9wIiwiX3BhcmVudEVudGl0eVNldCRhbm5vIiwiX3BhcmVudEVudGl0eVNldCRhbm5vMiIsIl9wYXJlbnRFbnRpdHlTZXQkYW5ubzMiLCJOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJfY2hlY2tGdW5jdGlvbiIsInJlc3RyaWN0aW9uRGVmaW5pdGlvbiIsInZhbHVlT2YiLCJpc0NvbnN0YW50IiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiY29uc3RhbnQiLCJfZGF0YU1vZGVsT2JqZWN0UGF0aCQxNiIsIl9uYXZpZ2F0aW9uUHJvcHMiLCJwYXRoUmVsYXRpdmVMb2NhdGlvbiIsInBhdGhWaXNpdG9yRnVuY3Rpb24iLCJwYXRoVmlzaXRvciIsImdldFBhdGhWaXNpdG9yRm9yU2luZ2xldG9uIiwiZXF1YWwiLCJjaGVja09uVGFyZ2V0IiwiX3RhcmdldEVudGl0eVNldCRhbm5vIiwidGFyZ2V0UmVzdHJpY3Rpb25zIiwiX3RhcmdldEVudGl0eVR5cGUkYW5uIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsInVucmVzb2x2YWJsZUV4cHJlc3Npb24iLCJlbmRzV2l0aCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGF0YU1vZGVsUGF0aEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdENvbXBsZXhUeXBlLFxuXHRDb252ZXJ0ZWRNZXRhZGF0YSxcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eVBhdGgsXG5cdFNlcnZpY2VPYmplY3QsXG5cdFNpbmdsZXRvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZVR5cGVzLFxuXHROYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMsXG5cdEVudGl0eVR5cGVBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMsXG5cdFNpbmdsZXRvbkFubm90YXRpb25zX0NhcGFiaWxpdGllc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb25zdGFudCwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaXNDb25zdGFudCwgdW5yZXNvbHZhYmxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0aXNBbm5vdGF0aW9uVGVybSxcblx0aXNDb21wbGV4VHlwZSxcblx0aXNFbnRpdHlTZXQsXG5cdGlzRW50aXR5VHlwZSxcblx0aXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRpc1Byb3BlcnR5LFxuXHRpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24sXG5cdGlzU2VydmljZU9iamVjdFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5T3JQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcblxuZXhwb3J0IHR5cGUgRGF0YU1vZGVsT2JqZWN0Q29udGV4dCA9IHtcblx0c3RhcnRpbmdFbnRpdHlTZXQ6IFNpbmdsZXRvbiB8IEVudGl0eVNldDtcblx0bmF2aWdhdGlvblByb3BlcnRpZXM6IChOYXZpZ2F0aW9uUHJvcGVydHkgfCBQcm9wZXJ0eSlbXTtcblx0dGFyZ2V0RW50aXR5U2V0PzogU2luZ2xldG9uIHwgRW50aXR5U2V0O1xuXHR0YXJnZXRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlO1xuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGE7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+ID0gRGF0YU1vZGVsT2JqZWN0Q29udGV4dCAmIHtcblx0Y29udGV4dExvY2F0aW9uPzogRGF0YU1vZGVsT2JqZWN0Q29udGV4dDtcblx0dGFyZ2V0T2JqZWN0PzogVDtcbn07XG5cbnR5cGUgRXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGggPSB7XG5cdHByb3BlcnR5UGF0aD86IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pjtcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvbjtcblx0aWdub3JlVGFyZ2V0Q29sbGVjdGlvbj86IGJvb2xlYW47XG5cdGF1dGhvcml6ZVVucmVzb2x2YWJsZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgcHJvcGVydHkgZnJvbSB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqIEBwYXJhbSBjb250ZXh0UGF0aCBUaGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBvYmplY3QgdG8gdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gc2tpcENsZWFudXAgRG9uJ3QgY2xlYW4gdXAgY2lyY3VsYXIgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgcGF0aCBmcm9tIHRoZSByb290IGVudGl0eSBzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlbGF0aXZlUGF0aHMgPSBmdW5jdGlvbiAoY29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4gfCB1bmRlZmluZWQsIHNraXBDbGVhbnVwPzogYm9vbGVhbik6IHN0cmluZ1tdIHtcblx0cmV0dXJuIGdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uKGNvbnRleHRQYXRoPy5jb250ZXh0TG9jYXRpb24sIGNvbnRleHRQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllcywgc2tpcENsZWFudXApLm1hcCgobnApID0+IG5wLm5hbWUpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgZnJvbSBhIGRhdGFNb2RlbE9iamVjdFBhdGggdG8gdGhlIHRhcmdldGVkIG5hdmlnYXRpb24gcHJvcGVydGllcy5cbiAqIEBwYXJhbSBjb250ZXh0UGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIHZpc2l0ZWROYXZQcm9wcyBUaGUgdGFyZ2V0ZWQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gc2tpcENsZWFudXAgRG9uJ3QgY2xlYW4gdXAgY2lyY3VsYXIgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdG8gcmVhY2ggdGhlIHRhcmdldGVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICovXG5leHBvcnQgY29uc3QgZ2V0UGF0aFJlbGF0aXZlTG9jYXRpb24gPSBmdW5jdGlvbiAoXG5cdGNvbnRleHRQYXRoPzogRGF0YU1vZGVsT2JqZWN0Q29udGV4dCxcblx0dmlzaXRlZE5hdlByb3BzOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10gPSBbXSxcblx0c2tpcENsZWFudXAgPSBmYWxzZVxuKTogKE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFByb3BlcnR5KVtdIHtcblx0Y29uc3QgY2xlYW5VcE5hdlByb3AgPSAobmF2UHJvcHM6IChOYXZpZ2F0aW9uUHJvcGVydHkgfCBQcm9wZXJ0eSlbXSk6IChOYXZpZ2F0aW9uUHJvcGVydHkgfCBQcm9wZXJ0eSlbXSA9PiB7XG5cdFx0bGV0IGN1cnJlbnRJZHggPSAwO1xuXHRcdHdoaWxlIChuYXZQcm9wcy5sZW5ndGggPiAxICYmIGN1cnJlbnRJZHggIT0gbmF2UHJvcHMubGVuZ3RoIC0gMSkge1xuXHRcdFx0Y29uc3QgY3VycmVudE5hdiA9IG5hdlByb3BzW2N1cnJlbnRJZHhdO1xuXHRcdFx0Y29uc3QgbmV4dE5hdlByb3AgPSBuYXZQcm9wc1tjdXJyZW50SWR4ICsgMV07XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkoY3VycmVudE5hdikgJiYgY3VycmVudE5hdi5wYXJ0bmVyID09PSBuZXh0TmF2UHJvcC5uYW1lKSB7XG5cdFx0XHRcdG5hdlByb3BzLnNwbGljZSgwLCAyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1cnJlbnRJZHgrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG5hdlByb3BzO1xuXHR9O1xuXG5cdGNvbnN0IGdldEFkZGl0aW9uYWxOYXZQcm9wID0gKFxuXHRcdHJlZmVyZW5jZVByb3BzOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10sXG5cdFx0b3RoZXJQcm9wczogKE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFByb3BlcnR5KVtdLFxuXHRcdGtlZXBSZWZlcmVuY2U6IGJvb2xlYW5cblx0KTogKE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFByb3BlcnR5KVtdID0+IHtcblx0XHRjb25zdCBhZGRpdGlvbmFsTmF2UHJvcHM6IChOYXZpZ2F0aW9uUHJvcGVydHkgfCBQcm9wZXJ0eSlbXSA9IFtdO1xuXHRcdHJlZmVyZW5jZVByb3BzLmZvckVhY2goKG5hdlByb3AsIG5hdkluZGV4KSA9PiB7XG5cdFx0XHRpZiAob3RoZXJQcm9wc1tuYXZJbmRleF0gIT09IG5hdlByb3ApIHtcblx0XHRcdFx0YWRkaXRpb25hbE5hdlByb3BzLnB1c2goa2VlcFJlZmVyZW5jZSA/IG5hdlByb3AgOiBvdGhlclByb3BzW25hdkluZGV4XSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFkZGl0aW9uYWxOYXZQcm9wcztcblx0fTtcblxuXHRpZiAoIWNvbnRleHRQYXRoKSB7XG5cdFx0cmV0dXJuIHZpc2l0ZWROYXZQcm9wcztcblx0fVxuXHRpZiAodmlzaXRlZE5hdlByb3BzLmxlbmd0aCA+PSBjb250ZXh0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRsZXQgcmVtYWluaW5nTmF2UHJvcHMgPSBnZXRBZGRpdGlvbmFsTmF2UHJvcChjb250ZXh0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcywgdmlzaXRlZE5hdlByb3BzLCBmYWxzZSk7XG5cdFx0cmVtYWluaW5nTmF2UHJvcHMgPSByZW1haW5pbmdOYXZQcm9wcy5jb25jYXQodmlzaXRlZE5hdlByb3BzLnNsaWNlKGNvbnRleHRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCkpO1xuXHRcdHJldHVybiBza2lwQ2xlYW51cCA/IHJlbWFpbmluZ05hdlByb3BzIDogY2xlYW5VcE5hdlByb3AocmVtYWluaW5nTmF2UHJvcHMpO1xuXHR9XG5cdGxldCBleHRyYU5hdlByb3AgPSBnZXRBZGRpdGlvbmFsTmF2UHJvcCh2aXNpdGVkTmF2UHJvcHMsIGNvbnRleHRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLCB0cnVlKTtcblx0ZXh0cmFOYXZQcm9wID0gZXh0cmFOYXZQcm9wLmNvbmNhdChjb250ZXh0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5zbGljZSh2aXNpdGVkTmF2UHJvcHMubGVuZ3RoKSk7XG5cdGlmICghc2tpcENsZWFudXApIHtcblx0XHRjbGVhblVwTmF2UHJvcChleHRyYU5hdlByb3ApO1xuXHR9XG5cdGV4dHJhTmF2UHJvcCA9IGV4dHJhTmF2UHJvcC5tYXAoKG5hdlByb3ApID0+IHtcblx0XHRyZXR1cm4gaXNOYXZpZ2F0aW9uUHJvcGVydHkobmF2UHJvcClcblx0XHRcdD8gKG5hdlByb3AudGFyZ2V0VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKChucCkgPT4gbnAubmFtZSA9PT0gbmF2UHJvcC5wYXJ0bmVyKSBhcyBOYXZpZ2F0aW9uUHJvcGVydHkpXG5cdFx0XHQ6IG5hdlByb3A7XG5cdH0pO1xuXHRyZXR1cm4gZXh0cmFOYXZQcm9wO1xufTtcblxuLyoqXG4gKiBHZXRzIGEgbmV3IGVuaGFuY2VkIGRhdGFNb2RlbE9iamVjdFBhdGggbWF0Y2hpbmcgd2l0aCB0aGUgcHJvdmlkZWQgcHJvcGVydHkuXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgaW5pdGlhbCBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIG9yIHByb3BlcnR5IHRvIHJlYWNoXG4gKiBAcmV0dXJucyBBIG5ldyBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBlbmhhbmNlRGF0YU1vZGVsUGF0aCA9IGZ1bmN0aW9uIDxUPihcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPiB8IERhdGFNb2RlbE9iamVjdENvbnRleHQsXG5cdHByb3BlcnR5UGF0aD86IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5PlxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB7XG5cdGxldCBzUHJvcGVydHlQYXRoID0gXCJcIjtcblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5UGF0aCkpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlQYXRoLnBhdGg7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHByb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGg7XG5cdH1cblx0bGV0IHRhcmdldDtcblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5UGF0aCkpIHtcblx0XHR0YXJnZXQgPSBwcm9wZXJ0eVBhdGguJHRhcmdldDtcblx0fSBlbHNlIGlmIChjb250YWluc0FDb21wbGV4VHlwZShkYXRhTW9kZWxPYmplY3RQYXRoKSkge1xuXHRcdHRhcmdldCA9IGRhdGFNb2RlbE9iamVjdFBhdGguY29udmVydGVkVHlwZXMucmVzb2x2ZVBhdGgoYCR7Z2V0VGFyZ2V0TmF2aWdhdGlvblBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCl9LyR7c1Byb3BlcnR5UGF0aH1gKT8udGFyZ2V0O1xuXHR9IGVsc2Uge1xuXHRcdGlmIChzUHJvcGVydHlQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHQvLyByZW1vdmUgdGhlIGxlYWRpbmcgXCIvXCIgYmVjYXVzZSB0aGUgcGF0aCBpcyBnb2luZyB0byBiZSByZXNvbHZlZCBmcm9tIHRoZSBlbnRpdHkgdHlwZSwgc28gaXQgc2hvdWxkIG5vdCBiZSBhYnNvbHV0ZVxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IHNQcm9wZXJ0eVBhdGguc3Vic3RyaW5nKDEpO1xuXHRcdH1cblx0XHR0YXJnZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgoc1Byb3BlcnR5UGF0aCk7XG5cdH1cblxuXHRjb25zdCBwYXRoU3BsaXRzID0gc1Byb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cblx0bGV0IG5ld0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gPSBkYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8VD47XG5cdGZvciAoY29uc3QgcGF0aFBhcnQgb2YgcGF0aFNwbGl0cykge1xuXHRcdG5ld0RhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRnJvbVBhdGgobmV3RGF0YU1vZGVsT2JqZWN0UGF0aCwgcGF0aFBhcnQpO1xuXHR9XG5cdG5ld0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ID0gdGFyZ2V0O1xuXHRyZXR1cm4gbmV3RGF0YU1vZGVsT2JqZWN0UGF0aDtcbn07XG5cbi8qKlxuICogR2V0cyBhIG5ldyBlbmhhbmNlZCBkYXRhTW9kZWxPYmplY3RQYXRoIG1hdGNoaW5nIHdpdGggdGhlIHByb3ZpZGVkIHBhdGhcbiAqIFRoZSB0YXJnZXRPYmplY3QgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyBpbnRlcm5hbCBmdW5jdGlvbi5cbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBpbml0aWFsIGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBwYXRoIFRoZSBvYmplY3QgcGF0aCB0byByZWFjaFxuICogQHJldHVybnMgQSBuZXcgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICovXG5cbmNvbnN0IGVuaGFuY2VGcm9tUGF0aCA9IGZ1bmN0aW9uIDxUPihkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LCBwYXRoOiBzdHJpbmcpOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+IHtcblx0bGV0IHRhcmdldEVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuXHRsZXQgdGFyZ2V0RW50aXR5VHlwZTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZDtcblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmNvbmNhdCgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uSW5kZXggPSBuYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGg7XG5cdGNvbnN0IHJlZmVyZW5jZUVudGl0eVR5cGUgPSBuYXZpZ2F0aW9uSW5kZXhcblx0XHQ/IG5hdmlnYXRpb25Qcm9wZXJ0aWVzW25hdmlnYXRpb25JbmRleCAtIDFdLnRhcmdldFR5cGVcblx0XHQ6IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0aWYgKCFyZWZlcmVuY2VFbnRpdHlUeXBlKSB7XG5cdFx0cmV0dXJuIGRhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxUPjtcblx0fSBlbHNlIGlmIChpc0VudGl0eVR5cGUocmVmZXJlbmNlRW50aXR5VHlwZSkgfHwgaXNDb21wbGV4VHlwZShyZWZlcmVuY2VFbnRpdHlUeXBlKSkge1xuXHRcdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldDtcblx0XHRjb25zdCBwb3RlbnRpYWxOYXZQcm9wID0gcmVmZXJlbmNlRW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUgPT09IHBhdGgpO1xuXHRcdGlmIChwb3RlbnRpYWxOYXZQcm9wKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKHBvdGVudGlhbE5hdlByb3ApO1xuXHRcdFx0dGFyZ2V0RW50aXR5VHlwZSA9IHBvdGVudGlhbE5hdlByb3AudGFyZ2V0VHlwZTtcblxuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhdGhGcm9tUHJldmlvdXNFbnRpdHlTZXQgPSBnZXROYXZpZ2F0aW9uQmluZGluZ0Zyb21QcmV2aW91c0VudGl0eVNldChuYXZpZ2F0aW9uUHJvcGVydGllcyk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG5hdmlnYXRpb25QYXRoRnJvbVByZXZpb3VzRW50aXR5U2V0ICYmXG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQ/Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkobmF2aWdhdGlvblBhdGhGcm9tUHJldmlvdXNFbnRpdHlTZXQpXG5cdFx0XHQpIHtcblx0XHRcdFx0dGFyZ2V0RW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRpb25QYXRoRnJvbVByZXZpb3VzRW50aXR5U2V0XSBhcyBFbnRpdHlTZXQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHBvdGVudGlhbENvbXBsZXhUeXBlID0gKFxuXHRcdFx0XHQocmVmZXJlbmNlRW50aXR5VHlwZSBhcyBFbnRpdHlUeXBlKS5lbnRpdHlQcm9wZXJ0aWVzIHx8IChyZWZlcmVuY2VFbnRpdHlUeXBlIGFzIENvbXBsZXhUeXBlKS5wcm9wZXJ0aWVzXG5cdFx0XHQpLmZpbmQoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSA9PT0gcGF0aCk7XG5cdFx0XHRpZiAocG90ZW50aWFsQ29tcGxleFR5cGU/LnRhcmdldFR5cGU/Ll90eXBlID09PSBcIkNvbXBsZXhUeXBlXCIpIHtcblx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChwb3RlbnRpYWxDb21wbGV4VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IG5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRcdGNvbnRleHRMb2NhdGlvbjogZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24sXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiB0YXJnZXRFbnRpdHlTZXQgPz8gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogdGFyZ2V0RW50aXR5VHlwZSA/PyBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUsXG5cdFx0dGFyZ2V0T2JqZWN0OiBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBULFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzXG5cdH07XG59O1xuXG4vKipcbiAqIERldGVjdHMgaWYgdGhlIERhdGFNb2RlbE9iamVjdFBhdGggaGFzIG5hdmlnYXRlZCB0aHJldyBhIGNvbXBsZXhUeXBlLlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIElzIHRoZXJlIGEgY29tcGxleFR5cGUgaW50byB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqL1xuY29uc3QgY29udGFpbnNBQ29tcGxleFR5cGUgPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0Q29udGV4dCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKChuYXZpZ2F0aW9uKSA9PiBpc0NvbXBsZXhUeXBlKG5hdmlnYXRpb24/LnRhcmdldFR5cGUpKSAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXZpZ2F0aW9uIGJpbmRpbmcgZnJvbSB0aGUgcHJldmlvdXMgZW50aXR5U2V0IGxpc3RlZCBpbnRvIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnRpZXMgVGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICogQHJldHVybnMgQSBuZXcgZGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqL1xuY29uc3QgZ2V0TmF2aWdhdGlvbkJpbmRpbmdGcm9tUHJldmlvdXNFbnRpdHlTZXQgPSBmdW5jdGlvbiAobmF2aWdhdGlvblByb3BlcnRpZXM6IChOYXZpZ2F0aW9uUHJvcGVydHkgfCBQcm9wZXJ0eSlbXSk6IHN0cmluZyB7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eUxlbmd0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aDtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eUxlbmd0aCkge1xuXHRcdGNvbnN0IGxhc3ROYXZpZ2F0aW9uID0gbmF2aWdhdGlvblByb3BlcnRpZXNbbmF2aWdhdGlvblByb3BlcnR5TGVuZ3RoIC0gMV07XG5cdFx0Y29uc3QgaXNDb21wbGV4VHlwZUxhc3ROYXZpZ2F0aW9uID0gaXNDb21wbGV4VHlwZShsYXN0TmF2aWdhdGlvbi50YXJnZXRUeXBlKTtcblx0XHRsZXQgbmF2aWdhdGlvblBhdGggPSBcIlwiO1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlMZW5ndGggPiAxICYmICFpc0NvbXBsZXhUeXBlTGFzdE5hdmlnYXRpb24pIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmF2aWdhdGlvblByb3BlcnR5TGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IG5hdmlnYXRpb25Qcm9wZXJ0aWVzW2ldO1xuXHRcdFx0XHRpZiAoaXNDb21wbGV4VHlwZShuYXZpZ2F0aW9uUHJvcGVydHkudGFyZ2V0VHlwZSkpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCArPSBgJHtuYXZpZ2F0aW9uUHJvcGVydHkubmFtZX0vYDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGlzQ29tcGxleFR5cGVMYXN0TmF2aWdhdGlvbiA/IFwiXCIgOiBgJHtuYXZpZ2F0aW9uUGF0aH0ke2xhc3ROYXZpZ2F0aW9uLm5hbWV9YDtcblx0fVxuXHRyZXR1cm4gXCJcIjtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0ZWQgZW50aXR5U2V0LlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgZ2V0VGFyZ2V0RW50aXR5U2V0UGF0aCA9IGZ1bmN0aW9uIChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+KTogc3RyaW5nIHtcblx0Y29uc3QgaW5pdGlhbFBhdGggPSBgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWA7XG5cdGxldCB0YXJnZXRFbnRpdHlTZXRQYXRoID0gaW5pdGlhbFBhdGg7XG5cdGxldCBjdXJyZW50RW50aXR5U2V0ID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldDtcblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRsZXQgbmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuXHRcdG5hdmlnYXRpb25QYXRoID0gZ2V0TmF2aWdhdGlvbkJpbmRpbmdGcm9tUHJldmlvdXNFbnRpdHlTZXQobmF2aWdhdGlvblByb3BlcnRpZXMuc2xpY2UoMCwgaSArIDEpKTtcblx0XHRpZiAoY3VycmVudEVudGl0eVNldCAmJiBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkobmF2aWdhdGlvblBhdGgpKSB7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRQYXRoICs9IGAvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtuYXZpZ2F0aW9uUGF0aC5yZXBsYWNlKFwiL1wiLCBcIiUyRlwiKX1gO1xuXHRcdFx0Y3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUGF0aF0gYXMgRW50aXR5U2V0O1xuXHRcdH1cblx0fVxuXG5cdHRhcmdldEVudGl0eVNldFBhdGggKz0gXCIvJFwiO1xuXHRyZXR1cm4gdGFyZ2V0RW50aXR5U2V0UGF0aDtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0ZWQgbmF2aWdhdGlvbi5cbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gYlJlbGF0aXZlXG4gKiBAcmV0dXJucyBUaGUgcGF0aC5cbiAqL1xuXG5leHBvcnQgY29uc3QgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPiwgYlJlbGF0aXZlID0gZmFsc2UpOiBzdHJpbmcge1xuXHRsZXQgcGF0aCA9IFwiXCI7XG5cdGlmICghZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCkge1xuXHRcdHJldHVybiBcIi9cIjtcblx0fVxuXHRpZiAoIWJSZWxhdGl2ZSkge1xuXHRcdHBhdGggKz0gYC8ke2RhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZX1gO1xuXHR9XG5cdGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcblx0XHRwYXRoID0gc2V0VHJhaWxpbmdTbGFzaChwYXRoKTtcblx0XHRwYXRoICs9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUpLmpvaW4oXCIvXCIpO1xuXHR9XG5cdHJldHVybiBwYXRoO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSB0YXJnZXRlZCBvYmplY3QuXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGJSZWxhdGl2ZVxuICogQHJldHVybnMgVGhlIHBhdGguXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUYXJnZXRPYmplY3RQYXRoID0gZnVuY3Rpb24gKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sIGJSZWxhdGl2ZSA9IGZhbHNlKTogc3RyaW5nIHtcblx0bGV0IHBhdGggPSBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChkYXRhTW9kZWxPYmplY3RQYXRoLCBiUmVsYXRpdmUpO1xuXHRpZiAoXG5cdFx0aXNTZXJ2aWNlT2JqZWN0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCFpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQhaXNFbnRpdHlUeXBlKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCFpc0VudGl0eVNldChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQoIWlzUHJvcGVydHkoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHx8ICFpc0NvbXBsZXhUeXBlKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py50YXJnZXRUeXBlKSkgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCAhPT0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldFxuXHQpIHtcblx0XHRwYXRoID0gc2V0VHJhaWxpbmdTbGFzaChwYXRoKTtcblx0XHRwYXRoICs9IGAke2RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Lm5hbWV9YDtcblx0fSBlbHNlIGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCAmJiBpc0Fubm90YXRpb25UZXJtKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdHBhdGggPSBzZXRUcmFpbGluZ1NsYXNoKHBhdGgpO1xuXHRcdHBhdGggKz0gYEAke2RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnRlcm19YDtcblx0XHRpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuaGFzT3duUHJvcGVydHkoXCJxdWFsaWZpZXJcIikgJiYgISFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5xdWFsaWZpZXIpIHtcblx0XHRcdHBhdGggKz0gYCMke2RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnF1YWxpZmllcn1gO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRmb3JCaW5kaW5nRXhwcmVzc2lvbiA9IGZhbHNlLFxuXHRmb3JGaWx0ZXJDb25kaXRpb25QYXRoID0gZmFsc2Vcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8uc3RhcnRpbmdFbnRpdHlTZXQgIT09IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpIHtcblx0XHRyZXR1cm4gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fVxuXHRyZXR1cm4gX2dldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCwgZm9yQmluZGluZ0V4cHJlc3Npb24sIGZvckZpbHRlckNvbmRpdGlvblBhdGgpO1xufTtcblxuY29uc3QgX2dldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGZvckJpbmRpbmdFeHByZXNzaW9uID0gZmFsc2UsXG5cdGZvckZpbHRlckNvbmRpdGlvblBhdGggPSBmYWxzZVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgbmF2UHJvcGVydGllcyA9IGdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uKGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLCBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzKTtcblx0aWYgKGZvckJpbmRpbmdFeHByZXNzaW9uKSB7XG5cdFx0aWYgKG5hdlByb3BlcnRpZXMuc29tZShpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0bGV0IHBhdGggPSBmb3JGaWx0ZXJDb25kaXRpb25QYXRoXG5cdFx0PyBuYXZQcm9wZXJ0aWVzXG5cdFx0XHRcdC5tYXAoKG5hdlByb3ApID0+IHtcblx0XHRcdFx0XHRjb25zdCBpc0NvbGxlY3Rpb24gPSBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KG5hdlByb3ApO1xuXHRcdFx0XHRcdHJldHVybiBpc0NvbGxlY3Rpb24gPyBgJHtuYXZQcm9wLm5hbWV9KmAgOiBuYXZQcm9wLm5hbWU7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5qb2luKFwiL1wiKVxuXHRcdDogbmF2UHJvcGVydGllcy5tYXAoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSkuam9pbihcIi9cIik7XG5cblx0aWYgKFxuXHRcdCgoaXNTZXJ2aWNlT2JqZWN0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJiBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5uYW1lKSB8fFxuXHRcdFx0KGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbihkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiYgZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QudmFsdWUpKSAmJlxuXHRcdCFpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQhaXNFbnRpdHlUeXBlKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCFpc0VudGl0eVNldChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQoIWlzUHJvcGVydHkoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHx8ICFpc0NvbXBsZXhUeXBlKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py50YXJnZXRUeXBlKSkgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCAhPT0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldFxuXHQpIHtcblx0XHRwYXRoID0gc2V0VHJhaWxpbmdTbGFzaChwYXRoKTtcblx0XHRwYXRoICs9IGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbihkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdClcblx0XHRcdD8gYCR7ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QudmFsdWV9YFxuXHRcdFx0OiBgJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5uYW1lfWA7XG5cdH0gZWxzZSBpZiAoaXNBbm5vdGF0aW9uVGVybShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkpIHtcblx0XHRwYXRoID0gc2V0VHJhaWxpbmdTbGFzaChwYXRoKTtcblx0XHRwYXRoICs9IGBAJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC50ZXJtfWA7XG5cdFx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Lmhhc093blByb3BlcnR5KFwicXVhbGlmaWVyXCIpICYmICEhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucXVhbGlmaWVyKSB7XG5cdFx0XHRwYXRoICs9IGAjJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5xdWFsaWZpZXJ9YDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuXG4vKipcbiAqIEdldHMgYW4gYXJyYXkgb2YgcHJvcGVydGllcyB3aGVyZSBhIHNwZWNpZmljIHJlc3RyaWN0aW9uIGlzIGFwcGxpZWQuXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGNoZWNrRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRlc3RpbmcgdGhlIHJlc3RyaWN0aW9uIGFuZCByZXR1cm5pbmcgdGhlIGFycmF5IG9mIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBvbkNvbnRleHQgSXMgdGhlIHJlc3RyaWN0aW9uIHRlc3RlZCBvbiB0aGUgdGFyZ2V0IG9iamVjdCBvciBpdHMgY29udGV4dFxuICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbiA9IChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0Y2hlY2tGdW5jdGlvbjogKFxuXHRcdGNhcGFiaWxpdGllczogRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzIHwgU2luZ2xldG9uQW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzIHwgdW5kZWZpbmVkXG5cdCkgPT4gUHJvcGVydHlQYXRoW10gfCB1bmRlZmluZWQsXG5cdG9uQ29udGV4dCA9IHRydWVcbik6IFByb3BlcnR5UGF0aFtdID0+IHtcblx0Y29uc3Qgc291cmNlID0gb25Db250ZXh0ID8gZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24gOiBkYXRhTW9kZWxPYmplY3RQYXRoO1xuXHRjb25zdCBsYXN0TmF2UHJvcCA9IHNvdXJjZT8ubmF2aWdhdGlvblByb3BlcnRpZXM/LnNsaWNlKC0xKVswXTtcblx0Y29uc3QgcHJvcGVydGllcyA9IGNoZWNrRnVuY3Rpb24obGFzdE5hdlByb3A/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXMpO1xuXHRyZXR1cm4gcHJvcGVydGllcz8ubGVuZ3RoID8gcHJvcGVydGllcyA6IGNoZWNrRnVuY3Rpb24oc291cmNlPy50YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXMpIHx8IFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUGF0aFVwZGF0YWJsZSA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/OiBFeHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNoZWNrT25QYXRoKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0KGFubm90YXRpb25PYmplY3Q6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdD8uVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGU7XG5cdFx0fSxcblx0XHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuXHQpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwYXJlbnQgbmF2aWdhdGlvbiBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gbm9kZSBoaWVyYXJjaHkuXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGhpZXJhcmNoeVF1YWxpZmllciBUaGUgcXVhbGlmaWVyIG9mIHRoZSBoaWVyYXJjaHkgc2V0IGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgVGhlIHBhcmVudCBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgZ2V0SGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0aGllcmFyY2h5UXVhbGlmaWVyOiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQWdncmVnYXRpb24/LltgUmVjdXJzaXZlSGllcmFyY2h5IyR7aGllcmFyY2h5UXVhbGlmaWVyfWBdXG5cdFx0Py5QYXJlbnROYXZpZ2F0aW9uUHJvcGVydHkuJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lO1xufTtcblxuLyoqXG4gKiBHZXRzIGFuIGFycmF5IG9mIG5hdmlnYXRpb24gcHJvcGVydGllcyB3aGVyZSBhbiB1cGRhdGUgcmVzdHJpY3Rpb24gaXMgYXBwbGllZC5cbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHdpdGggdGhlIHJlc3RyaWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZ2V0Tm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZCB7XG5cdC8vIFVwZGF0ZVJlc3RyaWN0aW9ucy5Ob25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyBvbiB0aGUgcGFyZW50IG5hdmlnYXRpb246XG5cdC8vIFJFVklFVzogVGhpcyBpcyB3cm9uZyA/IHRoZSB1cGRhdGVSZXN0cmljdGlvbiBhbm5vdGF0aW9uIG5lZWRzIHRvIGJlIG9uIGVudGl0eXNldCBidXQgb3VyIHRlc3Qgc29tZXRpbWVzIHB1dCBpdCBvbiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRjb25zdCBub25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5VcGRhdGVSZXN0cmljdGlvbnNcblx0XHQ/Lk5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRpZiAobm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMgJiYgbm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gbm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMubWFwKFxuXHRcdFx0KG5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5UGF0aCkgPT5cblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24gJiZcblx0XHRcdFx0ZW5oYW5jZURhdGFNb2RlbFBhdGg8U2VydmljZU9iamVjdD4oZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24sIG5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSkudGFyZ2V0T2JqZWN0IVxuXHRcdFx0XHRcdC5mdWxseVF1YWxpZmllZE5hbWVcblx0XHQpO1xuXHR9XG5cdC8vIFVwZGF0ZVJlc3RyaWN0aW9ucy5Ob25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyBvbiB0aGUgZW50aXR5U2V0IChvciBlbnRpdHlUeXBlKTpcblx0cmV0dXJuIGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uTm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXM/Lm1hcChcblx0XHQobmF2aWdhdGlvblByb3BlcnR5UGF0aCkgPT4gbmF2aWdhdGlvblByb3BlcnR5UGF0aC4kdGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWVcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BhdGhTZWFyY2hhYmxlID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+IHwgdW5kZWZpbmVkLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY2hlY2tPblBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHQoYW5ub3RhdGlvbk9iamVjdDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24gfCBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMpID0+IHtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0Py5TZWFyY2hSZXN0cmljdGlvbnM/LlNlYXJjaGFibGU7XG5cdFx0fSxcblx0XHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUGF0aERlbGV0YWJsZSA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/OiBFeHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNoZWNrT25QYXRoKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0KGFubm90YXRpb25PYmplY3Q6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdD8uRGVsZXRlUmVzdHJpY3Rpb25zPy5EZWxldGFibGU7XG5cdFx0fSxcblx0XHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUGF0aEluc2VydGFibGUgPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4gfCB1bmRlZmluZWQsXG5cdGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPzogRXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjaGVja09uUGF0aChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdChhbm5vdGF0aW9uT2JqZWN0OiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcykgPT4ge1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25PYmplY3Q/Lkluc2VydFJlc3RyaWN0aW9ucz8uSW5zZXJ0YWJsZTtcblx0XHR9LFxuXHRcdGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQYXRoRmlsdGVyYWJsZSA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/OiBFeHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNoZWNrT25QYXRoKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0KGFubm90YXRpb25PYmplY3Q6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdD8uRmlsdGVyUmVzdHJpY3Rpb25zPy5GaWx0ZXJhYmxlO1xuXHRcdH0sXG5cdFx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGFsbG93ZWRFeHByZXNzaW9uOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY2hlY2tPblBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHQoYW5ub3RhdGlvbk9iamVjdDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24gfCBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfCBFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdCAmJiBcIkZpbHRlclJlc3RyaWN0aW9uc1wiIGluIGFubm90YXRpb25PYmplY3QpIHtcblx0XHRcdFx0Y29uc3QgZmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uczogRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZVR5cGVzW10gPVxuXHRcdFx0XHRcdChhbm5vdGF0aW9uT2JqZWN0Py5GaWx0ZXJSZXN0cmljdGlvbnM/LkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgYXMgRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZVR5cGVzW10pIHx8IFtdO1xuXHRcdFx0XHRjb25zdCBjdXJyZW50T2JqZWN0UmVzdHJpY3Rpb24gPSBmaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmZpbmQoKHJlc3RyaWN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChyZXN0cmljdGlvbi5Qcm9wZXJ0eSBhcyBQcm9wZXJ0eVBhdGgpLiR0YXJnZXQgPT09IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGN1cnJlbnRPYmplY3RSZXN0cmljdGlvbikge1xuXHRcdFx0XHRcdHJldHVybiBhbGxvd2VkRXhwcmVzc2lvbi5pbmNsdWRlcyhjdXJyZW50T2JqZWN0UmVzdHJpY3Rpb24/LkFsbG93ZWRFeHByZXNzaW9ucz8udG9TdHJpbmcoKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufTtcblxudHlwZSBFbnRpdHlPclNpbmdsZXRvbiA9IFNpbmdsZXRvbiB8IEVudGl0eVNldCB8IG51bGw7XG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBlbnRpdHlTZXQsIGl0cyBwYXJlbnQgYW5kIHRoZSBuYXZpZ2F0aW9uIHBhdGggZnJvbSB0aGUgcGFyZW50IHRvIHRoZSB0YXJnZXQgZW50aXR5U2V0XG4gKiBUaGUgdGFyZ2V0IGVudGl0eVNldCBwb2ludGluZyB0byBlaXRoZXIgbnVsbCAoaW4gY2FzZSBvZiBjb250YWlubWVudCBuYXZwcm9wIGEgbGFzdCBwYXJ0KSwgb3IgdGhlIGFjdHVhbCB0YXJnZXQgKG5vbiBjb250YWlubWVudCBhcyB0YXJnZXQpXG4gKiBUaGUgcGFyZW50IGVudGl0eVNldCBwb2ludGluZyB0byB0aGUgcHJldmlvdXMgZW50aXR5U2V0IHVzZWQgaW4gdGhlIHBhdGguXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIHRhcmdldCBlbnRpdHlzZXQsIGl0cyBwYXJlbnQgYW5kIHRoZSBuYXZpZ2F0aW9uIHBhdGhcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRhcmdldEVudGl0eVNldEluZm8gPSAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IHtcblx0cGFyZW50RW50aXR5U2V0OiBFbnRpdHlPclNpbmdsZXRvbjtcblx0dGFyZ2V0RW50aXR5U2V0OiBFbnRpdHlPclNpbmdsZXRvbjtcblx0cGFyZW50TmF2aWdhdGlvblBhdGg6IHN0cmluZztcbn0gPT4ge1xuXHRsZXQgcmVzZXRWaXNpdGVkTmF2UHJvcHMgPSBmYWxzZTtcblx0bGV0IHZpc2l0ZWROYXZpZ2F0aW9uUHJvcHNOYW1lOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgY3VycmVudEVudGl0eVNldDogRW50aXR5T3JTaW5nbGV0b24gPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0O1xuXHRsZXQgcGFyZW50RW50aXR5U2V0OiBFbnRpdHlPclNpbmdsZXRvbiA9IG51bGw7XG5cdGxldCB0YXJnZXRFbnRpdHlTZXQ6IEVudGl0eU9yU2luZ2xldG9uID0gY3VycmVudEVudGl0eVNldDtcblx0bGV0IHBhcmVudE5hdmlnYXRpb25QYXRoID0gXCJcIjtcblxuXHRmb3IgKGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSBvZiBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0aWYgKHJlc2V0VmlzaXRlZE5hdlByb3BzKSB7XG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblByb3BzTmFtZSA9IFtdO1xuXHRcdH1cblx0XHR2aXNpdGVkTmF2aWdhdGlvblByb3BzTmFtZS5wdXNoKG5hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lKTtcblx0XHRwYXJlbnROYXZpZ2F0aW9uUGF0aCA9IHZpc2l0ZWROYXZpZ2F0aW9uUHJvcHNOYW1lLmpvaW4oXCIvXCIpO1xuXHRcdGlmIChpc1Byb3BlcnR5KG5hdmlnYXRpb25Qcm9wZXJ0eSkgfHwgIW5hdmlnYXRpb25Qcm9wZXJ0eS5jb250YWluc1RhcmdldCkge1xuXHRcdFx0Ly8gV2Ugc2hvdWxkIGhhdmUgYSBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGF0aCBzbyBmYXIgd2hpY2ggY2FuIGNvbnNpc3Qgb2YgKFtDb250YWlubWVudE5hdlByb3BdLykqW05hdlByb3BdXG5cdFx0XHRpZiAoY3VycmVudEVudGl0eVNldCAmJiBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkocGFyZW50TmF2aWdhdGlvblBhdGgpKSB7XG5cdFx0XHRcdHBhcmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbcGFyZW50TmF2aWdhdGlvblBhdGhdO1xuXHRcdFx0XHR0YXJnZXRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0O1xuXHRcdFx0XHQvLyBJZiB3ZSByZWFjaGVkIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eSB3aXRoIGEgbmF2aWdhdGlvbnByb3BlcnR5YmluZGluZywgd2UgbmVlZCB0byByZXNldCB0aGUgdmlzaXRlZCBwYXRoIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiAoaWYgdGhlcmUgaXMgb25lKVxuXHRcdFx0XHRyZXNldFZpc2l0ZWROYXZQcm9wcyA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXZSByZWFsbHkgc2hvdWxkIG5vdCBlbmQgdXAgaGVyZSBidXQgYXQgbGVhc3QgbGV0J3MgdHJ5IHRvIGF2b2lkIGluY29ycmVjdCBiZWhhdmlvclxuXHRcdFx0XHRwYXJlbnRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0O1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gbnVsbDtcblx0XHRcdFx0cmVzZXRWaXNpdGVkTmF2UHJvcHMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXJlbnRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0O1xuXHRcdFx0dGFyZ2V0RW50aXR5U2V0ID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBwYXJlbnRFbnRpdHlTZXQsIHRhcmdldEVudGl0eVNldCwgcGFyZW50TmF2aWdhdGlvblBhdGggfTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcmVzdHJpY3Rpb25zIHNldCBvbiB0aGUgcGFyZW50IG5hdmlnYXRpb24uXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGNoZWNrRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGggVGhlIGV4dHJhY3Rpb24gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqL1xuY29uc3QgY2hlY2tPblBhcmVudE5hdmlnYXRpb24gPSAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGNoZWNrRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcHMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRjb25zdCB7IHBhcmVudEVudGl0eVNldCwgcGFyZW50TmF2aWdhdGlvblBhdGggfSA9IGdldFRhcmdldEVudGl0eVNldEluZm8oZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGxldCByZXN0cmljdGlvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB8IHVuZGVmaW5lZCwgdmlzaXRlZE5hdlByb3BzOiAoUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkpW107XG5cdGZvciAoY29uc3QgcmVzdHJpY3RlZE5hdlByb3Agb2YgcGFyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5SZXN0cmljdGVkUHJvcGVydGllcyA/PyBbXSkge1xuXHRcdGlmIChwYXJlbnROYXZpZ2F0aW9uUGF0aCA9PT0gcmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5LnZhbHVlKSB7XG5cdFx0XHRjb25zdCByZXN0cmljdGlvbkRlZmluaXRpb24gPSBjaGVja0Z1bmN0aW9uKHJlc3RyaWN0ZWROYXZQcm9wKT8udmFsdWVPZigpO1xuXHRcdFx0aWYgKHJlc3RyaWN0aW9uRGVmaW5pdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmIChpc0NvbnN0YW50KGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihyZXN0cmljdGlvbkRlZmluaXRpb24pKSkge1xuXHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IGNvbnN0YW50KHJlc3RyaWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgX25hdmlnYXRpb25Qcm9wcyA9IG5hdmlnYXRpb25Qcm9wcy5zbGljZSgwLCAtMSk7XG5cdFx0XHRcdFx0dmlzaXRlZE5hdlByb3BzID0gX25hdmlnYXRpb25Qcm9wcztcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbiAmJlxuXHRcdFx0XHRcdFx0dmlzaXRlZE5hdlByb3BzLmxlbmd0aCA8IGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggJiYgLy8gV2UgbmVlZCB0byBnbyBiYWNrd2FyZCB0byBnZXQgdGhlIHJlbGF0aXZlIHBhdGhcblx0XHRcdFx0XHRcdCEobmF2aWdhdGlvblByb3BzW25hdmlnYXRpb25Qcm9wcy5sZW5ndGggLSAxXSBhcyBOYXZpZ2F0aW9uUHJvcGVydHkpLnBhcnRuZXJcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIFRvIGdvIGJhY2t3YXJkIHdlIG5lZWQgdGhlIHBhcnRuZXJcblx0XHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aFJlbGF0aXZlTG9jYXRpb24gPSBnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbihkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbiwgdmlzaXRlZE5hdlByb3BzKS5tYXAoXG5cdFx0XHRcdFx0XHRcdChucCkgPT4gbnAubmFtZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnN0IHBhdGhWaXNpdG9yRnVuY3Rpb24gPSBleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD8ucGF0aFZpc2l0b3Jcblx0XHRcdFx0XHRcdFx0PyBnZXRQYXRoVmlzaXRvckZvclNpbmdsZXRvbihleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aC5wYXRoVmlzaXRvciwgcGF0aFJlbGF0aXZlTG9jYXRpb24pXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkOyAvLyBzZW5kIHBhdGhWaXNpdG9yIGZ1bmN0aW9uIG9ubHkgd2hlbiBpdCBpcyBkZWZpbmVkIGFuZCBvbmx5IHNlbmQgZnVuY3Rpb24gb3IgZGVmaW5lZCBhcyBhIHBhcmFtZXRlclxuXHRcdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gZXF1YWwoXG5cdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihyZXN0cmljdGlvbkRlZmluaXRpb24sIHBhdGhSZWxhdGl2ZUxvY2F0aW9uLCB1bmRlZmluZWQsIHBhdGhWaXNpdG9yRnVuY3Rpb24pLFxuXHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdHJpY3Rpb25zO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSByZXN0cmljdGlvbnMgc2V0IG9uIHRoZSB0YXJnZXQgZW50aXR5U2V0LlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBjaGVja0Z1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byBjaGVjayB0aGUgYW5ub3RhdGlvblxuICogQHBhcmFtIGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoIFRoZSBleHRyYWN0aW9uIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24uXG4gKi9cbmNvbnN0IGNoZWNrT25UYXJnZXQgPSAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGNoZWNrRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlIHwgbnVsbCA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0bGV0IHRhcmdldFJlc3RyaWN0aW9ucztcblx0Y29uc3QgeyB0YXJnZXRFbnRpdHlTZXQgfSA9IGdldFRhcmdldEVudGl0eVNldEluZm8oZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGxldCByZXN0cmljdGlvbkRlZmluaXRpb24gPSBjaGVja0Z1bmN0aW9uKHRhcmdldEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcyk7XG5cdGlmICh0YXJnZXRFbnRpdHlTZXQgPT09IG51bGwgJiYgcmVzdHJpY3Rpb25EZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXN0cmljdGlvbkRlZmluaXRpb24gPSBjaGVja0Z1bmN0aW9uKHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXMpO1xuXHR9XG5cdGlmIChyZXN0cmljdGlvbkRlZmluaXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IHBhdGhSZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRjb25zdCBwYXRoVmlzaXRvckZ1bmN0aW9uID0gZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/LnBhdGhWaXNpdG9yXG5cdFx0XHQ/IGdldFBhdGhWaXNpdG9yRm9yU2luZ2xldG9uKGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoLnBhdGhWaXNpdG9yLCBwYXRoUmVsYXRpdmVMb2NhdGlvbilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdHRhcmdldFJlc3RyaWN0aW9ucyA9IGVxdWFsKFxuXHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHJlc3RyaWN0aW9uRGVmaW5pdGlvbiwgcGF0aFJlbGF0aXZlTG9jYXRpb24sIHVuZGVmaW5lZCwgcGF0aFZpc2l0b3JGdW5jdGlvbiksXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdGFyZ2V0UmVzdHJpY3Rpb25zO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSByZXN0cmljdGlvbnMgYXBwbGllZCBvbiB0aGUgdGFyZ2V0XG4gKiBUaGUgcmVzdHJpY3Rpb24gaXMgY2FsdWNsYXRlZCBhY2NvcmRpbmcgdG8gdGhlIHBhcmVudCBhbmQgdGhlIHRhcmdldC5cbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gY2hlY2tGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSBleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aCBUaGUgZXh0cmFjdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uLlxuICovXG5leHBvcnQgY29uc3QgY2hlY2tPblBhdGggPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4gfCB1bmRlZmluZWQsXG5cdGNoZWNrRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoIWRhdGFNb2RlbE9iamVjdFBhdGggfHwgIWRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRkYXRhTW9kZWxPYmplY3RQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCwgZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/LnByb3BlcnR5UGF0aCk7XG5cblx0Ly8gUmVzdHJpY3Rpb25zIHNob3VsZCBiZSBldmFsdWF0ZWQgYXMgUGFyZW50RW50aXR5U2V0Lk5hdlJlc3RyaWN0aW9uc1tOYXZQcm9wZXJ0eVBhdGhdIHx8IFRhcmdldEVudGl0eVNldC5SZXN0cmljdGlvbnNcblx0Y29uc3QgcmVzdHJpY3Rpb25zID0gY2hlY2tPblBhcmVudE5hdmlnYXRpb24oZGF0YU1vZGVsT2JqZWN0UGF0aCwgY2hlY2tGdW5jdGlvbiwgZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGgpO1xuXHRjb25zdCB0YXJnZXRSZXN0cmljdGlvbnMgPSBleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD8uaWdub3JlVGFyZ2V0Q29sbGVjdGlvblxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBjaGVja09uVGFyZ2V0KGRhdGFNb2RlbE9iamVjdFBhdGgsIGNoZWNrRnVuY3Rpb24sIGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoKTtcblxuXHRyZXR1cm4gKFxuXHRcdHJlc3RyaWN0aW9ucyB8fCB0YXJnZXRSZXN0cmljdGlvbnMgfHwgKGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPy5hdXRob3JpemVVbnJlc29sdmFibGUgPyB1bnJlc29sdmFibGVFeHByZXNzaW9uIDogY29uc3RhbnQodHJ1ZSkpXG5cdCk7XG59O1xuXG4vKipcbiAqIFNldCBhIHRyYWlsaW5nIHNsYXNoIHRvIGEgcGF0aCBpZiBub3QgYWxyZWFkeSBzZXQuXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aFxuICogQHJldHVybnMgVGhlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoXG4gKi9cbmNvbnN0IHNldFRyYWlsaW5nU2xhc2ggPSBmdW5jdGlvbiAocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0aWYgKHBhdGgubGVuZ3RoICYmICFwYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdHJldHVybiBgJHtwYXRofS9gO1xuXHR9XG5cdHJldHVybiBwYXRoO1xufTtcblxuLy8gVGhpcyBoZWxwZXIgbWV0aG9kIGlzIHVzZWQgdG8gYWRkIHJlbGF0aXZlIHBhdGggbG9jYXRpb24gYXJndW1lbnQgdG8gc2luZ2xldG9uUGF0aFZpc2l0b3JGdW5jdGlvbiBpLmUuIHBhdGhWaXNpdG9yXG4vLyBwYXRoVmlzaXRvciBtZXRob2QgaXMgdXNlZCBsYXRlciB0byBnZXQgdGhlIGNvcnJlY3QgYmluZGluZ3MgZm9yIHNpbmdsZXRvbiBlbnRpdHlcbi8vIG1ldGhvZCBpcyBpbnZva2VkIGxhdGVyIGluIHBhdGhJbk1vZGVsKCkgbWV0aG9kIHRvIGdldCB0aGUgY29ycmVjdCBiaW5kaW5nLlxuY29uc3QgZ2V0UGF0aFZpc2l0b3JGb3JTaW5nbGV0b24gPSBmdW5jdGlvbiAocGF0aFZpc2l0b3I6IEZ1bmN0aW9uLCBwYXRoUmVsYXRpdmVMb2NhdGlvbjogc3RyaW5nW10pOiBGdW5jdGlvbiB7XG5cdHJldHVybiBmdW5jdGlvbiAocGF0aDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHBhdGhWaXNpdG9yKHBhdGgsIHBhdGhSZWxhdGl2ZUxvY2F0aW9uKTtcblx0fTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLE1BQU1BLGdCQUFnQixHQUFHLFNBQUFBLENBQVVDLFdBQXFELEVBQUVDLFdBQXFCLEVBQVk7SUFDakksT0FBT0MsdUJBQXVCLENBQUNGLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFRyxlQUFlLEVBQUVILFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFSSxvQkFBb0IsRUFBRUgsV0FBVyxDQUFDLENBQUNJLEdBQUcsQ0FBRUMsRUFBRSxJQUFLQSxFQUFFLENBQUNDLElBQUksQ0FBQztFQUNsSSxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkFDLFFBQUEsQ0FBQVQsZ0JBQUEsR0FBQUEsZ0JBQUE7RUFPTyxNQUFNRyx1QkFBdUIsR0FBRyxTQUFBQSxDQUN0Q0YsV0FBb0MsRUFHQTtJQUFBLElBRnBDUyxlQUFrRCxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxFQUFFO0lBQUEsSUFDdkRULFdBQVcsR0FBQVMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsS0FBSztJQUVuQixNQUFNRyxjQUFjLEdBQUlDLFFBQTJDLElBQXdDO01BQzFHLElBQUlDLFVBQVUsR0FBRyxDQUFDO01BQ2xCLE9BQU9ELFFBQVEsQ0FBQ0gsTUFBTSxHQUFHLENBQUMsSUFBSUksVUFBVSxJQUFJRCxRQUFRLENB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
|
|
@@ -58,7 +58,6 @@ type ExtractionParametersOnPath = {
|
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
60
|
* Function that returns the relative path to the property from the DataModelObjectPath.
|
|
61
|
-
*
|
|
62
61
|
* @param contextPath The DataModelObjectPath object to the property
|
|
63
62
|
* @param skipCleanup Don't clean up circular navigation properties
|
|
64
63
|
* @returns The path from the root entity set
|
|
@@ -69,7 +68,6 @@ export const getRelativePaths = function (contextPath: DataModelObjectPath<unkno
|
|
|
69
68
|
|
|
70
69
|
/**
|
|
71
70
|
* Gets the navigation properties from a dataModelObjectPath to the targeted navigation properties.
|
|
72
|
-
*
|
|
73
71
|
* @param contextPath The dataModelObjectPath
|
|
74
72
|
* @param visitedNavProps The targeted navigation properties
|
|
75
73
|
* @param skipCleanup Don't clean up circular navigation properties
|
|
@@ -131,7 +129,6 @@ export const getPathRelativeLocation = function (
|
|
|
131
129
|
|
|
132
130
|
/**
|
|
133
131
|
* Gets a new enhanced dataModelObjectPath matching with the provided property.
|
|
134
|
-
*
|
|
135
132
|
* @param dataModelObjectPath The initial dataModelObjectPath
|
|
136
133
|
* @param propertyPath The property path or property to reach
|
|
137
134
|
* @returns A new dataModelObjectPath
|
|
@@ -172,7 +169,6 @@ export const enhanceDataModelPath = function <T>(
|
|
|
172
169
|
/**
|
|
173
170
|
* Gets a new enhanced dataModelObjectPath matching with the provided path
|
|
174
171
|
* The targetObject is not updated by this internal function.
|
|
175
|
-
*
|
|
176
172
|
* @param dataModelObjectPath The initial dataModelObjectPath
|
|
177
173
|
* @param path The object path to reach
|
|
178
174
|
* @returns A new dataModelObjectPath
|
|
@@ -224,7 +220,6 @@ const enhanceFromPath = function <T>(dataModelObjectPath: DataModelObjectPath<un
|
|
|
224
220
|
|
|
225
221
|
/**
|
|
226
222
|
* Detects if the DataModelObjectPath has navigated threw a complexType.
|
|
227
|
-
*
|
|
228
223
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
229
224
|
* @returns Is there a complexType into the DataModelObjectPath.
|
|
230
225
|
*/
|
|
@@ -234,7 +229,6 @@ const containsAComplexType = function (dataModelObjectPath: DataModelObjectConte
|
|
|
234
229
|
|
|
235
230
|
/**
|
|
236
231
|
* Gets the navigation binding from the previous entitySet listed into the navigation properties.
|
|
237
|
-
*
|
|
238
232
|
* @param navigationProperties The navigation properties
|
|
239
233
|
* @returns A new dataModelObjectPath.
|
|
240
234
|
*/
|
|
@@ -261,7 +255,6 @@ const getNavigationBindingFromPreviousEntitySet = function (navigationProperties
|
|
|
261
255
|
|
|
262
256
|
/**
|
|
263
257
|
* Gets the path of the targeted entitySet.
|
|
264
|
-
*
|
|
265
258
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
266
259
|
* @returns The path.
|
|
267
260
|
*/
|
|
@@ -285,7 +278,6 @@ export const getTargetEntitySetPath = function (dataModelObjectPath: DataModelOb
|
|
|
285
278
|
|
|
286
279
|
/**
|
|
287
280
|
* Gets the path of the targeted navigation.
|
|
288
|
-
*
|
|
289
281
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
290
282
|
* @param bRelative
|
|
291
283
|
* @returns The path.
|
|
@@ -308,7 +300,6 @@ export const getTargetNavigationPath = function (dataModelObjectPath: DataModelO
|
|
|
308
300
|
|
|
309
301
|
/**
|
|
310
302
|
* Gets the path of the targeted object.
|
|
311
|
-
*
|
|
312
303
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
313
304
|
* @param bRelative
|
|
314
305
|
* @returns The path.
|
|
@@ -394,7 +385,6 @@ const _getContextRelativeTargetObjectPath = function (
|
|
|
394
385
|
|
|
395
386
|
/**
|
|
396
387
|
* Gets an array of properties where a specific restriction is applied.
|
|
397
|
-
*
|
|
398
388
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
399
389
|
* @param checkFunction The function testing the restriction and returning the array of properties
|
|
400
390
|
* @param onContext Is the restriction tested on the target object or its context
|
|
@@ -428,7 +418,6 @@ export const isPathUpdatable = function (
|
|
|
428
418
|
|
|
429
419
|
/**
|
|
430
420
|
* Gets the parent navigation property of the given node hierarchy.
|
|
431
|
-
*
|
|
432
421
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
433
422
|
* @param hierarchyQualifier The qualifier of the hierarchy set in the manifest
|
|
434
423
|
* @returns The parent navigation property.
|
|
@@ -443,7 +432,6 @@ export const getHierarchyParentNavigationPropertyPath = function (
|
|
|
443
432
|
|
|
444
433
|
/**
|
|
445
434
|
* Gets an array of navigation properties where an update restriction is applied.
|
|
446
|
-
*
|
|
447
435
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
448
436
|
* @returns The navigation properties with the restriction.
|
|
449
437
|
*/
|
|
@@ -550,7 +538,6 @@ type EntityOrSingleton = Singleton | EntitySet | null;
|
|
|
550
538
|
* Gets the target entitySet, its parent and the navigation path from the parent to the target entitySet
|
|
551
539
|
* The target entitySet pointing to either null (in case of containment navprop a last part), or the actual target (non containment as target)
|
|
552
540
|
* The parent entitySet pointing to the previous entitySet used in the path.
|
|
553
|
-
*
|
|
554
541
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
555
542
|
* @returns The target entityset, its parent and the navigation path
|
|
556
543
|
*/
|
|
@@ -599,7 +586,6 @@ export const getTargetEntitySetInfo = (
|
|
|
599
586
|
|
|
600
587
|
/**
|
|
601
588
|
* Gets the restrictions set on the parent navigation.
|
|
602
|
-
*
|
|
603
589
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
604
590
|
* @param checkFunction The function to check the annotation
|
|
605
591
|
* @param extractionParametersOnPath The extraction parameters
|
|
@@ -650,7 +636,6 @@ const checkOnParentNavigation = (
|
|
|
650
636
|
|
|
651
637
|
/**
|
|
652
638
|
* Gets the restrictions set on the target entitySet.
|
|
653
|
-
*
|
|
654
639
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
655
640
|
* @param checkFunction The function to check the annotation
|
|
656
641
|
* @param extractionParametersOnPath The extraction parameters
|
|
@@ -684,7 +669,6 @@ const checkOnTarget = (
|
|
|
684
669
|
/**
|
|
685
670
|
* Gets the restrictions applied on the target
|
|
686
671
|
* The restriction is caluclated according to the parent and the target.
|
|
687
|
-
*
|
|
688
672
|
* @param dataModelObjectPath The dataModelObjectPath
|
|
689
673
|
* @param checkFunction The function to check the annotation
|
|
690
674
|
* @param extractionParametersOnPath The extraction parameters
|
|
@@ -714,7 +698,6 @@ export const checkOnPath = function (
|
|
|
714
698
|
|
|
715
699
|
/**
|
|
716
700
|
* Set a trailing slash to a path if not already set.
|
|
717
|
-
*
|
|
718
701
|
* @param path The path
|
|
719
702
|
* @returns The path with a trailing slash
|
|
720
703
|
*/
|