@sapui5/sap.fe.core 1.111.1 → 1.113.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-dbg.js +6 -5
- package/src/sap/fe/core/ActionRuntime.js +1 -1
- package/src/sap/fe/core/ActionRuntime.js.map +1 -1
- package/src/sap/fe/core/ActionRuntime.ts +12 -11
- package/src/sap/fe/core/AppComponent-dbg.js +35 -9
- package/src/sap/fe/core/AppComponent.js +1 -1
- package/src/sap/fe/core/AppComponent.js.map +1 -1
- package/src/sap/fe/core/AppComponent.ts +66 -9
- package/src/sap/fe/core/AppStateHandler-dbg.js +5 -2
- package/src/sap/fe/core/AppStateHandler.js +1 -1
- package/src/sap/fe/core/AppStateHandler.js.map +1 -1
- package/src/sap/fe/core/AppStateHandler.ts +10 -1
- package/src/sap/fe/core/BaseController-dbg.js +1 -1
- package/src/sap/fe/core/BaseController.ts +2 -1
- package/src/sap/fe/core/CommonUtils-dbg.js +202 -533
- package/src/sap/fe/core/CommonUtils.js +1 -1
- package/src/sap/fe/core/CommonUtils.js.map +1 -1
- package/src/sap/fe/core/CommonUtils.ts +260 -681
- package/src/sap/fe/core/ExtensionAPI-dbg.js +4 -1
- package/src/sap/fe/core/ExtensionAPI.js +1 -1
- package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
- package/src/sap/fe/core/ExtensionAPI.ts +11 -1
- package/src/sap/fe/core/PageController-dbg.js +26 -31
- package/src/sap/fe/core/PageController.js +1 -1
- package/src/sap/fe/core/PageController.js.map +1 -1
- package/src/sap/fe/core/PageController.ts +17 -3
- package/src/sap/fe/core/ResourceModel-dbg.js +71 -0
- package/src/sap/fe/core/ResourceModel.js +6 -0
- package/src/sap/fe/core/ResourceModel.js.map +1 -0
- package/src/sap/fe/core/ResourceModel.ts +67 -0
- package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +1 -0
- package/src/sap/fe/core/TemplateModel-dbg.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +6 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel-dbg.js +5 -7
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +6 -5
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +164 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +6 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +170 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +88 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +6 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +142 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +913 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +21 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockRuntime.ts → BuildingBlockTemplateProcessor.ts} +313 -373
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +79 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +15 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +68 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +162 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +6 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +183 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo-dbg.js +4 -2
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +5 -3
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +936 -231
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +1023 -255
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +48 -98
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +95 -129
- package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +14 -17
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +23 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -0
- package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +3 -3
- package/src/sap/fe/core/controllerextensions/MassEdit.js +1 -1
- package/src/sap/fe/core/controllerextensions/MassEdit.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +2 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +2 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +2 -0
- package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +3 -5
- package/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.ts +26 -4
- package/src/sap/fe/core/controllerextensions/Paginator-dbg.js +2 -1
- package/src/sap/fe/core/controllerextensions/Paginator.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Paginator.ts +7 -0
- package/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +8 -0
- package/src/sap/fe/core/controllerextensions/Share-dbg.js +8 -1
- package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Share.ts +11 -0
- package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +14 -13
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +27 -27
- package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +17 -8
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +35 -14
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase-dbg.js +6 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +7 -4
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +285 -82
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +326 -89
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +23 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +32 -3
- package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +4 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +17 -3
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block-dbg.js +65 -34
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +33 -18
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +103 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +124 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +78 -149
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +85 -160
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +49 -49
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +52 -63
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +82 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +123 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +1508 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +1993 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations-dbg.js +3 -1415
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +2 -1921
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +10 -18
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +9 -22
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +53 -47
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +55 -61
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher-dbg.js +12 -1
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +19 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +78 -13
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +100 -13
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -1
- package/src/sap/fe/core/controls/CommandExecution-dbg.js +16 -5
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
- package/src/sap/fe/core/controls/CommandExecution.ts +15 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +4 -1
- package/src/sap/fe/core/controls/FilterBar-dbg.js +1 -1
- package/src/sap/fe/core/controls/FilterBar.ts +5 -0
- package/src/sap/fe/core/controls/FormElementWrapper-dbg.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +3 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +7 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +4 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +10 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +4 -3
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +3 -2
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +0 -1
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +2 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +6 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js.map +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +5 -0
- package/src/sap/fe/core/converters/ConverterContext-dbg.js +3 -5
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ConverterContext.js.map +1 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +4 -6
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -8
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js.map +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +15 -6
- package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +21 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -1
- package/src/sap/fe/core/converters/ManifestWrapper.ts +23 -1
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +67 -62
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -66
- package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -1
- package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +81 -20
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.ts +76 -22
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +1027 -956
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +13 -19
- package/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.ts +37 -40
- package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +95 -33
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +133 -49
- package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +99 -62
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +140 -75
- package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +7 -6
- package/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.ts +8 -14
- package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +9 -9
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -18
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +143 -93
- package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.ts +221 -177
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +23 -16
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -23
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +138 -75
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +223 -110
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +38 -28
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +67 -47
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar-dbg.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet-dbg.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +5 -8
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +54 -24
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +84 -37
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +12 -14
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +16 -11
- package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +8 -6
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +8 -6
- package/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +7 -6
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +19 -10
- package/src/sap/fe/core/converters/helpers/DataFieldHelper-dbg.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +7 -2
- package/src/sap/fe/core/converters/helpers/ID-dbg.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +2 -1
- package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +11 -9
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +10 -8
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +22 -20
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +19 -16
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +32 -35
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +42 -37
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +12 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +8 -2
- package/src/sap/fe/core/formatters/FPMFormatter-dbg.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat-dbg.js +2 -2
- package/src/sap/fe/core/formatters/FiscalFormat.ts +6 -1
- package/src/sap/fe/core/formatters/TableFormatter-dbg.js +3 -7
- package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.ts +2 -6
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +9 -5
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.ts +11 -4
- package/src/sap/fe/core/fpm/Component-dbg.js +1 -1
- package/src/sap/fe/core/fpm/Component.ts +1 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +7 -6
- package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.ts +9 -9
- package/src/sap/fe/core/helpers/ClassSupport-dbg.js +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.js.map +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.ts +1 -0
- package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +93 -62
- package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.ts +140 -185
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +23 -20
- package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.ts +26 -28
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +9 -9
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.ts +8 -8
- package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +517 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +6 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +610 -0
- package/src/sap/fe/core/helpers/ModelHelper-dbg.js +37 -73
- package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +47 -74
- package/src/sap/fe/core/helpers/PasteHelper-dbg.js +5 -5
- package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
- package/src/sap/fe/core/helpers/PasteHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/PasteHelper.ts +6 -10
- package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +39 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +6 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +35 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +132 -23
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +109 -22
- package/src/sap/fe/core/helpers/SemanticKeyHelper-dbg.js +2 -2
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
- package/src/sap/fe/core/helpers/SizeHelper-dbg.js +53 -0
- package/src/sap/fe/core/helpers/SizeHelper.js +6 -0
- package/src/sap/fe/core/helpers/SizeHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SizeHelper.ts +51 -0
- package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +29 -25
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +26 -24
- package/src/sap/fe/core/helpers/Synchronization-dbg.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.ts +2 -0
- package/src/sap/fe/core/helpers/TypeGuards-dbg.js +151 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.ts +162 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +2 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +6 -2
- package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +3 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +3 -3
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +1 -1
- package/src/sap/fe/core/library-dbg.js +2 -2
- package/src/sap/fe/core/library-preload.js +156 -140
- package/src/sap/fe/core/library-preload.js.map +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/library.ts +7 -0
- package/src/sap/fe/core/manifest.json +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +67 -15
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -14
- package/src/sap/fe/core/messagebundle.properties +35 -0
- package/src/sap/fe/core/messagebundle_ar.properties +15 -12
- package/src/sap/fe/core/messagebundle_bg.properties +20 -17
- package/src/sap/fe/core/messagebundle_ca.properties +12 -9
- package/src/sap/fe/core/messagebundle_cs.properties +12 -9
- package/src/sap/fe/core/messagebundle_cy.properties +12 -9
- package/src/sap/fe/core/messagebundle_da.properties +12 -9
- package/src/sap/fe/core/messagebundle_de.properties +13 -10
- package/src/sap/fe/core/messagebundle_el.properties +14 -11
- package/src/sap/fe/core/messagebundle_en.properties +4 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +4 -1
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +21 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +23 -3
- package/src/sap/fe/core/messagebundle_es.properties +12 -9
- package/src/sap/fe/core/messagebundle_es_MX.properties +12 -9
- package/src/sap/fe/core/messagebundle_et.properties +12 -9
- package/src/sap/fe/core/messagebundle_fi.properties +12 -9
- package/src/sap/fe/core/messagebundle_fr.properties +12 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +13 -10
- package/src/sap/fe/core/messagebundle_hi.properties +12 -9
- package/src/sap/fe/core/messagebundle_hr.properties +12 -9
- package/src/sap/fe/core/messagebundle_hu.properties +12 -9
- package/src/sap/fe/core/messagebundle_id.properties +13 -10
- package/src/sap/fe/core/messagebundle_it.properties +12 -9
- package/src/sap/fe/core/messagebundle_iw.properties +12 -9
- package/src/sap/fe/core/messagebundle_ja.properties +13 -10
- package/src/sap/fe/core/messagebundle_kk.properties +12 -9
- package/src/sap/fe/core/messagebundle_ko.properties +12 -9
- package/src/sap/fe/core/messagebundle_lt.properties +12 -9
- package/src/sap/fe/core/messagebundle_lv.properties +12 -9
- package/src/sap/fe/core/messagebundle_ms.properties +13 -10
- package/src/sap/fe/core/messagebundle_nl.properties +13 -10
- package/src/sap/fe/core/messagebundle_no.properties +12 -9
- package/src/sap/fe/core/messagebundle_pl.properties +12 -9
- package/src/sap/fe/core/messagebundle_pt.properties +12 -9
- package/src/sap/fe/core/messagebundle_pt_PT.properties +12 -9
- package/src/sap/fe/core/messagebundle_ro.properties +16 -13
- package/src/sap/fe/core/messagebundle_ru.properties +13 -10
- package/src/sap/fe/core/messagebundle_sh.properties +12 -9
- package/src/sap/fe/core/messagebundle_sk.properties +12 -9
- package/src/sap/fe/core/messagebundle_sl.properties +12 -9
- package/src/sap/fe/core/messagebundle_sv.properties +12 -9
- package/src/sap/fe/core/messagebundle_th.properties +12 -9
- package/src/sap/fe/core/messagebundle_tr.properties +12 -9
- package/src/sap/fe/core/messagebundle_uk.properties +12 -9
- package/src/sap/fe/core/messagebundle_vi.properties +13 -10
- package/src/sap/fe/core/messagebundle_zh_CN.properties +12 -9
- package/src/sap/fe/core/messagebundle_zh_TW.properties +12 -9
- package/src/sap/fe/core/operationsHelper-dbg.js +70 -44
- package/src/sap/fe/core/operationsHelper.js +1 -1
- package/src/sap/fe/core/operationsHelper.js.map +1 -1
- package/src/sap/fe/core/operationsHelper.ts +88 -63
- package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -0
- package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +5 -3
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +10 -5
- package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +22 -8
- package/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +15 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -1
- package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +9 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +19 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +10 -3
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +9 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +35 -3
- package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +7 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +24 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +448 -279
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +497 -333
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +26 -6
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +54 -13
- package/src/sap/fe/core/support/Diagnostics-dbg.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -0
- package/src/sap/fe/core/templating/CommonFormatters-dbg.js +4 -3
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +195 -95
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +210 -96
- package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +5 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -2
- package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +19 -29
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -26
- package/src/sap/fe/core/templating/EntityTypeHelper-dbg.js +48 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.js +6 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.js.map +1 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +37 -0
- package/src/sap/fe/core/templating/FilterHelper-dbg.js +3 -3
- package/src/sap/fe/core/templating/FilterHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
- package/src/sap/fe/core/templating/FilterHelper.ts +5 -3
- package/src/sap/fe/core/templating/FilterTemplating-dbg.js +7 -8
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +5 -8
- package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +1 -6
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.ts +0 -5
- package/src/sap/fe/core/templating/PropertyHelper-dbg.js +13 -46
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.ts +14 -43
- package/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
- package/src/sap/fe/core/templating/UIFormatters.js +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/UIFormatters.ts +47 -32
- package/src/sap/fe/core/type/DateTimeWithTimezone-dbg.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -0
- package/src/sap/fe/core/type/FiscalDate-dbg.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.js.map +1 -1
- package/src/sap/fe/core/type/FiscalDate.ts +2 -1
- package/src/sap/fe/core/type/TypeUtil-dbg.js +5 -10
- package/src/sap/fe/core/type/TypeUtil.js +1 -1
- package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
- package/src/sap/fe/core/type/TypeUtil.ts +3 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlock-dbg.js +0 -410
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +0 -15
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js.map +0 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +0 -536
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment-dbg.js +0 -44
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +0 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js.map +0 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +0 -14
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime-dbg.js +0 -948
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +0 -19
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js.map +0 -1
- package/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +0 -711
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +0 -6
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js.map +0 -1
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +0 -863
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +0 -91
- package/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +0 -151
- package/src/sap/fe/core/controls/ConditionalWrapper.js +0 -6
- package/src/sap/fe/core/controls/ConditionalWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +0 -88
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper-dbg.js +0 -330
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +0 -6
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +0 -292
- package/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +0 -126
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +0 -6
- package/src/sap/fe/core/controls/CustomQuickViewPage.js.map +0 -1
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +0 -105
- package/src/sap/fe/core/controls/FieldWrapper-dbg.js +0 -194
- package/src/sap/fe/core/controls/FieldWrapper.js +0 -6
- package/src/sap/fe/core/controls/FieldWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/FieldWrapper.ts +0 -121
- package/src/sap/fe/core/controls/FileWrapper-dbg.js +0 -280
- package/src/sap/fe/core/controls/FileWrapper.js +0 -6
- package/src/sap/fe/core/controls/FileWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/FileWrapper.ts +0 -202
- package/src/sap/fe/core/helpers/SideEffectsHelper-dbg.js +0 -141
- package/src/sap/fe/core/helpers/SideEffectsHelper.js +0 -6
- package/src/sap/fe/core/helpers/SideEffectsHelper.js.map +0 -1
- package/src/sap/fe/core/helpers/SideEffectsHelper.ts +0 -129
|
@@ -2,12 +2,17 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/
|
|
5
|
+
sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/TypeGuards"], function (BindingToolkit, TypeGuards) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
-
var
|
|
10
|
-
var
|
|
9
|
+
var isProperty = TypeGuards.isProperty;
|
|
10
|
+
var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
|
|
11
|
+
var isNavigationProperty = TypeGuards.isNavigationProperty;
|
|
12
|
+
var isMultipleNavigationProperty = TypeGuards.isMultipleNavigationProperty;
|
|
13
|
+
var isEntityType = TypeGuards.isEntityType;
|
|
14
|
+
var isEntitySet = TypeGuards.isEntitySet;
|
|
15
|
+
var isComplexType = TypeGuards.isComplexType;
|
|
11
16
|
var unresolvableExpression = BindingToolkit.unresolvableExpression;
|
|
12
17
|
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
13
18
|
var equal = BindingToolkit.equal;
|
|
@@ -16,134 +21,212 @@ sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/templating/Pro
|
|
|
16
21
|
* Function that returns the relative path to the property from the DataModelObjectPath.
|
|
17
22
|
*
|
|
18
23
|
* @param contextPath The DataModelObjectPath object to the property
|
|
19
|
-
* @returns The path from the root entity set
|
|
24
|
+
* @returns The path from the root entity set
|
|
20
25
|
*/
|
|
21
26
|
const getRelativePaths = function (contextPath) {
|
|
22
27
|
return getPathRelativeLocation(contextPath === null || contextPath === void 0 ? void 0 : contextPath.contextLocation, contextPath === null || contextPath === void 0 ? void 0 : contextPath.navigationProperties).map(np => np.name);
|
|
23
28
|
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Gets the navigation properties from a dataModelObjectPath to the targeted navigation properties.
|
|
32
|
+
*
|
|
33
|
+
* @param contextPath The dataModelObjectPath
|
|
34
|
+
* @param visitedNavProps The targeted navigation properties
|
|
35
|
+
* @returns An array of navigation properties to reach the targeted navigation properties
|
|
36
|
+
*/
|
|
24
37
|
_exports.getRelativePaths = getRelativePaths;
|
|
25
38
|
const getPathRelativeLocation = function (contextPath) {
|
|
26
39
|
let visitedNavProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
27
|
-
|
|
28
|
-
return visitedNavProps;
|
|
29
|
-
} else if (visitedNavProps.length >= contextPath.navigationProperties.length) {
|
|
30
|
-
let remainingNavProps = [];
|
|
31
|
-
contextPath.navigationProperties.forEach((navProp, navIndex) => {
|
|
32
|
-
if (visitedNavProps[navIndex] !== navProp) {
|
|
33
|
-
remainingNavProps.push(visitedNavProps[navIndex]);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
remainingNavProps = remainingNavProps.concat(visitedNavProps.slice(contextPath.navigationProperties.length));
|
|
37
|
-
// Clean up NavProp -> Owner
|
|
40
|
+
const cleanUpNavProp = navProps => {
|
|
38
41
|
let currentIdx = 0;
|
|
39
|
-
while (
|
|
40
|
-
const currentNav =
|
|
41
|
-
const nextNavProp =
|
|
42
|
-
if (currentNav
|
|
43
|
-
|
|
42
|
+
while (navProps.length > 1 && currentIdx != navProps.length - 1) {
|
|
43
|
+
const currentNav = navProps[currentIdx];
|
|
44
|
+
const nextNavProp = navProps[currentIdx + 1];
|
|
45
|
+
if (isNavigationProperty(currentNav) && currentNav.partner === nextNavProp.name) {
|
|
46
|
+
navProps.splice(0, 2);
|
|
44
47
|
} else {
|
|
45
48
|
currentIdx++;
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
|
-
return
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
});
|
|
56
|
-
extraNavProp = extraNavProp.concat(contextPath.navigationProperties.slice(visitedNavProps.length));
|
|
57
|
-
// Clean up NavProp -> Owner
|
|
58
|
-
let currentIdx = 0;
|
|
59
|
-
while (extraNavProp.length > 1 && currentIdx != extraNavProp.length - 1) {
|
|
60
|
-
const currentNav = extraNavProp[currentIdx];
|
|
61
|
-
const nextNavProp = extraNavProp[currentIdx + 1];
|
|
62
|
-
if (currentNav._type === "NavigationProperty" && currentNav.partner === nextNavProp.name) {
|
|
63
|
-
extraNavProp.splice(0, 2);
|
|
64
|
-
} else {
|
|
65
|
-
currentIdx++;
|
|
51
|
+
return navProps;
|
|
52
|
+
};
|
|
53
|
+
const getAdditionalNavProp = (referenceProps, otherProps, keepReference) => {
|
|
54
|
+
const additionalNavProps = [];
|
|
55
|
+
referenceProps.forEach((navProp, navIndex) => {
|
|
56
|
+
if (otherProps[navIndex] !== navProp) {
|
|
57
|
+
additionalNavProps.push(keepReference ? navProp : otherProps[navIndex]);
|
|
66
58
|
}
|
|
67
|
-
}
|
|
68
|
-
extraNavProp = extraNavProp.map(navProp => {
|
|
69
|
-
return navProp._type === "NavigationProperty" ? navProp.targetType.navigationProperties.find(np => np.name === navProp.partner) : navProp;
|
|
70
59
|
});
|
|
71
|
-
return
|
|
60
|
+
return additionalNavProps;
|
|
61
|
+
};
|
|
62
|
+
if (!contextPath) {
|
|
63
|
+
return visitedNavProps;
|
|
72
64
|
}
|
|
65
|
+
if (visitedNavProps.length >= contextPath.navigationProperties.length) {
|
|
66
|
+
let remainingNavProps = getAdditionalNavProp(contextPath.navigationProperties, visitedNavProps, false);
|
|
67
|
+
remainingNavProps = remainingNavProps.concat(visitedNavProps.slice(contextPath.navigationProperties.length));
|
|
68
|
+
return cleanUpNavProp(remainingNavProps);
|
|
69
|
+
}
|
|
70
|
+
let extraNavProp = getAdditionalNavProp(visitedNavProps, contextPath.navigationProperties, true);
|
|
71
|
+
extraNavProp = extraNavProp.concat(contextPath.navigationProperties.slice(visitedNavProps.length));
|
|
72
|
+
cleanUpNavProp(extraNavProp);
|
|
73
|
+
extraNavProp = extraNavProp.map(navProp => {
|
|
74
|
+
return isNavigationProperty(navProp) ? navProp.targetType.navigationProperties.find(np => np.name === navProp.partner) : navProp;
|
|
75
|
+
});
|
|
76
|
+
return extraNavProp;
|
|
73
77
|
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Gets a new enhanced dataModelObjectPath matching with the provided property.
|
|
81
|
+
*
|
|
82
|
+
* @param dataModelObjectPath The initial dataModelObjectPath
|
|
83
|
+
* @param propertyPath The property path or property to reach
|
|
84
|
+
* @returns A new dataModelObjectPath
|
|
85
|
+
*/
|
|
74
86
|
_exports.getPathRelativeLocation = getPathRelativeLocation;
|
|
75
87
|
const enhanceDataModelPath = function (dataModelObjectPath, propertyPath) {
|
|
76
88
|
let sPropertyPath = "";
|
|
77
|
-
if ((
|
|
89
|
+
if (isPathAnnotationExpression(propertyPath)) {
|
|
78
90
|
sPropertyPath = propertyPath.path;
|
|
79
91
|
} else if (typeof propertyPath === "string") {
|
|
80
92
|
sPropertyPath = propertyPath;
|
|
81
93
|
}
|
|
82
|
-
let
|
|
83
|
-
if (
|
|
84
|
-
|
|
85
|
-
} else if (dataModelObjectPath
|
|
86
|
-
|
|
94
|
+
let target;
|
|
95
|
+
if (isPathAnnotationExpression(propertyPath)) {
|
|
96
|
+
target = propertyPath.$target;
|
|
97
|
+
} else if (containsAComplexType(dataModelObjectPath)) {
|
|
98
|
+
var _dataModelObjectPath$;
|
|
99
|
+
target = (_dataModelObjectPath$ = dataModelObjectPath.convertedTypes.resolvePath(`${getTargetNavigationPath(dataModelObjectPath)}/${sPropertyPath}`)) === null || _dataModelObjectPath$ === void 0 ? void 0 : _dataModelObjectPath$.target;
|
|
87
100
|
} else {
|
|
88
|
-
|
|
101
|
+
if (sPropertyPath.startsWith("/")) {
|
|
102
|
+
// remove the leading "/" because the path is going to be resolved from the entity type, so it should not be absolute
|
|
103
|
+
sPropertyPath = sPropertyPath.substring(1);
|
|
104
|
+
}
|
|
105
|
+
target = dataModelObjectPath.targetEntityType.resolvePath(sPropertyPath);
|
|
89
106
|
}
|
|
90
|
-
const
|
|
91
|
-
let
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
107
|
+
const pathSplits = sPropertyPath.split("/");
|
|
108
|
+
let newDataModelObjectPath = dataModelObjectPath;
|
|
109
|
+
for (const pathPart of pathSplits) {
|
|
110
|
+
newDataModelObjectPath = enhanceFromPath(newDataModelObjectPath, pathPart);
|
|
111
|
+
}
|
|
112
|
+
newDataModelObjectPath.targetObject = target;
|
|
113
|
+
return newDataModelObjectPath;
|
|
114
|
+
};
|
|
95
115
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
116
|
+
/**
|
|
117
|
+
* Gets a new enhanced dataModelObjectPath matching with the provided path
|
|
118
|
+
* The targetObject is not updated by this internal function.
|
|
119
|
+
*
|
|
120
|
+
* @param dataModelObjectPath The initial dataModelObjectPath
|
|
121
|
+
* @param path The object path to reach
|
|
122
|
+
* @returns A new dataModelObjectPath
|
|
123
|
+
*/
|
|
124
|
+
_exports.enhanceDataModelPath = enhanceDataModelPath;
|
|
125
|
+
const enhanceFromPath = function (dataModelObjectPath, path) {
|
|
126
|
+
let targetEntitySet;
|
|
127
|
+
let targetEntityType;
|
|
128
|
+
const navigationProperties = dataModelObjectPath.navigationProperties.concat();
|
|
129
|
+
const navigationIndex = navigationProperties.length;
|
|
130
|
+
const referenceEntityType = navigationIndex ? navigationProperties[navigationIndex - 1].targetType : dataModelObjectPath.targetEntityType;
|
|
131
|
+
if (!referenceEntityType) {
|
|
132
|
+
return dataModelObjectPath;
|
|
133
|
+
} else if (isEntityType(referenceEntityType) || isComplexType(referenceEntityType)) {
|
|
134
|
+
const currentEntitySet = dataModelObjectPath.targetEntitySet;
|
|
135
|
+
const potentialNavProp = referenceEntityType.navigationProperties.find(navProp => navProp.name === path);
|
|
102
136
|
if (potentialNavProp) {
|
|
103
137
|
navigationProperties.push(potentialNavProp);
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
138
|
+
targetEntityType = potentialNavProp.targetType;
|
|
139
|
+
const navigationPathFromPreviousEntitySet = getNavigationBindingFromPreviousEntitySet(navigationProperties);
|
|
140
|
+
if (navigationPathFromPreviousEntitySet && currentEntitySet !== null && currentEntitySet !== void 0 && currentEntitySet.navigationPropertyBinding.hasOwnProperty(navigationPathFromPreviousEntitySet)) {
|
|
141
|
+
targetEntitySet = currentEntitySet.navigationPropertyBinding[navigationPathFromPreviousEntitySet];
|
|
107
142
|
}
|
|
108
|
-
reducedEntityType = currentEntityType;
|
|
109
143
|
} else {
|
|
110
|
-
const potentialComplexType =
|
|
144
|
+
const potentialComplexType = (referenceEntityType.entityProperties || referenceEntityType.properties).find(navProp => navProp.name === path);
|
|
111
145
|
if (potentialComplexType !== null && potentialComplexType !== void 0 && potentialComplexType.targetType) {
|
|
112
146
|
navigationProperties.push(potentialComplexType);
|
|
113
|
-
reducedEntityType = currentEntityType;
|
|
114
|
-
} else {
|
|
115
|
-
reducedEntityType = undefined;
|
|
116
147
|
}
|
|
117
148
|
}
|
|
118
|
-
}
|
|
149
|
+
}
|
|
119
150
|
return {
|
|
120
151
|
startingEntitySet: dataModelObjectPath.startingEntitySet,
|
|
121
152
|
navigationProperties: navigationProperties,
|
|
122
153
|
contextLocation: dataModelObjectPath.contextLocation,
|
|
123
|
-
targetEntitySet:
|
|
124
|
-
targetEntityType:
|
|
125
|
-
targetObject:
|
|
154
|
+
targetEntitySet: targetEntitySet ?? dataModelObjectPath.targetEntitySet,
|
|
155
|
+
targetEntityType: targetEntityType ?? dataModelObjectPath.targetEntityType,
|
|
156
|
+
targetObject: dataModelObjectPath.targetObject,
|
|
126
157
|
convertedTypes: dataModelObjectPath.convertedTypes
|
|
127
158
|
};
|
|
128
159
|
};
|
|
129
|
-
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Detects if the DataModelObjectPath has navigated threw a complexType.
|
|
163
|
+
*
|
|
164
|
+
* @param dataModelObjectPath The dataModelObjectPath
|
|
165
|
+
* @returns Is there a complexType into the DataModelObjectPath.
|
|
166
|
+
*/
|
|
167
|
+
const containsAComplexType = function (dataModelObjectPath) {
|
|
168
|
+
return dataModelObjectPath.navigationProperties.find(navigation => isComplexType(navigation === null || navigation === void 0 ? void 0 : navigation.targetType)) !== undefined;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Gets the navigation binding from the previous entitySet listed into the navigation properties.
|
|
173
|
+
*
|
|
174
|
+
* @param navigationProperties The navigation properties
|
|
175
|
+
* @returns A new dataModelObjectPath.
|
|
176
|
+
*/
|
|
177
|
+
const getNavigationBindingFromPreviousEntitySet = function (navigationProperties) {
|
|
178
|
+
const navigationPropertyLength = navigationProperties.length;
|
|
179
|
+
if (navigationPropertyLength) {
|
|
180
|
+
const lastNavigation = navigationProperties[navigationPropertyLength - 1];
|
|
181
|
+
const isComplexTypeLastNavigation = isComplexType(lastNavigation.targetType);
|
|
182
|
+
let navigationPath = "";
|
|
183
|
+
if (navigationPropertyLength > 1 && !isComplexTypeLastNavigation) {
|
|
184
|
+
for (let i = 0; i < navigationPropertyLength - 1; i++) {
|
|
185
|
+
const navigationProperty = navigationProperties[i];
|
|
186
|
+
if (isComplexType(navigationProperty.targetType)) {
|
|
187
|
+
navigationPath += `${navigationProperty.name}/`;
|
|
188
|
+
} else {
|
|
189
|
+
navigationPath = "";
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return isComplexTypeLastNavigation ? "" : `${navigationPath}${lastNavigation.name}`;
|
|
194
|
+
}
|
|
195
|
+
return "";
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Gets the path of the targeted entitySet.
|
|
200
|
+
*
|
|
201
|
+
* @param dataModelObjectPath The dataModelObjectPath
|
|
202
|
+
* @returns The path.
|
|
203
|
+
*/
|
|
130
204
|
const getTargetEntitySetPath = function (dataModelObjectPath) {
|
|
131
|
-
|
|
205
|
+
const initialPath = `/${dataModelObjectPath.startingEntitySet.name}`;
|
|
206
|
+
let targetEntitySetPath = initialPath;
|
|
132
207
|
let currentEntitySet = dataModelObjectPath.startingEntitySet;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
208
|
+
const navigationProperties = dataModelObjectPath.navigationProperties;
|
|
209
|
+
let navigationPath;
|
|
210
|
+
for (let i = 0; i < navigationProperties.length; i++) {
|
|
211
|
+
navigationPath = getNavigationBindingFromPreviousEntitySet(navigationProperties.slice(0, i + 1));
|
|
212
|
+
if (currentEntitySet && currentEntitySet.navigationPropertyBinding.hasOwnProperty(navigationPath)) {
|
|
213
|
+
targetEntitySetPath += `/$NavigationPropertyBinding/${navigationPath.replace("/", "%2F")}`;
|
|
214
|
+
currentEntitySet = currentEntitySet.navigationPropertyBinding[navigationPath];
|
|
140
215
|
}
|
|
141
|
-
}
|
|
216
|
+
}
|
|
217
|
+
targetEntitySetPath += "/$";
|
|
142
218
|
return targetEntitySetPath;
|
|
143
219
|
};
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Gets the path of the targeted navigation.
|
|
223
|
+
*
|
|
224
|
+
* @param dataModelObjectPath The dataModelObjectPath
|
|
225
|
+
* @param bRelative
|
|
226
|
+
* @returns The path.
|
|
227
|
+
*/
|
|
144
228
|
_exports.getTargetEntitySetPath = getTargetEntitySetPath;
|
|
145
|
-
const
|
|
146
|
-
var _dataModelObjectPath$;
|
|
229
|
+
const getTargetNavigationPath = function (dataModelObjectPath) {
|
|
147
230
|
let bRelative = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
148
231
|
let path = "";
|
|
149
232
|
if (!dataModelObjectPath.startingEntitySet) {
|
|
@@ -156,7 +239,22 @@ sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/templating/Pro
|
|
|
156
239
|
path = setTrailingSlash(path);
|
|
157
240
|
path += dataModelObjectPath.navigationProperties.map(navProp => navProp.name).join("/");
|
|
158
241
|
}
|
|
159
|
-
|
|
242
|
+
return path;
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Gets the path of the targeted object.
|
|
247
|
+
*
|
|
248
|
+
* @param dataModelObjectPath The dataModelObjectPath
|
|
249
|
+
* @param bRelative
|
|
250
|
+
* @returns The path.
|
|
251
|
+
*/
|
|
252
|
+
_exports.getTargetNavigationPath = getTargetNavigationPath;
|
|
253
|
+
const getTargetObjectPath = function (dataModelObjectPath) {
|
|
254
|
+
var _dataModelObjectPath$2, _dataModelObjectPath$3;
|
|
255
|
+
let bRelative = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
256
|
+
let path = getTargetNavigationPath(dataModelObjectPath, bRelative);
|
|
257
|
+
if ((_dataModelObjectPath$2 = dataModelObjectPath.targetObject) !== null && _dataModelObjectPath$2 !== void 0 && _dataModelObjectPath$2.name && !isNavigationProperty(dataModelObjectPath.targetObject) && !isEntityType(dataModelObjectPath.targetObject) && !isEntitySet(dataModelObjectPath.targetObject) && !isComplexType((_dataModelObjectPath$3 = dataModelObjectPath.targetObject) === null || _dataModelObjectPath$3 === void 0 ? void 0 : _dataModelObjectPath$3.targetType) && dataModelObjectPath.targetObject !== dataModelObjectPath.startingEntitySet) {
|
|
160
258
|
path = setTrailingSlash(path);
|
|
161
259
|
path += `${dataModelObjectPath.targetObject.name}`;
|
|
162
260
|
} else if (dataModelObjectPath.targetObject && dataModelObjectPath.targetObject.hasOwnProperty("term")) {
|
|
@@ -170,39 +268,41 @@ sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/templating/Pro
|
|
|
170
268
|
};
|
|
171
269
|
_exports.getTargetObjectPath = getTargetObjectPath;
|
|
172
270
|
const getContextRelativeTargetObjectPath = function (dataModelObjectPath) {
|
|
173
|
-
var _dataModelObjectPath$
|
|
271
|
+
var _dataModelObjectPath$4;
|
|
174
272
|
let forBindingExpression = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
175
273
|
let forFilterConditionPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
176
|
-
if (((_dataModelObjectPath$
|
|
274
|
+
if (((_dataModelObjectPath$4 = dataModelObjectPath.contextLocation) === null || _dataModelObjectPath$4 === void 0 ? void 0 : _dataModelObjectPath$4.startingEntitySet) !== dataModelObjectPath.startingEntitySet) {
|
|
177
275
|
return getTargetObjectPath(dataModelObjectPath);
|
|
178
276
|
}
|
|
179
277
|
return _getContextRelativeTargetObjectPath(dataModelObjectPath, forBindingExpression, forFilterConditionPath);
|
|
180
278
|
};
|
|
181
279
|
_exports.getContextRelativeTargetObjectPath = getContextRelativeTargetObjectPath;
|
|
182
280
|
const _getContextRelativeTargetObjectPath = function (dataModelObjectPath) {
|
|
281
|
+
var _dataModelObjectPath$5;
|
|
183
282
|
let forBindingExpression = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
184
283
|
let forFilterConditionPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
284
|
+
if (!dataModelObjectPath.targetObject) {
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
185
287
|
const navProperties = getPathRelativeLocation(dataModelObjectPath.contextLocation, dataModelObjectPath.navigationProperties);
|
|
186
288
|
if (forBindingExpression) {
|
|
187
|
-
if (navProperties.
|
|
289
|
+
if (navProperties.some(isMultipleNavigationProperty)) {
|
|
188
290
|
return undefined;
|
|
189
291
|
}
|
|
190
292
|
}
|
|
191
293
|
let path = forFilterConditionPath ? navProperties.map(navProp => {
|
|
192
|
-
const isCollection = navProp
|
|
294
|
+
const isCollection = isMultipleNavigationProperty(navProp);
|
|
193
295
|
return isCollection ? `${navProp.name}*` : navProp.name;
|
|
194
296
|
}).join("/") : navProperties.map(navProp => navProp.name).join("/");
|
|
195
|
-
if (
|
|
297
|
+
if ((dataModelObjectPath.targetObject.name || dataModelObjectPath.targetObject.type === "PropertyPath" && dataModelObjectPath.targetObject.value) && !isNavigationProperty(dataModelObjectPath.targetObject) && !isEntityType(dataModelObjectPath.targetObject) && !isEntitySet(dataModelObjectPath.targetObject) && !isComplexType((_dataModelObjectPath$5 = dataModelObjectPath.targetObject) === null || _dataModelObjectPath$5 === void 0 ? void 0 : _dataModelObjectPath$5.targetType) && dataModelObjectPath.targetObject !== dataModelObjectPath.startingEntitySet) {
|
|
196
298
|
path = setTrailingSlash(path);
|
|
197
299
|
path += dataModelObjectPath.targetObject.type === "PropertyPath" ? `${dataModelObjectPath.targetObject.value}` : `${dataModelObjectPath.targetObject.name}`;
|
|
198
|
-
} else if (dataModelObjectPath.targetObject
|
|
300
|
+
} else if (dataModelObjectPath.targetObject.hasOwnProperty("term")) {
|
|
199
301
|
path = setTrailingSlash(path);
|
|
200
302
|
path += `@${dataModelObjectPath.targetObject.term}`;
|
|
201
303
|
if (dataModelObjectPath.targetObject.hasOwnProperty("qualifier") && !!dataModelObjectPath.targetObject.qualifier) {
|
|
202
304
|
path += `#${dataModelObjectPath.targetObject.qualifier}`;
|
|
203
305
|
}
|
|
204
|
-
} else if (!dataModelObjectPath.targetObject) {
|
|
205
|
-
return undefined;
|
|
206
306
|
}
|
|
207
307
|
return path;
|
|
208
308
|
};
|
|
@@ -272,7 +372,7 @@ sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/templating/Pro
|
|
|
272
372
|
}
|
|
273
373
|
visitedNavigationPropsName.push(navigationProperty.name);
|
|
274
374
|
allVisitedNavigationProps.push(navigationProperty);
|
|
275
|
-
if (navigationProperty
|
|
375
|
+
if (isProperty(navigationProperty) || !navigationProperty.containsTarget) {
|
|
276
376
|
// We should have a navigationPropertyBinding associated with the path so far which can consist of ([ContainmentNavProp]/)*[NavProp]
|
|
277
377
|
const fullNavigationPath = visitedNavigationPropsName.join("/");
|
|
278
378
|
if (currentEntitySet && currentEntitySet.navigationPropertyBinding.hasOwnProperty(fullNavigationPath)) {
|
|
@@ -360,4 +460,4 @@ sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/templating/Pro
|
|
|
360
460
|
};
|
|
361
461
|
return _exports;
|
|
362
462
|
}, false);
|
|
363
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRSZWxhdGl2ZVBhdGhzIiwiY29udGV4dFBhdGgiLCJnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbiIsImNvbnRleHRMb2NhdGlvbiIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibnAiLCJuYW1lIiwidmlzaXRlZE5hdlByb3BzIiwibGVuZ3RoIiwicmVtYWluaW5nTmF2UHJvcHMiLCJmb3JFYWNoIiwibmF2UHJvcCIsIm5hdkluZGV4IiwicHVzaCIsImNvbmNhdCIsInNsaWNlIiwiY3VycmVudElkeCIsImN1cnJlbnROYXYiLCJuZXh0TmF2UHJvcCIsIl90eXBlIiwicGFydG5lciIsInNwbGljZSIsImV4dHJhTmF2UHJvcCIsInRhcmdldFR5cGUiLCJmaW5kIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicHJvcGVydHlQYXRoIiwic1Byb3BlcnR5UGF0aCIsImlzUGF0aEV4cHJlc3Npb24iLCJpc0Fubm90YXRpb25QYXRoRXhwcmVzc2lvbiIsInBhdGgiLCJvVGFyZ2V0IiwiJHRhcmdldCIsInRhcmdldEVudGl0eVR5cGUiLCJyZXNvbHZlUGF0aCIsInRhcmdldE9iamVjdCIsImFQYXRoU3BsaXQiLCJzcGxpdCIsImN1cnJlbnRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJjdXJyZW50RW50aXR5VHlwZSIsInJlZHVjZWRFbnRpdHlUeXBlIiwicGF0aFBhcnQiLCJwb3RlbnRpYWxOYXZQcm9wIiwibmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsImhhc093blByb3BlcnR5IiwicG90ZW50aWFsQ29tcGxleFR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwidW5kZWZpbmVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJjb252ZXJ0ZWRUeXBlcyIsImdldFRhcmdldEVudGl0eVNldFBhdGgiLCJ0YXJnZXRFbnRpdHlTZXRQYXRoIiwibmF2aWdhdGVkUGF0aHMiLCJqb2luIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImJSZWxhdGl2ZSIsInNldFRyYWlsaW5nU2xhc2giLCJ0ZXJtIiwicXVhbGlmaWVyIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsImZvckJpbmRpbmdFeHByZXNzaW9uIiwiZm9yRmlsdGVyQ29uZGl0aW9uUGF0aCIsIl9nZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwibmF2UHJvcGVydGllcyIsImlzQ29sbGVjdGlvbiIsInR5cGUiLCJ2YWx1ZSIsImlzUGF0aFVwZGF0YWJsZSIsImV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoIiwiY2hlY2tPblBhdGgiLCJhbm5vdGF0aW9uT2JqZWN0IiwiVXBkYXRlUmVzdHJpY3Rpb25zIiwiVXBkYXRhYmxlIiwiaXNQYXRoU2VhcmNoYWJsZSIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsIlNlYXJjaGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJEZWxldGVSZXN0cmljdGlvbnMiLCJEZWxldGFibGUiLCJpc1BhdGhJbnNlcnRhYmxlIiwiSW5zZXJ0UmVzdHJpY3Rpb25zIiwiSW5zZXJ0YWJsZSIsImNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsImFsbG93ZWRFeHByZXNzaW9uIiwiZmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJjdXJyZW50T2JqZWN0UmVzdHJpY3Rpb24iLCJyZXN0cmljdGlvbiIsIlByb3BlcnR5IiwiaW5kZXhPZiIsIkFsbG93ZWRFeHByZXNzaW9ucyIsInRvU3RyaW5nIiwiY2hlY2tGdW5jdGlvbiIsImNvbnN0YW50IiwicGFyZW50RW50aXR5U2V0IiwidmlzaXRlZE5hdmlnYXRpb25Qcm9wc05hbWUiLCJhbGxWaXNpdGVkTmF2aWdhdGlvblByb3BzIiwicmVzZXRWaXNpdGVkTmF2UHJvcHMiLCJuYXZpZ2F0aW9uUHJvcGVydHkiLCJjb250YWluc1RhcmdldCIsImZ1bGxOYXZpZ2F0aW9uUGF0aCIsInJlc3RyaWN0aW9ucyIsIl9wYXJlbnRFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIkNhcGFiaWxpdGllcyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsInJlc3RyaWN0ZWROYXZQcm9wIiwiTmF2aWdhdGlvblByb3BlcnR5IiwicmVzdHJpY3Rpb25EZWZpbml0aW9uIiwiX2FsbFZpc2l0ZWROYXZpZ2F0aW9uUHJvcHMiLCJwYXRoUmVsYXRpdmVMb2NhdGlvbiIsInBhdGhWaXNpdG9yRnVuY3Rpb24iLCJwYXRoVmlzaXRvciIsImdldFBhdGhWaXNpdG9yRm9yU2luZ2xldG9uIiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJ0YXJnZXRSZXN0cmljdGlvbnMiLCJpZ25vcmVUYXJnZXRDb2xsZWN0aW9uIiwiYXV0aG9yaXplVW5yZXNvbHZhYmxlIiwidW5yZXNvbHZhYmxlRXhwcmVzc2lvbiIsImVuZHNXaXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEYXRhTW9kZWxQYXRoSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0Q29udmVydGVkTWV0YWRhdGEsXG5cdEVudGl0eVNldCxcblx0RW50aXR5VHlwZSxcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQcm9wZXJ0eSxcblx0UHJvcGVydHlQYXRoLFxuXHRTaW5nbGV0b25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVUeXBlcyxcblx0TmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24sXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzLFxuXHRFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29uc3RhbnQsIGVxdWFsLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIHVucmVzb2x2YWJsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eU9yUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25QYXRoRXhwcmVzc2lvbiwgaXNQYXRoRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggPSB7XG5cdHN0YXJ0aW5nRW50aXR5U2V0OiBTaW5nbGV0b24gfCBFbnRpdHlTZXQ7XG5cdGNvbnRleHRMb2NhdGlvbj86IERhdGFNb2RlbE9iamVjdFBhdGg7XG5cdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW107XG5cdHRhcmdldEVudGl0eVNldD86IFNpbmdsZXRvbiB8IEVudGl0eVNldDtcblx0dGFyZ2V0RW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0dGFyZ2V0T2JqZWN0OiBhbnk7XG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YTtcbn07XG5cbnR5cGUgRXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGggPSB7XG5cdHByb3BlcnR5UGF0aD86IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pjtcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvbjtcblx0aWdub3JlVGFyZ2V0Q29sbGVjdGlvbj86IGJvb2xlYW47XG5cdGF1dGhvcml6ZVVucmVzb2x2YWJsZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgcHJvcGVydHkgZnJvbSB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2JqZWN0IHRvIHRoZSBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0LlxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVsYXRpdmVQYXRocyA9IGZ1bmN0aW9uIChjb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRyZXR1cm4gZ2V0UGF0aFJlbGF0aXZlTG9jYXRpb24oY29udGV4dFBhdGg/LmNvbnRleHRMb2NhdGlvbiwgY29udGV4dFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzKS5tYXAoKG5wKSA9PiBucC5uYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbiA9IGZ1bmN0aW9uIChcblx0Y29udGV4dFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHR2aXNpdGVkTmF2UHJvcHM6IChOYXZpZ2F0aW9uUHJvcGVydHkgfCBQcm9wZXJ0eSlbXSA9IFtdXG4pOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10ge1xuXHRpZiAoIWNvbnRleHRQYXRoKSB7XG5cdFx0cmV0dXJuIHZpc2l0ZWROYXZQcm9wcztcblx0fSBlbHNlIGlmICh2aXNpdGVkTmF2UHJvcHMubGVuZ3RoID49IGNvbnRleHRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdGxldCByZW1haW5pbmdOYXZQcm9wczogKE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFByb3BlcnR5KVtdID0gW107XG5cdFx0Y29udGV4dFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMuZm9yRWFjaCgobmF2UHJvcCwgbmF2SW5kZXgpID0+IHtcblx0XHRcdGlmICh2aXNpdGVkTmF2UHJvcHNbbmF2SW5kZXhdICE9PSBuYXZQcm9wKSB7XG5cdFx0XHRcdHJlbWFpbmluZ05hdlByb3BzLnB1c2godmlzaXRlZE5hdlByb3BzW25hdkluZGV4XSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmVtYWluaW5nTmF2UHJvcHMgPSByZW1haW5pbmdOYXZQcm9wcy5jb25jYXQodmlzaXRlZE5hdlByb3BzLnNsaWNlKGNvbnRleHRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCkpO1xuXHRcdC8vIENsZWFuIHVwIE5hdlByb3AgLT4gT3duZXJcblx0XHRsZXQgY3VycmVudElkeCA9IDA7XG5cdFx0d2hpbGUgKHJlbWFpbmluZ05hdlByb3BzLmxlbmd0aCA+IDEgJiYgY3VycmVudElkeCAhPSByZW1haW5pbmdOYXZQcm9wcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50TmF2ID0gcmVtYWluaW5nTmF2UHJvcHNbY3VycmVudElkeF07XG5cdFx0XHRjb25zdCBuZXh0TmF2UHJvcCA9IHJlbWFpbmluZ05hdlByb3BzW2N1cnJlbnRJZHggKyAxXTtcblx0XHRcdGlmIChjdXJyZW50TmF2Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmIGN1cnJlbnROYXYucGFydG5lciA9PT0gbmV4dE5hdlByb3AubmFtZSkge1xuXHRcdFx0XHRyZW1haW5pbmdOYXZQcm9wcy5zcGxpY2UoMCwgMik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdXJyZW50SWR4Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZW1haW5pbmdOYXZQcm9wcztcblx0fSBlbHNlIHtcblx0XHRsZXQgZXh0cmFOYXZQcm9wOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10gPSBbXTtcblx0XHR2aXNpdGVkTmF2UHJvcHMuZm9yRWFjaCgobmF2UHJvcCwgbmF2SW5kZXgpID0+IHtcblx0XHRcdGlmIChjb250ZXh0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllc1tuYXZJbmRleF0gIT09IG5hdlByb3ApIHtcblx0XHRcdFx0ZXh0cmFOYXZQcm9wLnB1c2godmlzaXRlZE5hdlByb3BzW25hdkluZGV4XSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0ZXh0cmFOYXZQcm9wID0gZXh0cmFOYXZQcm9wLmNvbmNhdChjb250ZXh0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5zbGljZSh2aXNpdGVkTmF2UHJvcHMubGVuZ3RoKSk7XG5cdFx0Ly8gQ2xlYW4gdXAgTmF2UHJvcCAtPiBPd25lclxuXHRcdGxldCBjdXJyZW50SWR4ID0gMDtcblx0XHR3aGlsZSAoZXh0cmFOYXZQcm9wLmxlbmd0aCA+IDEgJiYgY3VycmVudElkeCAhPSBleHRyYU5hdlByb3AubGVuZ3RoIC0gMSkge1xuXHRcdFx0Y29uc3QgY3VycmVudE5hdiA9IGV4dHJhTmF2UHJvcFtjdXJyZW50SWR4XTtcblx0XHRcdGNvbnN0IG5leHROYXZQcm9wID0gZXh0cmFOYXZQcm9wW2N1cnJlbnRJZHggKyAxXTtcblx0XHRcdGlmIChjdXJyZW50TmF2Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmIGN1cnJlbnROYXYucGFydG5lciA9PT0gbmV4dE5hdlByb3AubmFtZSkge1xuXHRcdFx0XHRleHRyYU5hdlByb3Auc3BsaWNlKDAsIDIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3VycmVudElkeCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRleHRyYU5hdlByb3AgPSBleHRyYU5hdlByb3AubWFwKChuYXZQcm9wKSA9PiB7XG5cdFx0XHRyZXR1cm4gbmF2UHJvcC5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIlxuXHRcdFx0XHQ/IChuYXZQcm9wLnRhcmdldFR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZCgobnApID0+IG5wLm5hbWUgPT09IG5hdlByb3AucGFydG5lcikgYXMgTmF2aWdhdGlvblByb3BlcnR5KVxuXHRcdFx0XHQ6IG5hdlByb3A7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGV4dHJhTmF2UHJvcDtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGVuaGFuY2VEYXRhTW9kZWxQYXRoID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRwcm9wZXJ0eVBhdGg/OiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT5cbik6IERhdGFNb2RlbE9iamVjdFBhdGgge1xuXHRsZXQgc1Byb3BlcnR5UGF0aDogc3RyaW5nID0gXCJcIjtcblx0aWYgKChpc1BhdGhFeHByZXNzaW9uKHByb3BlcnR5UGF0aCkgfHwgaXNBbm5vdGF0aW9uUGF0aEV4cHJlc3Npb24ocHJvcGVydHlQYXRoKSkgJiYgcHJvcGVydHlQYXRoLnBhdGgpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlQYXRoLnBhdGg7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHByb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGg7XG5cdH1cblx0bGV0IG9UYXJnZXQ7XG5cdGlmIChpc1BhdGhFeHByZXNzaW9uKHByb3BlcnR5UGF0aCkgfHwgaXNBbm5vdGF0aW9uUGF0aEV4cHJlc3Npb24ocHJvcGVydHlQYXRoKSkge1xuXHRcdG9UYXJnZXQgPSBwcm9wZXJ0eVBhdGguJHRhcmdldDtcblx0fSBlbHNlIGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUpIHtcblx0XHRvVGFyZ2V0ID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKHNQcm9wZXJ0eVBhdGgpO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXHRjb25zdCBhUGF0aFNwbGl0ID0gc1Byb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBjdXJyZW50RW50aXR5U2V0ID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdGxldCBjdXJyZW50RW50aXR5VHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmNvbmNhdCgpO1xuXHQvLyBQcm9jZXNzIG9ubHkgaWYgd2UgaGF2ZSB0byBnbyB0aHJvdWdoIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXG5cdGxldCByZWR1Y2VkRW50aXR5VHlwZTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0YVBhdGhTcGxpdC5mb3JFYWNoKChwYXRoUGFydDogc3RyaW5nKSA9PiB7XG5cdFx0aWYgKCFyZWR1Y2VkRW50aXR5VHlwZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBwb3RlbnRpYWxOYXZQcm9wID0gcmVkdWNlZEVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lID09PSBwYXRoUGFydCk7XG5cdFx0aWYgKHBvdGVudGlhbE5hdlByb3ApIHtcblx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2gocG90ZW50aWFsTmF2UHJvcCk7XG5cdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IHBvdGVudGlhbE5hdlByb3AudGFyZ2V0VHlwZTtcblx0XHRcdGlmIChjdXJyZW50RW50aXR5U2V0ICYmIGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZy5oYXNPd25Qcm9wZXJ0eShwYXRoUGFydCkpIHtcblx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1twYXRoUGFydF0gYXMgRW50aXR5U2V0O1xuXHRcdFx0fVxuXHRcdFx0cmVkdWNlZEVudGl0eVR5cGUgPSBjdXJyZW50RW50aXR5VHlwZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcG90ZW50aWFsQ29tcGxleFR5cGUgPSByZWR1Y2VkRW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSA9PT0gcGF0aFBhcnQpO1xuXHRcdFx0aWYgKHBvdGVudGlhbENvbXBsZXhUeXBlPy50YXJnZXRUeXBlKSB7XG5cdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2gocG90ZW50aWFsQ29tcGxleFR5cGUpO1xuXHRcdFx0XHRyZWR1Y2VkRW50aXR5VHlwZSA9IGN1cnJlbnRFbnRpdHlUeXBlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVkdWNlZEVudGl0eVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRjb250ZXh0TG9jYXRpb246IGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdHRhcmdldEVudGl0eVNldDogY3VycmVudEVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBjdXJyZW50RW50aXR5VHlwZSxcblx0XHR0YXJnZXRPYmplY3Q6IG9UYXJnZXQsXG5cdFx0Y29udmVydGVkVHlwZXM6IGRhdGFNb2RlbE9iamVjdFBhdGguY29udmVydGVkVHlwZXNcblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUYXJnZXRFbnRpdHlTZXRQYXRoID0gZnVuY3Rpb24gKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBzdHJpbmcge1xuXHRsZXQgdGFyZ2V0RW50aXR5U2V0UGF0aDogc3RyaW5nID0gYC8ke2RhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZX1gO1xuXHRsZXQgY3VycmVudEVudGl0eVNldCA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQ7XG5cdGxldCBuYXZpZ2F0ZWRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChuYXZQcm9wKSA9PiB7XG5cdFx0bmF2aWdhdGVkUGF0aHMucHVzaChuYXZQcm9wLm5hbWUpO1xuXHRcdGlmIChjdXJyZW50RW50aXR5U2V0ICYmIGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZy5oYXNPd25Qcm9wZXJ0eShuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKSkpIHtcblx0XHRcdHRhcmdldEVudGl0eVNldFBhdGggKz0gYC8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke25hdmlnYXRlZFBhdGhzLmpvaW4oXCIvXCIpfS8kYDtcblx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGVkUGF0aHMuam9pbihcIi9cIildIGFzIEVudGl0eVNldDtcblx0XHRcdG5hdmlnYXRlZFBhdGhzID0gW107XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhcmdldEVudGl0eVNldFBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGFyZ2V0T2JqZWN0UGF0aCA9IGZ1bmN0aW9uIChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLCBiUmVsYXRpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG5cdGxldCBwYXRoID0gXCJcIjtcblx0aWYgKCFkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSB7XG5cdFx0cmV0dXJuIFwiL1wiO1xuXHR9XG5cdGlmICghYlJlbGF0aXZlKSB7XG5cdFx0cGF0aCArPSBgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWA7XG5cdH1cblx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdHBhdGggPSBzZXRUcmFpbGluZ1NsYXNoKHBhdGgpO1xuXHRcdHBhdGggKz0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSkuam9pbihcIi9cIik7XG5cdH1cblxuXHRpZiAoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/Lm5hbWUgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5fdHlwZSAhPT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJlxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Ll90eXBlICE9PSBcIkVudGl0eVR5cGVcIiAmJlxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Ll90eXBlICE9PSBcIkVudGl0eVNldFwiICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgIT09IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXRcblx0KSB7XG5cdFx0cGF0aCA9IHNldFRyYWlsaW5nU2xhc2gocGF0aCk7XG5cdFx0cGF0aCArPSBgJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5uYW1lfWA7XG5cdH0gZWxzZSBpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgJiYgZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuaGFzT3duUHJvcGVydHkoXCJ0ZXJtXCIpKSB7XG5cdFx0cGF0aCA9IHNldFRyYWlsaW5nU2xhc2gocGF0aCk7XG5cdFx0cGF0aCArPSBgQCR7ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QudGVybX1gO1xuXHRcdGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5oYXNPd25Qcm9wZXJ0eShcInF1YWxpZmllclwiKSAmJiAhIWRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnF1YWxpZmllcikge1xuXHRcdFx0cGF0aCArPSBgIyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucXVhbGlmaWVyfWA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZvckJpbmRpbmdFeHByZXNzaW9uOiBib29sZWFuID0gZmFsc2UsXG5cdGZvckZpbHRlckNvbmRpdGlvblBhdGg6IGJvb2xlYW4gPSBmYWxzZVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy5zdGFydGluZ0VudGl0eVNldCAhPT0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCkge1xuXHRcdHJldHVybiBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdHJldHVybiBfZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxPYmplY3RQYXRoLCBmb3JCaW5kaW5nRXhwcmVzc2lvbiwgZm9yRmlsdGVyQ29uZGl0aW9uUGF0aCk7XG59O1xuXG5jb25zdCBfZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0Zm9yQmluZGluZ0V4cHJlc3Npb246IGJvb2xlYW4gPSBmYWxzZSxcblx0Zm9yRmlsdGVyQ29uZGl0aW9uUGF0aDogYm9vbGVhbiA9IGZhbHNlXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBuYXZQcm9wZXJ0aWVzID0gZ2V0UGF0aFJlbGF0aXZlTG9jYXRpb24oZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24sIGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMpO1xuXHRpZiAoZm9yQmluZGluZ0V4cHJlc3Npb24pIHtcblx0XHRpZiAobmF2UHJvcGVydGllcy5maW5kKChucCkgPT4gbnAuX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgbnAuaXNDb2xsZWN0aW9uKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0bGV0IHBhdGggPSBmb3JGaWx0ZXJDb25kaXRpb25QYXRoXG5cdFx0PyBuYXZQcm9wZXJ0aWVzXG5cdFx0XHRcdC5tYXAoKG5hdlByb3ApID0+IHtcblx0XHRcdFx0XHRjb25zdCBpc0NvbGxlY3Rpb24gPSBuYXZQcm9wLl90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmIG5hdlByb3AuaXNDb2xsZWN0aW9uO1xuXHRcdFx0XHRcdHJldHVybiBpc0NvbGxlY3Rpb24gPyBgJHtuYXZQcm9wLm5hbWV9KmAgOiBuYXZQcm9wLm5hbWU7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5qb2luKFwiL1wiKVxuXHRcdDogbmF2UHJvcGVydGllcy5tYXAoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSkuam9pbihcIi9cIik7XG5cblx0aWYgKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ICYmXG5cdFx0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Lm5hbWUgfHxcblx0XHRcdChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC50eXBlID09PSBcIlByb3BlcnR5UGF0aFwiICYmIGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnZhbHVlKSkgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5fdHlwZSAhPT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJlxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Ll90eXBlICE9PSBcIkVudGl0eVR5cGVcIiAmJlxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Ll90eXBlICE9PSBcIkVudGl0eVNldFwiICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgIT09IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXRcblx0KSB7XG5cdFx0cGF0aCA9IHNldFRyYWlsaW5nU2xhc2gocGF0aCk7XG5cdFx0cGF0aCArPVxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QudHlwZSA9PT0gXCJQcm9wZXJ0eVBhdGhcIlxuXHRcdFx0XHQ/IGAke2RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnZhbHVlfWBcblx0XHRcdFx0OiBgJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5uYW1lfWA7XG5cdH0gZWxzZSBpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgJiYgZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuaGFzT3duUHJvcGVydHkoXCJ0ZXJtXCIpKSB7XG5cdFx0cGF0aCA9IHNldFRyYWlsaW5nU2xhc2gocGF0aCk7XG5cdFx0cGF0aCArPSBgQCR7ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QudGVybX1gO1xuXHRcdGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5oYXNPd25Qcm9wZXJ0eShcInF1YWxpZmllclwiKSAmJiAhIWRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnF1YWxpZmllcikge1xuXHRcdFx0cGF0aCArPSBgIyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucXVhbGlmaWVyfWA7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQYXRoVXBkYXRhYmxlID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoIHwgdW5kZWZpbmVkLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY2hlY2tPblBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHQoYW5ub3RhdGlvbk9iamVjdDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24gfCBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMpID0+IHtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0Py5VcGRhdGVSZXN0cmljdGlvbnM/LlVwZGF0YWJsZTtcblx0XHR9LFxuXHRcdGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQYXRoU2VhcmNoYWJsZSA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCB8IHVuZGVmaW5lZCxcblx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/OiBFeHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNoZWNrT25QYXRoKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0KGFubm90YXRpb25PYmplY3Q6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdD8uU2VhcmNoUmVzdHJpY3Rpb25zPy5TZWFyY2hhYmxlO1xuXHRcdH0sXG5cdFx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BhdGhEZWxldGFibGUgPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggfCB1bmRlZmluZWQsXG5cdGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPzogRXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjaGVja09uUGF0aChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdChhbm5vdGF0aW9uT2JqZWN0OiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcykgPT4ge1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25PYmplY3Q/LkRlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlO1xuXHRcdH0sXG5cdFx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BhdGhJbnNlcnRhYmxlID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoIHwgdW5kZWZpbmVkLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY2hlY2tPblBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHQoYW5ub3RhdGlvbk9iamVjdDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24gfCBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMpID0+IHtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0Py5JbnNlcnRSZXN0cmljdGlvbnM/Lkluc2VydGFibGU7XG5cdFx0fSxcblx0XHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0YWxsb3dlZEV4cHJlc3Npb246IChzdHJpbmcgfCB1bmRlZmluZWQpW11cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjaGVja09uUGF0aChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdChhbm5vdGF0aW9uT2JqZWN0OiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcyB8IEVudGl0eVR5cGVBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMpID0+IHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0ICYmIFwiRmlsdGVyUmVzdHJpY3Rpb25zXCIgaW4gYW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zOiBGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25UeXBlVHlwZXNbXSA9XG5cdFx0XHRcdFx0KGFubm90YXRpb25PYmplY3Q/LkZpbHRlclJlc3RyaWN0aW9ucz8uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyBhcyBGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25UeXBlVHlwZXNbXSkgfHwgW107XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRPYmplY3RSZXN0cmljdGlvbiA9IGZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZmluZCgocmVzdHJpY3Rpb24pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKHJlc3RyaWN0aW9uLlByb3BlcnR5IGFzIFByb3BlcnR5UGF0aCkuJHRhcmdldCA9PT0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoY3VycmVudE9iamVjdFJlc3RyaWN0aW9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFsbG93ZWRFeHByZXNzaW9uLmluZGV4T2YoY3VycmVudE9iamVjdFJlc3RyaWN0aW9uPy5BbGxvd2VkRXhwcmVzc2lvbnM/LnRvU3RyaW5nKCkpICE9PSAtMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tPblBhdGggPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggfCB1bmRlZmluZWQsXG5cdGNoZWNrRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoIWRhdGFNb2RlbE9iamVjdFBhdGggfHwgIWRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRkYXRhTW9kZWxPYmplY3RQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCwgZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/LnByb3BlcnR5UGF0aCk7XG5cblx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IG51bGwgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0O1xuXHRsZXQgcGFyZW50RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCBudWxsID0gbnVsbDtcblx0bGV0IHZpc2l0ZWROYXZpZ2F0aW9uUHJvcHNOYW1lOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBhbGxWaXNpdGVkTmF2aWdhdGlvblByb3BzOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10gPSBbXTtcblx0bGV0IHRhcmdldEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgbnVsbCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCBudWxsID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlO1xuXHRsZXQgcmVzZXRWaXNpdGVkTmF2UHJvcHMgPSBmYWxzZTtcblxuXHRkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goKG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4ge1xuXHRcdGlmIChyZXNldFZpc2l0ZWROYXZQcm9wcykge1xuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25Qcm9wc05hbWUgPSBbXTtcblx0XHR9XG5cdFx0dmlzaXRlZE5hdmlnYXRpb25Qcm9wc05hbWUucHVzaChuYXZpZ2F0aW9uUHJvcGVydHkubmFtZSk7XG5cdFx0YWxsVmlzaXRlZE5hdmlnYXRpb25Qcm9wcy5wdXNoKG5hdmlnYXRpb25Qcm9wZXJ0eSk7XG5cdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eS5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiIHx8ICFuYXZpZ2F0aW9uUHJvcGVydHkuY29udGFpbnNUYXJnZXQpIHtcblx0XHRcdC8vIFdlIHNob3VsZCBoYXZlIGEgbmF2aWdhdGlvblByb3BlcnR5QmluZGluZyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhdGggc28gZmFyIHdoaWNoIGNhbiBjb25zaXN0IG9mIChbQ29udGFpbm1lbnROYXZQcm9wXS8pKltOYXZQcm9wXVxuXHRcdFx0Y29uc3QgZnVsbE5hdmlnYXRpb25QYXRoID0gdmlzaXRlZE5hdmlnYXRpb25Qcm9wc05hbWUuam9pbihcIi9cIik7XG5cdFx0XHRpZiAoY3VycmVudEVudGl0eVNldCAmJiBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkoZnVsbE5hdmlnYXRpb25QYXRoKSkge1xuXHRcdFx0XHRwYXJlbnRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0O1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW2Z1bGxOYXZpZ2F0aW9uUGF0aF07XG5cdFx0XHRcdHRhcmdldEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHRcdC8vIElmIHdlIHJlYWNoZWQgYSBuYXZpZ2F0aW9uIHByb3BlcnR5IHdpdGggYSBuYXZpZ2F0aW9ucHJvcGVydHliaW5kaW5nLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSB2aXNpdGVkIHBhdGggb24gdGhlIG5leHQgaXRlcmF0aW9uIChpZiB0aGVyZSBpcyBvbmUpXG5cdFx0XHRcdHJlc2V0VmlzaXRlZE5hdlByb3BzID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIHJlYWxseSBzaG91bGQgbm90IGVuZCB1cCBoZXJlIGJ1dCBhdCBsZWFzdCBsZXQncyB0cnkgdG8gYXZvaWQgaW5jb3JyZWN0IGJlaGF2aW9yXG5cdFx0XHRcdHBhcmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBudWxsO1xuXHRcdFx0XHRyZXNldFZpc2l0ZWROYXZQcm9wcyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhcmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXQgPSBudWxsO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIG5hdmlnYXRlZCBkb3duIGFsbCB0aGUgbmF2IHByb3AgYW5kIHdlIHNob3VsZCBoYXZlXG5cdC8vIFRoZSB0YXJnZXQgZW50aXR5U2V0IHBvaW50aW5nIHRvIGVpdGhlciBudWxsIChpbiBjYXNlIG9mIGNvbnRhaW5tZW50IG5hdnByb3AgYSBsYXN0IHBhcnQpLCBvciB0aGUgYWN0dWFsIHRhcmdldCAobm9uIGNvbnRhaW5tZW50IGFzIHRhcmdldClcblx0Ly8gVGhlIHBhcmVudCBlbnRpdHlTZXQgcG9pbnRpbmcgdG8gdGhlIHByZXZpb3VzIGVudGl0eVNldCB1c2VkIGluIHRoZSBwYXRoXG5cdC8vIFZpc2l0ZWROYXZpZ2F0aW9uUGF0aCBzaG91bGQgY29udGFpbiB0aGUgcGF0aCB1cCB0byB0aGlzIHByb3BlcnR5XG5cblx0Ly8gUmVzdHJpY3Rpb25zIHNob3VsZCB0aGVuIGJlIGV2YWx1YXRlZCBhcyBQYXJlbnRFbnRpdHlTZXQuTmF2UmVzdHJpY3Rpb25zW05hdlByb3BlcnR5UGF0aF0gfHwgVGFyZ2V0RW50aXR5U2V0LlJlc3RyaWN0aW9uc1xuXHRjb25zdCBmdWxsTmF2aWdhdGlvblBhdGggPSB2aXNpdGVkTmF2aWdhdGlvblByb3BzTmFtZS5qb2luKFwiL1wiKTtcblx0bGV0IHJlc3RyaWN0aW9ucywgdmlzaXRlZE5hdlByb3BzO1xuXHRpZiAocGFyZW50RW50aXR5U2V0ICE9PSBudWxsKSB7XG5cdFx0Y29uc3QgX3BhcmVudEVudGl0eVNldDogRW50aXR5U2V0ID0gcGFyZW50RW50aXR5U2V0O1xuXHRcdF9wYXJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uUmVzdHJpY3RlZFByb3BlcnRpZXMuZm9yRWFjaChcblx0XHRcdChyZXN0cmljdGVkTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb25UeXBlcykgPT4ge1xuXHRcdFx0XHRpZiAocmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5Py50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3RyaWN0aW9uRGVmaW5pdGlvbiA9IGNoZWNrRnVuY3Rpb24ocmVzdHJpY3RlZE5hdlByb3ApO1xuXHRcdFx0XHRcdGlmIChmdWxsTmF2aWdhdGlvblBhdGggPT09IHJlc3RyaWN0ZWROYXZQcm9wLk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSAmJiByZXN0cmljdGlvbkRlZmluaXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgX2FsbFZpc2l0ZWROYXZpZ2F0aW9uUHJvcHMgPSBhbGxWaXNpdGVkTmF2aWdhdGlvblByb3BzLnNsaWNlKDAsIC0xKTtcblx0XHRcdFx0XHRcdHZpc2l0ZWROYXZQcm9wcyA9IF9hbGxWaXNpdGVkTmF2aWdhdGlvblByb3BzO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aFJlbGF0aXZlTG9jYXRpb24gPSBnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbihkYXRhTW9kZWxPYmplY3RQYXRoPy5jb250ZXh0TG9jYXRpb24sIHZpc2l0ZWROYXZQcm9wcykubWFwKFxuXHRcdFx0XHRcdFx0XHQobnApID0+IG5wLm5hbWVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRjb25zdCBwYXRoVmlzaXRvckZ1bmN0aW9uID0gZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/LnBhdGhWaXNpdG9yXG5cdFx0XHRcdFx0XHRcdD8gZ2V0UGF0aFZpc2l0b3JGb3JTaW5nbGV0b24oZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGgucGF0aFZpc2l0b3IsIHBhdGhSZWxhdGl2ZUxvY2F0aW9uKVxuXHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDsgLy8gc2VuZCBwYXRoVmlzaXRvciBmdW5jdGlvbiBvbmx5IHdoZW4gaXQgaXMgZGVmaW5lZCBhbmQgb25seSBzZW5kIGZ1bmN0aW9uIG9yIGRlZmluZWQgYXMgYSBwYXJhbWV0ZXJcblx0XHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IGVxdWFsKFxuXHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocmVzdHJpY3Rpb25EZWZpbml0aW9uLCBwYXRoUmVsYXRpdmVMb2NhdGlvbiwgdW5kZWZpbmVkLCBwYXRoVmlzaXRvckZ1bmN0aW9uKSxcblx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cdGxldCB0YXJnZXRSZXN0cmljdGlvbnM7XG5cdGlmICghZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/Lmlnbm9yZVRhcmdldENvbGxlY3Rpb24pIHtcblx0XHRsZXQgcmVzdHJpY3Rpb25EZWZpbml0aW9uID0gY2hlY2tGdW5jdGlvbih0YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXMpO1xuXHRcdGlmICh0YXJnZXRFbnRpdHlTZXQgPT09IG51bGwgJiYgcmVzdHJpY3Rpb25EZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlc3RyaWN0aW9uRGVmaW5pdGlvbiA9IGNoZWNrRnVuY3Rpb24odGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcyk7XG5cdFx0fVxuXHRcdGlmIChyZXN0cmljdGlvbkRlZmluaXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgcGF0aFJlbGF0aXZlTG9jYXRpb24gPSBnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbihkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbiwgYWxsVmlzaXRlZE5hdmlnYXRpb25Qcm9wcykubWFwKFxuXHRcdFx0XHQobnApID0+IG5wLm5hbWVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBwYXRoVmlzaXRvckZ1bmN0aW9uID0gZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/LnBhdGhWaXNpdG9yXG5cdFx0XHRcdD8gZ2V0UGF0aFZpc2l0b3JGb3JTaW5nbGV0b24oZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGgucGF0aFZpc2l0b3IsIHBhdGhSZWxhdGl2ZUxvY2F0aW9uKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdHRhcmdldFJlc3RyaWN0aW9ucyA9IGVxdWFsKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocmVzdHJpY3Rpb25EZWZpbml0aW9uLCBwYXRoUmVsYXRpdmVMb2NhdGlvbiwgdW5kZWZpbmVkLCBwYXRoVmlzaXRvckZ1bmN0aW9uKSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdHJlc3RyaWN0aW9ucyB8fCB0YXJnZXRSZXN0cmljdGlvbnMgfHwgKGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPy5hdXRob3JpemVVbnJlc29sdmFibGUgPyB1bnJlc29sdmFibGVFeHByZXNzaW9uIDogY29uc3RhbnQodHJ1ZSkpXG5cdCk7XG59O1xuXG4vKipcbiAqIFNldCBhIHRyYWlsaW5nIHNsYXNoIHRvIGEgcGF0aCBpZiBub3QgYWxyZWFkeSBzZXQuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGhcbiAqIEByZXR1cm5zIFRoZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaFxuICovXG5jb25zdCBzZXRUcmFpbGluZ1NsYXNoID0gZnVuY3Rpb24gKHBhdGg6IHN0cmluZykge1xuXHRpZiAocGF0aC5sZW5ndGggJiYgIXBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG5cdFx0cmV0dXJuIGAke3BhdGh9L2A7XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuXG4vLyBUaGlzIGhlbHBlciBtZXRob2QgaXMgdXNlZCB0byBhZGQgcmVsYXRpdmUgcGF0aCBsb2NhdGlvbiBhcmd1bWVudCB0byBzaW5nbGV0b25QYXRoVmlzaXRvckZ1bmN0aW9uIGkuZS4gcGF0aFZpc2l0b3Jcbi8vIHBhdGhWaXNpdG9yIG1ldGhvZCBpcyB1c2VkIGxhdGVyIHRvIGdldCB0aGUgY29ycmVjdCBiaW5kaW5ncyBmb3Igc2luZ2xldG9uIGVudGl0eVxuLy8gbWV0aG9kIGlzIGludm9rZWQgbGF0ZXIgaW4gcGF0aEluTW9kZWwoKSBtZXRob2QgdG8gZ2V0IHRoZSBjb3JyZWN0IGJpbmRpbmcuXG5jb25zdCBnZXRQYXRoVmlzaXRvckZvclNpbmdsZXRvbiA9IGZ1bmN0aW9uIChwYXRoVmlzaXRvcjogRnVuY3Rpb24sIHBhdGhSZWxhdGl2ZUxvY2F0aW9uOiBzdHJpbmdbXSkge1xuXHRyZXR1cm4gZnVuY3Rpb24gKHBhdGg6IHN0cmluZykge1xuXHRcdHJldHVybiBwYXRoVmlzaXRvcihwYXRoLCBwYXRoUmVsYXRpdmVMb2NhdGlvbik7XG5cdH07XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7OztFQXdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxnQkFBZ0IsR0FBRyxVQUFVQyxXQUFnQyxFQUFFO0lBQzNFLE9BQU9DLHVCQUF1QixDQUFDRCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUUsZUFBZSxFQUFFRixXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUcsb0JBQW9CLENBQUMsQ0FBQ0MsR0FBRyxDQUFFQyxFQUFFLElBQUtBLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDO0VBQ3JILENBQUM7RUFBQztFQUVLLE1BQU1MLHVCQUF1QixHQUFHLFVBQ3RDRCxXQUFpQyxFQUVHO0lBQUEsSUFEcENPLGVBQWtELHVFQUFH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
|
|
463
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRSZWxhdGl2ZVBhdGhzIiwiY29udGV4dFBhdGgiLCJnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbiIsImNvbnRleHRMb2NhdGlvbiIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibnAiLCJuYW1lIiwidmlzaXRlZE5hdlByb3BzIiwiY2xlYW5VcE5hdlByb3AiLCJuYXZQcm9wcyIsImN1cnJlbnRJZHgiLCJsZW5ndGgiLCJjdXJyZW50TmF2IiwibmV4dE5hdlByb3AiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsInBhcnRuZXIiLCJzcGxpY2UiLCJnZXRBZGRpdGlvbmFsTmF2UHJvcCIsInJlZmVyZW5jZVByb3BzIiwib3RoZXJQcm9wcyIsImtlZXBSZWZlcmVuY2UiLCJhZGRpdGlvbmFsTmF2UHJvcHMiLCJmb3JFYWNoIiwibmF2UHJvcCIsIm5hdkluZGV4IiwicHVzaCIsInJlbWFpbmluZ05hdlByb3BzIiwiY29uY2F0Iiwic2xpY2UiLCJleHRyYU5hdlByb3AiLCJ0YXJnZXRUeXBlIiwiZmluZCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsInByb3BlcnR5UGF0aCIsInNQcm9wZXJ0eVBhdGgiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInBhdGgiLCJ0YXJnZXQiLCIkdGFyZ2V0IiwiY29udGFpbnNBQ29tcGxleFR5cGUiLCJjb252ZXJ0ZWRUeXBlcyIsInJlc29sdmVQYXRoIiwiZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGgiLCJzdGFydHNXaXRoIiwic3Vic3RyaW5nIiwidGFyZ2V0RW50aXR5VHlwZSIsInBhdGhTcGxpdHMiLCJzcGxpdCIsIm5ld0RhdGFNb2RlbE9iamVjdFBhdGgiLCJwYXRoUGFydCIsImVuaGFuY2VGcm9tUGF0aCIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVNldCIsIm5hdmlnYXRpb25JbmRleCIsInJlZmVyZW5jZUVudGl0eVR5cGUiLCJpc0VudGl0eVR5cGUiLCJpc0NvbXBsZXhUeXBlIiwiY3VycmVudEVudGl0eVNldCIsInBvdGVudGlhbE5hdlByb3AiLCJuYXZpZ2F0aW9uUGF0aEZyb21QcmV2aW91c0VudGl0eVNldCIsImdldE5hdmlnYXRpb25CaW5kaW5nRnJvbVByZXZpb3VzRW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsImhhc093blByb3BlcnR5IiwicG90ZW50aWFsQ29tcGxleFR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmF2aWdhdGlvbiIsInVuZGVmaW5lZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eUxlbmd0aCIsImxhc3ROYXZpZ2F0aW9uIiwiaXNDb21wbGV4VHlwZUxhc3ROYXZpZ2F0aW9uIiwibmF2aWdhdGlvblBhdGgiLCJpIiwibmF2aWdhdGlvblByb3BlcnR5IiwiZ2V0VGFyZ2V0RW50aXR5U2V0UGF0aCIsImluaXRpYWxQYXRoIiwidGFyZ2V0RW50aXR5U2V0UGF0aCIsInJlcGxhY2UiLCJiUmVsYXRpdmUiLCJzZXRUcmFpbGluZ1NsYXNoIiwiam9pbiIsImdldFRhcmdldE9iamVjdFBhdGgiLCJpc0VudGl0eVNldCIsInRlcm0iLCJxdWFsaWZpZXIiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZm9yQmluZGluZ0V4cHJlc3Npb24iLCJmb3JGaWx0ZXJDb25kaXRpb25QYXRoIiwiX2dldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJuYXZQcm9wZXJ0aWVzIiwic29tZSIsImlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJpc0NvbGxlY3Rpb24iLCJ0eXBlIiwidmFsdWUiLCJpc1BhdGhVcGRhdGFibGUiLCJleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aCIsImNoZWNrT25QYXRoIiwiYW5ub3RhdGlvbk9iamVjdCIsIlVwZGF0ZVJlc3RyaWN0aW9ucyIsIlVwZGF0YWJsZSIsImlzUGF0aFNlYXJjaGFibGUiLCJTZWFyY2hSZXN0cmljdGlvbnMiLCJTZWFyY2hhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiRGVsZXRhYmxlIiwiaXNQYXRoSW5zZXJ0YWJsZSIsIkluc2VydFJlc3RyaWN0aW9ucyIsIkluc2VydGFibGUiLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJhbGxvd2VkRXhwcmVzc2lvbiIsImZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiY3VycmVudE9iamVjdFJlc3RyaWN0aW9uIiwicmVzdHJpY3Rpb24iLCJQcm9wZXJ0eSIsImluZGV4T2YiLCJBbGxvd2VkRXhwcmVzc2lvbnMiLCJ0b1N0cmluZyIsImNoZWNrRnVuY3Rpb24iLCJjb25zdGFudCIsInBhcmVudEVudGl0eVNldCIsInZpc2l0ZWROYXZpZ2F0aW9uUHJvcHNOYW1lIiwiYWxsVmlzaXRlZE5hdmlnYXRpb25Qcm9wcyIsInJlc2V0VmlzaXRlZE5hdlByb3BzIiwiaXNQcm9wZXJ0eSIsImNvbnRhaW5zVGFyZ2V0IiwiZnVsbE5hdmlnYXRpb25QYXRoIiwicmVzdHJpY3Rpb25zIiwiX3BhcmVudEVudGl0eVNldCIsImFubm90YXRpb25zIiwiQ2FwYWJpbGl0aWVzIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwicmVzdHJpY3RlZE5hdlByb3AiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJyZXN0cmljdGlvbkRlZmluaXRpb24iLCJfYWxsVmlzaXRlZE5hdmlnYXRpb25Qcm9wcyIsInBhdGhSZWxhdGl2ZUxvY2F0aW9uIiwicGF0aFZpc2l0b3JGdW5jdGlvbiIsInBhdGhWaXNpdG9yIiwiZ2V0UGF0aFZpc2l0b3JGb3JTaW5nbGV0b24iLCJlcXVhbCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInRhcmdldFJlc3RyaWN0aW9ucyIsImlnbm9yZVRhcmdldENvbGxlY3Rpb24iLCJhdXRob3JpemVVbnJlc29sdmFibGUiLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwiZW5kc1dpdGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFNb2RlbFBhdGhIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRDb21wbGV4VHlwZSxcblx0Q29udmVydGVkTWV0YWRhdGEsXG5cdEVudGl0eVNldCxcblx0RW50aXR5VHlwZSxcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQcm9wZXJ0eSxcblx0UHJvcGVydHlQYXRoLFxuXHRTaW5nbGV0b25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVUeXBlcyxcblx0TmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24sXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzLFxuXHRFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29uc3RhbnQsIGVxdWFsLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIHVucmVzb2x2YWJsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0aXNDb21wbGV4VHlwZSxcblx0aXNFbnRpdHlTZXQsXG5cdGlzRW50aXR5VHlwZSxcblx0aXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRpc1Byb3BlcnR5XG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlPclBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuXG5leHBvcnQgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoID0ge1xuXHRzdGFydGluZ0VudGl0eVNldDogU2luZ2xldG9uIHwgRW50aXR5U2V0O1xuXHRjb250ZXh0TG9jYXRpb24/OiBEYXRhTW9kZWxPYmplY3RQYXRoO1xuXHRuYXZpZ2F0aW9uUHJvcGVydGllczogKE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFByb3BlcnR5KVtdO1xuXHR0YXJnZXRFbnRpdHlTZXQ/OiBTaW5nbGV0b24gfCBFbnRpdHlTZXQ7XG5cdHRhcmdldEVudGl0eVR5cGU6IEVudGl0eVR5cGU7XG5cdHRhcmdldE9iamVjdDogYW55O1xuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGE7XG59O1xuXG50eXBlIEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoID0ge1xuXHRwcm9wZXJ0eVBhdGg/OiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT47XG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb247XG5cdGlnbm9yZVRhcmdldENvbGxlY3Rpb24/OiBib29sZWFuO1xuXHRhdXRob3JpemVVbnJlc29sdmFibGU/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIHByb3BlcnR5IGZyb20gdGhlIERhdGFNb2RlbE9iamVjdFBhdGguXG4gKlxuICogQHBhcmFtIGNvbnRleHRQYXRoIFRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIG9iamVjdCB0byB0aGUgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVsYXRpdmVQYXRocyA9IGZ1bmN0aW9uIChjb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRyZXR1cm4gZ2V0UGF0aFJlbGF0aXZlTG9jYXRpb24oY29udGV4dFBhdGg/LmNvbnRleHRMb2NhdGlvbiwgY29udGV4dFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzKS5tYXAoKG5wKSA9PiBucC5uYW1lKTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGZyb20gYSBkYXRhTW9kZWxPYmplY3RQYXRoIHRvIHRoZSB0YXJnZXRlZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIGNvbnRleHRQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gdmlzaXRlZE5hdlByb3BzIFRoZSB0YXJnZXRlZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIG5hdmlnYXRpb24gcHJvcGVydGllcyB0byByZWFjaCB0aGUgdGFyZ2V0ZWQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbiA9IGZ1bmN0aW9uIChcblx0Y29udGV4dFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHR2aXNpdGVkTmF2UHJvcHM6IChOYXZpZ2F0aW9uUHJvcGVydHkgfCBQcm9wZXJ0eSlbXSA9IFtdXG4pOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10ge1xuXHRjb25zdCBjbGVhblVwTmF2UHJvcCA9IChuYXZQcm9wczogKE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFByb3BlcnR5KVtdKSA9PiB7XG5cdFx0bGV0IGN1cnJlbnRJZHggPSAwO1xuXHRcdHdoaWxlIChuYXZQcm9wcy5sZW5ndGggPiAxICYmIGN1cnJlbnRJZHggIT0gbmF2UHJvcHMubGVuZ3RoIC0gMSkge1xuXHRcdFx0Y29uc3QgY3VycmVudE5hdiA9IG5hdlByb3BzW2N1cnJlbnRJZHhdO1xuXHRcdFx0Y29uc3QgbmV4dE5hdlByb3AgPSBuYXZQcm9wc1tjdXJyZW50SWR4ICsgMV07XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkoY3VycmVudE5hdikgJiYgY3VycmVudE5hdi5wYXJ0bmVyID09PSBuZXh0TmF2UHJvcC5uYW1lKSB7XG5cdFx0XHRcdG5hdlByb3BzLnNwbGljZSgwLCAyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1cnJlbnRJZHgrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG5hdlByb3BzO1xuXHR9O1xuXG5cdGNvbnN0IGdldEFkZGl0aW9uYWxOYXZQcm9wID0gKFxuXHRcdHJlZmVyZW5jZVByb3BzOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10sXG5cdFx0b3RoZXJQcm9wczogKE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFByb3BlcnR5KVtdLFxuXHRcdGtlZXBSZWZlcmVuY2U6IGJvb2xlYW5cblx0KSA9PiB7XG5cdFx0Y29uc3QgYWRkaXRpb25hbE5hdlByb3BzOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10gPSBbXTtcblx0XHRyZWZlcmVuY2VQcm9wcy5mb3JFYWNoKChuYXZQcm9wLCBuYXZJbmRleCkgPT4ge1xuXHRcdFx0aWYgKG90aGVyUHJvcHNbbmF2SW5kZXhdICE9PSBuYXZQcm9wKSB7XG5cdFx0XHRcdGFkZGl0aW9uYWxOYXZQcm9wcy5wdXNoKGtlZXBSZWZlcmVuY2UgPyBuYXZQcm9wIDogb3RoZXJQcm9wc1tuYXZJbmRleF0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBhZGRpdGlvbmFsTmF2UHJvcHM7XG5cdH07XG5cblx0aWYgKCFjb250ZXh0UGF0aCkge1xuXHRcdHJldHVybiB2aXNpdGVkTmF2UHJvcHM7XG5cdH1cblx0aWYgKHZpc2l0ZWROYXZQcm9wcy5sZW5ndGggPj0gY29udGV4dFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0bGV0IHJlbWFpbmluZ05hdlByb3BzID0gZ2V0QWRkaXRpb25hbE5hdlByb3AoY29udGV4dFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMsIHZpc2l0ZWROYXZQcm9wcywgZmFsc2UpO1xuXHRcdHJlbWFpbmluZ05hdlByb3BzID0gcmVtYWluaW5nTmF2UHJvcHMuY29uY2F0KHZpc2l0ZWROYXZQcm9wcy5zbGljZShjb250ZXh0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGgpKTtcblx0XHRyZXR1cm4gY2xlYW5VcE5hdlByb3AocmVtYWluaW5nTmF2UHJvcHMpO1xuXHR9XG5cdGxldCBleHRyYU5hdlByb3AgPSBnZXRBZGRpdGlvbmFsTmF2UHJvcCh2aXNpdGVkTmF2UHJvcHMsIGNvbnRleHRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLCB0cnVlKTtcblx0ZXh0cmFOYXZQcm9wID0gZXh0cmFOYXZQcm9wLmNvbmNhdChjb250ZXh0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5zbGljZSh2aXNpdGVkTmF2UHJvcHMubGVuZ3RoKSk7XG5cdGNsZWFuVXBOYXZQcm9wKGV4dHJhTmF2UHJvcCk7XG5cdGV4dHJhTmF2UHJvcCA9IGV4dHJhTmF2UHJvcC5tYXAoKG5hdlByb3ApID0+IHtcblx0XHRyZXR1cm4gaXNOYXZpZ2F0aW9uUHJvcGVydHkobmF2UHJvcClcblx0XHRcdD8gKG5hdlByb3AudGFyZ2V0VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKChucCkgPT4gbnAubmFtZSA9PT0gbmF2UHJvcC5wYXJ0bmVyKSBhcyBOYXZpZ2F0aW9uUHJvcGVydHkpXG5cdFx0XHQ6IG5hdlByb3A7XG5cdH0pO1xuXHRyZXR1cm4gZXh0cmFOYXZQcm9wO1xufTtcblxuLyoqXG4gKiBHZXRzIGEgbmV3IGVuaGFuY2VkIGRhdGFNb2RlbE9iamVjdFBhdGggbWF0Y2hpbmcgd2l0aCB0aGUgcHJvdmlkZWQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGluaXRpYWwgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aCBvciBwcm9wZXJ0eSB0byByZWFjaFxuICogQHJldHVybnMgQSBuZXcgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICovXG5leHBvcnQgY29uc3QgZW5oYW5jZURhdGFNb2RlbFBhdGggPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdHByb3BlcnR5UGF0aD86IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5PlxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGxldCBzUHJvcGVydHlQYXRoOiBzdHJpbmcgPSBcIlwiO1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHlQYXRoKSkge1xuXHRcdHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGgucGF0aDtcblx0fSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0c1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aDtcblx0fVxuXHRsZXQgdGFyZ2V0O1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHlQYXRoKSkge1xuXHRcdHRhcmdldCA9IHByb3BlcnR5UGF0aC4kdGFyZ2V0O1xuXHR9IGVsc2UgaWYgKGNvbnRhaW5zQUNvbXBsZXhUeXBlKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0dGFyZ2V0ID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aChgJHtnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChkYXRhTW9kZWxPYmplY3RQYXRoKX0vJHtzUHJvcGVydHlQYXRofWApPy50YXJnZXQ7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKHNQcm9wZXJ0eVBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcblx0XHRcdC8vIHJlbW92ZSB0aGUgbGVhZGluZyBcIi9cIiBiZWNhdXNlIHRoZSBwYXRoIGlzIGdvaW5nIHRvIGJlIHJlc29sdmVkIGZyb20gdGhlIGVudGl0eSB0eXBlLCBzbyBpdCBzaG91bGQgbm90IGJlIGFic29sdXRlXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gc1Byb3BlcnR5UGF0aC5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXHRcdHRhcmdldCA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChzUHJvcGVydHlQYXRoKTtcblx0fVxuXG5cdGNvbnN0IHBhdGhTcGxpdHMgPSBzUHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblxuXHRsZXQgbmV3RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGRhdGFNb2RlbE9iamVjdFBhdGg7XG5cdGZvciAoY29uc3QgcGF0aFBhcnQgb2YgcGF0aFNwbGl0cykge1xuXHRcdG5ld0RhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRnJvbVBhdGgobmV3RGF0YU1vZGVsT2JqZWN0UGF0aCwgcGF0aFBhcnQpO1xuXHR9XG5cdG5ld0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ID0gdGFyZ2V0O1xuXHRyZXR1cm4gbmV3RGF0YU1vZGVsT2JqZWN0UGF0aDtcbn07XG5cbi8qKlxuICogR2V0cyBhIG5ldyBlbmhhbmNlZCBkYXRhTW9kZWxPYmplY3RQYXRoIG1hdGNoaW5nIHdpdGggdGhlIHByb3ZpZGVkIHBhdGhcbiAqIFRoZSB0YXJnZXRPYmplY3QgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyBpbnRlcm5hbCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgaW5pdGlhbCBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gcGF0aCBUaGUgb2JqZWN0IHBhdGggdG8gcmVhY2hcbiAqIEByZXR1cm5zIEEgbmV3IGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqL1xuXG5jb25zdCBlbmhhbmNlRnJvbVBhdGggPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCwgcGF0aDogc3RyaW5nKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGxldCB0YXJnZXRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZDtcblx0bGV0IHRhcmdldEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5jb25jYXQoKTtcblx0Y29uc3QgbmF2aWdhdGlvbkluZGV4ID0gbmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoO1xuXHRjb25zdCByZWZlcmVuY2VFbnRpdHlUeXBlID0gbmF2aWdhdGlvbkluZGV4XG5cdFx0PyBuYXZpZ2F0aW9uUHJvcGVydGllc1tuYXZpZ2F0aW9uSW5kZXggLSAxXS50YXJnZXRUeXBlXG5cdFx0OiBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGU7XG5cdGlmICghcmVmZXJlbmNlRW50aXR5VHlwZSkge1xuXHRcdHJldHVybiBkYXRhTW9kZWxPYmplY3RQYXRoO1xuXHR9IGVsc2UgaWYgKGlzRW50aXR5VHlwZShyZWZlcmVuY2VFbnRpdHlUeXBlKSB8fCBpc0NvbXBsZXhUeXBlKHJlZmVyZW5jZUVudGl0eVR5cGUpKSB7XG5cdFx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0O1xuXHRcdGNvbnN0IHBvdGVudGlhbE5hdlByb3AgPSByZWZlcmVuY2VFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSA9PT0gcGF0aCk7XG5cdFx0aWYgKHBvdGVudGlhbE5hdlByb3ApIHtcblx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2gocG90ZW50aWFsTmF2UHJvcCk7XG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlID0gcG90ZW50aWFsTmF2UHJvcC50YXJnZXRUeXBlO1xuXG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aEZyb21QcmV2aW91c0VudGl0eVNldCA9IGdldE5hdmlnYXRpb25CaW5kaW5nRnJvbVByZXZpb3VzRW50aXR5U2V0KG5hdmlnYXRpb25Qcm9wZXJ0aWVzKTtcblx0XHRcdGlmIChcblx0XHRcdFx0bmF2aWdhdGlvblBhdGhGcm9tUHJldmlvdXNFbnRpdHlTZXQgJiZcblx0XHRcdFx0Y3VycmVudEVudGl0eVNldD8ubmF2aWdhdGlvblByb3BlcnR5QmluZGluZy5oYXNPd25Qcm9wZXJ0eShuYXZpZ2F0aW9uUGF0aEZyb21QcmV2aW91c0VudGl0eVNldClcblx0XHRcdCkge1xuXHRcdFx0XHR0YXJnZXRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGlvblBhdGhGcm9tUHJldmlvdXNFbnRpdHlTZXRdIGFzIEVudGl0eVNldDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcG90ZW50aWFsQ29tcGxleFR5cGUgPSAoXG5cdFx0XHRcdChyZWZlcmVuY2VFbnRpdHlUeXBlIGFzIEVudGl0eVR5cGUpLmVudGl0eVByb3BlcnRpZXMgfHwgKHJlZmVyZW5jZUVudGl0eVR5cGUgYXMgQ29tcGxleFR5cGUpLnByb3BlcnRpZXNcblx0XHRcdCkuZmluZCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lID09PSBwYXRoKTtcblx0XHRcdGlmIChwb3RlbnRpYWxDb21wbGV4VHlwZT8udGFyZ2V0VHlwZSkge1xuXHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKHBvdGVudGlhbENvbXBsZXhUeXBlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogbmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0Y29udGV4dExvY2F0aW9uOiBkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IHRhcmdldEVudGl0eVNldCA/PyBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiB0YXJnZXRFbnRpdHlUeXBlID8/IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZSxcblx0XHR0YXJnZXRPYmplY3Q6IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzXG5cdH07XG59O1xuXG4vKipcbiAqIERldGVjdHMgaWYgdGhlIERhdGFNb2RlbE9iamVjdFBhdGggaGFzIG5hdmlnYXRlZCB0aHJldyBhIGNvbXBsZXhUeXBlLlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBJcyB0aGVyZSBhIGNvbXBsZXhUeXBlIGludG8gdGhlIERhdGFNb2RlbE9iamVjdFBhdGguXG4gKi9cbmNvbnN0IGNvbnRhaW5zQUNvbXBsZXhUeXBlID0gZnVuY3Rpb24gKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBib29sZWFuIHtcblx0cmV0dXJuIGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZCgobmF2aWdhdGlvbikgPT4gaXNDb21wbGV4VHlwZShuYXZpZ2F0aW9uPy50YXJnZXRUeXBlKSkgIT09IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbmF2aWdhdGlvbiBiaW5kaW5nIGZyb20gdGhlIHByZXZpb3VzIGVudGl0eVNldCBsaXN0ZWQgaW50byB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUHJvcGVydGllcyBUaGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBBIG5ldyBkYXRhTW9kZWxPYmplY3RQYXRoLlxuICovXG5jb25zdCBnZXROYXZpZ2F0aW9uQmluZGluZ0Zyb21QcmV2aW91c0VudGl0eVNldCA9IGZ1bmN0aW9uIChuYXZpZ2F0aW9uUHJvcGVydGllczogKE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFByb3BlcnR5KVtdKTogc3RyaW5nIHtcblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5TGVuZ3RoID0gbmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5TGVuZ3RoKSB7XG5cdFx0Y29uc3QgbGFzdE5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uUHJvcGVydGllc1tuYXZpZ2F0aW9uUHJvcGVydHlMZW5ndGggLSAxXTtcblx0XHRjb25zdCBpc0NvbXBsZXhUeXBlTGFzdE5hdmlnYXRpb24gPSBpc0NvbXBsZXhUeXBlKGxhc3ROYXZpZ2F0aW9uLnRhcmdldFR5cGUpO1xuXHRcdGxldCBuYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eUxlbmd0aCA+IDEgJiYgIWlzQ29tcGxleFR5cGVMYXN0TmF2aWdhdGlvbikge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYXZpZ2F0aW9uUHJvcGVydHlMZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5ID0gbmF2aWdhdGlvblByb3BlcnRpZXNbaV07XG5cdFx0XHRcdGlmIChpc0NvbXBsZXhUeXBlKG5hdmlnYXRpb25Qcm9wZXJ0eS50YXJnZXRUeXBlKSkge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoICs9IGAke25hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lfS9gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gaXNDb21wbGV4VHlwZUxhc3ROYXZpZ2F0aW9uID8gXCJcIiA6IGAke25hdmlnYXRpb25QYXRofSR7bGFzdE5hdmlnYXRpb24ubmFtZX1gO1xuXHR9XG5cdHJldHVybiBcIlwiO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSB0YXJnZXRlZCBlbnRpdHlTZXQuXG4gKlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgZ2V0VGFyZ2V0RW50aXR5U2V0UGF0aCA9IGZ1bmN0aW9uIChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogc3RyaW5nIHtcblx0Y29uc3QgaW5pdGlhbFBhdGggPSBgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWA7XG5cdGxldCB0YXJnZXRFbnRpdHlTZXRQYXRoID0gaW5pdGlhbFBhdGg7XG5cdGxldCBjdXJyZW50RW50aXR5U2V0ID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldDtcblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRsZXQgbmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuXHRcdG5hdmlnYXRpb25QYXRoID0gZ2V0TmF2aWdhdGlvbkJpbmRpbmdGcm9tUHJldmlvdXNFbnRpdHlTZXQobmF2aWdhdGlvblByb3BlcnRpZXMuc2xpY2UoMCwgaSArIDEpKTtcblx0XHRpZiAoY3VycmVudEVudGl0eVNldCAmJiBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkobmF2aWdhdGlvblBhdGgpKSB7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRQYXRoICs9IGAvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtuYXZpZ2F0aW9uUGF0aC5yZXBsYWNlKFwiL1wiLCBcIiUyRlwiKX1gO1xuXHRcdFx0Y3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUGF0aF0gYXMgRW50aXR5U2V0O1xuXHRcdH1cblx0fVxuXG5cdHRhcmdldEVudGl0eVNldFBhdGggKz0gXCIvJFwiO1xuXHRyZXR1cm4gdGFyZ2V0RW50aXR5U2V0UGF0aDtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0ZWQgbmF2aWdhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGJSZWxhdGl2ZVxuICogQHJldHVybnMgVGhlIHBhdGguXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFRhcmdldE5hdmlnYXRpb25QYXRoID0gZnVuY3Rpb24gKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsIGJSZWxhdGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcblx0bGV0IHBhdGggPSBcIlwiO1xuXHRpZiAoIWRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpIHtcblx0XHRyZXR1cm4gXCIvXCI7XG5cdH1cblx0aWYgKCFiUmVsYXRpdmUpIHtcblx0XHRwYXRoICs9IGAvJHtkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWV9YDtcblx0fVxuXHRpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG5cdFx0cGF0aCA9IHNldFRyYWlsaW5nU2xhc2gocGF0aCk7XG5cdFx0cGF0aCArPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lKS5qb2luKFwiL1wiKTtcblx0fVxuXHRyZXR1cm4gcGF0aDtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0ZWQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gYlJlbGF0aXZlXG4gKiBAcmV0dXJucyBUaGUgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRhcmdldE9iamVjdFBhdGggPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCwgYlJlbGF0aXZlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRsZXQgcGF0aCA9IGdldFRhcmdldE5hdmlnYXRpb25QYXRoKGRhdGFNb2RlbE9iamVjdFBhdGgsIGJSZWxhdGl2ZSk7XG5cdGlmIChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8ubmFtZSAmJlxuXHRcdCFpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQhaXNFbnRpdHlUeXBlKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCFpc0VudGl0eVNldChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQhaXNDb21wbGV4VHlwZShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8udGFyZ2V0VHlwZSkgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCAhPT0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldFxuXHQpIHtcblx0XHRwYXRoID0gc2V0VHJhaWxpbmdTbGFzaChwYXRoKTtcblx0XHRwYXRoICs9IGAke2RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Lm5hbWV9YDtcblx0fSBlbHNlIGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCAmJiBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5oYXNPd25Qcm9wZXJ0eShcInRlcm1cIikpIHtcblx0XHRwYXRoID0gc2V0VHJhaWxpbmdTbGFzaChwYXRoKTtcblx0XHRwYXRoICs9IGBAJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC50ZXJtfWA7XG5cdFx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Lmhhc093blByb3BlcnR5KFwicXVhbGlmaWVyXCIpICYmICEhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucXVhbGlmaWVyKSB7XG5cdFx0XHRwYXRoICs9IGAjJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5xdWFsaWZpZXJ9YDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0Zm9yQmluZGluZ0V4cHJlc3Npb246IGJvb2xlYW4gPSBmYWxzZSxcblx0Zm9yRmlsdGVyQ29uZGl0aW9uUGF0aDogYm9vbGVhbiA9IGZhbHNlXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/LnN0YXJ0aW5nRW50aXR5U2V0ICE9PSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSB7XG5cdFx0cmV0dXJuIGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH1cblx0cmV0dXJuIF9nZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGgsIGZvckJpbmRpbmdFeHByZXNzaW9uLCBmb3JGaWx0ZXJDb25kaXRpb25QYXRoKTtcbn07XG5cbmNvbnN0IF9nZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRmb3JCaW5kaW5nRXhwcmVzc2lvbjogYm9vbGVhbiA9IGZhbHNlLFxuXHRmb3JGaWx0ZXJDb25kaXRpb25QYXRoOiBib29sZWFuID0gZmFsc2Vcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IG5hdlByb3BlcnRpZXMgPSBnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbihkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbiwgZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcyk7XG5cdGlmIChmb3JCaW5kaW5nRXhwcmVzc2lvbikge1xuXHRcdGlmIChuYXZQcm9wZXJ0aWVzLnNvbWUoaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdGxldCBwYXRoID0gZm9yRmlsdGVyQ29uZGl0aW9uUGF0aFxuXHRcdD8gbmF2UHJvcGVydGllc1xuXHRcdFx0XHQubWFwKChuYXZQcm9wKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaXNDb2xsZWN0aW9uID0gaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eShuYXZQcm9wKTtcblx0XHRcdFx0XHRyZXR1cm4gaXNDb2xsZWN0aW9uID8gYCR7bmF2UHJvcC5uYW1lfSpgIDogbmF2UHJvcC5uYW1lO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuam9pbihcIi9cIilcblx0XHQ6IG5hdlByb3BlcnRpZXMubWFwKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUpLmpvaW4oXCIvXCIpO1xuXG5cdGlmIChcblx0XHQoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QubmFtZSB8fFxuXHRcdFx0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnR5cGUgPT09IFwiUHJvcGVydHlQYXRoXCIgJiYgZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QudmFsdWUpKSAmJlxuXHRcdCFpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQhaXNFbnRpdHlUeXBlKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCFpc0VudGl0eVNldChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHQhaXNDb21wbGV4VHlwZShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8udGFyZ2V0VHlwZSkgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCAhPT0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldFxuXHQpIHtcblx0XHRwYXRoID0gc2V0VHJhaWxpbmdTbGFzaChwYXRoKTtcblx0XHRwYXRoICs9XG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC50eXBlID09PSBcIlByb3BlcnR5UGF0aFwiXG5cdFx0XHRcdD8gYCR7ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QudmFsdWV9YFxuXHRcdFx0XHQ6IGAke2RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Lm5hbWV9YDtcblx0fSBlbHNlIGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5oYXNPd25Qcm9wZXJ0eShcInRlcm1cIikpIHtcblx0XHRwYXRoID0gc2V0VHJhaWxpbmdTbGFzaChwYXRoKTtcblx0XHRwYXRoICs9IGBAJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC50ZXJtfWA7XG5cdFx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Lmhhc093blByb3BlcnR5KFwicXVhbGlmaWVyXCIpICYmICEhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucXVhbGlmaWVyKSB7XG5cdFx0XHRwYXRoICs9IGAjJHtkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5xdWFsaWZpZXJ9YDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQYXRoVXBkYXRhYmxlID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoIHwgdW5kZWZpbmVkLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY2hlY2tPblBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHQoYW5ub3RhdGlvbk9iamVjdDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24gfCBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMpID0+IHtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0Py5VcGRhdGVSZXN0cmljdGlvbnM/LlVwZGF0YWJsZTtcblx0XHR9LFxuXHRcdGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQYXRoU2VhcmNoYWJsZSA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCB8IHVuZGVmaW5lZCxcblx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/OiBFeHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNoZWNrT25QYXRoKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0KGFubm90YXRpb25PYmplY3Q6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdD8uU2VhcmNoUmVzdHJpY3Rpb25zPy5TZWFyY2hhYmxlO1xuXHRcdH0sXG5cdFx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BhdGhEZWxldGFibGUgPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggfCB1bmRlZmluZWQsXG5cdGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPzogRXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjaGVja09uUGF0aChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdChhbm5vdGF0aW9uT2JqZWN0OiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcykgPT4ge1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25PYmplY3Q/LkRlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlO1xuXHRcdH0sXG5cdFx0ZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGhcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BhdGhJbnNlcnRhYmxlID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoIHwgdW5kZWZpbmVkLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY2hlY2tPblBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHQoYW5ub3RhdGlvbk9iamVjdDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24gfCBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMpID0+IHtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0Py5JbnNlcnRSZXN0cmljdGlvbnM/Lkluc2VydGFibGU7XG5cdFx0fSxcblx0XHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aFxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0YWxsb3dlZEV4cHJlc3Npb246IChzdHJpbmcgfCB1bmRlZmluZWQpW11cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjaGVja09uUGF0aChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdChhbm5vdGF0aW9uT2JqZWN0OiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcyB8IEVudGl0eVR5cGVBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMpID0+IHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0ICYmIFwiRmlsdGVyUmVzdHJpY3Rpb25zXCIgaW4gYW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zOiBGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25UeXBlVHlwZXNbXSA9XG5cdFx0XHRcdFx0KGFubm90YXRpb25PYmplY3Q/LkZpbHRlclJlc3RyaWN0aW9ucz8uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyBhcyBGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25UeXBlVHlwZXNbXSkgfHwgW107XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRPYmplY3RSZXN0cmljdGlvbiA9IGZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZmluZCgocmVzdHJpY3Rpb24pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKHJlc3RyaWN0aW9uLlByb3BlcnR5IGFzIFByb3BlcnR5UGF0aCkuJHRhcmdldCA9PT0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoY3VycmVudE9iamVjdFJlc3RyaWN0aW9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFsbG93ZWRFeHByZXNzaW9uLmluZGV4T2YoY3VycmVudE9iamVjdFJlc3RyaWN0aW9uPy5BbGxvd2VkRXhwcmVzc2lvbnM/LnRvU3RyaW5nKCkpICE9PSAtMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tPblBhdGggPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggfCB1bmRlZmluZWQsXG5cdGNoZWNrRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD86IEV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoIWRhdGFNb2RlbE9iamVjdFBhdGggfHwgIWRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRkYXRhTW9kZWxPYmplY3RQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCwgZXh0cmFjdGlvblBhcmFtZXRlcnNPblBhdGg/LnByb3BlcnR5UGF0aCk7XG5cblx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IG51bGwgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0O1xuXHRsZXQgcGFyZW50RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCBudWxsID0gbnVsbDtcblx0bGV0IHZpc2l0ZWROYXZpZ2F0aW9uUHJvcHNOYW1lOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBhbGxWaXNpdGVkTmF2aWdhdGlvblByb3BzOiAoTmF2aWdhdGlvblByb3BlcnR5IHwgUHJvcGVydHkpW10gPSBbXTtcblx0bGV0IHRhcmdldEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgbnVsbCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCBudWxsID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlO1xuXHRsZXQgcmVzZXRWaXNpdGVkTmF2UHJvcHMgPSBmYWxzZTtcblxuXHRkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goKG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4ge1xuXHRcdGlmIChyZXNldFZpc2l0ZWROYXZQcm9wcykge1xuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25Qcm9wc05hbWUgPSBbXTtcblx0XHR9XG5cdFx0dmlzaXRlZE5hdmlnYXRpb25Qcm9wc05hbWUucHVzaChuYXZpZ2F0aW9uUHJvcGVydHkubmFtZSk7XG5cdFx0YWxsVmlzaXRlZE5hdmlnYXRpb25Qcm9wcy5wdXNoKG5hdmlnYXRpb25Qcm9wZXJ0eSk7XG5cdFx0aWYgKGlzUHJvcGVydHkobmF2aWdhdGlvblByb3BlcnR5KSB8fCAhbmF2aWdhdGlvblByb3BlcnR5LmNvbnRhaW5zVGFyZ2V0KSB7XG5cdFx0XHQvLyBXZSBzaG91bGQgaGF2ZSBhIG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXRoIHNvIGZhciB3aGljaCBjYW4gY29uc2lzdCBvZiAoW0NvbnRhaW5tZW50TmF2UHJvcF0vKSpbTmF2UHJvcF1cblx0XHRcdGNvbnN0IGZ1bGxOYXZpZ2F0aW9uUGF0aCA9IHZpc2l0ZWROYXZpZ2F0aW9uUHJvcHNOYW1lLmpvaW4oXCIvXCIpO1xuXHRcdFx0aWYgKGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLmhhc093blByb3BlcnR5KGZ1bGxOYXZpZ2F0aW9uUGF0aCkpIHtcblx0XHRcdFx0cGFyZW50RW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldDtcblx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tmdWxsTmF2aWdhdGlvblBhdGhdO1xuXHRcdFx0XHR0YXJnZXRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0O1xuXHRcdFx0XHQvLyBJZiB3ZSByZWFjaGVkIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eSB3aXRoIGEgbmF2aWdhdGlvbnByb3BlcnR5YmluZGluZywgd2UgbmVlZCB0byByZXNldCB0aGUgdmlzaXRlZCBwYXRoIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiAoaWYgdGhlcmUgaXMgb25lKVxuXHRcdFx0XHRyZXNldFZpc2l0ZWROYXZQcm9wcyA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXZSByZWFsbHkgc2hvdWxkIG5vdCBlbmQgdXAgaGVyZSBidXQgYXQgbGVhc3QgbGV0J3MgdHJ5IHRvIGF2b2lkIGluY29ycmVjdCBiZWhhdmlvclxuXHRcdFx0XHRwYXJlbnRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0O1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gbnVsbDtcblx0XHRcdFx0cmVzZXRWaXNpdGVkTmF2UHJvcHMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXJlbnRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0O1xuXHRcdFx0dGFyZ2V0RW50aXR5U2V0ID0gbnVsbDtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBuYXZpZ2F0ZWQgZG93biBhbGwgdGhlIG5hdiBwcm9wIGFuZCB3ZSBzaG91bGQgaGF2ZVxuXHQvLyBUaGUgdGFyZ2V0IGVudGl0eVNldCBwb2ludGluZyB0byBlaXRoZXIgbnVsbCAoaW4gY2FzZSBvZiBjb250YWlubWVudCBuYXZwcm9wIGEgbGFzdCBwYXJ0KSwgb3IgdGhlIGFjdHVhbCB0YXJnZXQgKG5vbiBjb250YWlubWVudCBhcyB0YXJnZXQpXG5cdC8vIFRoZSBwYXJlbnQgZW50aXR5U2V0IHBvaW50aW5nIHRvIHRoZSBwcmV2aW91cyBlbnRpdHlTZXQgdXNlZCBpbiB0aGUgcGF0aFxuXHQvLyBWaXNpdGVkTmF2aWdhdGlvblBhdGggc2hvdWxkIGNvbnRhaW4gdGhlIHBhdGggdXAgdG8gdGhpcyBwcm9wZXJ0eVxuXG5cdC8vIFJlc3RyaWN0aW9ucyBzaG91bGQgdGhlbiBiZSBldmFsdWF0ZWQgYXMgUGFyZW50RW50aXR5U2V0Lk5hdlJlc3RyaWN0aW9uc1tOYXZQcm9wZXJ0eVBhdGhdIHx8IFRhcmdldEVudGl0eVNldC5SZXN0cmljdGlvbnNcblx0Y29uc3QgZnVsbE5hdmlnYXRpb25QYXRoID0gdmlzaXRlZE5hdmlnYXRpb25Qcm9wc05hbWUuam9pbihcIi9cIik7XG5cdGxldCByZXN0cmljdGlvbnMsIHZpc2l0ZWROYXZQcm9wcztcblx0aWYgKHBhcmVudEVudGl0eVNldCAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IF9wYXJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCA9IHBhcmVudEVudGl0eVNldDtcblx0XHRfcGFyZW50RW50aXR5U2V0LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/Lk5hdmlnYXRpb25SZXN0cmljdGlvbnM/LlJlc3RyaWN0ZWRQcm9wZXJ0aWVzLmZvckVhY2goXG5cdFx0XHQocmVzdHJpY3RlZE5hdlByb3A6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMpID0+IHtcblx0XHRcdFx0aWYgKHJlc3RyaWN0ZWROYXZQcm9wLk5hdmlnYXRpb25Qcm9wZXJ0eT8udHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpIHtcblx0XHRcdFx0XHRjb25zdCByZXN0cmljdGlvbkRlZmluaXRpb24gPSBjaGVja0Z1bmN0aW9uKHJlc3RyaWN0ZWROYXZQcm9wKTtcblx0XHRcdFx0XHRpZiAoZnVsbE5hdmlnYXRpb25QYXRoID09PSByZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUgJiYgcmVzdHJpY3Rpb25EZWZpbml0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IF9hbGxWaXNpdGVkTmF2aWdhdGlvblByb3BzID0gYWxsVmlzaXRlZE5hdmlnYXRpb25Qcm9wcy5zbGljZSgwLCAtMSk7XG5cdFx0XHRcdFx0XHR2aXNpdGVkTmF2UHJvcHMgPSBfYWxsVmlzaXRlZE5hdmlnYXRpb25Qcm9wcztcblx0XHRcdFx0XHRcdGNvbnN0IHBhdGhSZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UGF0aFJlbGF0aXZlTG9jYXRpb24oZGF0YU1vZGVsT2JqZWN0UGF0aD8uY29udGV4dExvY2F0aW9uLCB2aXNpdGVkTmF2UHJvcHMpLm1hcChcblx0XHRcdFx0XHRcdFx0KG5wKSA9PiBucC5uYW1lXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aFZpc2l0b3JGdW5jdGlvbiA9IGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPy5wYXRoVmlzaXRvclxuXHRcdFx0XHRcdFx0XHQ/IGdldFBhdGhWaXNpdG9yRm9yU2luZ2xldG9uKGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoLnBhdGhWaXNpdG9yLCBwYXRoUmVsYXRpdmVMb2NhdGlvbilcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7IC8vIHNlbmQgcGF0aFZpc2l0b3IgZnVuY3Rpb24gb25seSB3aGVuIGl0IGlzIGRlZmluZWQgYW5kIG9ubHkgc2VuZCBmdW5jdGlvbiBvciBkZWZpbmVkIGFzIGEgcGFyYW1ldGVyXG5cdFx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBlcXVhbChcblx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHJlc3RyaWN0aW9uRGVmaW5pdGlvbiwgcGF0aFJlbGF0aXZlTG9jYXRpb24sIHVuZGVmaW5lZCwgcGF0aFZpc2l0b3JGdW5jdGlvbiksXG5cdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXHRsZXQgdGFyZ2V0UmVzdHJpY3Rpb25zO1xuXHRpZiAoIWV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPy5pZ25vcmVUYXJnZXRDb2xsZWN0aW9uKSB7XG5cdFx0bGV0IHJlc3RyaWN0aW9uRGVmaW5pdGlvbiA9IGNoZWNrRnVuY3Rpb24odGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzKTtcblx0XHRpZiAodGFyZ2V0RW50aXR5U2V0ID09PSBudWxsICYmIHJlc3RyaWN0aW9uRGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXN0cmljdGlvbkRlZmluaXRpb24gPSBjaGVja0Z1bmN0aW9uKHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXMpO1xuXHRcdH1cblx0XHRpZiAocmVzdHJpY3Rpb25EZWZpbml0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IHBhdGhSZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UGF0aFJlbGF0aXZlTG9jYXRpb24oZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24sIGFsbFZpc2l0ZWROYXZpZ2F0aW9uUHJvcHMpLm1hcChcblx0XHRcdFx0KG5wKSA9PiBucC5uYW1lXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcGF0aFZpc2l0b3JGdW5jdGlvbiA9IGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoPy5wYXRoVmlzaXRvclxuXHRcdFx0XHQ/IGdldFBhdGhWaXNpdG9yRm9yU2luZ2xldG9uKGV4dHJhY3Rpb25QYXJhbWV0ZXJzT25QYXRoLnBhdGhWaXNpdG9yLCBwYXRoUmVsYXRpdmVMb2NhdGlvbilcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHR0YXJnZXRSZXN0cmljdGlvbnMgPSBlcXVhbChcblx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHJlc3RyaWN0aW9uRGVmaW5pdGlvbiwgcGF0aFJlbGF0aXZlTG9jYXRpb24sIHVuZGVmaW5lZCwgcGF0aFZpc2l0b3JGdW5jdGlvbiksXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHRyZXN0cmljdGlvbnMgfHwgdGFyZ2V0UmVzdHJpY3Rpb25zIHx8IChleHRyYWN0aW9uUGFyYW1ldGVyc09uUGF0aD8uYXV0aG9yaXplVW5yZXNvbHZhYmxlID8gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbiA6IGNvbnN0YW50KHRydWUpKVxuXHQpO1xufTtcblxuLyoqXG4gKiBTZXQgYSB0cmFpbGluZyBzbGFzaCB0byBhIHBhdGggaWYgbm90IGFscmVhZHkgc2V0LlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoXG4gKiBAcmV0dXJucyBUaGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2hcbiAqL1xuY29uc3Qgc2V0VHJhaWxpbmdTbGFzaCA9IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcpIHtcblx0aWYgKHBhdGgubGVuZ3RoICYmICFwYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdHJldHVybiBgJHtwYXRofS9gO1xuXHR9XG5cdHJldHVybiBwYXRoO1xufTtcblxuLy8gVGhpcyBoZWxwZXIgbWV0aG9kIGlzIHVzZWQgdG8gYWRkIHJlbGF0aXZlIHBhdGggbG9jYXRpb24gYXJndW1lbnQgdG8gc2luZ2xldG9uUGF0aFZpc2l0b3JGdW5jdGlvbiBpLmUuIHBhdGhWaXNpdG9yXG4vLyBwYXRoVmlzaXRvciBtZXRob2QgaXMgdXNlZCBsYXRlciB0byBnZXQgdGhlIGNvcnJlY3QgYmluZGluZ3MgZm9yIHNpbmdsZXRvbiBlbnRpdHlcbi8vIG1ldGhvZCBpcyBpbnZva2VkIGxhdGVyIGluIHBhdGhJbk1vZGVsKCkgbWV0aG9kIHRvIGdldCB0aGUgY29ycmVjdCBiaW5kaW5nLlxuY29uc3QgZ2V0UGF0aFZpc2l0b3JGb3JTaW5nbGV0b24gPSBmdW5jdGlvbiAocGF0aFZpc2l0b3I6IEZ1bmN0aW9uLCBwYXRoUmVsYXRpdmVMb2NhdGlvbjogc3RyaW5nW10pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gcGF0aFZpc2l0b3IocGF0aCwgcGF0aFJlbGF0aXZlTG9jYXRpb24pO1xuXHR9O1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztFQWlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxnQkFBZ0IsR0FBRyxVQUFVQyxXQUFnQyxFQUFFO0lBQzNFLE9BQU9DLHVCQUF1QixDQUFDRCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUUsZUFBZSxFQUFFRixXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUcsb0JBQW9CLENBQUMsQ0FBQ0MsR0FBRyxDQUFFQyxFQUFFLElBQUtBLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDO0VBQ3JILENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQTtFQU9PLE1BQU1MLHVCQUF1QixHQUFHLFVBQ3RDRCxXQUFpQyxFQUVHO0lBQUEsSUFEcENPLGVBQWtELHVFQUFHLEVBQUU7SUFFdkQsTUFBTUMsY0FBYyxHQUFJQyxRQUEyQyxJQUFLO01BQ3ZFLElBQUlDLFVBQVUsR0FBRyxDQUFDO01BQ2xCLE9BQU9ELFFBQVEsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsSUFBSUQsVUFBVSxJQUFJRCxRQUFRLENBQUNFLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDaEUsTUFBTUMsVUFBVSxHQUFHSCxRQUFRLENBQUNDLFVBQVUsQ0FBQztRQUN2QyxNQUFNRyxXQUFXLEdBQUdKLFFBQVEsQ0FBQ0MsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJSSxvQkFBb0IsQ0FBQ0YsVUFBVSxDQUFDLElBQUlBLFVBQVUsQ0FBQ0csT0FBTyxLQUFLRixXQUFXLENBQUNQLElBQUksRUFBRTtVQUNoRkcsUUFBUSxDQUFDTyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixDQUFDLE1BQU07VUFDTk4sVUFBVSxFQUFFO1FBQ2I7TUFDRDtNQUNBLE9BQU9ELFFBQVE7SUFDaEIsQ0FBQztJQUVELE1BQU1RLG9CQUFvQixHQUFHLENBQzVCQyxjQUFpRCxFQUNqREMsVUFBNkMsRUFDN0NDLGFBQXNCLEtBQ2xCO01BQ0osTUFBTUMsa0JBQXFELEdBQUcsRUFBRTtNQUNoRUgsY0FBYyxDQUFDSSxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxRQUFRLEtBQUs7UUFDN0MsSUFBSUwsVUFBVSxDQUFDSyxRQUFRLENBQUMsS0FBS0QsT0FBTyxFQUFFO1VBQ3JDRixrQkFBa0IsQ0FBQ0ksSUFBSSxDQUFDTCxhQUFhLEdBQUdHLE9BQU8sR0FBR0osVUFBVSxDQUFDSyxRQUFRLENBQUMsQ0FBQztRQUN4RTtNQUNELENBQUMsQ0FBQztNQUNGLE9BQU9ILGtCQUFrQjtJQUMxQixDQUFDO0lBRUQsSUFBSSxDQUFDckIsV0FBVyxFQUFFO01BQ2pCLE9BQU9PLGVBQWU7SUFDdkI7SUFDQSxJQUFJQSxlQUFlLENBQUNJLE1BQU0sSUFBSVgsV0FBVyxDQUFDRyxvQkFBb0IsQ0FBQ1EsTUFBTSxFQUFFO01BQ3RFLElBQUllLGlCQUFpQixHQUFHVCxvQkFBb0IsQ0FBQ2pCLFdBQVcsQ0FBQ0csb0JBQW9CLEVBQUVJLGVBQWUsRUFBRSxLQUFLLENBQUM7TUFDdEdtQixpQkFBaUIsR0FBR0EsaUJBQWlCLENBQUNDLE1BQU0sQ0FBQ3BCLGVBQWUsQ0FBQ3FCLEtBQUssQ0FBQzVCLFdBQVcsQ0FBQ0csb0JBQW9CLENBQUNRLE1BQU0sQ0FBQyxDQUFDO01BQzVHLE9BQU9ILGNBQWMsQ0FBQ2tCLGlCQUFpQixDQUFDO0lBQ3pDO0lBQ0EsSUFBSUcsWUFBWSxHQUFHWixvQkFBb0IsQ0FBQ1YsZUFBZSxFQUFFUCxXQUFXLENBQUNHLG9CQUFvQixFQUFFLElBQUksQ0FBQztJQUNoRzBCLFlBQVksR0FBR0EsWUFBWSxDQUFDRixNQUFNLENBQUMzQixXQUFXLENBQUNHLG9CQUFvQixDQUFDeUIsS0FBSyxDQUFDckIsZUFBZSxDQUFDSSxNQUFNLENBQUMsQ0FBQztJQUNsR0gsY0FBYyxDQUFDcUIsWUFBWSxDQUFDO0lBQzVCQSxZQUFZLEdBQUdBLFlBQVksQ0FBQ3pCLEdBQUcsQ0FBRW1CLE9BQU8sSUFBSztNQUM1QyxPQUFPVCxvQkFBb0IsQ0FBQ1MsT0FBTyxDQUFDLEdBQ2hDQSxPQUFPLENBQUNPLFVBQVUsQ0FBQzNCLG9CQUFvQixDQUFDNEIsSUFBSSxDQUFFMUIsRUFBRSxJQUFLQSxFQUFFLENBQUNDLElBQUksS0FBS2lCLE9BQU8sQ0FBQ1IsT0FBTyxDQUFDLEdBQ2xGUSxPQUFPO0lBQ1gsQ0FBQyxDQUFDO0lBQ0YsT0FBT00sWUFBWTtFQUNwQixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkE7RUFPTyxNQUFNRyxvQkFBb0IsR0FBRyxVQUNuQ0MsbUJBQXdDLEVBQ3hDQyxZQUF1QyxFQUNqQjtJQUN0QixJQUFJQyxhQUFxQixHQUFHLEVBQUU7SUFDOUIsSUFBSUMsMEJBQTBCLENBQUNGLFlBQVksQ0FBQyxFQUFFO01BQzdDQyxhQUFhLEdBQUdELFlBQVksQ0FBQ0csSUFBSTtJQUNsQyxDQUFDLE1BQU0sSUFBSSxPQUFPSCxZQUFZLEtBQUssUUFBUSxFQUFFO01BQzVDQyxhQUFhLEdBQUdELFlBQVk7SUFDN0I7SUFDQSxJQUFJSSxNQUFNO0lBQ1YsSUFBSUYsMEJBQTBCLENBQUNGLFlBQVksQ0FBQyxFQUFFO01BQzdDSSxNQUFNLEdBQUdKLFlBQVksQ0FBQ0ssT0FBTztJQUM5QixDQUFDLE1BQU0sSUFBSUMsb0JBQW9CLENBQUNQLG1CQUFtQixDQUFDLEVBQUU7TUFBQTtNQUNyREssTUFBTSw0QkFBR0wsbUJBQW1CLENBQUNRLGNBQWMsQ0FBQ0MsV0FBVyxDQUFFLEdBQUVDLHVCQUF1QixDQUFDVixtQkFBbUIsQ0FBRSxJQUFHRSxhQUFjLEVBQUMsQ0FBQywwREFBbEgsc0JBQW9IRyxNQUFNO0lBQ3BJLENBQUMsTUFBTTtNQUNOLElBQUlILGFBQWEsQ0FBQ1MsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2xDO1FBQ0FULGFBQWEsR0FBR0EsYUFBYSxDQUFDVSxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQzNDO01BQ0FQLE1BQU0sR0FBR0wsbUJBQW1CLENBQUNhLGdCQUFnQixDQUFDSixXQUFXLENBQUNQLGFBQWEsQ0FBQztJQUN6RTtJQUVBLE1BQU1ZLFVBQVUsR0FBR1osYUFBYSxDQUFDYSxLQUFLLENBQUMsR0FBRyxDQUFDO0lBRTNDLElBQUlDLHNCQUFzQixHQUFHaEIsbUJBQW1CO0lBQ2hELEtBQUssTUFBTWlCLFFBQVEsSUFBSUgsVUFBVSxFQUFFO01BQ2xDRSxzQkFBc0IsR0FBR0UsZUFBZSxDQUFDRixzQkFBc0IsRUFBRUMsUUFBUSxDQUFDO0lBQzNFO0lBQ0FELHNCQUFzQixDQUFDRyxZQUFZLEdBQUdkLE1BQU07SUFDNUMsT0FBT1csc0JBQXNCO0VBQzlCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVBBO0VBU0EsTUFBTUUsZUFBZSxHQUFHLFVBQVVsQixtQkFBd0MsRUFBRUksSUFBWSxFQUF1QjtJQUM5RyxJQUFJZ0IsZUFBc0M7SUFDMUMsSUFBSVAsZ0JBQXdDO0lBQzVDLE1BQU0zQyxvQkFBb0IsR0FBRzhCLG1CQUFtQixDQUFDOUIsb0JBQW9CLENBQUN3QixNQUFNLEVBQUU7SUFDOUUsTUFBTTJCLGVBQWUsR0FBR25ELG9CQUFvQixDQUFDUSxNQUFNO0lBQ25ELE1BQU00QyxtQkFBbUIsR0FBR0QsZUFBZSxHQUN4Q25ELG9CQUFvQixDQUFDbUQsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDeEIsVUFBVSxHQUNwREcsbUJBQW1CLENBQUNhLGdCQUFnQjtJQUN2QyxJQUFJLENBQUNTLG1CQUFtQixFQUFFO01BQ3pCLE9BQU90QixtQkFBbUI7SUFDM0IsQ0FBQyxNQUFNLElBQUl1QixZQUFZLENBQUNELG1CQUFtQixDQUFDLElBQUlFLGFBQWEsQ0FBQ0YsbUJBQW1CLENBQUMsRUFBRTtNQUNuRixNQUFNRyxnQkFBZ0IsR0FBR3pCLG1CQUFtQixDQUFDb0IsZUFBZTtNQUM1RCxNQUFNTSxnQkFBZ0IsR0FBR0osbUJBQW1CLENBQUNwRCxvQkFBb0IsQ0FBQzRCLElBQUksQ0FBRVIsT0FBTyxJQUFLQSxPQUFPLENBQUNqQixJQUFJLEtBQUsrQixJQUFJLENBQUM7TUFDMUcsSUFBSXNCLGdCQUFnQixFQUFFO1FBQ3JCeEQsb0JBQW9CLENBQUNzQixJQUFJLENBQUNrQyxnQkFBZ0IsQ0FBQztRQUMzQ2IsZ0JBQWdCLEdBQUdhLGdCQUFnQixDQUFDN0IsVUFBVTtRQUU5QyxNQUFNOEIsbUNBQW1DLEdBQUdDLHlDQUF5QyxDQUFDMUQsb0JBQW9CLENBQUM7UUFDM0csSUFDQ3lELG1DQUFtQyxJQUNuQ0YsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsZUFBaEJBLGdCQUFnQixDQUFFSSx5QkFBeUIsQ0FBQ0MsY0FBYyxDQUFDSCxtQ0FBbUMsQ0FBQyxFQUM5RjtVQUNEUCxlQUFlLEdBQUdLLGdCQUFnQixDQUFDSSx5QkFBeUIsQ0FBQ0YsbUNBQW1DLENBQWM7UUFDL0c7TUFDRCxDQUFDLE1BQU07UUFDTixNQUFNSSxvQkFBb0IsR0FBRyxDQUMzQlQsbUJBQW1CLENBQWdCVSxnQkFBZ0IsSUFBS1YsbUJBQW1CLENBQWlCVyxVQUFVLEVBQ3RHbkMsSUFBSSxDQUFFUixPQUFPLElBQUtBLE9BQU8sQ0FBQ2pCLElBQUksS0FBSytCLElBQUksQ0FBQztRQUMxQyxJQUFJMkIsb0JBQW9CLGFBQXBCQSxvQkFBb0IsZUFBcEJBLG9CQUFvQixDQUFFbEMsVUFBVSxFQUFFO1VBQ3JDM0Isb0JBQW9CLENBQUNzQixJQUFJLENBQUN1QyxvQkFBb0IsQ0FBQztRQUNoRDtNQUNEO0lBQ0Q7SUFDQSxPQUFPO01BQ05HLGlCQUFpQixFQUFFbEMsbUJBQW1CLENBQUNrQyxpQkFBaUI7TUFDeERoRSxvQkFBb0IsRUFBRUEsb0JBQW9CO01BQzFDRCxlQUFlLEVBQUUrQixtQkFBbUIsQ0FBQy9CLGVBQWU7TUFDcERtRCxlQUFlLEVBQUVBLGVBQWUsSUFBSXBCLG1CQUFtQixDQUFDb0IsZUFBZTtNQUN2RVAsZ0JBQWdCLEVBQUVBLGdCQUFnQixJQUFJYixtQkFBbUIsQ0FBQ2EsZ0JBQWdCO01BQzFFTSxZQUFZLEVBQUVuQixtQkFBbUIsQ0FBQ21CLFlBQVk7TUFDOUNYLGNBQWMsRUFBRVIsbUJBQW1CLENBQUNRO0lBQ3JDLENBQUM7RUFDRixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1ELG9CQUFvQixHQUFHLFVBQVVQLG1CQUF3QyxFQUFXO0lBQ3pGLE9BQU9BLG1CQUFtQixDQUFDOUIsb0JBQW9CLENBQUM0QixJQUFJLENBQUVxQyxVQUFVLElBQUtYLGFBQWEsQ0FBQ1csVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUV0QyxVQUFVLENBQUMsQ0FBQyxLQUFLdUMsU0FBUztFQUMxSCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1SLHlDQUF5QyxHQUFHLFVBQVUxRCxvQkFBdUQsRUFBVTtJQUM1SCxNQUFNbUUsd0JBQXdCLEdBQUduRSxvQkFBb0IsQ0FBQ1EsTUFBTTtJQUM1RCxJQUFJMkQsd0JBQXdCLEVBQUU7TUFDN0IsTUFBTUMsY0FBYyxHQUFHcEUsb0JBQW9CLENBQUNtRSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7TUFDekUsTUFBTUUsMkJBQTJCLEdBQUdmLGFBQWEsQ0FBQ2MsY0FBYyxDQUFDekMsVUFBVSxDQUFDO01BQzVFLElBQUkyQyxjQUFjLEdBQUcsRUFBRTtNQUN2QixJQUFJSCx3QkFBd0IsR0FBRyxDQUFDLElBQUksQ0FBQ0UsMkJBQTJCLEVBQUU7UUFDakUsS0FBSyxJQUFJRSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdKLHdCQUF3QixHQUFHLENBQUMsRUFBRUksQ0FBQyxFQUFFLEVBQUU7VUFDdEQsTUFBTUMsa0JBQWtCLEdBQUd4RSxvQkFBb0IsQ0FBQ3VFLENBQUMsQ0FBQztVQUNsRCxJQUFJakIsYUFBYSxDQUFDa0Isa0JBQWtCLENBQUM3QyxVQUFVLENBQUMsRUFBRTtZQUNqRDJDLGNBQWMsSUFBSyxHQUFFRSxrQkFBa0IsQ0FBQ3JFLElBQUssR0FBRTtVQUNoRCxDQUFDLE1BQU07WUFDTm1FLGNBQWMsR0FBRyxFQUFFO1VBQ3BCO1FBQ0Q7TUFDRDtNQUNBLE9BQU9ELDJCQUEyQixHQUFHLEVBQUUsR0FBSSxHQUFFQyxjQUFlLEdBQUVGLGNBQWMsQ0FBQ2pFLElBQUssRUFBQztJQUNwRjtJQUNBLE9BQU8sRUFBRTtFQUNWLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTXNFLHNCQUFzQixHQUFHLFVBQVUzQyxtQkFBd0MsRUFBVTtJQUNqRyxNQUFNNEMsV0FBVyxHQUFJLElBQUc1QyxtQkFBbUIsQ0FBQ2tDLGlCQUFpQixDQUFDN0QsSUFBSyxFQUFDO0lBQ3BFLElBQUl3RSxtQkFBbUIsR0FBR0QsV0FBVztJQUNyQyxJQUFJbkIsZ0JBQWdCLEdBQUd6QixtQkFBbUIsQ0FBQ2tDLGlCQUFpQjtJQUM1RCxNQUFNaEUsb0JBQW9CLEdBQUc4QixtQkFBbUIsQ0FBQzlCLG9CQUFvQjtJQUNyRSxJQUFJc0UsY0FBc0I7SUFDMUIsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd2RSxvQkFBb0IsQ0FBQ1EsTUFBTSxFQUFFK0QsQ0FBQyxFQUFFLEVBQUU7TUFDckRELGNBQWMsR0FBR1oseUNBQXlDLENBQUMxRCxvQkFBb0IsQ0FBQ3lCLEtBQUssQ0FBQyxDQUFDLEVBQUU4QyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDaEcsSUFBSWhCLGdCQUFnQixJQUFJQSxnQkFBZ0IsQ0FBQ0kseUJBQXlCLENBQUNDLGNBQWMsQ0FBQ1UsY0FBYyxDQUFDLEVBQUU7UUFDbEdLLG1CQUFtQixJQUFLLCtCQUE4QkwsY0FBYyxDQUFDTSxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBRSxFQUFDO1FBQzFGckIsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDSSx5QkFBeUIsQ0FBQ1csY0FBYyxDQUFjO01BQzNGO0lBQ0Q7SUFFQUssbUJBQW1CLElBQUksSUFBSTtJQUMzQixPQUFPQSxtQkFBbUI7RUFDM0IsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BO0VBUU8sTUFBTW5DLHVCQUF1QixHQUFHLFVBQVVWLG1CQUF3QyxFQUFzQztJQUFBLElBQXBDK0MsU0FBa0IsdUVBQUcsS0FBSztJQUNwSCxJQUFJM0MsSUFBSSxHQUFHLEVBQUU7SUFDYixJQUFJLENBQUNKLG1CQUFtQixDQUFDa0MsaUJBQWlCLEVBQUU7TUFDM0MsT0FBTyxHQUFHO0lBQ1g7SUFDQSxJQUFJLENBQUNhLFNBQVMsRUFBRTtNQUNmM0MsSUFBSSxJQUFLLElBQUdKLG1CQUFtQixDQUFDa0MsaUJBQWlCLENBQUM3RCxJQUFLLEVBQUM7SUFDekQ7SUFDQSxJQUFJMkIsbUJBQW1CLENBQUM5QixvQkFBb0IsQ0FBQ1EsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN4RDBCLElBQUksR0FBRzRDLGdCQUFnQixDQUFDNUMsSUFBSSxDQUFDO01BQzdCQSxJQUFJLElBQUlKLG1CQUFtQixDQUFDOUIsb0JBQW9CLENBQUNDLEdBQUcsQ0FBRW1CLE9BQU8sSUFBS0EsT0FBTyxDQUFDakIsSUFBSSxDQUFDLENBQUM0RSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQzFGO0lBQ0EsT0FBTzdDLElBQUk7RUFDWixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkE7RUFPTyxNQUFNOEMsbUJBQW1CLEdBQUcsVUFBVWxELG1CQUF3QyxFQUFzQztJQUFBO0lBQUEsSUFBcEMrQyxTQUFrQix1RUFBRyxLQUFLO0lBQ2hILElBQUkzQyxJQUFJLEdBQUdNLHVCQUF1QixDQUFDVixtQkFBbUIsRUFBRStDLFNBQVMsQ0FBQztJQUNsRSxJQUNDLDBCQUFBL0MsbUJBQW1CLENBQUNtQixZQUFZLG1EQUFoQyx1QkFBa0M5QyxJQUFJLElBQ3RDLENBQUNRLG9CQUFvQixDQUFDbUIsbUJBQW1CLENBQUNtQixZQUFZLENBQUMsSUFDdkQsQ0FBQ0ksWUFBWSxDQUFDdkIsbUJBQW1CLENBQUNtQixZQUFZLENBQUMsSUFDL0MsQ0FBQ2dDLFdBQVcsQ0FBQ25ELG1CQUFtQixDQUFDbUIsWUFBWSxDQUFDLElBQzlDLENBQUNLLGFBQWEsMkJBQUN4QixtQkFBbUIsQ0FBQ21CLFlBQVksMkRBQWhDLHVCQUFrQ3RCLFVBQVUsQ0FBQyxJQUM1REcsbUJBQW1CLENBQUNtQixZQUFZLEtBQUtuQixtQkFBbUIsQ0FBQ2tDLGlCQUFpQixFQUN6RTtNQUNEOUIsSUFBSSxHQUFHNEMsZ0JBQWdCLENBQUM1QyxJQUFJLENBQUM7TUFDN0JBLElBQUksSUFBSyxHQUFFSixtQkFBbUIsQ0FBQ21CLFlBQVksQ0FBQzlDLElBQUssRUFBQztJQUNuRCxDQUFDLE1BQU0sSUFBSTJCLG1CQUFtQixDQUFDbUIsWUFBWSxJQUFJbkIsbUJBQW1CLENBQUNtQixZQUFZLENBQUNXLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtNQUN2RzFCLElBQUksR0FBRzRDLGdCQUFnQixDQUFDNUMsSUFBSSxDQUFDO01BQzdCQSxJQUFJLElBQUssSUFBR0osbUJBQW1CLENBQUNtQixZQUFZLENBQUNpQyxJQUFLLEVBQUM7TUFDbkQsSUFBSXBELG1CQUFtQixDQUFDbUIsWUFBWSxDQUFDVyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDOUIsbUJBQW1CLENBQUNtQixZQUFZLENBQUNrQyxTQUFTLEVBQUU7UUFDakhqRCxJQUFJLElBQUssSUFBR0osbUJBQW1CLENBQUNtQixZQUFZLENBQUNrQyxTQUFVLEVBQUM7TUFDekQ7SUFDRDtJQUNBLE9BQU9qRCxJQUFJO0VBQ1osQ0FBQztFQUFDO0VBRUssTUFBTWtELGtDQUFrQyxHQUFHLFVBQ2pEdEQsbUJBQXdDLEVBR25CO0lBQUE7SUFBQSxJQUZyQnVELG9CQUE2Qix1RUFBRyxLQUFLO0lBQUEsSUFDckNDLHNCQUErQix1RUFBRyxLQUFLO0lBRXZDLElBQUksMkJBQUF4RCxtQkFBbUIsQ0FBQy9CLGVBQWUsMkRBQW5DLHVCQUFxQ2lFLGlCQUFpQixNQUFLbEMsbUJBQW1CLENBQUNrQyxpQkFBaUIsRUFBRTtNQUNyRyxPQUFPZ0IsbUJBQW1CLENBQUNsRCxtQkFBbUIsQ0FBQztJQUNoRDtJQUNBLE9BQU95RCxtQ0FBbUMsQ0FBQ3pELG1CQUFtQixFQUFFdUQsb0JBQW9CLEVBQUVDLHNCQUFzQixDQUFDO0VBQzlHLENBQUM7RUFBQztFQUVGLE1BQU1DLG1DQUFtQyxHQUFHLFVBQzNDekQsbUJBQXdDLEVBR25CO0lBQUE7SUFBQSxJQUZyQnVELG9CQUE2Qix1RUFBRyxLQUFLO0lBQUEsSUFDckNDLHNCQUErQix1RUFBRyxLQUFLO0lBRXZDLElBQUksQ0FBQ3hELG1CQUFtQixDQUFDbUIsWUFBWSxFQUFFO01BQ3RDLE9BQU9pQixTQUFTO0lBQ2pCO0lBQ0EsTUFBTXNCLGFBQWEsR0FBRzFGLHVCQUF1QixDQUFDZ0MsbUJBQW1CLENBQUMvQixlQUFlLEVBQUUrQixtQkFBbUIsQ0FBQzlCLG9CQUFvQixDQUFDO0lBQzVILElBQUlxRixvQkFBb0IsRUFBRTtNQUN6QixJQUFJRyxhQUFhLENBQUNDLElBQUksQ0FBQ0MsNEJBQTRCLENBQUMsRUFBRTtRQUNyRCxPQUFPeEIsU0FBUztNQUNqQjtJQUNEO0lBQ0EsSUFBSWhDLElBQUksR0FBR29ELHNCQUFzQixHQUM5QkUsYUFBYSxDQUNadkYsR0FBRyxDQUFFbUIsT0FBTyxJQUFLO01BQ2pCLE1BQU11RSxZQUFZLEdBQUdELDRCQUE0QixDQUFDdEUsT0FBTyxDQUFDO01BQzFELE9BQU91RSxZQUFZLEdBQUksR0FBRXZFLE9BQU8sQ0FBQ2pCLElBQUssR0FBRSxHQUFHaUIsT0FBTyxDQUFDakIsSUFBSTtJQUN4RCxDQUFDLENBQUMsQ0FDRDRFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FDVlMsYUFBYSxDQUFDdkYsR0FBRyxDQUFFbUIsT0FBTyxJQUFLQSxPQUFPLENBQUNqQixJQUFJLENBQUMsQ0FBQzRFLElBQUksQ0FBQyxHQUFHLENBQUM7SUFFekQsSUFDQyxDQUFDakQsbUJBQW1CLENBQUNtQixZQUFZLENBQUM5QyxJQUFJLElBQ3BDMkIsbUJBQW1CLENBQUNtQixZQUFZLENBQUMyQyxJQUFJLEtBQUssY0FBYyxJQUFJOUQsbUJBQW1CLENBQUNtQixZQUFZLENBQUM0QyxLQUFNLEtBQ3JHLENBQUNsRixvQkFBb0IsQ0FBQ21CLG1CQUFtQixDQUFDbUIsWUFBWSxDQUFDLElBQ3ZELENBQUNJLFlBQVksQ0FBQ3ZCLG1CQUFtQixDQUFDbUIsWUFBWSxDQUFDLElBQy9DLENBQUNnQyxXQUFXLENBQUNuRCxtQkFBbUIsQ0FBQ21CLFlBQVksQ0FBQyxJQUM5QyxDQUFDSyxhQUFhLDJCQUFDeEIsbUJBQW1CLENBQUNtQixZQUFZLDJEQUFoQyx1QkFBa0N0QixVQUFVLENBQUMsSUFDNURHLG1CQUFtQixDQUFDbUIsWUFBWSxLQUFLbkIsbUJBQW1CLENBQUNrQyxpQkFBaUIsRUFDekU7TUFDRDlCLElBQUksR0FBRzRDLGdCQUFnQixDQUFDNUMsSUFBSSxDQUFDO01BQzdCQSxJQUFJLElBQ0hKLG1CQUFtQixDQUFDbUIsWUFBWSxDQUFDMkMsSUFBSSxLQUFLLGNBQWMsR0FDcEQsR0FBRTlELG1CQUFtQixDQUFDbUIsWUFBWSxDQUFDNEMsS0FBTSxFQUFDLEdBQzFDLEdBQUUvRCxtQkFBbUIsQ0FBQ21CLFlBQVksQ0FBQzlDLElBQUssRUFBQztJQUMvQyxDQUFDLE1BQU0sSUFBSTJCLG1CQUFtQixDQUFDbUIsWUFBWSxDQUFDVyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7TUFDbkUxQixJQUFJLEdBQUc0QyxnQkFBZ0IsQ0FBQzVDLElBQUksQ0FBQztNQUM3QkEsSUFBSSxJQUFLLElBQUdKLG1CQUFtQixDQUFDbUIsWUFBWSxDQUFDaUMsSUFBSyxFQUFDO01BQ25ELElBQUlwRCxtQkFBbUIsQ0FBQ21CLFlBQVksQ0FBQ1csY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzlCLG1CQUFtQixDQUFDbUIsWUFBWSxDQUFDa0MsU0FBUyxFQUFFO1FBQ2pIakQsSUFBSSxJQUFLLElBQUdKLG1CQUFtQixDQUFDbUIsWUFBWSxDQUFDa0MsU0FBVSxFQUFDO01BQ3pEO0lBQ0Q7SUFDQSxPQUFPakQsSUFBSTtFQUNaLENBQUM7RUFFTSxNQUFNNEQsZUFBZSxHQUFHLFVBQzlCaEUsbUJBQW9ELEVBQ3BEaUUsMEJBQXVELEVBQ25CO0lBQ3BDLE9BQU9DLFdBQVcsQ0FDakJsRSxtQkFBbUIsRUFDbEJtRSxnQkFBbUYsSUFBSztNQUFBO01BQ3hGLE9BQU9BLGdCQUFnQixhQUFoQkEsZ0JBQWdCLGdEQUFoQkEsZ0JBQWdCLENBQUVDLGtCQUFrQiwwREFBcEMsc0JBQXNDQyxTQUFTO0lBQ3ZELENBQUMsRUFDREosMEJBQTBCLENBQzFCO0VBQ0YsQ0FBQztFQUFDO0VBRUssTUFBTUssZ0JBQWdCLEdBQUcsVUFDL0J0RSxtQkFBb0QsRUFDcERpRSwwQkFBdUQsRUFDbkI7SUFDcEMsT0FBT0MsV0FBVyxDQUNqQmxFLG1CQUFtQixFQUNsQm1FLGdCQUFtRixJQUFLO01BQUE7TUFDeEYsT0FBT0EsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsZ0RBQWhCQSxnQkFBZ0IsQ0FBRUksa0JBQWtCLDBEQUFwQyxzQkFBc0NDLFVBQVU7SUFDeEQsQ0FBQyxFQUNEUCwwQkFBMEIsQ0FDMUI7RUFDRixDQUFDO0VBQUM7RUFFSyxNQUFNUSxlQUFlLEdBQUcsVUFDOUJ6RSxtQkFBb0QsRUFDcERpRSwwQkFBdUQsRUFDbkI7SUFDcEMsT0FBT0MsV0FBVyxDQUNqQmxFLG1CQUFtQixFQUNsQm1FLGdCQUFtRixJQUFLO01BQUE7TUFDeEYsT0FBT0EsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsZ0RBQWhCQSxnQkFBZ0IsQ0FBRU8sa0JBQWtCLDBEQUFwQyxzQkFBc0NDLFNBQVM7SUFDdkQsQ0FBQyxFQUNEViwwQkFBMEIsQ0FDMUI7RUFDRixDQUFDO0VBQUM7RUFFSyxNQUFNVyxnQkFBZ0IsR0FBRyxVQUMvQjVFLG1CQUFvRCxFQUNwRGlFLDBCQUF1RCxFQUNuQjtJQUNwQyxPQUFPQyxXQUFXLENBQ2pCbEUsbUJBQW1CLEVBQ2xCbUUsZ0JBQW1GLElBQUs7TUFBQTtNQUN4RixPQUFPQSxnQkFBZ0IsYUFBaEJBLGdCQUFnQixnREFBaEJBLGdCQUFnQixDQUFFVSxrQkFBa0IsMERBQXBDLHNCQUFzQ0MsVUFBVTtJQUN4RCxDQUFDLEVBQ0RiLDBCQUEwQixDQUMxQjtFQUNGLENBQUM7RUFBQztFQUVLLE1BQU1jLGlDQUFpQyxHQUFHLFVBQ2hEL0UsbUJBQXdDLEVBQ3hDZ0YsaUJBQXlDLEVBQ0w7SUFDcEMsT0FBT2QsV0FBVyxDQUNqQmxFLG1CQUFtQixFQUNsQm1FLGdCQUF3SCxJQUFLO01BQzdILElBQUlBLGdCQUFnQixJQUFJLG9CQUFvQixJQUFJQSxnQkFBZ0IsRUFBRTtRQUFBO1FBQ2pFLE1BQU1jLDRCQUFvRSxHQUN6RSxDQUFDZCxnQkFBZ0IsYUFBaEJBLGdCQUFnQixnREFBaEJBLGdCQUFnQixDQUFFZSxrQkFBa0IsMERBQXBDLHNCQUFzQ0MsNEJBQTRCLEtBQStDLEVBQUU7UUFDckgsTUFBTUMsd0JBQXdCLEdBQUdILDRCQUE0QixDQUFDbkYsSUFBSSxDQUFFdUYsV0FBVyxJQUFLO1VBQ25GLE9BQVFBLFdBQVcsQ0FBQ0MsUUFBUSxDQUFrQmhGLE9BQU8sS0FBS04sbUJBQW1CLENBQUNtQixZQUFZO1FBQzNGLENBQUMsQ0FBQztRQUNGLElBQUlpRSx3QkFBd0IsRUFBRTtVQUFBO1VBQzdCLE9BQU9KLGlCQUFpQixDQUFDTyxPQUFPLENBQUNILHdCQUF3QixhQUF4QkEsd0JBQXdCLGdEQUF4QkEsd0JBQXdCLENBQUVJLGtCQUFrQiwwREFBNUMsc0JBQThDQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRyxDQUFDLE1BQU07VUFDTixPQUFPLEtBQUs7UUFDYjtNQUNELENBQUMsTUFBTTtRQUNOLE9BQU8sS0FBSztNQUNiO0lBQ0QsQ0FBQyxDQUNEO0VBQ0YsQ0FBQztFQUFDO0VBRUssTUFBTXZCLFdBQVcsR0FBRyxVQUMxQmxFLG1CQUFvRCxFQUNwRDBGLGFBQXVCLEVBQ3ZCekIsMEJBQXVELEVBQ25CO0lBQ3BDLElBQUksQ0FBQ2pFLG1CQUFtQixJQUFJLENBQUNBLG1CQUFtQixDQUFDa0MsaUJBQWlCLEVBQUU7TUFDbkUsT0FBT3lELFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDdEI7SUFFQTNGLG1CQUFtQixHQUFHRCxvQkFBb0IsQ0FBQ0MsbUJBQW1CLEVBQUVpRSwwQkFBMEIsYUFBMUJBLDBCQUEwQix1QkFBMUJBLDBCQUEwQixDQUFFaEUsWUFBWSxDQUFDO0lBRXpHLElBQUl3QixnQkFBOEMsR0FBR3pCLG1CQUFtQixDQUFDa0MsaUJBQWlCO0lBQzFGLElBQUkwRCxlQUE2QyxHQUFHLElBQUk7SUFDeEQsSUFBSUMsMEJBQW9DLEdBQUcsRUFBRTtJQUM3QyxNQUFNQyx5QkFBNEQsR0FBRyxFQUFFO0lBQ3ZFLElBQUkxRSxlQUE2QyxHQUFHSyxnQkFBZ0I7SUFDcEUsTUFBTVosZ0JBQW1DLEdBQUdiLG1CQUFtQixDQUFDYSxnQkFBZ0I7SUFDaEYsSUFBSWtGLG9CQUFvQixHQUFHLEtBQUs7SUFFaEMvRixtQkFBbUIsQ0FBQzlCLG9CQUFvQixDQUFDbUIsT0FBTyxDQUFFcUQsa0JBQWtCLElBQUs7TUFDeEUsSUFBSXFELG9CQUFvQixFQUFFO1FBQ3pCRiwwQkFBMEIsR0FBRyxFQUFFO01BQ2hDO01BQ0FBLDBCQUEwQixDQUFDckcsSUFBSSxDQUFDa0Qsa0JBQWtCLENBQUNyRSxJQUFJLENBQUM7TUFDeER5SCx5QkFBeUIsQ0FBQ3RHLElBQUksQ0FBQ2tELGtCQUFrQixDQUFDO01BQ2xELElBQUlzRCxVQUFVLENBQUN0RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUNBLGtCQUFrQixDQUFDdUQsY0FBYyxFQUFFO1FBQ3pFO1FBQ0EsTUFBTUMsa0JBQWtCLEdBQUdMLDBCQUEwQixDQUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUMvRCxJQUFJeEIsZ0JBQWdCLElBQUlBLGdCQUFnQixDQUFDSSx5QkFBeUIsQ0FBQ0MsY0FBYyxDQUFDb0Usa0JBQWtCLENBQUMsRUFBRTtVQUN0R04sZUFBZSxHQUFHbkUsZ0JBQWdCO1VBQ2xDQSxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUNJLHlCQUF5QixDQUFDcUUsa0JBQWtCLENBQUM7VUFDakY5RSxlQUFlLEdBQUdLLGdCQUFnQjtVQUNsQztVQUNBc0Usb0JBQW9CLEdBQUcsSUFBSTtRQUM1QixDQUFDLE1BQU07VUFDTjtVQUNBSCxlQUFlLEdBQUduRSxnQkFBZ0I7VUFDbENBLGdCQUFnQixHQUFHLElBQUk7VUFDdkJzRSxvQkFBb0IsR0FBRyxJQUFJO1FBQzVCO01BQ0QsQ0FBQyxNQUFNO1FBQ05ILGVBQWUsR0FBR25FLGdCQUFnQjtRQUNsQ0wsZUFBZSxHQUFHLElBQUk7TUFDdkI7SUFDRCxDQUFDLENBQUM7O0lBRUY7SUFDQTtJQUNBO0lBQ0E7O0lBRUE7SUFDQSxNQUFNOEUsa0JBQWtCLEdBQUdMLDBCQUEwQixDQUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMvRCxJQUFJa0QsWUFBWSxFQUFFN0gsZUFBZTtJQUNqQyxJQUFJc0gsZUFBZSxLQUFLLElBQUksRUFBRTtNQUFBO01BQzdCLE1BQU1RLGdCQUEyQixHQUFHUixlQUFlO01BQ25ELHlCQUFBUSxnQkFBZ0IsQ0FBQ0MsV0FBVyxvRkFBNUIsc0JBQThCQyxZQUFZLHFGQUExQyx1QkFBNENDLHNCQUFzQiwyREFBbEUsdUJBQW9FQyxvQkFBb0IsQ0FBQ25ILE9BQU8sQ0FDOUZvSCxpQkFBcUQsSUFBSztRQUFBO1FBQzFELElBQUksMEJBQUFBLGlCQUFpQixDQUFDQyxrQkFBa0IsMERBQXBDLHNCQUFzQzVDLElBQUksTUFBSyx3QkFBd0IsRUFBRTtVQUM1RSxNQUFNNkMscUJBQXFCLEdBQUdqQixhQUFhLENBQUNlLGlCQUFpQixDQUFDO1VBQzlELElBQUlQLGtCQUFrQixLQUFLTyxpQkFBaUIsQ0FBQ0Msa0JBQWtCLENBQUMzQyxLQUFLLElBQUk0QyxxQkFBcUIsS0FBS3ZFLFNBQVMsRUFBRTtZQUFBO1lBQzdHLE1BQU13RSwwQkFBMEIsR0FBR2QseUJBQXlCLENBQUNuRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pFckIsZUFBZSxHQUFHc0ksMEJBQTBCO1lBQzVDLE1BQU1DLG9CQUFvQixHQUFHN0ksdUJBQXVCLHlCQUFDZ0MsbUJBQW1CLHlEQUFuQixxQkFBcUIvQixlQUFlLEVBQUVLLGVBQWUsQ0FBQyxDQUFDSCxHQUFHLENBQzdHQyxFQUFFLElBQUtBLEVBQUUsQ0FBQ0MsSUFBSSxDQUNmO1lBQ0QsTUFBTXlJLG1CQUFtQixHQUFHN0MsMEJBQTBCLGFBQTFCQSwwQkFBMEIsZUFBMUJBLDBCQUEwQixDQUFFOEMsV0FBVyxHQUNoRUMsMEJBQTBCLENBQUMvQywwQkFBMEIsQ0FBQzhDLFdBQVcsRUFBRUYsb0JBQW9CLENBQUMsR0FDeEZ6RSxTQUFTLENBQUMsQ0FBQztZQUNkK0QsWUFBWSxHQUFHYyxLQUFLLENBQ25CQywyQkFBMkIsQ0FBQ1AscUJBQXFCLEVBQUVFLG9CQUFvQixFQUFFekUsU0FBUyxFQUFFMEUsbUJBQW1CLENBQUMsRUFDeEcsSUFBSSxDQUNKO1VBQ0Y7UUFDRDtNQUNELENBQUMsQ0FDRDtJQUNGO0lBQ0EsSUFBSUssa0JBQWtCO0lBQ3RCLElBQUksRUFBQ2xELDBCQUEwQixhQUExQkEsMEJBQTBCLGVBQTFCQSwwQkFBMEIsQ0FBRW1ELHNCQUFzQixHQUFFO01BQUE7TUFDeEQsSUFBSVQscUJBQXFCLEdBQUdqQixhQUFhLHFCQUFDdEUsZUFBZSw4RUFBZixpQkFBaUJpRixXQUFXLDBEQUE1QixzQkFBOEJDLFlBQVksQ0FBQztNQUNyRixJQUFJbEYsZUFBZSxLQUFLLElBQUksSUFBSXVGLHFCQUFxQixLQUFLdkUsU0FBUyxFQUFFO1FBQUE7UUFDcEV1RSxxQkFBcUIsR0FBR2pCLGFBQWEsQ0FBQzdFLGdCQUFnQixhQUFoQkEsZ0JBQWdCLGdEQUFoQkEsZ0JBQWdCLENBQUV3RixXQUFXLDBEQUE3QixzQkFBK0JDLFlBQVksQ0FBQztNQUNuRjtNQUNBLElBQUlLLHFCQUFxQixLQUFLdkUsU0FBUyxFQUFFO1FBQ3hDLE1BQU15RSxvQkFBb0IsR0FBRzdJLHVCQUF1QixDQUFDZ0MsbUJBQW1CLENBQUMvQixlQUFlLEVBQUU2SCx5QkFBeUIsQ0FBQyxDQUFDM0gsR0FBRyxDQUN0SEMsRUFBRSxJQUFLQSxFQUFFLENBQUNDLElBQUksQ0FDZjtRQUNELE1BQU15SSxtQkFBbUIsR0FBRzdDLDBCQUEwQixhQUExQkEsMEJBQTBCLGVBQTFCQSwwQkFBMEIsQ0FBRThDLFdBQVcsR0FDaEVDLDBCQUEwQixDQUFDL0MsMEJBQTBCLENBQUM4QyxXQUFXLEVBQUVGLG9CQUFvQixDQUFDLEdBQ3hGekUsU0FBUztRQUNaK0Usa0JBQWtCLEdBQUdGLEtBQUssQ0FDekJDLDJCQUEyQixDQUFDUCxxQkFBcUIsRUFBRUUsb0JBQW9CLEVBQUV6RSxTQUFTLEVBQUUwRSxtQkFBbUIsQ0FBQyxFQUN4RyxJQUFJLENBQ0o7TUFDRjtJQUNEO0lBRUEsT0FDQ1gsWUFBWSxJQUFJZ0Isa0JBQWtCLEtBQUtsRCwwQkFBMEIsYUFBMUJBLDBCQUEwQixlQUExQkEsMEJBQTBCLENBQUVvRCxxQkFBcUIsR0FBR0Msc0JBQXNCLEdBQUczQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7RUFFckksQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1BLE1BQU0zQyxnQkFBZ0IsR0FBRyxVQUFVNUMsSUFBWSxFQUFFO0lBQ2hELElBQUlBLElBQUksQ0FBQzFCLE1BQU0sSUFBSSxDQUFDMEIsSUFBSSxDQUFDbUgsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ3ZDLE9BQVEsR0FBRW5ILElBQUssR0FBRTtJQUNsQjtJQUNBLE9BQU9BLElBQUk7RUFDWixDQUFDOztFQUVEO0VBQ0E7RUFDQTtFQUNBLE1BQU00RywwQkFBMEIsR0FBRyxVQUFVRCxXQUFxQixFQUFFRixvQkFBOEIsRUFBRTtJQUNuRyxPQUFPLFVBQVV6RyxJQUFZLEVBQUU7TUFDOUIsT0FBTzJHLFdBQVcsQ0FBQzNHLElBQUksRUFBRXlHLG9CQUFvQixDQUFDO0lBQy9DLENBQUM7RUFDRixDQUFDO0VBQUM7QUFBQSJ9
|