@sapui5/sap.fe.core 1.102.0 → 1.103.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 +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +62 -26
- package/src/sap/fe/core/AppComponent.ts +56 -40
- package/src/sap/fe/core/AppStateHandler.js +10 -10
- package/src/sap/fe/core/AppStateHandler.ts +9 -9
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +236 -109
- package/src/sap/fe/core/CommonUtils.ts +252 -136
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +8 -8
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +11 -10
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
- package/src/sap/fe/core/controllerextensions/EditFlow.js +129 -118
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +154 -141
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +31 -26
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +34 -35
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +70 -70
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +77 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +84 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +105 -101
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +8 -8
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +19 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +29 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +22 -22
- package/src/sap/fe/core/controllerextensions/Share.ts +30 -29
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +65 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +68 -63
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -6
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +12 -17
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +184 -137
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +253 -206
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +113 -121
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +148 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +198 -148
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +223 -159
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -44
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +90 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +52 -55
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -58
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +2 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +11 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +47 -47
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +52 -52
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +14 -14
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +50 -32
- package/src/sap/fe/core/converters/MetaModelConverter.ts +145 -127
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +54 -34
- package/src/sap/fe/core/converters/annotations/DataField.ts +97 -75
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -26
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
- package/src/sap/fe/core/converters/controls/Common/Form.js +25 -27
- package/src/sap/fe/core/converters/controls/Common/Form.ts +37 -45
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
- package/src/sap/fe/core/converters/controls/Common/Table.js +174 -183
- package/src/sap/fe/core/converters/controls/Common/Table.ts +237 -250
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +64 -57
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +73 -72
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +98 -96
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +10 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +46 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +365 -264
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +14 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +281 -254
- package/src/sap/fe/core/helpers/MassEditHelper.ts +337 -289
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +49 -35
- package/src/sap/fe/core/messagebundle_ar.properties +13 -5
- package/src/sap/fe/core/messagebundle_bg.properties +13 -5
- package/src/sap/fe/core/messagebundle_ca.properties +13 -5
- package/src/sap/fe/core/messagebundle_cs.properties +13 -5
- package/src/sap/fe/core/messagebundle_cy.properties +14 -6
- package/src/sap/fe/core/messagebundle_da.properties +13 -5
- package/src/sap/fe/core/messagebundle_de.properties +15 -7
- package/src/sap/fe/core/messagebundle_el.properties +14 -6
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +11 -3
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -85
- package/src/sap/fe/core/messagebundle_es.properties +13 -5
- package/src/sap/fe/core/messagebundle_es_MX.properties +13 -5
- package/src/sap/fe/core/messagebundle_et.properties +13 -5
- package/src/sap/fe/core/messagebundle_fi.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -6
- package/src/sap/fe/core/messagebundle_hi.properties +14 -6
- package/src/sap/fe/core/messagebundle_hr.properties +14 -6
- package/src/sap/fe/core/messagebundle_hu.properties +13 -5
- package/src/sap/fe/core/messagebundle_id.properties +13 -5
- package/src/sap/fe/core/messagebundle_it.properties +33 -25
- package/src/sap/fe/core/messagebundle_iw.properties +13 -5
- package/src/sap/fe/core/messagebundle_ja.properties +14 -6
- package/src/sap/fe/core/messagebundle_kk.properties +13 -5
- package/src/sap/fe/core/messagebundle_ko.properties +13 -5
- package/src/sap/fe/core/messagebundle_lt.properties +13 -5
- package/src/sap/fe/core/messagebundle_lv.properties +14 -6
- package/src/sap/fe/core/messagebundle_ms.properties +13 -5
- package/src/sap/fe/core/messagebundle_nl.properties +13 -5
- package/src/sap/fe/core/messagebundle_no.properties +13 -5
- package/src/sap/fe/core/messagebundle_pl.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -6
- package/src/sap/fe/core/messagebundle_ro.properties +13 -5
- package/src/sap/fe/core/messagebundle_ru.properties +13 -5
- package/src/sap/fe/core/messagebundle_sh.properties +13 -5
- package/src/sap/fe/core/messagebundle_sk.properties +13 -5
- package/src/sap/fe/core/messagebundle_sl.properties +17 -9
- package/src/sap/fe/core/messagebundle_sv.properties +14 -6
- package/src/sap/fe/core/messagebundle_th.properties +13 -5
- package/src/sap/fe/core/messagebundle_tr.properties +13 -5
- package/src/sap/fe/core/messagebundle_uk.properties +13 -5
- package/src/sap/fe/core/messagebundle_vi.properties +13 -5
- package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -6
- package/src/sap/fe/core/messagebundle_zh_TW.properties +13 -5
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +53 -44
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +54 -46
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +72 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +76 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +20 -15
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +26 -21
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +10 -9
- package/src/sap/fe/core/templating/FilterHelper.ts +13 -13
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +148 -93
- package/src/sap/fe/core/templating/UIFormatters.ts +196 -124
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/
|
|
5
|
+
sap.ui.define(["sap/base/strings/hash", "sap/ui/core/cache/CacheManager", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory"], function (hash, CacheManager, Service, ServiceFactory) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -230,4 +230,4 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
230
230
|
|
|
231
231
|
return CacheHandlerServiceFactory;
|
|
232
232
|
}, false);
|
|
233
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5LnRzIl0sIm5hbWVzIjpbImdldE1ldGFkYXRhRVRhZyIsInNVcmwiLCJzRVRhZyIsIm1VcGRhdGVkTWV0YU1vZGVsRVRhZ3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsImpRdWVyeSIsImFqYXgiLCJtZXRob2QiLCJkb25lIiwib1Jlc3BvbnNlIiwic1RleHRTdGF0dXMiLCJqcVhIUiIsImdldFJlc3BvbnNlSGVhZGVyIiwiZmFpbCIsIkNhY2hlSGFuZGxlclNlcnZpY2UiLCJpbml0Iiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwib0ZhY3RvcnkiLCJmYWN0b3J5IiwibVNldHRpbmdzIiwic2V0dGluZ3MiLCJtZXRhTW9kZWwiLCJFcnJvciIsIm9NZXRhTW9kZWwiLCJvQXBwQ29tcG9uZW50IiwiYXBwQ29tcG9uZW50Iiwib0NvbXBvbmVudCIsImNvbXBvbmVudCIsImluaXRQcm9taXNlIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJ0aGVuIiwibUNhY2hlTmVlZHNJbnZhbGlkYXRlIiwiZXhpdCIsInJlbW92ZUdsb2JhbEluc3RhbmNlIiwidmFsaWRhdGVDYWNoZUtleSIsInNDYWNoZUlkZW50aWZpZXIiLCJiQ2FjaGVOZWVkVXBkYXRlIiwiQ2FjaGVNYW5hZ2VyIiwiZ2V0IiwibUNhY2hlT3V0cHV0IiwibU1ldGFNb2RlbEVUYWdzIiwiZ2V0RVRhZ3MiLCJzVXBkYXRlZENhY2hlS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm1DYWNoZWRFVGFncyIsInBhcnNlIiwiY2FjaGVkRVRhZ3MiLCJhbGwiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwiYVZhbGlkRVRhZ3MiLCJpbmRleE9mIiwic29tZSIsInZpZXdDYWNoZUtleSIsImNhdGNoIiwic0NhY2hlS2V5IiwiaW52YWxpZGF0ZUlmTmVlZGVkIiwic0NhY2hlS2V5cyIsInNEYXRhU291cmNlRVRhZ3MiLCJtQ2FjaGVLZXlzIiwic2V0IiwiZm9yRWFjaCIsInNNZXRhTW9kZWxLZXkiLCJEYXRlIiwidG9JU09TdHJpbmciLCJvTWFuaWZlc3RDb250ZW50IiwiZ2V0TWFuaWZlc3QiLCJzTWFuaWZlc3RIYXNoIiwiaGFzaCIsInNhcEFwcCIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJnZXRJbnRlcmZhY2UiLCJTZXJ2aWNlIiwiQ2FjaGVIYW5kbGVyU2VydmljZUZhY3RvcnkiLCJfb0luc3RhbmNlUmVnaXN0cnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsInNNZXRhTW9kZWxJZCIsImdldElkIiwiY2FjaGVIYW5kbGVySW5zdGFuY2UiLCJhc3NpZ24iLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsImUiLCJnZXRJbnN0YW5jZSIsIlNlcnZpY2VGYWN0b3J5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBT0EsV0FBU0EsZUFBVCxDQUF5QkMsSUFBekIsRUFBb0NDLEtBQXBDLEVBQWdEQyxzQkFBaEQsRUFBNkU7QUFDNUUsV0FBTyxJQUFJQyxPQUFKLENBQVksVUFBU0MsT0FBVCxFQUFrQjtBQUNwQztBQUNDQyxNQUFBQSxNQUFELENBQ0VDLElBREYsQ0FDT04sSUFEUCxFQUNhO0FBQUVPLFFBQUFBLE1BQU0sRUFBRTtBQUFWLE9BRGIsRUFFRUMsSUFGRixDQUVPLFVBQVNDLFNBQVQsRUFBeUJDLFdBQXpCLEVBQTJDQyxLQUEzQyxFQUF1RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQVQsUUFBQUEsc0JBQXNCLENBQUNGLElBQUQsQ0FBdEIsR0FBK0JXLEtBQUssQ0FBQ0MsaUJBQU4sQ0FBd0IsTUFBeEIsS0FBbUNELEtBQUssQ0FBQ0MsaUJBQU4sQ0FBd0IsZUFBeEIsQ0FBbEU7QUFDQVIsUUFBQUEsT0FBTyxDQUFDSCxLQUFLLEtBQUtDLHNCQUFzQixDQUFDRixJQUFELENBQWpDLENBQVA7QUFDQSxPQVJGLEVBU0VhLElBVEYsQ0FTTyxZQUFXO0FBQ2hCO0FBQ0FYLFFBQUFBLHNCQUFzQixDQUFDRixJQUFELENBQXRCLEdB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QUNBLEs7O1lBQ0RoRCxvQixHQUFBLDhCQUFxQlYsVUFBckIsRUFBaUQ7QUFDaEQsV0FBS3NELGtCQUFMLENBQXdCdEQsVUFBVSxDQUFDMEQsS0FBWCxFQUF4QixJQUE4QyxJQUE5QztBQUNBLEs7OztJQWpDdUNPLGM7O1NBb0MxQlosMEIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IENhY2hlTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvY2FjaGUvQ2FjaGVNYW5hZ2VyXCI7XG5pbXBvcnQgaGFzaCBmcm9tIFwic2FwL2Jhc2Uvc3RyaW5ncy9oYXNoXCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgVUlDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL1VJQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcblxuZnVuY3Rpb24gZ2V0TWV0YWRhdGFFVGFnKHNVcmw6IGFueSwgc0VUYWc6IGFueSwgbVVwZGF0ZWRNZXRhTW9kZWxFVGFnczogYW55KSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0Ly8gVGhlcmUgaXMgYW4gVXJsIGluIHRoZSBGRSBjYWNoZSwgdGhhdCdzIG5vdCBpbiB0aGUgTWV0YU1vZGVsIHlldCAtPiB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBFVGFnXG5cdFx0KGpRdWVyeSBhcyBhbnkpXG5cdFx0XHQuYWpheChzVXJsLCB7IG1ldGhvZDogXCJHRVRcIiB9KVxuXHRcdFx0LmRvbmUoZnVuY3Rpb24ob1Jlc3BvbnNlOiBhbnksIHNUZXh0U3RhdHVzOiBhbnksIGpxWEhSOiBhbnkpIHtcblx0XHRcdFx0Ly8gRVRhZyBpcyBub3QgdGhlIHNhbWUgLT4gaW52YWxpZFxuXHRcdFx0XHQvLyBFVGFnIGlzIHRoZSBzYW1lIC0+IHZhbGlkXG5cdFx0XHRcdC8vIElmIEVUYWcgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZSBMYXN0LU1vZGlmaWVkXG5cdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcihcIkVUYWdcIikgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJMYXN0LU1vZGlmaWVkXCIpO1xuXHRcdFx0XHRyZXNvbHZlKHNFVGFnID09PSBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdKTtcblx0XHRcdH0pXG5cdFx0XHQuZmFpbChmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gQ2FzZSAyeiAtIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIG1hcCBzbyB0aGF0IHdlIGludmFsaWRhdGUgdGhlIGNhY2hlXG5cdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBcIlwiO1xuXHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdH0pO1xuXHR9KTtcbn1cbnR5cGUgQ2FjaGVIYW5kbGVyU2VydmljZVNldHRpbmdzID0ge1xuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xufTtcblxuZXhwb3J0IGNsYXNzIENhY2hlSGFuZGxlclNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncz4ge1xuXHRyZXNvbHZlRm46IGFueTtcblx0cmVqZWN0Rm46IGFueTtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPGFueT47XG5cblx0b0ZhY3RvcnkhOiBDYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeTtcblx0b01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXHRvQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXHRvQ29tcG9uZW50ITogVUlDb21wb25lbnQ7XG5cdG1DYWNoZU5lZWRzSW52YWxpZGF0ZTogYW55O1xuXG5cdGluaXQoKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHR0aGlzLm9GYWN0b3J5ID0gb0NvbnRleHQuZmFjdG9yeTtcblx0XHRjb25zdCBtU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRpZiAoIW1TZXR0aW5ncy5tZXRhTW9kZWwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImEgYG1ldGFNb2RlbGAgcHJvcGVydHkgaXMgZXhwZWN0ZWQgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBDYWNoZUhhbmRsZXJTZXJ2aWNlXCIpO1xuXHRcdH1cblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBtU2V0dGluZ3MubWV0YU1vZGVsO1xuXHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG1TZXR0aW5ncy5hcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5vQ29tcG9uZW50ID0gbVNldHRpbmdzLmNvbXBvbmVudDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gKHRoaXMub01ldGFNb2RlbCBhcyBhbnkpLmZldGNoRW50aXR5Q29udGFpbmVyKCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9KTtcblx0XHR0aGlzLm1DYWNoZU5lZWRzSW52YWxpZGF0ZSA9IHt9O1xuXHR9XG5cdGV4aXQoKSB7XG5cdFx0Ly8gRGVyZWdpc3RlciBnbG9iYWwgaW5zdGFuY2Vcblx0XHR0aGlzLm9GYWN0b3J5LnJlbW92ZUdsb2JhbEluc3RhbmNlKHRoaXMub01ldGFNb2RlbCk7XG5cdH1cblx0dmFsaWRhdGVDYWNoZUtleShzQ2FjaGVJZGVudGlmaWVyOiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdC8vIEtlZXAgdHJhY2sgaWYgdGhlIGNhY2hlIHdpbGwgYW55d2F5IG5lZWQgdG8gYmUgdXBkYXRlZFxuXHRcdGxldCBiQ2FjaGVOZWVkVXBkYXRlID0gdHJ1ZTtcblx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLmdldChzQ2FjaGVJZGVudGlmaWVyKVxuXHRcdFx0LnRoZW4oKG1DYWNoZU91dHB1dDogYW55KSA9PiB7XG5cdFx0XHRcdC8vIFdlIHByb3ZpZGUgYSBkZWZhdWx0IGtleSBzbyB0aGF0IGFuIHhtbCB2aWV3IGNhY2hlIGlzIHdyaXR0ZW5cblx0XHRcdFx0Y29uc3QgbU1ldGFNb2RlbEVUYWdzID0gdGhpcy5nZXRFVGFncygpO1xuXHRcdFx0XHRsZXQgc1VwZGF0ZWRDYWNoZUtleTogc3RyaW5nIHwgbnVsbCA9IEpTT04uc3RyaW5naWZ5KG1NZXRhTW9kZWxFVGFncyk7XG5cdFx0XHRcdC8vIENhc2UgIzFhIC0gTm8gY2FjaGUsIHNvIG1DYWNoZU91cHV0IGlzIGVtcHR5LCBjYWNoZUtleSA9IGN1cnJlbnQgbWV0YW1vZGVsIEVUYWdzXG5cdFx0XHRcdGlmIChtQ2FjaGVPdXRwdXQpIHtcblx0XHRcdFx0XHQvLyBDYXNlICMyIC0gQ2FjaGUgZW50cnkgZm91bmQsIGNoZWNrIGlmIGl0J3Mgc3RpbGwgdmFsaWRcblx0XHRcdFx0XHRjb25zdCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRjb25zdCBtQ2FjaGVkRVRhZ3MgPSBKU09OLnBhcnNlKG1DYWNoZU91dHB1dC5jYWNoZWRFVGFncyk7XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdFx0T2JqZWN0LmtleXMobUNhY2hlZEVUYWdzKS5tYXAoZnVuY3Rpb24oc1VybDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdC8vIENoZWNrIHZhbGlkaXR5IG9mIGV2ZXJ5IHNpbmdsZSBVcmwgdGhhdCdzIGluIHRoZSBGRSBDYWNoZSBvYmplY3Rcblx0XHRcdFx0XHRcdFx0aWYgKG1DYWNoZWRFVGFnc1tzVXJsXSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtTWV0YU1vZGVsRVRhZ3Nbc1VybF0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJhIC0gU2FtZSBudW1iZXIgb2YgRVRhZ3MgaW4gdGhlIGNhY2hlIGFuZCBpbiB0aGUgbWV0YWRhdGFcblx0XHRcdFx0XHRcdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbUNhY2hlZEVUYWdzW3NVcmxdID09PSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJiIC0gTm8gRVRhZyBpbiB0aGUgY2FjaGUgZm9yIHRoYXQgVVJMLCBjYWNoZWRFVGFncyB3YXMgZW5oYW5jZWRcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBnZXRNZXRhZGF0YUVUYWcoc1VybCwgbUNhY2hlZEVUYWdzW3NVcmxdLCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMnogLSBMYXN0IFRlbXBsYXRpbmcgYWRkZWQgYW4gVVJMIHdpdGhvdXQgRVRhZ1xuXHRcdFx0XHRcdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1DYWNoZWRFVGFnc1tzVXJsXSA9PT0gbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCkudGhlbihmdW5jdGlvbihhVmFsaWRFVGFnczogYW55W10pIHtcblx0XHRcdFx0XHRcdGJDYWNoZU5lZWRVcGRhdGUgPSBhVmFsaWRFVGFncy5pbmRleE9mKGZhbHNlKSA+PSAwO1xuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmEgLSBTYW1lIG51bWJlciBvZiBFVGFncyBhbmQgYWxsIHZhbGlkIC0+IHdlIHJldHVybiB0aGUgdmlld0NhY2hlS2V5XG5cdFx0XHRcdFx0XHQvLyBDYXNlICMyYiAtIERpZmZlcmVudCBudW1iZXIgb2YgRVRhZ3MgYW5kIHN0aWxsIGFsbCB2YWxpZCAtPiB3ZSByZXR1cm4gdGhlIHZpZXdDYWNoZUtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmMgLSBTYW1lIG51bWJlciBvZiBFVGFncyBidXQgZGlmZmVyZW50IHZhbHVlcywgbWFpbiBzZXJ2aWNlIEV0YWcgaGFzIGNoYW5nZWQsIHVzZSB0aGF0IGFzIGNhY2hlIGtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmQgLSBEaWZmZXJlbnQgbnVtYmVyIG9mIEVUYWdzIGJ1dCBkaWZmZXJlbnQgdmFsdWUsIG1haW4gc2VydmljZSBFdGFnIG9yIGxpbmtlZCBzZXJ2aWNlIEV0YWcgaGFzIGNoYW5nZWQsIG5ldyBFVGFncyBzaG91bGQgYmUgdXNlZCBhcyBjYWNoZUtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMnogLSBDYWNoZSBoYXMgYW4gaW52YWxpZCBFdGFnIC0gaWYgdGhlcmUgaXMgYW4gRXRhZyBwcm92aWRlZCBmcm9tIE1ldGFNb2RlbCB1c2UgaXQgYXMgY2FjaGVLZXlcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXMobVVwZGF0ZWRNZXRhTW9kZWxFVGFncykuc29tZShmdW5jdGlvbihzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIW1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXQgbGVhc3Qgb25lIG9mIHRoZSBNZXRhTW9kZWwgVVJMcyBkb2Vzbid0IHByb3ZpZGUgYW4gRVRhZywgc28gbm8gY2FjaGluZ1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiQ2FjaGVOZWVkVXBkYXRlID8gSlNPTi5zdHJpbmdpZnkobVVwZGF0ZWRNZXRhTW9kZWxFVGFncykgOiBtQ2FjaGVPdXRwdXQudmlld0NhY2hlS2V5O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKG1NZXRhTW9kZWxFVGFncykuc29tZShmdW5jdGlvbihzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAhbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIENoZWNrIGlmIGNhY2hlIGNhbiBiZSB1c2VkIChhbGwgdGhlIG1ldGFkYXRhIGFuZCBhbm5vdGF0aW9ucyBoYXZlIHRvIHByb3ZpZGUgYXQgbGVhc3QgYSBFVGFnIG9yIGEgTGFzdC1Nb2RpZmllZCBoZWFkZXIpXG5cdFx0XHRcdFx0Ly8gQ2FzZSAjMS1iIC0gTm8gQ2FjaGUsIG1DYWNoZU91cHV0IGlzIGVtcHR5LCBidXQgbWV0YW1vZGVsIGV0YWdzIGNhbm5vdCBiZSB1c2VkLCBzbyBubyBjYWNoaW5nXG5cdFx0XHRcdFx0YkNhY2hlTmVlZFVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0c1VwZGF0ZWRDYWNoZUtleSA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNVcGRhdGVkQ2FjaGVLZXk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0Ly8gRG9uJ3QgdXNlIHZpZXcgY2FjaGUgaW4gY2FzZSBvZiBpc3N1ZXMgd2l0aCB0aGUgTFJVIGNhY2hlXG5cdFx0XHRcdGJDYWNoZU5lZWRVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoc0NhY2hlS2V5OiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gPSBiQ2FjaGVOZWVkVXBkYXRlO1xuXHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0fSk7XG5cdH1cblx0aW52YWxpZGF0ZUlmTmVlZGVkKHNDYWNoZUtleXM6IHN0cmluZywgc0NhY2hlSWRlbnRpZmllcjogc3RyaW5nKSB7XG5cdFx0Ly8gQ2hlY2sgRkUgY2FjaGUgYWZ0ZXIgWE1MIHZpZXcgaXMgcHJvY2Vzc2VkIGNvbXBsZXRlbHlcblx0XHRjb25zdCBzRGF0YVNvdXJjZUVUYWdzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRFVGFncygpKTtcblx0XHRpZiAodGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gfHwgKHNDYWNoZUtleXMgJiYgc0NhY2hlS2V5cyAhPT0gc0RhdGFTb3VyY2VFVGFncykpIHtcblx0XHRcdC8vIFNvbWV0aGluZyBpbiB0aGUgc291cmNlcyBhbmQvb3IgaXRzIEVUYWdzIGNoYW5nZWQgLT4gdXBkYXRlIHRoZSBGRSBjYWNoZVxuXHRcdFx0Y29uc3QgbUNhY2hlS2V5czogYW55ID0ge307XG5cdFx0XHQvLyBOZXcgRVRhZ3MgdGhhdCBuZWVkIHRvIGJlIHZlcmlmaWVkLCBtYXkgZGlmZmVyIGZyb20gdGhlIG9uZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSB2aWV3XG5cdFx0XHRtQ2FjaGVLZXlzLmNhY2hlZEVUYWdzID0gc0RhdGFTb3VyY2VFVGFncztcblx0XHRcdC8vIE9sZCBFVGFncyB0aGF0IGFyZSB1c2VkIGZvciB0aGUgeG1sIHZpZXcgY2FjaGUgYXMga2V5XG5cdFx0XHRtQ2FjaGVLZXlzLnZpZXdDYWNoZUtleSA9IHNDYWNoZUtleXM7XG5cdFx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLnNldChzQ2FjaGVJZGVudGlmaWVyLCBtQ2FjaGVLZXlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXHRnZXRFVGFncygpIHtcblx0XHRjb25zdCBtTWV0YU1vZGVsRVRhZ3MgPSAodGhpcy5vTWV0YU1vZGVsIGFzIGFueSkuZ2V0RVRhZ3MoKTtcblx0XHQvLyBFVGFncyBmcm9tIFVJNSBhcmUgZWl0aGVyIGEgRGF0ZSBvciBhIHN0cmluZywgbGV0J3MgcmF0aW9uYWxpemUgdGhhdFxuXHRcdE9iamVjdC5rZXlzKG1NZXRhTW9kZWxFVGFncykuZm9yRWFjaChmdW5jdGlvbihzTWV0YU1vZGVsS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChtTWV0YU1vZGVsRVRhZ3Nbc01ldGFNb2RlbEtleV0gaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdC8vIE1ldGFNb2RlbCBjb250YWlucyBhIExhc3QtTW9kaWZpZWQgdGltZXN0YW1wIGZvciB0aGUgVVJMXG5cdFx0XHRcdG1NZXRhTW9kZWxFVGFnc1tzTWV0YU1vZGVsS2V5XSA9IG1NZXRhTW9kZWxFVGFnc1tzTWV0YU1vZGVsS2V5XS50b0lTT1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gYWRkIGFsc28gdGhlIG1hbmlmZXN0IGhhc2ggYXMgVUk1IG9ubHkgY29uc2lkZXJzIHRoZSByb290IGNvbXBvbmVudCBoYXNoXG5cdFx0Y29uc3Qgb01hbmlmZXN0Q29udGVudDogYW55ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCk7XG5cdFx0Y29uc3Qgc01hbmlmZXN0SGFzaCA9IGhhc2goXG5cdFx0XHRKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdHNhcEFwcDogb01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0sXG5cdFx0XHRcdHZpZXdEYXRhOiAodGhpcy5vQ29tcG9uZW50IGFzIGFueSkuZ2V0Vmlld0RhdGEoKVxuXHRcdFx0fSlcblx0XHQpO1xuXHRcdG1NZXRhTW9kZWxFVGFnc1tcIm1hbmlmZXN0XCJdID0gc01hbmlmZXN0SGFzaDtcblx0XHRyZXR1cm4gbU1ldGFNb2RlbEVUYWdzO1xuXHR9XG5cdGdldEludGVyZmFjZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbmNsYXNzIENhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8Q2FjaGVIYW5kbGVyU2VydmljZVNldHRpbmdzPiB7XG5cdF9vSW5zdGFuY2VSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgQ2FjaGVIYW5kbGVyU2VydmljZSB8IG51bGw+ID0ge307XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Q2FjaGVIYW5kbGVyU2VydmljZVNldHRpbmdzPikge1xuXHRcdGNvbnN0IHNNZXRhTW9kZWxJZCA9IG9TZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5tZXRhTW9kZWwuZ2V0SWQoKTtcblx0XHRsZXQgY2FjaGVIYW5kbGVySW5zdGFuY2UgPSB0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtzTWV0YU1vZGVsSWRdO1xuXHRcdGlmICghY2FjaGVIYW5kbGVySW5zdGFuY2UpIHtcblx0XHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W3NNZXRhTW9kZWxJZF0gPSBjYWNoZUhhbmRsZXJJbnN0YW5jZSA9IG5ldyBDYWNoZUhhbmRsZXJTZXJ2aWNlKFxuXHRcdFx0XHRPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGZhY3Rvcnk6IHRoaXMsXG5cdFx0XHRcdFx0XHRzY29wZU9iamVjdDogbnVsbCxcblx0XHRcdFx0XHRcdHNjb3BlVHlwZTogXCJzZXJ2aWNlXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9TZXJ2aWNlQ29udGV4dFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZUhhbmRsZXJJbnN0YW5jZS5pbml0UHJvbWlzZVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fb0luc3RhbmNlUmVnaXN0cnlbc01ldGFNb2RlbElkXSBhcyBDYWNoZUhhbmRsZXJTZXJ2aWNlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZTogYW55KSA9PiB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgZXJyb3IgZGVsZXRlIHRoZSBnbG9iYWwgaW5zdGFuY2U7XG5cdFx0XHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W3NNZXRhTW9kZWxJZF0gPSBudWxsO1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fSk7XG5cdH1cblx0Z2V0SW5zdGFuY2Uob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0XHRyZXR1cm4gdGhpcy5fb0luc3RhbmNlUmVnaXN0cnlbb01ldGFNb2RlbC5nZXRJZCgpXTtcblx0fVxuXHRyZW1vdmVHbG9iYWxJbnN0YW5jZShvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W29NZXRhTW9kZWwuZ2V0SWQoKV0gPSBudWxsO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5O1xuIl19
|
|
233
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5LnRzIl0sIm5hbWVzIjpbImdldE1ldGFkYXRhRVRhZyIsInNVcmwiLCJzRVRhZyIsIm1VcGRhdGVkTWV0YU1vZGVsRVRhZ3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsImpRdWVyeSIsImFqYXgiLCJtZXRob2QiLCJkb25lIiwib1Jlc3BvbnNlIiwic1RleHRTdGF0dXMiLCJqcVhIUiIsImdldFJlc3BvbnNlSGVhZGVyIiwiZmFpbCIsIkNhY2hlSGFuZGxlclNlcnZpY2UiLCJpbml0Iiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwib0ZhY3RvcnkiLCJmYWN0b3J5IiwibVNldHRpbmdzIiwic2V0dGluZ3MiLCJtZXRhTW9kZWwiLCJFcnJvciIsIm9NZXRhTW9kZWwiLCJvQXBwQ29tcG9uZW50IiwiYXBwQ29tcG9uZW50Iiwib0NvbXBvbmVudCIsImNvbXBvbmVudCIsImluaXRQcm9taXNlIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJ0aGVuIiwibUNhY2hlTmVlZHNJbnZhbGlkYXRlIiwiZXhpdCIsInJlbW92ZUdsb2JhbEluc3RhbmNlIiwidmFsaWRhdGVDYWNoZUtleSIsInNDYWNoZUlkZW50aWZpZXIiLCJiQ2FjaGVOZWVkVXBkYXRlIiwiQ2FjaGVNYW5hZ2VyIiwiZ2V0IiwibUNhY2hlT3V0cHV0IiwibU1ldGFNb2RlbEVUYWdzIiwiZ2V0RVRhZ3MiLCJzVXBkYXRlZENhY2hlS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm1DYWNoZWRFVGFncyIsInBhcnNlIiwiY2FjaGVkRVRhZ3MiLCJhbGwiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwiYVZhbGlkRVRhZ3MiLCJpbmRleE9mIiwic29tZSIsInZpZXdDYWNoZUtleSIsImNhdGNoIiwic0NhY2hlS2V5IiwiaW52YWxpZGF0ZUlmTmVlZGVkIiwic0NhY2hlS2V5cyIsInNEYXRhU291cmNlRVRhZ3MiLCJtQ2FjaGVLZXlzIiwic2V0IiwiZm9yRWFjaCIsInNNZXRhTW9kZWxLZXkiLCJEYXRlIiwidG9JU09TdHJpbmciLCJvTWFuaWZlc3RDb250ZW50IiwiZ2V0TWFuaWZlc3QiLCJzTWFuaWZlc3RIYXNoIiwiaGFzaCIsInNhcEFwcCIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJnZXRJbnRlcmZhY2UiLCJTZXJ2aWNlIiwiQ2FjaGVIYW5kbGVyU2VydmljZUZhY3RvcnkiLCJfb0luc3RhbmNlUmVnaXN0cnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsInNNZXRhTW9kZWxJZCIsImdldElkIiwiY2FjaGVIYW5kbGVySW5zdGFuY2UiLCJhc3NpZ24iLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsImUiLCJnZXRJbnN0YW5jZSIsIlNlcnZpY2VGYWN0b3J5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBT0EsV0FBU0EsZUFBVCxDQUF5QkMsSUFBekIsRUFBb0NDLEtBQXBDLEVBQWdEQyxzQkFBaEQsRUFBNkU7QUFDNUUsV0FBTyxJQUFJQyxPQUFKLENBQVksVUFBVUMsT0FBVixFQUFtQjtBQUNyQztBQUNDQyxNQUFBQSxNQUFELENBQ0VDLElBREYsQ0FDT04sSUFEUCxFQUNhO0FBQUVPLFFBQUFBLE1BQU0sRUFBRTtBQUFWLE9BRGIsRUFFRUMsSUFGRixDQUVPLFVBQVVDLFNBQVYsRUFBMEJDLFdBQTFCLEVBQTRDQyxLQUE1QyxFQUF3RDtBQUM3RDtBQUNBO0FBQ0E7QUFDQVQsUUFBQUEsc0JBQXNCLENBQUNGLElBQUQsQ0FBdEIsR0FBK0JXLEtBQUssQ0FBQ0MsaUJBQU4sQ0FBd0IsTUFBeEIsS0FBbUNELEtBQUssQ0FBQ0MsaUJBQU4sQ0FBd0IsZUFBeEIsQ0FBbEU7QUFDQVIsUUFBQUEsT0FBTyxDQUFDSCxLQUFLLEtBQUtDLHNCQUFzQixDQUFDRixJQUFELENBQWpDLENBQVA7QUFDQSxPQVJGLEVBU0VhLElBVEYsQ0FTTyxZQUFZO0FBQ2pCO0FBQ0FYLFFBQUFBLHNCQUFzQixDQUFDRixJQUFELENBQXRCLEdB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QUNBLEs7O1lBQ0RoRCxvQixHQUFBLDhCQUFxQlYsVUFBckIsRUFBaUQ7QUFDaEQsV0FBS3NELGtCQUFMLENBQXdCdEQsVUFBVSxDQUFDMEQsS0FBWCxFQUF4QixJQUE4QyxJQUE5QztBQUNBLEs7OztJQWpDdUNPLGM7O1NBb0MxQlosMEIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBoYXNoIGZyb20gXCJzYXAvYmFzZS9zdHJpbmdzL2hhc2hcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ2FjaGVNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9jYWNoZS9DYWNoZU1hbmFnZXJcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgVUlDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL1VJQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuXG5mdW5jdGlvbiBnZXRNZXRhZGF0YUVUYWcoc1VybDogYW55LCBzRVRhZzogYW55LCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzOiBhbnkpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0Ly8gVGhlcmUgaXMgYW4gVXJsIGluIHRoZSBGRSBjYWNoZSwgdGhhdCdzIG5vdCBpbiB0aGUgTWV0YU1vZGVsIHlldCAtPiB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBFVGFnXG5cdFx0KGpRdWVyeSBhcyBhbnkpXG5cdFx0XHQuYWpheChzVXJsLCB7IG1ldGhvZDogXCJHRVRcIiB9KVxuXHRcdFx0LmRvbmUoZnVuY3Rpb24gKG9SZXNwb25zZTogYW55LCBzVGV4dFN0YXR1czogYW55LCBqcVhIUjogYW55KSB7XG5cdFx0XHRcdC8vIEVUYWcgaXMgbm90IHRoZSBzYW1lIC0+IGludmFsaWRcblx0XHRcdFx0Ly8gRVRhZyBpcyB0aGUgc2FtZSAtPiB2YWxpZFxuXHRcdFx0XHQvLyBJZiBFVGFnIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSB1c2UgTGFzdC1Nb2RpZmllZFxuXHRcdFx0XHRtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJFVGFnXCIpIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKFwiTGFzdC1Nb2RpZmllZFwiKTtcblx0XHRcdFx0cmVzb2x2ZShzRVRhZyA9PT0gbVVwZGF0ZWRNZXRhTW9kZWxFVGFnc1tzVXJsXSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZhaWwoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQvLyBDYXNlIDJ6IC0gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgbWFwIHNvIHRoYXQgd2UgaW52YWxpZGF0ZSB0aGUgY2FjaGVcblx0XHRcdFx0bVVwZGF0ZWRNZXRhTW9kZWxFVGFnc1tzVXJsXSA9IFwiXCI7XG5cdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0fSk7XG5cdH0pO1xufVxudHlwZSBDYWNoZUhhbmRsZXJTZXJ2aWNlU2V0dGluZ3MgPSB7XG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG59O1xuXG5leHBvcnQgY2xhc3MgQ2FjaGVIYW5kbGVyU2VydmljZSBleHRlbmRzIFNlcnZpY2U8Q2FjaGVIYW5kbGVyU2VydmljZVNldHRpbmdzPiB7XG5cdHJlc29sdmVGbjogYW55O1xuXHRyZWplY3RGbjogYW55O1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8YW55PjtcblxuXHRvRmFjdG9yeSE6IENhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5O1xuXHRvTWV0YU1vZGVsITogT0RhdGFNZXRhTW9kZWw7XG5cdG9BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cdG9Db21wb25lbnQhOiBVSUNvbXBvbmVudDtcblx0bUNhY2hlTmVlZHNJbnZhbGlkYXRlOiBhbnk7XG5cblx0aW5pdCgpIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdHRoaXMub0ZhY3RvcnkgPSBvQ29udGV4dC5mYWN0b3J5O1xuXHRcdGNvbnN0IG1TZXR0aW5ncyA9IG9Db250ZXh0LnNldHRpbmdzO1xuXHRcdGlmICghbVNldHRpbmdzLm1ldGFNb2RlbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYSBgbWV0YU1vZGVsYCBwcm9wZXJ0eSBpcyBleHBlY3RlZCB3aGVuIGluc3RhbnRpYXRpbmcgdGhlIENhY2hlSGFuZGxlclNlcnZpY2VcIik7XG5cdFx0fVxuXHRcdHRoaXMub01ldGFNb2RlbCA9IG1TZXR0aW5ncy5tZXRhTW9kZWw7XG5cdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gbVNldHRpbmdzLmFwcENvbXBvbmVudDtcblx0XHR0aGlzLm9Db21wb25lbnQgPSBtU2V0dGluZ3MuY29tcG9uZW50O1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSAodGhpcy5vTWV0YU1vZGVsIGFzIGFueSkuZmV0Y2hFbnRpdHlDb250YWluZXIoKS50aGVuKCgpID0+IHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0pO1xuXHRcdHRoaXMubUNhY2hlTmVlZHNJbnZhbGlkYXRlID0ge307XG5cdH1cblx0ZXhpdCgpIHtcblx0XHQvLyBEZXJlZ2lzdGVyIGdsb2JhbCBpbnN0YW5jZVxuXHRcdHRoaXMub0ZhY3RvcnkucmVtb3ZlR2xvYmFsSW5zdGFuY2UodGhpcy5vTWV0YU1vZGVsKTtcblx0fVxuXHR2YWxpZGF0ZUNhY2hlS2V5KHNDYWNoZUlkZW50aWZpZXI6IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Ly8gS2VlcCB0cmFjayBpZiB0aGUgY2FjaGUgd2lsbCBhbnl3YXkgbmVlZCB0byBiZSB1cGRhdGVkXG5cdFx0bGV0IGJDYWNoZU5lZWRVcGRhdGUgPSB0cnVlO1xuXHRcdHJldHVybiBDYWNoZU1hbmFnZXIuZ2V0KHNDYWNoZUlkZW50aWZpZXIpXG5cdFx0XHQudGhlbigobUNhY2hlT3V0cHV0OiBhbnkpID0+IHtcblx0XHRcdFx0Ly8gV2UgcHJvdmlkZSBhIGRlZmF1bHQga2V5IHNvIHRoYXQgYW4geG1sIHZpZXcgY2FjaGUgaXMgd3JpdHRlblxuXHRcdFx0XHRjb25zdCBtTWV0YU1vZGVsRVRhZ3MgPSB0aGlzLmdldEVUYWdzKCk7XG5cdFx0XHRcdGxldCBzVXBkYXRlZENhY2hlS2V5OiBzdHJpbmcgfCBudWxsID0gSlNPTi5zdHJpbmdpZnkobU1ldGFNb2RlbEVUYWdzKTtcblx0XHRcdFx0Ly8gQ2FzZSAjMWEgLSBObyBjYWNoZSwgc28gbUNhY2hlT3VwdXQgaXMgZW1wdHksIGNhY2hlS2V5ID0gY3VycmVudCBtZXRhbW9kZWwgRVRhZ3Ncblx0XHRcdFx0aWYgKG1DYWNoZU91dHB1dCkge1xuXHRcdFx0XHRcdC8vIENhc2UgIzIgLSBDYWNoZSBlbnRyeSBmb3VuZCwgY2hlY2sgaWYgaXQncyBzdGlsbCB2YWxpZFxuXHRcdFx0XHRcdGNvbnN0IG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3M6IGFueSA9IHt9O1xuXHRcdFx0XHRcdGNvbnN0IG1DYWNoZWRFVGFncyA9IEpTT04ucGFyc2UobUNhY2hlT3V0cHV0LmNhY2hlZEVUYWdzKTtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhtQ2FjaGVkRVRhZ3MpLm1hcChmdW5jdGlvbiAoc1VybDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdC8vIENoZWNrIHZhbGlkaXR5IG9mIGV2ZXJ5IHNpbmdsZSBVcmwgdGhhdCdzIGluIHRoZSBGRSBDYWNoZSBvYmplY3Rcblx0XHRcdFx0XHRcdFx0aWYgKG1DYWNoZWRFVGFnc1tzVXJsXSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtTWV0YU1vZGVsRVRhZ3Nbc1VybF0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJhIC0gU2FtZSBudW1iZXIgb2YgRVRhZ3MgaW4gdGhlIGNhY2hlIGFuZCBpbiB0aGUgbWV0YWRhdGFcblx0XHRcdFx0XHRcdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbUNhY2hlZEVUYWdzW3NVcmxdID09PSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJiIC0gTm8gRVRhZyBpbiB0aGUgY2FjaGUgZm9yIHRoYXQgVVJMLCBjYWNoZWRFVGFncyB3YXMgZW5oYW5jZWRcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBnZXRNZXRhZGF0YUVUYWcoc1VybCwgbUNhY2hlZEVUYWdzW3NVcmxdLCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMnogLSBMYXN0IFRlbXBsYXRpbmcgYWRkZWQgYW4gVVJMIHdpdGhvdXQgRVRhZ1xuXHRcdFx0XHRcdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1DYWNoZWRFVGFnc1tzVXJsXSA9PT0gbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCkudGhlbihmdW5jdGlvbiAoYVZhbGlkRVRhZ3M6IGFueVtdKSB7XG5cdFx0XHRcdFx0XHRiQ2FjaGVOZWVkVXBkYXRlID0gYVZhbGlkRVRhZ3MuaW5kZXhPZihmYWxzZSkgPj0gMDtcblx0XHRcdFx0XHRcdC8vIENhc2UgIzJhIC0gU2FtZSBudW1iZXIgb2YgRVRhZ3MgYW5kIGFsbCB2YWxpZCAtPiB3ZSByZXR1cm4gdGhlIHZpZXdDYWNoZUtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmIgLSBEaWZmZXJlbnQgbnVtYmVyIG9mIEVUYWdzIGFuZCBzdGlsbCBhbGwgdmFsaWQgLT4gd2UgcmV0dXJuIHRoZSB2aWV3Q2FjaGVLZXlcblx0XHRcdFx0XHRcdC8vIENhc2UgIzJjIC0gU2FtZSBudW1iZXIgb2YgRVRhZ3MgYnV0IGRpZmZlcmVudCB2YWx1ZXMsIG1haW4gc2VydmljZSBFdGFnIGhhcyBjaGFuZ2VkLCB1c2UgdGhhdCBhcyBjYWNoZSBrZXlcblx0XHRcdFx0XHRcdC8vIENhc2UgIzJkIC0gRGlmZmVyZW50IG51bWJlciBvZiBFVGFncyBidXQgZGlmZmVyZW50IHZhbHVlLCBtYWluIHNlcnZpY2UgRXRhZyBvciBsaW5rZWQgc2VydmljZSBFdGFnIGhhcyBjaGFuZ2VkLCBuZXcgRVRhZ3Mgc2hvdWxkIGJlIHVzZWQgYXMgY2FjaGVLZXlcblx0XHRcdFx0XHRcdC8vIENhc2UgIzJ6IC0gQ2FjaGUgaGFzIGFuIGludmFsaWQgRXRhZyAtIGlmIHRoZXJlIGlzIGFuIEV0YWcgcHJvdmlkZWQgZnJvbSBNZXRhTW9kZWwgdXNlIGl0IGFzIGNhY2hlS2V5XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3MpLnNvbWUoZnVuY3Rpb24gKHNVcmw6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAhbVVwZGF0ZWRNZXRhTW9kZWxFVGFnc1tzVXJsXTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHQvLyBBdCBsZWFzdCBvbmUgb2YgdGhlIE1ldGFNb2RlbCBVUkxzIGRvZXNuJ3QgcHJvdmlkZSBhbiBFVGFnLCBzbyBubyBjYWNoaW5nXG5cdFx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJDYWNoZU5lZWRVcGRhdGUgPyBKU09OLnN0cmluZ2lmeShtVXBkYXRlZE1ldGFNb2RlbEVUYWdzKSA6IG1DYWNoZU91dHB1dC52aWV3Q2FjaGVLZXk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0T2JqZWN0LmtleXMobU1ldGFNb2RlbEVUYWdzKS5zb21lKGZ1bmN0aW9uIChzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAhbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIENoZWNrIGlmIGNhY2hlIGNhbiBiZSB1c2VkIChhbGwgdGhlIG1ldGFkYXRhIGFuZCBhbm5vdGF0aW9ucyBoYXZlIHRvIHByb3ZpZGUgYXQgbGVhc3QgYSBFVGFnIG9yIGEgTGFzdC1Nb2RpZmllZCBoZWFkZXIpXG5cdFx0XHRcdFx0Ly8gQ2FzZSAjMS1iIC0gTm8gQ2FjaGUsIG1DYWNoZU91cHV0IGlzIGVtcHR5LCBidXQgbWV0YW1vZGVsIGV0YWdzIGNhbm5vdCBiZSB1c2VkLCBzbyBubyBjYWNoaW5nXG5cdFx0XHRcdFx0YkNhY2hlTmVlZFVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0c1VwZGF0ZWRDYWNoZUtleSA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNVcGRhdGVkQ2FjaGVLZXk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0Ly8gRG9uJ3QgdXNlIHZpZXcgY2FjaGUgaW4gY2FzZSBvZiBpc3N1ZXMgd2l0aCB0aGUgTFJVIGNhY2hlXG5cdFx0XHRcdGJDYWNoZU5lZWRVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoc0NhY2hlS2V5OiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gPSBiQ2FjaGVOZWVkVXBkYXRlO1xuXHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0fSk7XG5cdH1cblx0aW52YWxpZGF0ZUlmTmVlZGVkKHNDYWNoZUtleXM6IHN0cmluZywgc0NhY2hlSWRlbnRpZmllcjogc3RyaW5nKSB7XG5cdFx0Ly8gQ2hlY2sgRkUgY2FjaGUgYWZ0ZXIgWE1MIHZpZXcgaXMgcHJvY2Vzc2VkIGNvbXBsZXRlbHlcblx0XHRjb25zdCBzRGF0YVNvdXJjZUVUYWdzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRFVGFncygpKTtcblx0XHRpZiAodGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gfHwgKHNDYWNoZUtleXMgJiYgc0NhY2hlS2V5cyAhPT0gc0RhdGFTb3VyY2VFVGFncykpIHtcblx0XHRcdC8vIFNvbWV0aGluZyBpbiB0aGUgc291cmNlcyBhbmQvb3IgaXRzIEVUYWdzIGNoYW5nZWQgLT4gdXBkYXRlIHRoZSBGRSBjYWNoZVxuXHRcdFx0Y29uc3QgbUNhY2hlS2V5czogYW55ID0ge307XG5cdFx0XHQvLyBOZXcgRVRhZ3MgdGhhdCBuZWVkIHRvIGJlIHZlcmlmaWVkLCBtYXkgZGlmZmVyIGZyb20gdGhlIG9uZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSB2aWV3XG5cdFx0XHRtQ2FjaGVLZXlzLmNhY2hlZEVUYWdzID0gc0RhdGFTb3VyY2VFVGFncztcblx0XHRcdC8vIE9sZCBFVGFncyB0aGF0IGFyZSB1c2VkIGZvciB0aGUgeG1sIHZpZXcgY2FjaGUgYXMga2V5XG5cdFx0XHRtQ2FjaGVLZXlzLnZpZXdDYWNoZUtleSA9IHNDYWNoZUtleXM7XG5cdFx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLnNldChzQ2FjaGVJZGVudGlmaWVyLCBtQ2FjaGVLZXlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXHRnZXRFVGFncygpIHtcblx0XHRjb25zdCBtTWV0YU1vZGVsRVRhZ3MgPSAodGhpcy5vTWV0YU1vZGVsIGFzIGFueSkuZ2V0RVRhZ3MoKTtcblx0XHQvLyBFVGFncyBmcm9tIFVJNSBhcmUgZWl0aGVyIGEgRGF0ZSBvciBhIHN0cmluZywgbGV0J3MgcmF0aW9uYWxpemUgdGhhdFxuXHRcdE9iamVjdC5rZXlzKG1NZXRhTW9kZWxFVGFncykuZm9yRWFjaChmdW5jdGlvbiAoc01ldGFNb2RlbEtleTogc3RyaW5nKSB7XG5cdFx0XHRpZiAobU1ldGFNb2RlbEVUYWdzW3NNZXRhTW9kZWxLZXldIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHQvLyBNZXRhTW9kZWwgY29udGFpbnMgYSBMYXN0LU1vZGlmaWVkIHRpbWVzdGFtcCBmb3IgdGhlIFVSTFxuXHRcdFx0XHRtTWV0YU1vZGVsRVRhZ3Nbc01ldGFNb2RlbEtleV0gPSBtTWV0YU1vZGVsRVRhZ3Nbc01ldGFNb2RlbEtleV0udG9JU09TdHJpbmcoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIGFkZCBhbHNvIHRoZSBtYW5pZmVzdCBoYXNoIGFzIFVJNSBvbmx5IGNvbnNpZGVycyB0aGUgcm9vdCBjb21wb25lbnQgaGFzaFxuXHRcdGNvbnN0IG9NYW5pZmVzdENvbnRlbnQ6IGFueSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpO1xuXHRcdGNvbnN0IHNNYW5pZmVzdEhhc2ggPSBoYXNoKFxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRzYXBBcHA6IG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdLFxuXHRcdFx0XHR2aWV3RGF0YTogKHRoaXMub0NvbXBvbmVudCBhcyBhbnkpLmdldFZpZXdEYXRhKClcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRtTWV0YU1vZGVsRVRhZ3NbXCJtYW5pZmVzdFwiXSA9IHNNYW5pZmVzdEhhc2g7XG5cdFx0cmV0dXJuIG1NZXRhTW9kZWxFVGFncztcblx0fVxuXHRnZXRJbnRlcmZhY2UoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBDYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncz4ge1xuXHRfb0luc3RhbmNlUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIENhY2hlSGFuZGxlclNlcnZpY2UgfCBudWxsPiA9IHt9O1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncz4pIHtcblx0XHRjb25zdCBzTWV0YU1vZGVsSWQgPSBvU2VydmljZUNvbnRleHQuc2V0dGluZ3MubWV0YU1vZGVsLmdldElkKCk7XG5cdFx0bGV0IGNhY2hlSGFuZGxlckluc3RhbmNlID0gdGhpcy5fb0luc3RhbmNlUmVnaXN0cnlbc01ldGFNb2RlbElkXTtcblx0XHRpZiAoIWNhY2hlSGFuZGxlckluc3RhbmNlKSB7XG5cdFx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtzTWV0YU1vZGVsSWRdID0gY2FjaGVIYW5kbGVySW5zdGFuY2UgPSBuZXcgQ2FjaGVIYW5kbGVyU2VydmljZShcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRmYWN0b3J5OiB0aGlzLFxuXHRcdFx0XHRcdFx0c2NvcGVPYmplY3Q6IG51bGwsXG5cdFx0XHRcdFx0XHRzY29wZVR5cGU6IFwic2VydmljZVwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvU2VydmljZUNvbnRleHRcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2FjaGVIYW5kbGVySW5zdGFuY2UuaW5pdFByb21pc2Vcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W3NNZXRhTW9kZWxJZF0gYXMgQ2FjaGVIYW5kbGVyU2VydmljZTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGU6IGFueSkgPT4ge1xuXHRcdFx0XHQvLyBJbiBjYXNlIG9mIGVycm9yIGRlbGV0ZSB0aGUgZ2xvYmFsIGluc3RhbmNlO1xuXHRcdFx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtzTWV0YU1vZGVsSWRdID0gbnVsbDtcblx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdH0pO1xuXHR9XG5cdGdldEluc3RhbmNlKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W29NZXRhTW9kZWwuZ2V0SWQoKV07XG5cdH1cblx0cmVtb3ZlR2xvYmFsSW5zdGFuY2Uob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtvTWV0YU1vZGVsLmdldElkKCldID0gbnVsbDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeTtcbiJdfQ==
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
+
import hash from "sap/base/strings/hash";
|
|
2
|
+
import type AppComponent from "sap/fe/core/AppComponent";
|
|
3
|
+
import CacheManager from "sap/ui/core/cache/CacheManager";
|
|
1
4
|
import Service from "sap/ui/core/service/Service";
|
|
2
5
|
import ServiceFactory from "sap/ui/core/service/ServiceFactory";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import AppComponent from "sap/fe/core/AppComponent";
|
|
7
|
-
import UIComponent from "sap/ui/core/UIComponent";
|
|
8
|
-
import { ServiceContext } from "types/extension_types";
|
|
6
|
+
import type UIComponent from "sap/ui/core/UIComponent";
|
|
7
|
+
import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
8
|
+
import type { ServiceContext } from "types/extension_types";
|
|
9
9
|
|
|
10
10
|
function getMetadataETag(sUrl: any, sETag: any, mUpdatedMetaModelETags: any) {
|
|
11
|
-
return new Promise(function(resolve) {
|
|
11
|
+
return new Promise(function (resolve) {
|
|
12
12
|
// There is an Url in the FE cache, that's not in the MetaModel yet -> we need to check the ETag
|
|
13
13
|
(jQuery as any)
|
|
14
14
|
.ajax(sUrl, { method: "GET" })
|
|
15
|
-
.done(function(oResponse: any, sTextStatus: any, jqXHR: any) {
|
|
15
|
+
.done(function (oResponse: any, sTextStatus: any, jqXHR: any) {
|
|
16
16
|
// ETag is not the same -> invalid
|
|
17
17
|
// ETag is the same -> valid
|
|
18
18
|
// If ETag is available use it, otherwise use Last-Modified
|
|
19
19
|
mUpdatedMetaModelETags[sUrl] = jqXHR.getResponseHeader("ETag") || jqXHR.getResponseHeader("Last-Modified");
|
|
20
20
|
resolve(sETag === mUpdatedMetaModelETags[sUrl]);
|
|
21
21
|
})
|
|
22
|
-
.fail(function() {
|
|
22
|
+
.fail(function () {
|
|
23
23
|
// Case 2z - Make sure we update the map so that we invalidate the cache
|
|
24
24
|
mUpdatedMetaModelETags[sUrl] = "";
|
|
25
25
|
resolve(false);
|
|
@@ -74,7 +74,7 @@ export class CacheHandlerService extends Service<CacheHandlerServiceSettings> {
|
|
|
74
74
|
const mUpdatedMetaModelETags: any = {};
|
|
75
75
|
const mCachedETags = JSON.parse(mCacheOutput.cachedETags);
|
|
76
76
|
return Promise.all(
|
|
77
|
-
Object.keys(mCachedETags).map(function(sUrl: string) {
|
|
77
|
+
Object.keys(mCachedETags).map(function (sUrl: string) {
|
|
78
78
|
// Check validity of every single Url that's in the FE Cache object
|
|
79
79
|
if (mCachedETags[sUrl]) {
|
|
80
80
|
if (mMetaModelETags[sUrl]) {
|
|
@@ -91,7 +91,7 @@ export class CacheHandlerService extends Service<CacheHandlerServiceSettings> {
|
|
|
91
91
|
return mCachedETags[sUrl] === mMetaModelETags[sUrl];
|
|
92
92
|
}
|
|
93
93
|
})
|
|
94
|
-
).then(function(aValidETags: any[]) {
|
|
94
|
+
).then(function (aValidETags: any[]) {
|
|
95
95
|
bCacheNeedUpdate = aValidETags.indexOf(false) >= 0;
|
|
96
96
|
// Case #2a - Same number of ETags and all valid -> we return the viewCacheKey
|
|
97
97
|
// Case #2b - Different number of ETags and still all valid -> we return the viewCacheKey
|
|
@@ -99,7 +99,7 @@ export class CacheHandlerService extends Service<CacheHandlerServiceSettings> {
|
|
|
99
99
|
// Case #2d - Different number of ETags but different value, main service Etag or linked service Etag has changed, new ETags should be used as cacheKey
|
|
100
100
|
// Case #2z - Cache has an invalid Etag - if there is an Etag provided from MetaModel use it as cacheKey
|
|
101
101
|
if (
|
|
102
|
-
Object.keys(mUpdatedMetaModelETags).some(function(sUrl: string) {
|
|
102
|
+
Object.keys(mUpdatedMetaModelETags).some(function (sUrl: string) {
|
|
103
103
|
return !mUpdatedMetaModelETags[sUrl];
|
|
104
104
|
})
|
|
105
105
|
) {
|
|
@@ -110,7 +110,7 @@ export class CacheHandlerService extends Service<CacheHandlerServiceSettings> {
|
|
|
110
110
|
}
|
|
111
111
|
});
|
|
112
112
|
} else if (
|
|
113
|
-
Object.keys(mMetaModelETags).some(function(sUrl: string) {
|
|
113
|
+
Object.keys(mMetaModelETags).some(function (sUrl: string) {
|
|
114
114
|
return !mMetaModelETags[sUrl];
|
|
115
115
|
})
|
|
116
116
|
) {
|
|
@@ -149,7 +149,7 @@ export class CacheHandlerService extends Service<CacheHandlerServiceSettings> {
|
|
|
149
149
|
getETags() {
|
|
150
150
|
const mMetaModelETags = (this.oMetaModel as any).getETags();
|
|
151
151
|
// ETags from UI5 are either a Date or a string, let's rationalize that
|
|
152
|
-
Object.keys(mMetaModelETags).forEach(function(sMetaModelKey: string) {
|
|
152
|
+
Object.keys(mMetaModelETags).forEach(function (sMetaModelKey: string) {
|
|
153
153
|
if (mMetaModelETags[sMetaModelKey] instanceof Date) {
|
|
154
154
|
// MetaModel contains a Last-Modified timestamp for the URL
|
|
155
155
|
mMetaModelETags[sMetaModelKey] = mMetaModelETags[sMetaModelKey].toISOString();
|
|
@@ -103,4 +103,4 @@ sap.ui.define(["sap/ui/core/Core", "sap/ui/core/service/Service", "sap/ui/core/s
|
|
|
103
103
|
|
|
104
104
|
return EnvironmentServiceFactory;
|
|
105
105
|
}, false);
|
|
106
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
106
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkVudmlyb25tZW50U2VydmljZUZhY3RvcnkudHMiXSwibmFtZXMiOlsiRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXNvbHZlRm4iLCJyZWplY3RGbiIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiT2JqZWN0IiwiYXNzaWduIiwiRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiVmVyc2lvbkluZm8iLCJsb2FkIiwidGhlbiIsInZlcnNpb25JbmZvIiwiQ2hhcnQiLCJsaWJyYXJpZXMiLCJmaW5kIiwibGliIiwibmFtZSIsIk1pY3JvQ2hhcnQiLCJVU2hlbGwiLCJzYXAiLCJ1c2hlbGwiLCJDb250YWluZXIiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJzZXR0aW5ncyIsImNhdGNoIiwicmVzb2x2ZUxpYnJhcnkiLCJsaWJyYXJ5TmFtZSIsIkNvcmUiLCJsb2FkTGlicmFyeSIsInJlcGxhY2UiLCJhc3luYyIsImUiLCJzZXRDYXBhYmlsaXRpZXMiLCJvQ2FwYWJpbGl0aWVzIiwic2V0Q2FwYWJpbGl0eSIsImNhcGFiaWxpdHkiLCJ2YWx1ZSIsImdldENhcGFiaWxpdGllcyIsImdldEludGVyZmFjZSIsIlNlcnZpY2UiLCJFbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJvU2VydmljZUNvbnRleHQiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7TUFNYUEsOEI7Ozs7Ozs7Ozs7QUFLWjtXQUVBQyxJLEdBQUEsZ0JBQU87QUFBQTs7QUFDTixXQUFLQyxXQUFMLEdBQW1CLElBQUlDLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVVDLE1BQVYsRUFBcUI7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eEUsVUFBTUMsOEJBQThCLEdBQUcsSUFBSWpELDhCQUFKLENBQW1DZ0QsZUFBbkMsQ0FBdkM7QUFDQSxhQUFPQyw4QkFBOEIsQ0FBQy9DLFdBQXRDO0FBQ0EsSzs7O0lBSnNDZ0QsYzs7U0FPekJKLHlCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVmVyc2lvbkluZm8gZnJvbSBcInNhcC91aS9WZXJzaW9uSW5mb1wiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXgsIFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudENhcGFiaWxpdGllcyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPEVudmlyb25tZW50Q2FwYWJpbGl0aWVzPiB7XG5cdHJlc29sdmVGbjogYW55O1xuXHRyZWplY3RGbjogYW55O1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8YW55Pjtcblx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMhOiBFbnZpcm9ubWVudENhcGFiaWxpdGllcztcblx0Ly8gITogbWVhbnMgdGhhdCB3ZSBrbm93IGl0IHdpbGwgYmUgYXNzaWduZWQgYmVmb3JlIHVzYWdlXG5cblx0aW5pdCgpIHtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5yZXNvbHZlRm4gPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5yZWplY3RGbiA9IHJlamVjdDtcblx0XHR9KTtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMpO1xuXHRcdFZlcnNpb25JbmZvLmxvYWQoKVxuXHRcdFx0LnRoZW4oKHZlcnNpb25JbmZvOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5DaGFydCA9ICEhdmVyc2lvbkluZm8ubGlicmFyaWVzLmZpbmQoKGxpYjogYW55KSA9PiBsaWIubmFtZSA9PT0gXCJzYXAudml6XCIpO1xuXHRcdFx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLk1pY3JvQ2hhcnQgPSAhIXZlcnNpb25JbmZvLmxpYnJhcmllcy5maW5kKFxuXHRcdFx0XHRcdChsaWI6IGFueSkgPT4gbGliLm5hbWUgPT09IFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLlVTaGVsbCA9ICEhKHNhcCAmJiBzYXAudXNoZWxsICYmIHNhcC51c2hlbGwuQ29udGFpbmVyKTtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24gPSAhIShzYXAgJiYgc2FwLnVzaGVsbCAmJiBzYXAudXNoZWxsLkNvbnRhaW5lcik7XG5cdFx0XHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBPYmplY3QuYXNzaWduKHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMsIG9Db250ZXh0LnNldHRpbmdzKTtcblx0XHRcdFx0dGhpcy5yZXNvbHZlRm4odGhpcyk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKHRoaXMucmVqZWN0Rm4pO1xuXHR9XG5cblx0cmVzb2x2ZUxpYnJhcnkobGlicmFyeU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0KENvcmUgYXMgQ29yZUV4KVxuXHRcdFx0XHRcdC5sb2FkTGlicmFyeShgJHtsaWJyYXJ5TmFtZS5yZXBsYWNlKC9cXC4vZywgXCIvXCIpfWAsIHsgYXN5bmM6IHRydWUgfSlcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBzZXRDYXBhYmlsaXRpZXMob0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMpIHtcblx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gb0NhcGFiaWxpdGllcztcblx0fVxuXG5cdHB1YmxpYyBzZXRDYXBhYmlsaXR5KGNhcGFiaWxpdHk6IGtleW9mIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzLCB2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNbY2FwYWJpbGl0eV0gPSB2YWx1ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDYXBhYmlsaXRpZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXM7XG5cdH1cblxuXHRnZXRJbnRlcmZhY2UoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBFbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8RW52aXJvbm1lbnRDYXBhYmlsaXRpZXM+IHtcblx0Y3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxFbnZpcm9ubWVudENhcGFiaWxpdGllcz4pIHtcblx0XHRjb25zdCBlbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UgPSBuZXcgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIGVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBFbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5O1xuIl19
|
|
@@ -2,8 +2,9 @@ import Core from "sap/ui/core/Core";
|
|
|
2
2
|
import Service from "sap/ui/core/service/Service";
|
|
3
3
|
import ServiceFactory from "sap/ui/core/service/ServiceFactory";
|
|
4
4
|
import VersionInfo from "sap/ui/VersionInfo";
|
|
5
|
-
import { CoreEx, ServiceContext } from "types/extension_types";
|
|
6
|
-
import {
|
|
5
|
+
import type { CoreEx, ServiceContext } from "types/extension_types";
|
|
6
|
+
import type { EnvironmentCapabilities } from "../converters/MetaModelConverter";
|
|
7
|
+
import { DefaultEnvironmentCapabilities } from "../converters/MetaModelConverter";
|
|
7
8
|
|
|
8
9
|
export class EnvironmentCapabilitiesService extends Service<EnvironmentCapabilities> {
|
|
9
10
|
resolveFn: any;
|
|
@@ -34,20 +34,21 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
36
|
* Triggers a cross-app navigation after saving the inner and the cross-app states.
|
|
37
|
+
*
|
|
37
38
|
* @private
|
|
38
39
|
* @ui5-restricted
|
|
39
|
-
* @param
|
|
40
|
-
* @param
|
|
41
|
-
* @param
|
|
40
|
+
* @param sSemanticObject Semantic object of the target app
|
|
41
|
+
* @param sActionName Action of the target app
|
|
42
|
+
* @param [vNavigationParameters] Navigation parameters as an object with key/value pairs or as a string representation of
|
|
42
43
|
* such an object. If passed as an object, the properties are not checked against the <code>IsPotentialSensitive</code> or
|
|
43
44
|
* <code>Measure</code> type.
|
|
44
|
-
* @param
|
|
45
|
-
* @param
|
|
46
|
-
* @param
|
|
47
|
-
* @param
|
|
45
|
+
* @param [oInnerAppData] Object for storing current state of the app
|
|
46
|
+
* @param [fnOnError] Callback that is called if an error occurs during navigation <br>
|
|
47
|
+
* @param [oExternalAppData] Object for storing the state which will be forwarded to the target component.
|
|
48
|
+
* @param [sNavMode] Argument is used to overwrite the FLP-configured target for opening a URL. If used, only the
|
|
48
49
|
* <code>explace</code> or <code>inplace</code> values are allowed. Any other value will lead to an exception
|
|
49
50
|
* <code>NavigationHandler.INVALID_NAV_MODE</code>.
|
|
50
|
-
|
|
51
|
+
*/
|
|
51
52
|
;
|
|
52
53
|
|
|
53
54
|
_proto.navigate = function navigate(sSemanticObject, sActionName, vNavigationParameters, oInnerAppData, fnOnError, oExternalAppData, sNavMode) {
|
|
@@ -58,11 +59,12 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
58
59
|
}
|
|
59
60
|
/**
|
|
60
61
|
* Parses the incoming URL and returns a Promise.
|
|
61
|
-
*
|
|
62
|
+
*
|
|
63
|
+
* @returns A Promise object which returns the
|
|
62
64
|
* extracted app state, the startup parameters, and the type of navigation when execution is successful,
|
|
63
65
|
* @private
|
|
64
66
|
* @ui5-restricted
|
|
65
|
-
|
|
67
|
+
*/
|
|
66
68
|
;
|
|
67
69
|
|
|
68
70
|
_proto.parseNavigation = function parseNavigation() {
|
|
@@ -71,12 +73,12 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
71
73
|
/**
|
|
72
74
|
* Processes navigation-related tasks related to beforePopoverOpens event handling for the SmartLink control and returns a Promise object.
|
|
73
75
|
*
|
|
74
|
-
* @param
|
|
76
|
+
* @param oTableEventParameters The parameters made available by the SmartTable control when the SmartLink control has been clicked,
|
|
75
77
|
* an instance of a PopOver object
|
|
76
|
-
* @param
|
|
77
|
-
* @param
|
|
78
|
+
* @param sSelectionVariant Stringified JSON object as returned, for example, from getDataSuiteFormat() of the SmartFilterBar control
|
|
79
|
+
* @param [mInnerAppData] Object containing the current state of the app. If provided, opening the Popover is deferred until the
|
|
78
80
|
* inner app data is saved in a consistent way.
|
|
79
|
-
* @returns
|
|
81
|
+
* @returns A Promise object to monitor when all actions of the function have been executed; if the execution is successful, the
|
|
80
82
|
* modified oTableEventParameters is returned; if an error occurs, an error object of type
|
|
81
83
|
* {@link sap.fe.navigation.NavError} is returned
|
|
82
84
|
* @private
|
|
@@ -88,8 +90,9 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
88
90
|
}
|
|
89
91
|
/**
|
|
90
92
|
* Processes selectionVariant string and returns a Promise object (semanticAttributes and AppStateKey).
|
|
91
|
-
*
|
|
92
|
-
* @
|
|
93
|
+
*
|
|
94
|
+
* @param sSelectionVariant Stringified JSON object
|
|
95
|
+
* @returns A Promise object to monitor when all actions of the function have been executed; if the execution is successful, the
|
|
93
96
|
* semanticAttributes as well as the appStateKey are returned; if an error occurs, an error object of type
|
|
94
97
|
* {@link sap.fe.navigation.NavError} is returned
|
|
95
98
|
* <br>
|
|
@@ -122,7 +125,8 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
122
125
|
}
|
|
123
126
|
/**
|
|
124
127
|
* Gets the application specific technical parameters.
|
|
125
|
-
*
|
|
128
|
+
*
|
|
129
|
+
* @returns Containing the technical parameters.
|
|
126
130
|
* @private
|
|
127
131
|
* @ui5-restricted
|
|
128
132
|
*/
|
|
@@ -135,7 +139,8 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
135
139
|
* Sets the application specific technical parameters. Technical parameters will not be added to the selection variant passed to the
|
|
136
140
|
* application.
|
|
137
141
|
* As a default sap-system, sap-ushell-defaultedParameterNames and hcpApplicationId are considered as technical parameters.
|
|
138
|
-
*
|
|
142
|
+
*
|
|
143
|
+
* @param aTechnicalParameters List of parameter names to be considered as technical parameters. <code>null</code> or
|
|
139
144
|
* <code>undefined</code> may be used to reset the complete list.
|
|
140
145
|
* @private
|
|
141
146
|
* @ui5-restricted
|
|
@@ -148,9 +153,10 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
148
153
|
/**
|
|
149
154
|
* Sets the model that is used for verification of sensitive information. If the model is not set, the unnamed component model is used for the
|
|
150
155
|
* verification of sensitive information.
|
|
156
|
+
*
|
|
151
157
|
* @private
|
|
152
158
|
* @ui5-restricted
|
|
153
|
-
* @param
|
|
159
|
+
* @param oModel Model For checking sensitive information
|
|
154
160
|
*/
|
|
155
161
|
;
|
|
156
162
|
|
|
@@ -159,28 +165,30 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
159
165
|
}
|
|
160
166
|
/**
|
|
161
167
|
* Changes the URL according to the current app state and stores the app state for later retrieval.
|
|
168
|
+
*
|
|
162
169
|
* @private
|
|
163
170
|
* @ui5-restricted
|
|
164
|
-
* @param
|
|
165
|
-
* @returns
|
|
171
|
+
* @param mInnerAppData Object containing the current state of the app
|
|
172
|
+
* @returns A Promise object to monitor when all the actions of the function have been executed; if the execution is successful, the
|
|
166
173
|
* app state key is returned; if an error occurs, an object of type {@link sap.fe.navigation.NavError} is
|
|
167
174
|
* returned
|
|
168
|
-
|
|
175
|
+
*/
|
|
169
176
|
;
|
|
170
177
|
|
|
171
178
|
_proto.storeInnerAppState = function storeInnerAppState(mInnerAppData) {
|
|
172
179
|
return this.oNavHandler.storeInnerAppState(mInnerAppData);
|
|
173
180
|
}
|
|
174
181
|
/**
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
182
|
+
* Changes the URL according to the current app state and stores the app state for later retrieval.
|
|
183
|
+
*
|
|
184
|
+
* @private
|
|
185
|
+
* @ui5-restricted
|
|
186
|
+
* @param mInnerAppData Object containing the current state of the app
|
|
187
|
+
* @param [bImmediateHashReplace=false] If set to false, the inner app hash will not be replaced until storing is successful; do not
|
|
188
|
+
* @param bNotLegacy
|
|
189
|
+
* @returns An object containing the appStateId and a promise object to monitor when all the actions of the function have been
|
|
190
|
+
* executed; Please note that the appStateKey may be undefined or empty.
|
|
191
|
+
*/
|
|
184
192
|
;
|
|
185
193
|
|
|
186
194
|
_proto.storeInnerAppStateWithImmediateReturn = function storeInnerAppStateWithImmediateReturn(mInnerAppData, bImmediateHashReplace, bNotLegacy) {
|
|
@@ -188,9 +196,10 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
188
196
|
}
|
|
189
197
|
/**
|
|
190
198
|
* Changes the URL according to the current sAppStateKey. As an reaction route change event will be triggered.
|
|
199
|
+
*
|
|
191
200
|
* @private
|
|
192
201
|
* @ui5-restricted
|
|
193
|
-
* @param
|
|
202
|
+
* @param sAppStateKey The new app state key.
|
|
194
203
|
*/
|
|
195
204
|
;
|
|
196
205
|
|
|
@@ -206,9 +215,9 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
206
215
|
*
|
|
207
216
|
* @private
|
|
208
217
|
* @ui5-restricted
|
|
209
|
-
* @param
|
|
210
|
-
* @param
|
|
211
|
-
* @returns
|
|
218
|
+
* @param [vSelectionVariant]
|
|
219
|
+
* @param [vSelectionVariant.oUrlParamaters]
|
|
220
|
+
* @returns The url parameters
|
|
212
221
|
*/
|
|
213
222
|
;
|
|
214
223
|
|
|
@@ -220,8 +229,8 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
220
229
|
*
|
|
221
230
|
* @private
|
|
222
231
|
* @ui5-restricted
|
|
223
|
-
* @param
|
|
224
|
-
* @returns
|
|
232
|
+
* @param oInSelectionVariant Instance of sap.fe.navigation.SelectionVariant
|
|
233
|
+
* @returns AppState key
|
|
225
234
|
*/
|
|
226
235
|
;
|
|
227
236
|
|
|
@@ -242,14 +251,14 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
242
251
|
/**
|
|
243
252
|
* Mix Attributes and selectionVariant.
|
|
244
253
|
*
|
|
245
|
-
* @param
|
|
246
|
-
* @param
|
|
247
|
-
* @param
|
|
254
|
+
* @param vSemanticAttributes Object/(Array of Objects) containing key/value pairs
|
|
255
|
+
* @param sSelectionVariant The selection variant in string format as provided by the SmartFilterBar control
|
|
256
|
+
* @param [iSuppressionBehavior=sap.fe.navigation.SuppressionBehavior.standard] Indicates whether semantic
|
|
248
257
|
* attributes with special values (see {@link sap.fe.navigation.SuppressionBehavior suppression behavior}) must be
|
|
249
258
|
* suppressed before they are combined with the selection variant; several
|
|
250
259
|
* {@link sap.fe.navigation.SuppressionBehavior suppression behaviors} can be combined with the bitwise OR operator
|
|
251
260
|
* (|)
|
|
252
|
-
* @returns
|
|
261
|
+
* @returns Instance of {@link sap.fe.navigation.SelectionVariant}
|
|
253
262
|
*/
|
|
254
263
|
;
|
|
255
264
|
|
|
@@ -259,9 +268,9 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
259
268
|
/**
|
|
260
269
|
* The method creates a context url based on provided data. This context url can either be used as.
|
|
261
270
|
*
|
|
262
|
-
* @param
|
|
271
|
+
* @param sEntitySetName Used for url determination
|
|
263
272
|
* @param [oModel] The ODataModel used for url determination. If omitted, the NavigationHandler model is used.
|
|
264
|
-
* @returns
|
|
273
|
+
* @returns The context url for the given entities
|
|
265
274
|
*/
|
|
266
275
|
;
|
|
267
276
|
|
|
@@ -350,4 +359,4 @@ sap.ui.define(["sap/fe/navigation/NavigationHandler", "sap/ui/core/service/Servi
|
|
|
350
359
|
|
|
351
360
|
return NavigationServiceFactory;
|
|
352
361
|
}, false);
|
|
353
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJOYXZpZ2F0aW9uU2VydmljZSIsImluaXQiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJvQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvTmF2SGFuZGxlciIsIk5hdmlnYXRpb25IYW5kbGVyIiwic2V0TW9kZWwiLCJnZXRNb2RlbCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJleGl0IiwiZGVzdHJveSIsIm5hdmlnYXRlIiwic1NlbWFudGljT2JqZWN0Iiwic0FjdGlvbk5hbWUiLCJ2TmF2aWdhdGlvblBhcmFtZXRlcnMiLCJvSW5uZXJBcHBEYXRhIiwiZm5PbkVycm9yIiwib0V4dGVybmFsQXBwRGF0YSIsInNOYXZNb2RlIiwicGFyc2VOYXZpZ2F0aW9uIiwiX3Byb2Nlc3NCZWZvcmVTbWFydExpbmtQb3BvdmVyT3BlbnMiLCJvVGFibGVFdmVudFBhcmFtZXRlcnMiLCJzU2VsZWN0aW9uVmFyaWFudCIsIm1Jbm5lckFwcERhdGEiLCJwcm9jZXNzQmVmb3JlU21hcnRMaW5rUG9wb3Zlck9wZW5zIiwiZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzIiwiX2dldEFwcFN0YXRlS2V5QW5kVXJsUGFyYW1ldGVycyIsImdldFRlY2huaWNhbFBhcmFtZXRlcnMiLCJzZXRUZWNobmljYWxQYXJhbWV0ZXJzIiwiYVRlY2huaWNhbFBhcmFtZXRlcnMiLCJvTW9kZWwiLCJzdG9yZUlubmVyQXBwU3RhdGUiLCJzdG9yZUlubmVyQXBwU3RhdGVXaXRoSW1tZWRpYXRlUmV0dXJuIiwiYkltbWVkaWF0ZUhhc2hSZXBsYWNlIiwiYk5vdExlZ2FjeSIsInJlcGxhY2VIYXNoIiwic0FwcFN0YXRlS2V5IiwicmVwbGFjZUlubmVyQXBwU3RhdGVLZXkiLCJzQXBwSGFzaCIsIl9yZXBsYWNlSW5uZXJBcHBTdGF0ZUtleSIsImdldFVybFBhcmFtZXRlcnNGcm9tU2VsZWN0aW9uVmFyaWFudCIsInZTZWxlY3Rpb25WYXJpYW50IiwiX2dldFVSTFBhcmFtZXRlcnNGcm9tU2VsZWN0aW9uVmFyaWFudCIsInNhdmVBcHBTdGF0ZVdpdGhJbW1lZGlhdGVSZXR1cm4iLCJvSW5TZWxlY3Rpb25WYXJpYW50IiwidG9KU09OU3RyaW5nIiwib1NlbGVjdGlvblZhcmlhbnQiLCJKU09OIiwicGFyc2UiLCJvWEFwcFN0YXRlT2JqZWN0Iiwic2VsZWN0aW9uVmFyaWFudCIsIm9SZXR1cm4iLCJfc2F2ZUFwcFN0YXRlV2l0aEltbWVkaWF0ZVJldHVybiIsImFwcFN0YXRlS2V5IiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ2U2VtYW50aWNBdHRyaWJ1dGVzIiwiaVN1cHByZXNzaW9uQmVoYXZpb3IiLCJjb25zdHJ1Y3RDb250ZXh0VXJsIiwic0VudGl0eVNldE5hbWUiLCJnZXRJbnRlcmZhY2UiLCJTZXJ2aWNlIiwiZm5HZXRFbXB0eU9iamVjdCIsImZuR2V0UHJvbWlzZSIsImZuR2V0SlF1ZXJ5UHJvbWlzZSIsIm9NeURlZmZlcmVkIiwialF1ZXJ5IiwiRGVmZXJyZWQiLCJwcm9taXNlIiwiZm5HZXRFbXB0eVN0cmluZyIsIk5hdmlnYXRpb25TZXJ2aWNlc01vY2siLCJjcmVhdGVFbXB0eUFwcFN0YXRlIiwiZ2V0QXBwU3RhdGUiLCJnZXRTdGFydHVwQXBwU3RhdGUiLCJOYXZpZ2F0aW9uU2VydmljZUZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsIm9OYXZpZ2F0aW9uU2VydmljZSIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsInRoZW4iLCJvU2VydmljZSIsIlNlcnZpY2VGYWN0b3J5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7O01BS2FBLGlCOzs7Ozs7Ozs7O1dBR1pDLEksR0FBQSxnQkFBTztBQUNOLFVBQU1DLFFBQVEsR0FBRyxLQUFLQyxVQUFMLEVBQWpCO0FBQUEsVUFDQ0MsVUFBVSxHQUFHRixRQUFRLElB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LEdBZ0JJNEMsa0JBaEJKO0FBQUEsV0FtQmROLG1CQW5CYyxHQW1CUVcsZ0JBbkJSO0FBQ2IsV0FBSzlELFdBQUwsR0FBbUJDLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixJQUFoQixDQUFuQjtBQUNBOzs7OztZQUVEbUQsWSxHQUFBLHdCQUFlO0FBQ2QsYUFBTyxJQUFQO0FBQ0EsSyxDQUVEOzs7WUFhQXRCLHVCLEdBQUEsaUNBQXdCQyxRQUF4QixFQUF1QztBQUN0QyxhQUFPQSxRQUFRLEdBQUdBLFFBQUgsR0FBYyxFQUE3QjtBQUNBLEs7O1lBRUQzQixRLEdBQUEsb0JBQVcsQ0FDVjtBQUNBLEs7Ozs7Ozs7TUFHSThELHdCOzs7Ozs7Ozs7WUFDTEMsYyxHQUFBLHdCQUFlQyxlQUFmLEVBQTJFO0FBQzFFLFVBQU1DLGtCQUFrQixHQUN2QkMsR0FBRyxDQUFDQyxNQUFKLElBQWNELEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUF6QixHQUFxQyxJQUFJbkYsaUJBQUosQ0FBc0IrRSxlQUF0QixDQUFyQyxHQUE4RSxJQUFJTixzQkFBSixFQUQvRSxDQUQwRSxDQUcxRTs7QUFDQSxhQUFPTyxrQkFBa0IsQ0FBQ3RFLFdBQW5CLENBQStCMEUsSUFBL0IsQ0FBb0MsVUFBVUMsUUFBVixFQUF5QjtBQUNuRSxlQUFPQSxRQUFQO0FBQ0EsT0FGTSxDQUFQO0FBR0EsSzs7O0lBUnFDQyxjOztTQVd4QlQsd0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5hdmlnYXRpb25IYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcblxudHlwZSBOYXZpZ2F0aW9uU2VydmljZVNldHRpbmdzID0ge307XG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvblNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPE5hdmlnYXRpb25TZXJ2aWNlU2V0dGluZ3M+IHtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPGFueT47XG5cdG9OYXZIYW5kbGVyITogTmF2aWdhdGlvbkhhbmRsZXI7XG5cdGluaXQoKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcblx0XHRcdG9Db21wb25lbnQgPSBvQ29udGV4dCAmJiBvQ29udGV4dC5zY29wZU9iamVjdDtcblxuXHRcdHRoaXMub05hdkhhbmRsZXIgPSBuZXcgTmF2aWdhdGlvbkhhbmRsZXIob0NvbXBvbmVudCk7XG5cdFx0dGhpcy5vTmF2SGFuZGxlci5zZXRNb2RlbChvQ29tcG9uZW50LmdldE1vZGVsKCkpO1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cblx0ZXhpdCgpIHtcblx0XHR0aGlzLm9OYXZIYW5kbGVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyBhIGNyb3NzLWFwcCBuYXZpZ2F0aW9uIGFmdGVyIHNhdmluZyB0aGUgaW5uZXIgYW5kIHRoZSBjcm9zcy1hcHAgc3RhdGVzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTZW1hbnRpY09iamVjdCBTZW1hbnRpYyBvYmplY3Qgb2YgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNBY3Rpb25OYW1lIEFjdGlvbiBvZiB0aGUgdGFyZ2V0IGFwcFxuXHQgKiBAcGFyYW0ge29iamVjdCB8IHN0cmluZyB9IFt2TmF2aWdhdGlvblBhcmFtZXRlcnNdIE5hdmlnYXRpb24gcGFyYW1ldGVycyBhcyBhbiBvYmplY3Qgd2l0aCBrZXkvdmFsdWUgcGFpcnMgb3IgYXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Zcblx0ICogICAgICAgIHN1Y2ggYW4gb2JqZWN0LiBJZiBwYXNzZWQgYXMgYW4gb2JqZWN0LCB0aGUgcHJvcGVydGllcyBhcmUgbm90IGNoZWNrZWQgYWdhaW5zdCB0aGUgPGNvZGU+SXNQb3RlbnRpYWxTZW5zaXRpdmU8L2NvZGU+IG9yXG5cdCAqICAgICAgICA8Y29kZT5NZWFzdXJlPC9jb2RlPiB0eXBlLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gW29Jbm5lckFwcERhdGFdIE9iamVjdCBmb3Igc3RvcmluZyBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHBcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuT25FcnJvcl0gQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBuYXZpZ2F0aW9uIDxicj5cblx0ICogQHBhcmFtIHtvYmplY3R9IFtvRXh0ZXJuYWxBcHBEYXRhXSBPYmplY3QgZm9yIHN0b3JpbmcgdGhlIHN0YXRlIHdoaWNoIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSB0YXJnZXQgY29tcG9uZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3NOYXZNb2RlXSBBcmd1bWVudCBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgRkxQLWNvbmZpZ3VyZWQgdGFyZ2V0IGZvciBvcGVuaW5nIGEgVVJMLiBJZiB1c2VkLCBvbmx5IHRoZVxuXHQgKiAgICAgICAgPGNvZGU+ZXhwbGFjZTwvY29kZT4gb3IgPGNvZGU+aW5wbGFjZTwvY29kZT4gdmFsdWVzIGFyZSBhbGxvd2VkLiBBbnkgb3RoZXIgdmFsdWUgd2lsbCBsZWFkIHRvIGFuIGV4Y2VwdGlvblxuXHQgKiAgICAgICAgPGNvZGU+TmF2aWdhdGlvbkhhbmRsZXIuSU5WQUxJRF9OQVZfTU9ERTwvY29kZT4uXG5cdCAqKi9cblx0bmF2aWdhdGUoXG5cdFx0c1NlbWFudGljT2JqZWN0OiBzdHJpbmcsXG5cdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHR2TmF2aWdhdGlvblBhcmFtZXRlcnM/OiBzdHJpbmcgfCBvYmplY3QsXG5cdFx0b0lubmVyQXBwRGF0YT86IG9iamVjdCxcblx0XHRmbk9uRXJyb3I/OiBGdW5jdGlvbixcblx0XHRvRXh0ZXJuYWxBcHBEYXRhPzogb2JqZWN0LFxuXHRcdHNOYXZNb2RlPzogc3RyaW5nXG5cdCkge1xuXHRcdC8vIFRPRE86IE5hdmlnYXRpb24gSGFuZGxlciBkb2VzIG5vdCBoYW5kbGUgbmF2aWdhdGlvbiB3aXRob3V0IGEgY29udGV4dFxuXHRcdC8vIGJ1dCBpbiB2NCBEYXRhRmllbGRGb3JJQk4gd2l0aCByZXF1aXJlc0NvbnRleHQgZmFsc2UgY2FuIHRyaWdnZXIgYSBuYXZpZ2F0aW9uIHdpdGhvdXQgYW55IGNvbnRleHRcblx0XHQvLyBUaGlzIHNob3VsZCBiZSBoYW5kbGVkXG5cdFx0dGhpcy5vTmF2SGFuZGxlci5uYXZpZ2F0ZShcblx0XHRcdHNTZW1hbnRpY09iamVjdCxcblx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0dk5hdmlnYXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0b0lubmVyQXBwRGF0YSxcblx0XHRcdGZuT25FcnJvcixcblx0XHRcdG9FeHRlcm5hbEFwcERhdGEsXG5cdFx0XHRzTmF2TW9kZVxuXHRcdCk7XG5cdH1cblx0LyoqXG5cdCAqIFBhcnNlcyB0aGUgaW5jb21pbmcgVVJMIGFuZCByZXR1cm5zIGEgUHJvbWlzZS5cblx0ICogQHJldHVybnMge29iamVjdH0gQSBQcm9taXNlIG9iamVjdCB3aGljaCByZXR1cm5zIHRoZVxuXHQgKiBleHRyYWN0ZWQgYXBwIHN0YXRlLCB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzLCBhbmQgdGhlIHR5cGUgb2YgbmF2aWdhdGlvbiB3aGVuIGV4ZWN1dGlvbiBpcyBzdWNjZXNzZnVsLFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICoqL1xuXHRwYXJzZU5hdmlnYXRpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMub05hdkhhbmRsZXIucGFyc2VOYXZpZ2F0aW9uKCk7XG5cdH1cblx0LyoqXG5cdCAqIFByb2Nlc3NlcyBuYXZpZ2F0aW9uLXJlbGF0ZWQgdGFza3MgcmVsYXRlZCB0byBiZWZvcmVQb3BvdmVyT3BlbnMgZXZlbnQgaGFuZGxpbmcgZm9yIHRoZSBTbWFydExpbmsgY29udHJvbCBhbmQgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1RhYmxlRXZlbnRQYXJhbWV0ZXJzIFRoZSBwYXJhbWV0ZXJzIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBTbWFydFRhYmxlIGNvbnRyb2wgd2hlbiB0aGUgU21hcnRMaW5rIGNvbnRyb2wgaGFzIGJlZW4gY2xpY2tlZCxcblx0ICogICAgICAgIGFuIGluc3RhbmNlIG9mIGEgUG9wT3ZlciBvYmplY3Rcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTZWxlY3Rpb25WYXJpYW50IFN0cmluZ2lmaWVkIEpTT04gb2JqZWN0IGFzIHJldHVybmVkLCBmb3IgZXhhbXBsZSwgZnJvbSBnZXREYXRhU3VpdGVGb3JtYXQoKSBvZiB0aGUgU21hcnRGaWx0ZXJCYXIgY29udHJvbFxuXHQgKiBAcGFyYW0ge29iamVjdH0gW21Jbm5lckFwcERhdGFdIE9iamVjdCBjb250YWluaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHAuIElmIHByb3ZpZGVkLCBvcGVuaW5nIHRoZSBQb3BvdmVyIGlzIGRlZmVycmVkIHVudGlsIHRoZVxuXHQgKiAgICAgICAgaW5uZXIgYXBwIGRhdGEgaXMgc2F2ZWQgaW4gYSBjb25zaXN0ZW50IHdheS5cblx0ICogQHJldHVybnMge1Byb21pc2V9IEEgUHJvbWlzZSBvYmplY3QgdG8gbW9uaXRvciB3aGVuIGFsbCBhY3Rpb25zIG9mIHRoZSBmdW5jdGlvbiBoYXZlIGJlZW4gZXhlY3V0ZWQ7IGlmIHRoZSBleGVjdXRpb24gaXMgc3VjY2Vzc2Z1bCwgdGhlXG5cdCAqICAgICAgICAgIG1vZGlmaWVkIG9UYWJsZUV2ZW50UGFyYW1ldGVycyBpcyByZXR1cm5lZDsgaWYgYW4gZXJyb3Igb2NjdXJzLCBhbiBlcnJvciBvYmplY3Qgb2YgdHlwZVxuXHQgKiAgICAgICAgICB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uTmF2RXJyb3J9IGlzIHJldHVybmVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfcHJvY2Vzc0JlZm9yZVNtYXJ0TGlua1BvcG92ZXJPcGVucyhvVGFibGVFdmVudFBhcmFtZXRlcnM6IG9iamVjdCwgc1NlbGVjdGlvblZhcmlhbnQ6IHN0cmluZywgbUlubmVyQXBwRGF0YTogb2JqZWN0IHwgdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHRoaXMub05hdkhhbmRsZXIucHJvY2Vzc0JlZm9yZVNtYXJ0TGlua1BvcG92ZXJPcGVucyhvVGFibGVFdmVudFBhcmFtZXRlcnMsIHNTZWxlY3Rpb25WYXJpYW50LCBtSW5uZXJBcHBEYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzZXMgc2VsZWN0aW9uVmFyaWFudCBzdHJpbmcgYW5kIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCAoc2VtYW50aWNBdHRyaWJ1dGVzIGFuZCBBcHBTdGF0ZUtleSkuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzU2VsZWN0aW9uVmFyaWFudCBTdHJpbmdpZmllZCBKU09OIG9iamVjdFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBBIFByb21pc2Ugb2JqZWN0IHRvIG1vbml0b3Igd2hlbiBhbGwgYWN0aW9ucyBvZiB0aGUgZnVuY3Rpb24gaGF2ZSBiZWVuIGV4ZWN1dGVkOyBpZiB0aGUgZXhlY3V0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZVxuXHQgKiAgICAgICAgICBzZW1hbnRpY0F0dHJpYnV0ZXMgYXMgd2VsbCBhcyB0aGUgYXBwU3RhdGVLZXkgYXJlIHJldHVybmVkOyBpZiBhbiBlcnJvciBvY2N1cnMsIGFuIGVycm9yIG9iamVjdCBvZiB0eXBlXG5cdCAqICAgICAgICAgIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5OYXZFcnJvcn0gaXMgcmV0dXJuZWRcblx0ICogPGJyPlxuXHQgKiBAZXhhbXBsZSA8Y29kZT5cblx0ICpcblx0ICogXHRcdHZhciBvU2VsZWN0aW9uVmFyaWFudCA9IG5ldyBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50KCk7XG5cdCAqIFx0XHRvU2VsZWN0aW9uVmFyaWFudC5hZGRTZWxlY3RPcHRpb24oXCJDb21wYW55Q29kZVwiLCBcIklcIiwgXCJFUVwiLCBcIjAwMDFcIik7XG5cdCAqIFx0XHRvU2VsZWN0aW9uVmFyaWFudC5hZGRTZWxlY3RPcHRpb24oXCJDdXN0b21lclwiLCBcIklcIiwgXCJFUVwiLCBcIkMwMDAxXCIpO1xuXHQgKiBcdFx0dmFyIHNTZWxlY3Rpb25WYXJpYW50PSBvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKTtcblx0ICpcblx0ICogXHRcdHZhciBvTmF2aWdhdGlvbkhhbmRsZXIgPSBuZXcgc2FwLmZlLm5hdmlnYXRpb24uTmF2aWdhdGlvbkhhbmRsZXIob0NvbnRyb2xsZXIpO1xuXHQgKiBcdFx0dmFyIG9Qcm9taXNlT2JqZWN0ID0gb05hdmlnYXRpb25IYW5kbGVyLl9nZXRBcHBTdGF0ZUtleUFuZFVybFBhcmFtZXRlcnMoc1NlbGVjdGlvblZhcmlhbnQpO1xuXHQgKlxuXHQgKiBcdFx0b1Byb21pc2VPYmplY3QuZG9uZShmdW5jdGlvbihvU2VtYW50aWNBdHRyaWJ1dGVzLCBzQXBwU3RhdGVLZXkpe1xuXHQgKiBcdFx0XHQvLyBoZXJlIHlvdSBjYW4gYWRkIGNvZGluZyB0aGF0IHNob3VsZCBydW4gYWZ0ZXIgYWxsIGFwcCBzdGF0ZSBhbmQgdGhlIHNlbWFudGljIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHJldHVybmVkLlxuXHQgKiBcdFx0fSk7XG5cdCAqXG5cdCAqIFx0XHRvUHJvbWlzZU9iamVjdC5mYWlsKGZ1bmN0aW9uKG9FcnJvcil7XG5cdCAqIFx0XHRcdC8vc29tZSBlcnJvciBoYW5kbGluZ1xuXHQgKiBcdFx0fSk7XG5cdCAqXG5cdCAqIDwvY29kZT5cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRBcHBTdGF0ZUtleUFuZFVybFBhcmFtZXRlcnMoc1NlbGVjdGlvblZhcmlhbnQ6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLm9OYXZIYW5kbGVyLl9nZXRBcHBTdGF0ZUtleUFuZFVybFBhcmFtZXRlcnMoc1NlbGVjdGlvblZhcmlhbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZmljIHRlY2huaWNhbCBwYXJhbWV0ZXJzLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IENvbnRhaW5pbmcgdGhlIHRlY2huaWNhbCBwYXJhbWV0ZXJzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldFRlY2huaWNhbFBhcmFtZXRlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMub05hdkhhbmRsZXIuZ2V0VGVjaG5pY2FsUGFyYW1ldGVycygpO1xuXHR9XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpYyB0ZWNobmljYWwgcGFyYW1ldGVycy4gVGVjaG5pY2FsIHBhcmFtZXRlcnMgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGlvbiB2YXJpYW50IHBhc3NlZCB0byB0aGVcblx0ICogYXBwbGljYXRpb24uXG5cdCAqIEFzIGEgZGVmYXVsdCBzYXAtc3lzdGVtLCBzYXAtdXNoZWxsLWRlZmF1bHRlZFBhcmFtZXRlck5hbWVzIGFuZCBoY3BBcHBsaWNhdGlvbklkIGFyZSBjb25zaWRlcmVkIGFzIHRlY2huaWNhbCBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0ge0FycmF5fSBhVGVjaG5pY2FsUGFyYW1ldGVycyBMaXN0IG9mIHBhcmFtZXRlciBuYW1lcyB0byBiZSBjb25zaWRlcmVkIGFzIHRlY2huaWNhbCBwYXJhbWV0ZXJzLiA8Y29kZT5udWxsPC9jb2RlPiBvclxuXHQgKiAgICAgICAgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBtYXkgYmUgdXNlZCB0byByZXNldCB0aGUgY29tcGxldGUgbGlzdC5cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRzZXRUZWNobmljYWxQYXJhbWV0ZXJzKGFUZWNobmljYWxQYXJhbWV0ZXJzOiBhbnlbXSkge1xuXHRcdHRoaXMub05hdkhhbmRsZXIuc2V0VGVjaG5pY2FsUGFyYW1ldGVycyhhVGVjaG5pY2FsUGFyYW1ldGVycyk7XG5cdH1cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1vZGVsIHRoYXQgaXMgdXNlZCBmb3IgdmVyaWZpY2F0aW9uIG9mIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4gSWYgdGhlIG1vZGVsIGlzIG5vdCBzZXQsIHRoZSB1bm5hbWVkIGNvbXBvbmVudCBtb2RlbCBpcyB1c2VkIGZvciB0aGVcblx0ICogdmVyaWZpY2F0aW9uIG9mIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnYyLk9EYXRhTW9kZWx9IG9Nb2RlbCBNb2RlbCBGb3IgY2hlY2tpbmcgc2Vuc2l0aXZlIGluZm9ybWF0aW9uXG5cdCAqL1xuXHRzZXRNb2RlbChvTW9kZWw6IGFueSkge1xuXHRcdHRoaXMub05hdkhhbmRsZXIuc2V0TW9kZWwob01vZGVsKTtcblx0fVxuXHQvKipcblx0ICogQ2hhbmdlcyB0aGUgVVJMIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBhcHAgc3RhdGUgYW5kIHN0b3JlcyB0aGUgYXBwIHN0YXRlIGZvciBsYXRlciByZXRyaWV2YWwuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gbUlubmVyQXBwRGF0YSBPYmplY3QgY29udGFpbmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXBwXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEEgUHJvbWlzZSBvYmplY3QgdG8gbW9uaXRvciB3aGVuIGFsbCB0aGUgYWN0aW9ucyBvZiB0aGUgZnVuY3Rpb24gaGF2ZSBiZWVuIGV4ZWN1dGVkOyBpZiB0aGUgZXhlY3V0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZVxuXHQgKiAgICAgICAgICBhcHAgc3RhdGUga2V5IGlzIHJldHVybmVkOyBpZiBhbiBlcnJvciBvY2N1cnMsIGFuIG9iamVjdCBvZiB0eXBlIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5OYXZFcnJvcn0gaXNcblx0ICogICAgICAgICAgcmV0dXJuZWRcblx0ICoqL1xuXHRzdG9yZUlubmVyQXBwU3RhdGUobUlubmVyQXBwRGF0YTogb2JqZWN0KSB7XG5cdFx0cmV0dXJuIHRoaXMub05hdkhhbmRsZXIuc3RvcmVJbm5lckFwcFN0YXRlKG1Jbm5lckFwcERhdGEpO1xuXHR9XG5cdC8qKlxuXHRcdFx0XHQqIENoYW5nZXMgdGhlIFVSTCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgYXBwIHN0YXRlIGFuZCBzdG9yZXMgdGhlIGFwcCBzdGF0ZSBmb3IgbGF0ZXIgcmV0cmlldmFsLlxuXHRcdFx0XHQqIEBwcml2YXRlXG5cdFx0XHRcdCogQHVpNS1yZXN0cmljdGVkXG5cdFx0XHRcdCogQHBhcmFtIHtvYmplY3R9IG1Jbm5lckFwcERhdGEgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFwcFxuXHRcdFx0XHQqIEBwYXJhbSB7Ym9vbGVhbn0gW2JJbW1lZGlhdGVIYXNoUmVwbGFjZT1mYWxzZV0gSWYgc2V0IHRvIGZhbHNlLCB0aGUgaW5uZXIgYXBwIGhhc2ggd2lsbCBub3QgYmUgcmVwbGFjZWQgdW50aWwgc3RvcmluZyBpcyBzdWNjZXNzZnVsOyBkbyBub3Rcblx0XHRcdCAqIEBwYXJhbSBiTm90TGVnYWN5XG5cblx0XHRcdCAqIEByZXR1cm5zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhcHBTdGF0ZUlkIGFuZCBhIHByb21pc2Ugb2JqZWN0IHRvIG1vbml0b3Igd2hlbiBhbGwgdGhlIGFjdGlvbnMgb2YgdGhlIGZ1bmN0aW9uIGhhdmUgYmVlblxuXHRcdFx0XHQqIGV4ZWN1dGVkOyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhcHBTdGF0ZUtleSBtYXkgYmUgdW5kZWZpbmVkIG9yIGVtcHR5LlxuXHRcdFx0XHQqL1xuXHRzdG9yZUlubmVyQXBwU3RhdGVXaXRoSW1tZWRpYXRlUmV0dXJuKG1Jbm5lckFwcERhdGE6IG9iamVjdCwgYkltbWVkaWF0ZUhhc2hSZXBsYWNlOiBib29sZWFuIHwgdW5kZWZpbmVkLCBiTm90TGVnYWN5OiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5vTmF2SGFuZGxlci5zdG9yZUlubmVyQXBwU3RhdGVXaXRoSW1tZWRpYXRlUmV0dXJuKG1Jbm5lckFwcERhdGEsIGJJbW1lZGlhdGVIYXNoUmVwbGFjZSwgYk5vdExlZ2FjeSk7XG5cdH1cblx0LyoqXG5cdCAqIENoYW5nZXMgdGhlIFVSTCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgc0FwcFN0YXRlS2V5LiBBcyBhbiByZWFjdGlvbiByb3V0ZSBjaGFuZ2UgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0FwcFN0YXRlS2V5IFRoZSBuZXcgYXBwIHN0YXRlIGtleS5cblx0ICovXG5cdHJlcGxhY2VIYXNoKHNBcHBTdGF0ZUtleTogc3RyaW5nKSB7XG5cdFx0dGhpcy5vTmF2SGFuZGxlci5yZXBsYWNlSGFzaChzQXBwU3RhdGVLZXkpO1xuXHR9XG5cdHJlcGxhY2VJbm5lckFwcFN0YXRlS2V5KHNBcHBIYXNoOiBhbnksIHNBcHBTdGF0ZUtleTogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMub05hdkhhbmRsZXIuX3JlcGxhY2VJbm5lckFwcFN0YXRlS2V5KHNBcHBIYXNoLCBzQXBwU3RhdGVLZXkpO1xuXHR9XG5cdC8qKlxuXHQgKiBHZXQgc2luZ2xlIHZhbHVlcyBmcm9tIFNlbGVjdGlvblZhcmlhbnQgZm9yIHVybCBwYXJhbWV0ZXJzLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3QgfCBzdHJpbmcgfSBbdlNlbGVjdGlvblZhcmlhbnRdXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbdlNlbGVjdGlvblZhcmlhbnQub1VybFBhcmFtYXRlcnNdXG5cdCAqIEByZXR1cm5zIHtwYmplY3R9XG5cdCAqL1xuXHRnZXRVcmxQYXJhbWV0ZXJzRnJvbVNlbGVjdGlvblZhcmlhbnQodlNlbGVjdGlvblZhcmlhbnQ6IHN0cmluZyB8IG9iamVjdCB8IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB0aGlzLm9OYXZIYW5kbGVyLl9nZXRVUkxQYXJhbWV0ZXJzRnJvbVNlbGVjdGlvblZhcmlhbnQodlNlbGVjdGlvblZhcmlhbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmUgYXBwIHN0YXRlIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciByZXNwb25zZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvSW5TZWxlY3Rpb25WYXJpYW50IEluc3RhbmNlIG9mIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnRcblx0ICogQHJldHVybnMge3N0cmluZ30gQXBwU3RhdGUga2V5XG5cdCAqL1xuXHRzYXZlQXBwU3RhdGVXaXRoSW1tZWRpYXRlUmV0dXJuKG9JblNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRpZiAob0luU2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdFx0Y29uc3Qgc1NlbGVjdGlvblZhcmlhbnQgPSBvSW5TZWxlY3Rpb25WYXJpYW50LnRvSlNPTlN0cmluZygpLCAvLyBjcmVhdGUgYW4gU1YgZm9yIGFwcCBzdGF0ZSBpbiBzdHJpbmcgZm9ybWF0XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50ID0gSlNPTi5wYXJzZShzU2VsZWN0aW9uVmFyaWFudCksIC8vIGNvbnZlcnQgc3RyaW5nIGludG8gSlNPTiB0byBzdG9yZSBpbiBBcHBTdGF0ZVxuXHRcdFx0XHRvWEFwcFN0YXRlT2JqZWN0ID0ge1xuXHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9TZWxlY3Rpb25WYXJpYW50XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9SZXR1cm4gPSB0aGlzLm9OYXZIYW5kbGVyLl9zYXZlQXBwU3RhdGVXaXRoSW1tZWRpYXRlUmV0dXJuKG9YQXBwU3RhdGVPYmplY3QpO1xuXHRcdFx0cmV0dXJuIG9SZXR1cm4uYXBwU3RhdGVLZXkgPyBvUmV0dXJuLmFwcFN0YXRlS2V5IDogXCJcIjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWl4IEF0dHJpYnV0ZXMgYW5kIHNlbGVjdGlvblZhcmlhbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fEFycmF5fSB2U2VtYW50aWNBdHRyaWJ1dGVzIE9iamVjdC8oQXJyYXkgb2YgT2JqZWN0cykgY29udGFpbmluZyBrZXkvdmFsdWUgcGFpcnNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTZWxlY3Rpb25WYXJpYW50IFRoZSBzZWxlY3Rpb24gdmFyaWFudCBpbiBzdHJpbmcgZm9ybWF0IGFzIHByb3ZpZGVkIGJ5IHRoZSBTbWFydEZpbHRlckJhciBjb250cm9sXG5cdCAqIEBwYXJhbSB7aW50fSBbaVN1cHByZXNzaW9uQmVoYXZpb3I9c2FwLmZlLm5hdmlnYXRpb24uU3VwcHJlc3Npb25CZWhhdmlvci5zdGFuZGFyZF0gSW5kaWNhdGVzIHdoZXRoZXIgc2VtYW50aWNcblx0ICogICAgICAgIGF0dHJpYnV0ZXMgd2l0aCBzcGVjaWFsIHZhbHVlcyAoc2VlIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TdXBwcmVzc2lvbkJlaGF2aW9yIHN1cHByZXNzaW9uIGJlaGF2aW9yfSkgbXVzdCBiZVxuXHQgKiAgICAgICAgc3VwcHJlc3NlZCBiZWZvcmUgdGhleSBhcmUgY29tYmluZWQgd2l0aCB0aGUgc2VsZWN0aW9uIHZhcmlhbnQ7IHNldmVyYWxcblx0ICogICAgICAgIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TdXBwcmVzc2lvbkJlaGF2aW9yIHN1cHByZXNzaW9uIGJlaGF2aW9yc30gY2FuIGJlIGNvbWJpbmVkIHdpdGggdGhlIGJpdHdpc2UgT1Igb3BlcmF0b3Jcblx0ICogICAgICAgICh8KVxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBJbnN0YW5jZSBvZiB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH1cblx0ICovXG5cdG1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50KFxuXHRcdHZTZW1hbnRpY0F0dHJpYnV0ZXM6IG9iamVjdCB8IGFueVtdLFxuXHRcdHNTZWxlY3Rpb25WYXJpYW50OiBzdHJpbmcgfCBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdGlTdXBwcmVzc2lvbkJlaGF2aW9yPzogbnVtYmVyXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLm9OYXZIYW5kbGVyLm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50KHZTZW1hbnRpY0F0dHJpYnV0ZXMsIHNTZWxlY3Rpb25WYXJpYW50LCBpU3VwcHJlc3Npb25CZWhhdmlvcik7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCBjcmVhdGVzIGEgY29udGV4dCB1cmwgYmFzZWQgb24gcHJvdmlkZWQgZGF0YS4gVGhpcyBjb250ZXh0IHVybCBjYW4gZWl0aGVyIGJlIHVzZWQgYXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRW50aXR5U2V0TmFtZSBVc2VkIGZvciB1cmwgZGV0ZXJtaW5hdGlvblxuXHQgKiBAcGFyYW0gW29Nb2RlbF0gVGhlIE9EYXRhTW9kZWwgdXNlZCBmb3IgdXJsIGRldGVybWluYXRpb24uIElmIG9taXR0ZWQsIHRoZSBOYXZpZ2F0aW9uSGFuZGxlciBtb2RlbCBpcyB1c2VkLlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29udGV4dCB1cmwgZm9yIHRoZSBnaXZlbiBlbnRpdGllc1xuXHQgKi9cblx0Y29uc3RydWN0Q29udGV4dFVybChzRW50aXR5U2V0TmFtZTogc3RyaW5nLCBvTW9kZWw6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLm9OYXZIYW5kbGVyLmNvbnN0cnVjdENvbnRleHRVcmwoc0VudGl0eVNldE5hbWUsIG9Nb2RlbCk7XG5cdH1cblx0Z2V0SW50ZXJmYWNlKCkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5mdW5jdGlvbiBmbkdldEVtcHR5T2JqZWN0KCkge1xuXHRyZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIGZuR2V0UHJvbWlzZSgpIHtcblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG59XG5cbmZ1bmN0aW9uIGZuR2V0SlF1ZXJ5UHJvbWlzZSgpIHtcblx0Y29uc3Qgb015RGVmZmVyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblx0b015RGVmZmVyZWQucmVzb2x2ZSh7fSwge30sIFwiaW5pdGlhbFwiKTtcblx0cmV0dXJuIG9NeURlZmZlcmVkLnByb21pc2UoKTtcbn1cblxuZnVuY3Rpb24gZm5HZXRFbXB0eVN0cmluZygpIHtcblx0cmV0dXJuIFwiXCI7XG59XG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvblNlcnZpY2VzTW9jayB7XG5cdGluaXRQcm9taXNlOiBQcm9taXNlPGFueT47XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cblxuXHRnZXRJbnRlcmZhY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvLyByZXR1cm4gZW1wdHkgb2JqZWN0XG5cdGNyZWF0ZUVtcHR5QXBwU3RhdGUgPSBmbkdldEVtcHR5T2JqZWN0O1xuXHRzdG9yZUlubmVyQXBwU3RhdGVXaXRoSW1tZWRpYXRlUmV0dXJuID0gZm5HZXRFbXB0eU9iamVjdDtcblx0bWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQgPSBmbkdldEVtcHR5T2JqZWN0O1xuXG5cdC8vIHJldHVybiBwcm9taXNlXG5cdGdldEFwcFN0YXRlID0gZm5HZXRQcm9taXNlO1xuXHRnZXRTdGFydHVwQXBwU3RhdGUgPSBmbkdldFByb21pc2U7XG5cdHBhcnNlTmF2aWdhdGlvbiA9IGZuR2V0SlF1ZXJ5UHJvbWlzZTtcblxuXHQvLyByZXR1cm4gZW1wdHkgc3RyaW5nXG5cdGNvbnN0cnVjdENvbnRleHRVcmwgPSBmbkdldEVtcHR5U3RyaW5nO1xuXG5cdHJlcGxhY2VJbm5lckFwcFN0YXRlS2V5KHNBcHBIYXNoOiBhbnkpIHtcblx0XHRyZXR1cm4gc0FwcEhhc2ggPyBzQXBwSGFzaCA6IFwiXCI7XG5cdH1cblxuXHRuYXZpZ2F0ZSgpIHtcblx0XHQvLyBEb24ndCBkbyBhbnl0aGluZ1xuXHR9XG59XG5cbmNsYXNzIE5hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PE5hdmlnYXRpb25TZXJ2aWNlU2V0dGluZ3M+IHtcblx0Y3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxOYXZpZ2F0aW9uU2VydmljZVNldHRpbmdzPikge1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uU2VydmljZSA9XG5cdFx0XHRzYXAudXNoZWxsICYmIHNhcC51c2hlbGwuQ29udGFpbmVyID8gbmV3IE5hdmlnYXRpb25TZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCkgOiBuZXcgTmF2aWdhdGlvblNlcnZpY2VzTW9jaygpO1xuXHRcdC8vIFdhaXQgRm9yIGluaXRcblx0XHRyZXR1cm4gb05hdmlnYXRpb25TZXJ2aWNlLmluaXRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKG9TZXJ2aWNlOiBhbnkpIHtcblx0XHRcdHJldHVybiBvU2VydmljZTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uU2VydmljZUZhY3Rvcnk7XG4iXX0=
|
|
362
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJOYXZpZ2F0aW9uU2VydmljZSIsImluaXQiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJvQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvTmF2SGFuZGxlciIsIk5hdmlnYXRpb25IYW5kbGVyIiwic2V0TW9kZWwiLCJnZXRNb2RlbCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJleGl0IiwiZGVzdHJveSIsIm5hdmlnYXRlIiwic1NlbWFudGljT2JqZWN0Iiwic0FjdGlvbk5hbWUiLCJ2TmF2aWdhdGlvblBhcmFtZXRlcnMiLCJvSW5uZXJBcHBEYXRhIiwiZm5PbkVycm9yIiwib0V4dGVybmFsQXBwRGF0YSIsInNOYXZNb2RlIiwicGFyc2VOYXZpZ2F0aW9uIiwiX3Byb2Nlc3NCZWZvcmVTbWFydExpbmtQb3BvdmVyT3BlbnMiLCJvVGFibGVFdmVudFBhcmFtZXRlcnMiLCJzU2VsZWN0aW9uVmFyaWFudCIsIm1Jbm5lckFwcERhdGEiLCJwcm9jZXNzQmVmb3JlU21hcnRMaW5rUG9wb3Zlck9wZW5zIiwiZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzIiwiX2dldEFwcFN0YXRlS2V5QW5kVXJsUGFyYW1ldGVycyIsImdldFRlY2huaWNhbFBhcmFtZXRlcnMiLCJzZXRUZWNobmljYWxQYXJhbWV0ZXJzIiwiYVRlY2huaWNhbFBhcmFtZXRlcnMiLCJvTW9kZWwiLCJzdG9yZUlubmVyQXBwU3RhdGUiLCJzdG9yZUlubmVyQXBwU3RhdGVXaXRoSW1tZWRpYXRlUmV0dXJuIiwiYkltbWVkaWF0ZUhhc2hSZXBsYWNlIiwiYk5vdExlZ2FjeSIsInJlcGxhY2VIYXNoIiwic0FwcFN0YXRlS2V5IiwicmVwbGFjZUlubmVyQXBwU3RhdGVLZXkiLCJzQXBwSGFzaCIsIl9yZXBsYWNlSW5uZXJBcHBTdGF0ZUtleSIsImdldFVybFBhcmFtZXRlcnNGcm9tU2VsZWN0aW9uVmFyaWFudCIsInZTZWxlY3Rpb25WYXJpYW50IiwiX2dldFVSTFBhcmFtZXRlcnNGcm9tU2VsZWN0aW9uVmFyaWFudCIsInNhdmVBcHBTdGF0ZVdpdGhJbW1lZGlhdGVSZXR1cm4iLCJvSW5TZWxlY3Rpb25WYXJpYW50IiwidG9KU09OU3RyaW5nIiwib1NlbGVjdGlvblZhcmlhbnQiLCJKU09OIiwicGFyc2UiLCJvWEFwcFN0YXRlT2JqZWN0Iiwic2VsZWN0aW9uVmFyaWFudCIsIm9SZXR1cm4iLCJfc2F2ZUFwcFN0YXRlV2l0aEltbWVkaWF0ZVJldHVybiIsImFwcFN0YXRlS2V5IiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ2U2VtYW50aWNBdHRyaWJ1dGVzIiwiaVN1cHByZXNzaW9uQmVoYXZpb3IiLCJjb25zdHJ1Y3RDb250ZXh0VXJsIiwic0VudGl0eVNldE5hbWUiLCJnZXRJbnRlcmZhY2UiLCJTZXJ2aWNlIiwiZm5HZXRFbXB0eU9iamVjdCIsImZuR2V0UHJvbWlzZSIsImZuR2V0SlF1ZXJ5UHJvbWlzZSIsIm9NeURlZmZlcmVkIiwialF1ZXJ5IiwiRGVmZXJyZWQiLCJwcm9taXNlIiwiZm5HZXRFbXB0eVN0cmluZyIsIk5hdmlnYXRpb25TZXJ2aWNlc01vY2siLCJjcmVhdGVFbXB0eUFwcFN0YXRlIiwiZ2V0QXBwU3RhdGUiLCJnZXRTdGFydHVwQXBwU3RhdGUiLCJOYXZpZ2F0aW9uU2VydmljZUZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsIm9OYXZpZ2F0aW9uU2VydmljZSIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsInRoZW4iLCJvU2VydmljZSIsIlNlcnZpY2VGYWN0b3J5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7O01BS2FBLGlCOzs7Ozs7Ozs7O1dBR1pDLEksR0FBQSxnQkFBTztBQUNOLFVBQU1DLFFBQVEsR0FBRyxLQUFLQyxVQUFMLEVBQWpCO0FBQUEsVUFDQ0MsVUFBVSxHQUFHRixRQUFRLElB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QUFBLFdBZWRVLGtCQWZjLEdBZU9WLFlBZlA7QUFBQSxXQWdCZDNDLGVBaEJjLEdBZ0JJNEMsa0JBaEJKO0FBQUEsV0FtQmROLG1CQW5CYyxHQW1CUVcsZ0JBbkJSO0FBQ2IsV0FBSzlELFdBQUwsR0FBbUJDLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixJQUFoQixDQUFuQjtBQUNBOzs7OztZQUVEbUQsWSxHQUFBLHdCQUFlO0FBQ2QsYUFBTyxJQUFQO0FBQ0EsSyxDQUVEOzs7WUFhQXRCLHVCLEdBQUEsaUNBQXdCQyxRQUF4QixFQUF1QztBQUN0QyxhQUFPQSxRQUFRLEdBQUdBLFFBQUgsR0FBYyxFQUE3QjtBQUNBLEs7O1lBRUQzQixRLEdBQUEsb0JBQVcsQ0FDVjtBQUNBLEs7Ozs7Ozs7TUFHSThELHdCOzs7Ozs7Ozs7WUFDTEMsYyxHQUFBLHdCQUFlQyxlQUFmLEVBQTJFO0FBQzFFLFVBQU1DLGtCQUFrQixHQUN2QkMsR0FBRyxDQUFDQyxNQUFKLElBQWNELEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUF6QixHQUFxQyxJQUFJbkYsaUJBQUosQ0FBc0IrRSxlQUF0QixDQUFyQyxHQUE4RSxJQUFJTixzQkFBSixFQUQvRSxDQUQwRSxDQUcxRTs7QUFDQSxhQUFPTyxrQkFBa0IsQ0FBQ3RFLFdBQW5CLENBQStCMEUsSUFBL0IsQ0FBb0MsVUFBVUMsUUFBVixFQUF5QjtBQUNuRSxlQUFPQSxRQUFQO0FBQ0EsT0FGTSxDQUFQO0FBR0EsSzs7O0lBUnFDQyxjOztTQVd4QlQsd0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5hdmlnYXRpb25IYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbnR5cGUgTmF2aWdhdGlvblNlcnZpY2VTZXR0aW5ncyA9IHt9O1xuZXhwb3J0IGNsYXNzIE5hdmlnYXRpb25TZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxOYXZpZ2F0aW9uU2VydmljZVNldHRpbmdzPiB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRvTmF2SGFuZGxlciE6IE5hdmlnYXRpb25IYW5kbGVyO1xuXHRpbml0KCkge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG5cdFx0XHRvQ29tcG9uZW50ID0gb0NvbnRleHQgJiYgb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cblx0XHR0aGlzLm9OYXZIYW5kbGVyID0gbmV3IE5hdmlnYXRpb25IYW5kbGVyKG9Db21wb25lbnQpO1xuXHRcdHRoaXMub05hdkhhbmRsZXIuc2V0TW9kZWwob0NvbXBvbmVudC5nZXRNb2RlbCgpKTtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuXHR9XG5cdGV4aXQoKSB7XG5cdFx0dGhpcy5vTmF2SGFuZGxlci5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgYSBjcm9zcy1hcHAgbmF2aWdhdGlvbiBhZnRlciBzYXZpbmcgdGhlIGlubmVyIGFuZCB0aGUgY3Jvc3MtYXBwIHN0YXRlcy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNPYmplY3QgU2VtYW50aWMgb2JqZWN0IG9mIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBBY3Rpb24gb2YgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIFt2TmF2aWdhdGlvblBhcmFtZXRlcnNdIE5hdmlnYXRpb24gcGFyYW1ldGVycyBhcyBhbiBvYmplY3Qgd2l0aCBrZXkvdmFsdWUgcGFpcnMgb3IgYXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Zcblx0ICogICAgICAgIHN1Y2ggYW4gb2JqZWN0LiBJZiBwYXNzZWQgYXMgYW4gb2JqZWN0LCB0aGUgcHJvcGVydGllcyBhcmUgbm90IGNoZWNrZWQgYWdhaW5zdCB0aGUgPGNvZGU+SXNQb3RlbnRpYWxTZW5zaXRpdmU8L2NvZGU+IG9yXG5cdCAqICAgICAgICA8Y29kZT5NZWFzdXJlPC9jb2RlPiB0eXBlLlxuXHQgKiBAcGFyYW0gW29Jbm5lckFwcERhdGFdIE9iamVjdCBmb3Igc3RvcmluZyBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHBcblx0ICogQHBhcmFtIFtmbk9uRXJyb3JdIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgbmF2aWdhdGlvbiA8YnI+XG5cdCAqIEBwYXJhbSBbb0V4dGVybmFsQXBwRGF0YV0gT2JqZWN0IGZvciBzdG9yaW5nIHRoZSBzdGF0ZSB3aGljaCB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgdGFyZ2V0IGNvbXBvbmVudC5cblx0ICogQHBhcmFtIFtzTmF2TW9kZV0gQXJndW1lbnQgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIEZMUC1jb25maWd1cmVkIHRhcmdldCBmb3Igb3BlbmluZyBhIFVSTC4gSWYgdXNlZCwgb25seSB0aGVcblx0ICogICAgICAgIDxjb2RlPmV4cGxhY2U8L2NvZGU+IG9yIDxjb2RlPmlucGxhY2U8L2NvZGU+IHZhbHVlcyBhcmUgYWxsb3dlZC4gQW55IG90aGVyIHZhbHVlIHdpbGwgbGVhZCB0byBhbiBleGNlcHRpb25cblx0ICogICAgICAgIDxjb2RlPk5hdmlnYXRpb25IYW5kbGVyLklOVkFMSURfTkFWX01PREU8L2NvZGU+LlxuXHQgKi9cblx0bmF2aWdhdGUoXG5cdFx0c1NlbWFudGljT2JqZWN0OiBzdHJpbmcsXG5cdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHR2TmF2aWdhdGlvblBhcmFtZXRlcnM/OiBzdHJpbmcgfCBvYmplY3QsXG5cdFx0b0lubmVyQXBwRGF0YT86IG9iamVjdCxcblx0XHRmbk9uRXJyb3I/OiBGdW5jdGlvbixcblx0XHRvRXh0ZXJuYWxBcHBEYXRhPzogb2JqZWN0LFxuXHRcdHNOYXZNb2RlPzogc3RyaW5nXG5cdCkge1xuXHRcdC8vIFRPRE86IE5hdmlnYXRpb24gSGFuZGxlciBkb2VzIG5vdCBoYW5kbGUgbmF2aWdhdGlvbiB3aXRob3V0IGEgY29udGV4dFxuXHRcdC8vIGJ1dCBpbiB2NCBEYXRhRmllbGRGb3JJQk4gd2l0aCByZXF1aXJlc0NvbnRleHQgZmFsc2UgY2FuIHRyaWdnZXIgYSBuYXZpZ2F0aW9uIHdpdGhvdXQgYW55IGNvbnRleHRcblx0XHQvLyBUaGlzIHNob3VsZCBiZSBoYW5kbGVkXG5cdFx0dGhpcy5vTmF2SGFuZGxlci5uYXZpZ2F0ZShcblx0XHRcdHNTZW1hbnRpY09iamVjdCxcblx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0dk5hdmlnYXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0b0lubmVyQXBwRGF0YSxcblx0XHRcdGZuT25FcnJvcixcblx0XHRcdG9FeHRlcm5hbEFwcERhdGEsXG5cdFx0XHRzTmF2TW9kZVxuXHRcdCk7XG5cdH1cblx0LyoqXG5cdCAqIFBhcnNlcyB0aGUgaW5jb21pbmcgVVJMIGFuZCByZXR1cm5zIGEgUHJvbWlzZS5cblx0ICpcblx0ICogQHJldHVybnMgQSBQcm9taXNlIG9iamVjdCB3aGljaCByZXR1cm5zIHRoZVxuXHQgKiBleHRyYWN0ZWQgYXBwIHN0YXRlLCB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzLCBhbmQgdGhlIHR5cGUgb2YgbmF2aWdhdGlvbiB3aGVuIGV4ZWN1dGlvbiBpcyBzdWNjZXNzZnVsLFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdHBhcnNlTmF2aWdhdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5vTmF2SGFuZGxlci5wYXJzZU5hdmlnYXRpb24oKTtcblx0fVxuXHQvKipcblx0ICogUHJvY2Vzc2VzIG5hdmlnYXRpb24tcmVsYXRlZCB0YXNrcyByZWxhdGVkIHRvIGJlZm9yZVBvcG92ZXJPcGVucyBldmVudCBoYW5kbGluZyBmb3IgdGhlIFNtYXJ0TGluayBjb250cm9sIGFuZCByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBvVGFibGVFdmVudFBhcmFtZXRlcnMgVGhlIHBhcmFtZXRlcnMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIFNtYXJ0VGFibGUgY29udHJvbCB3aGVuIHRoZSBTbWFydExpbmsgY29udHJvbCBoYXMgYmVlbiBjbGlja2VkLFxuXHQgKiAgICAgICAgYW4gaW5zdGFuY2Ugb2YgYSBQb3BPdmVyIG9iamVjdFxuXHQgKiBAcGFyYW0gc1NlbGVjdGlvblZhcmlhbnQgU3RyaW5naWZpZWQgSlNPTiBvYmplY3QgYXMgcmV0dXJuZWQsIGZvciBleGFtcGxlLCBmcm9tIGdldERhdGFTdWl0ZUZvcm1hdCgpIG9mIHRoZSBTbWFydEZpbHRlckJhciBjb250cm9sXG5cdCAqIEBwYXJhbSBbbUlubmVyQXBwRGF0YV0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFwcC4gSWYgcHJvdmlkZWQsIG9wZW5pbmcgdGhlIFBvcG92ZXIgaXMgZGVmZXJyZWQgdW50aWwgdGhlXG5cdCAqICAgICAgICBpbm5lciBhcHAgZGF0YSBpcyBzYXZlZCBpbiBhIGNvbnNpc3RlbnQgd2F5LlxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Ugb2JqZWN0IHRvIG1vbml0b3Igd2hlbiBhbGwgYWN0aW9ucyBvZiB0aGUgZnVuY3Rpb24gaGF2ZSBiZWVuIGV4ZWN1dGVkOyBpZiB0aGUgZXhlY3V0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZVxuXHQgKiAgICAgICAgICBtb2RpZmllZCBvVGFibGVFdmVudFBhcmFtZXRlcnMgaXMgcmV0dXJuZWQ7IGlmIGFuIGVycm9yIG9jY3VycywgYW4gZXJyb3Igb2JqZWN0IG9mIHR5cGVcblx0ICogICAgICAgICAge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLk5hdkVycm9yfSBpcyByZXR1cm5lZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3Byb2Nlc3NCZWZvcmVTbWFydExpbmtQb3BvdmVyT3BlbnMob1RhYmxlRXZlbnRQYXJhbWV0ZXJzOiBvYmplY3QsIHNTZWxlY3Rpb25WYXJpYW50OiBzdHJpbmcsIG1Jbm5lckFwcERhdGE6IG9iamVjdCB8IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB0aGlzLm9OYXZIYW5kbGVyLnByb2Nlc3NCZWZvcmVTbWFydExpbmtQb3BvdmVyT3BlbnMob1RhYmxlRXZlbnRQYXJhbWV0ZXJzLCBzU2VsZWN0aW9uVmFyaWFudCwgbUlubmVyQXBwRGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvY2Vzc2VzIHNlbGVjdGlvblZhcmlhbnQgc3RyaW5nIGFuZCByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QgKHNlbWFudGljQXR0cmlidXRlcyBhbmQgQXBwU3RhdGVLZXkpLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1NlbGVjdGlvblZhcmlhbnQgU3RyaW5naWZpZWQgSlNPTiBvYmplY3Rcblx0ICogQHJldHVybnMgQSBQcm9taXNlIG9iamVjdCB0byBtb25pdG9yIHdoZW4gYWxsIGFjdGlvbnMgb2YgdGhlIGZ1bmN0aW9uIGhhdmUgYmVlbiBleGVjdXRlZDsgaWYgdGhlIGV4ZWN1dGlvbiBpcyBzdWNjZXNzZnVsLCB0aGVcblx0ICogICAgICAgICAgc2VtYW50aWNBdHRyaWJ1dGVzIGFzIHdlbGwgYXMgdGhlIGFwcFN0YXRlS2V5IGFyZSByZXR1cm5lZDsgaWYgYW4gZXJyb3Igb2NjdXJzLCBhbiBlcnJvciBvYmplY3Qgb2YgdHlwZVxuXHQgKiAgICAgICAgICB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uTmF2RXJyb3J9IGlzIHJldHVybmVkXG5cdCAqIDxicj5cblx0ICogQGV4YW1wbGUgPGNvZGU+XG5cdCAqXG5cdCAqIFx0XHR2YXIgb1NlbGVjdGlvblZhcmlhbnQgPSBuZXcgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudCgpO1xuXHQgKiBcdFx0b1NlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKFwiQ29tcGFueUNvZGVcIiwgXCJJXCIsIFwiRVFcIiwgXCIwMDAxXCIpO1xuXHQgKiBcdFx0b1NlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKFwiQ3VzdG9tZXJcIiwgXCJJXCIsIFwiRVFcIiwgXCJDMDAwMVwiKTtcblx0ICogXHRcdHZhciBzU2VsZWN0aW9uVmFyaWFudD0gb1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCk7XG5cdCAqXG5cdCAqIFx0XHR2YXIgb05hdmlnYXRpb25IYW5kbGVyID0gbmV3IHNhcC5mZS5uYXZpZ2F0aW9uLk5hdmlnYXRpb25IYW5kbGVyKG9Db250cm9sbGVyKTtcblx0ICogXHRcdHZhciBvUHJvbWlzZU9iamVjdCA9IG9OYXZpZ2F0aW9uSGFuZGxlci5fZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzKHNTZWxlY3Rpb25WYXJpYW50KTtcblx0ICpcblx0ICogXHRcdG9Qcm9taXNlT2JqZWN0LmRvbmUoZnVuY3Rpb24ob1NlbWFudGljQXR0cmlidXRlcywgc0FwcFN0YXRlS2V5KXtcblx0ICogXHRcdFx0Ly8gaGVyZSB5b3UgY2FuIGFkZCBjb2RpbmcgdGhhdCBzaG91bGQgcnVuIGFmdGVyIGFsbCBhcHAgc3RhdGUgYW5kIHRoZSBzZW1hbnRpYyBhdHRyaWJ1dGVzIGhhdmUgYmVlbiByZXR1cm5lZC5cblx0ICogXHRcdH0pO1xuXHQgKlxuXHQgKiBcdFx0b1Byb21pc2VPYmplY3QuZmFpbChmdW5jdGlvbihvRXJyb3Ipe1xuXHQgKiBcdFx0XHQvL3NvbWUgZXJyb3IgaGFuZGxpbmdcblx0ICogXHRcdH0pO1xuXHQgKlxuXHQgKiA8L2NvZGU+XG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Z2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzKHNTZWxlY3Rpb25WYXJpYW50OiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5vTmF2SGFuZGxlci5fZ2V0QXBwU3RhdGVLZXlBbmRVcmxQYXJhbWV0ZXJzKHNTZWxlY3Rpb25WYXJpYW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpYyB0ZWNobmljYWwgcGFyYW1ldGVycy5cblx0ICpcblx0ICogQHJldHVybnMgQ29udGFpbmluZyB0aGUgdGVjaG5pY2FsIHBhcmFtZXRlcnMuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Z2V0VGVjaG5pY2FsUGFyYW1ldGVycygpIHtcblx0XHRyZXR1cm4gdGhpcy5vTmF2SGFuZGxlci5nZXRUZWNobmljYWxQYXJhbWV0ZXJzKCk7XG5cdH1cblx0LyoqXG5cdCAqIFNldHMgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZmljIHRlY2huaWNhbCBwYXJhbWV0ZXJzLiBUZWNobmljYWwgcGFyYW1ldGVycyB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgcGFzc2VkIHRvIHRoZVxuXHQgKiBhcHBsaWNhdGlvbi5cblx0ICogQXMgYSBkZWZhdWx0IHNhcC1zeXN0ZW0sIHNhcC11c2hlbGwtZGVmYXVsdGVkUGFyYW1ldGVyTmFtZXMgYW5kIGhjcEFwcGxpY2F0aW9uSWQgYXJlIGNvbnNpZGVyZWQgYXMgdGVjaG5pY2FsIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBhVGVjaG5pY2FsUGFyYW1ldGVycyBMaXN0IG9mIHBhcmFtZXRlciBuYW1lcyB0byBiZSBjb25zaWRlcmVkIGFzIHRlY2huaWNhbCBwYXJhbWV0ZXJzLiA8Y29kZT5udWxsPC9jb2RlPiBvclxuXHQgKiAgICAgICAgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBtYXkgYmUgdXNlZCB0byByZXNldCB0aGUgY29tcGxldGUgbGlzdC5cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRzZXRUZWNobmljYWxQYXJhbWV0ZXJzKGFUZWNobmljYWxQYXJhbWV0ZXJzOiBhbnlbXSkge1xuXHRcdHRoaXMub05hdkhhbmRsZXIuc2V0VGVjaG5pY2FsUGFyYW1ldGVycyhhVGVjaG5pY2FsUGFyYW1ldGVycyk7XG5cdH1cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1vZGVsIHRoYXQgaXMgdXNlZCBmb3IgdmVyaWZpY2F0aW9uIG9mIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4gSWYgdGhlIG1vZGVsIGlzIG5vdCBzZXQsIHRoZSB1bm5hbWVkIGNvbXBvbmVudCBtb2RlbCBpcyB1c2VkIGZvciB0aGVcblx0ICogdmVyaWZpY2F0aW9uIG9mIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBvTW9kZWwgTW9kZWwgRm9yIGNoZWNraW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvblxuXHQgKi9cblx0c2V0TW9kZWwob01vZGVsOiBhbnkpIHtcblx0XHR0aGlzLm9OYXZIYW5kbGVyLnNldE1vZGVsKG9Nb2RlbCk7XG5cdH1cblx0LyoqXG5cdCAqIENoYW5nZXMgdGhlIFVSTCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgYXBwIHN0YXRlIGFuZCBzdG9yZXMgdGhlIGFwcCBzdGF0ZSBmb3IgbGF0ZXIgcmV0cmlldmFsLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIG1Jbm5lckFwcERhdGEgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFwcFxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Ugb2JqZWN0IHRvIG1vbml0b3Igd2hlbiBhbGwgdGhlIGFjdGlvbnMgb2YgdGhlIGZ1bmN0aW9uIGhhdmUgYmVlbiBleGVjdXRlZDsgaWYgdGhlIGV4ZWN1dGlvbiBpcyBzdWNjZXNzZnVsLCB0aGVcblx0ICogICAgICAgICAgYXBwIHN0YXRlIGtleSBpcyByZXR1cm5lZDsgaWYgYW4gZXJyb3Igb2NjdXJzLCBhbiBvYmplY3Qgb2YgdHlwZSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uTmF2RXJyb3J9IGlzXG5cdCAqICAgICAgICAgIHJldHVybmVkXG5cdCAqL1xuXHRzdG9yZUlubmVyQXBwU3RhdGUobUlubmVyQXBwRGF0YTogb2JqZWN0KSB7XG5cdFx0cmV0dXJuIHRoaXMub05hdkhhbmRsZXIuc3RvcmVJbm5lckFwcFN0YXRlKG1Jbm5lckFwcERhdGEpO1xuXHR9XG5cdC8qKlxuXHQgKiBDaGFuZ2VzIHRoZSBVUkwgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGFwcCBzdGF0ZSBhbmQgc3RvcmVzIHRoZSBhcHAgc3RhdGUgZm9yIGxhdGVyIHJldHJpZXZhbC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBtSW5uZXJBcHBEYXRhIE9iamVjdCBjb250YWluaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHBcblx0ICogQHBhcmFtIFtiSW1tZWRpYXRlSGFzaFJlcGxhY2U9ZmFsc2VdIElmIHNldCB0byBmYWxzZSwgdGhlIGlubmVyIGFwcCBoYXNoIHdpbGwgbm90IGJlIHJlcGxhY2VkIHVudGlsIHN0b3JpbmcgaXMgc3VjY2Vzc2Z1bDsgZG8gbm90XG5cdCAqIEBwYXJhbSBiTm90TGVnYWN5XG5cdCAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhcHBTdGF0ZUlkIGFuZCBhIHByb21pc2Ugb2JqZWN0IHRvIG1vbml0b3Igd2hlbiBhbGwgdGhlIGFjdGlvbnMgb2YgdGhlIGZ1bmN0aW9uIGhhdmUgYmVlblxuXHQgKiBleGVjdXRlZDsgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYXBwU3RhdGVLZXkgbWF5IGJlIHVuZGVmaW5lZCBvciBlbXB0eS5cblx0ICovXG5cdHN0b3JlSW5uZXJBcHBTdGF0ZVdpdGhJbW1lZGlhdGVSZXR1cm4obUlubmVyQXBwRGF0YTogb2JqZWN0LCBiSW1tZWRpYXRlSGFzaFJlcGxhY2U6IGJvb2xlYW4gfCB1bmRlZmluZWQsIGJOb3RMZWdhY3k6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLm9OYXZIYW5kbGVyLnN0b3JlSW5uZXJBcHBTdGF0ZVdpdGhJbW1lZGlhdGVSZXR1cm4obUlubmVyQXBwRGF0YSwgYkltbWVkaWF0ZUhhc2hSZXBsYWNlLCBiTm90TGVnYWN5KTtcblx0fVxuXHQvKipcblx0ICogQ2hhbmdlcyB0aGUgVVJMIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzQXBwU3RhdGVLZXkuIEFzIGFuIHJlYWN0aW9uIHJvdXRlIGNoYW5nZSBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBzQXBwU3RhdGVLZXkgVGhlIG5ldyBhcHAgc3RhdGUga2V5LlxuXHQgKi9cblx0cmVwbGFjZUhhc2goc0FwcFN0YXRlS2V5OiBzdHJpbmcpIHtcblx0XHR0aGlzLm9OYXZIYW5kbGVyLnJlcGxhY2VIYXNoKHNBcHBTdGF0ZUtleSk7XG5cdH1cblx0cmVwbGFjZUlubmVyQXBwU3RhdGVLZXkoc0FwcEhhc2g6IGFueSwgc0FwcFN0YXRlS2V5OiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5vTmF2SGFuZGxlci5fcmVwbGFjZUlubmVyQXBwU3RhdGVLZXkoc0FwcEhhc2gsIHNBcHBTdGF0ZUtleSk7XG5cdH1cblx0LyoqXG5cdCAqIEdldCBzaW5nbGUgdmFsdWVzIGZyb20gU2VsZWN0aW9uVmFyaWFudCBmb3IgdXJsIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gW3ZTZWxlY3Rpb25WYXJpYW50XVxuXHQgKiBAcGFyYW0gW3ZTZWxlY3Rpb25WYXJpYW50Lm9VcmxQYXJhbWF0ZXJzXVxuXHQgKiBAcmV0dXJucyBUaGUgdXJsIHBhcmFtZXRlcnNcblx0ICovXG5cdGdldFVybFBhcmFtZXRlcnNGcm9tU2VsZWN0aW9uVmFyaWFudCh2U2VsZWN0aW9uVmFyaWFudDogc3RyaW5nIHwgb2JqZWN0IHwgdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHRoaXMub05hdkhhbmRsZXIuX2dldFVSTFBhcmFtZXRlcnNGcm9tU2VsZWN0aW9uVmFyaWFudCh2U2VsZWN0aW9uVmFyaWFudCk7XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZSBhcHAgc3RhdGUgYW5kIHJldHVybiBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgZm9yIHJlc3BvbnNlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIG9JblNlbGVjdGlvblZhcmlhbnQgSW5zdGFuY2Ugb2Ygc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudFxuXHQgKiBAcmV0dXJucyBBcHBTdGF0ZSBrZXlcblx0ICovXG5cdHNhdmVBcHBTdGF0ZVdpdGhJbW1lZGlhdGVSZXR1cm4ob0luU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdGlmIChvSW5TZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRjb25zdCBzU2VsZWN0aW9uVmFyaWFudCA9IG9JblNlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCksIC8vIGNyZWF0ZSBhbiBTViBmb3IgYXBwIHN0YXRlIGluIHN0cmluZyBmb3JtYXRcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQgPSBKU09OLnBhcnNlKHNTZWxlY3Rpb25WYXJpYW50KSwgLy8gY29udmVydCBzdHJpbmcgaW50byBKU09OIHRvIHN0b3JlIGluIEFwcFN0YXRlXG5cdFx0XHRcdG9YQXBwU3RhdGVPYmplY3QgPSB7XG5cdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb1NlbGVjdGlvblZhcmlhbnRcblx0XHRcdFx0fSxcblx0XHRcdFx0b1JldHVybiA9IHRoaXMub05hdkhhbmRsZXIuX3NhdmVBcHBTdGF0ZVdpdGhJbW1lZGlhdGVSZXR1cm4ob1hBcHBTdGF0ZU9iamVjdCk7XG5cdFx0XHRyZXR1cm4gb1JldHVybi5hcHBTdGF0ZUtleSA/IG9SZXR1cm4uYXBwU3RhdGVLZXkgOiBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNaXggQXR0cmlidXRlcyBhbmQgc2VsZWN0aW9uVmFyaWFudC5cblx0ICpcblx0ICogQHBhcmFtIHZTZW1hbnRpY0F0dHJpYnV0ZXMgT2JqZWN0LyhBcnJheSBvZiBPYmplY3RzKSBjb250YWluaW5nIGtleS92YWx1ZSBwYWlyc1xuXHQgKiBAcGFyYW0gc1NlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvbiB2YXJpYW50IGluIHN0cmluZyBmb3JtYXQgYXMgcHJvdmlkZWQgYnkgdGhlIFNtYXJ0RmlsdGVyQmFyIGNvbnRyb2xcblx0ICogQHBhcmFtIFtpU3VwcHJlc3Npb25CZWhhdmlvcj1zYXAuZmUubmF2aWdhdGlvbi5TdXBwcmVzc2lvbkJlaGF2aW9yLnN0YW5kYXJkXSBJbmRpY2F0ZXMgd2hldGhlciBzZW1hbnRpY1xuXHQgKiAgICAgICAgYXR0cmlidXRlcyB3aXRoIHNwZWNpYWwgdmFsdWVzIChzZWUge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlN1cHByZXNzaW9uQmVoYXZpb3Igc3VwcHJlc3Npb24gYmVoYXZpb3J9KSBtdXN0IGJlXG5cdCAqICAgICAgICBzdXBwcmVzc2VkIGJlZm9yZSB0aGV5IGFyZSBjb21iaW5lZCB3aXRoIHRoZSBzZWxlY3Rpb24gdmFyaWFudDsgc2V2ZXJhbFxuXHQgKiAgICAgICAge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlN1cHByZXNzaW9uQmVoYXZpb3Igc3VwcHJlc3Npb24gYmVoYXZpb3JzfSBjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgYml0d2lzZSBPUiBvcGVyYXRvclxuXHQgKiAgICAgICAgKHwpXG5cdCAqIEByZXR1cm5zIEluc3RhbmNlIG9mIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fVxuXHQgKi9cblx0bWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQoXG5cdFx0dlNlbWFudGljQXR0cmlidXRlczogb2JqZWN0IHwgYW55W10sXG5cdFx0c1NlbGVjdGlvblZhcmlhbnQ6IHN0cmluZyB8IFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0aVN1cHByZXNzaW9uQmVoYXZpb3I/OiBudW1iZXJcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMub05hdkhhbmRsZXIubWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQodlNlbWFudGljQXR0cmlidXRlcywgc1NlbGVjdGlvblZhcmlhbnQsIGlTdXBwcmVzc2lvbkJlaGF2aW9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIGNyZWF0ZXMgYSBjb250ZXh0IHVybCBiYXNlZCBvbiBwcm92aWRlZCBkYXRhLiBUaGlzIGNvbnRleHQgdXJsIGNhbiBlaXRoZXIgYmUgdXNlZCBhcy5cblx0ICpcblx0ICogQHBhcmFtIHNFbnRpdHlTZXROYW1lIFVzZWQgZm9yIHVybCBkZXRlcm1pbmF0aW9uXG5cdCAqIEBwYXJhbSBbb01vZGVsXSBUaGUgT0RhdGFNb2RlbCB1c2VkIGZvciB1cmwgZGV0ZXJtaW5hdGlvbi4gSWYgb21pdHRlZCwgdGhlIE5hdmlnYXRpb25IYW5kbGVyIG1vZGVsIGlzIHVzZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHVybCBmb3IgdGhlIGdpdmVuIGVudGl0aWVzXG5cdCAqL1xuXHRjb25zdHJ1Y3RDb250ZXh0VXJsKHNFbnRpdHlTZXROYW1lOiBzdHJpbmcsIG9Nb2RlbDogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMub05hdkhhbmRsZXIuY29uc3RydWN0Q29udGV4dFVybChzRW50aXR5U2V0TmFtZSwgb01vZGVsKTtcblx0fVxuXHRnZXRJbnRlcmZhY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbmZ1bmN0aW9uIGZuR2V0RW1wdHlPYmplY3QoKSB7XG5cdHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gZm5HZXRQcm9taXNlKCkge1xuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbn1cblxuZnVuY3Rpb24gZm5HZXRKUXVlcnlQcm9taXNlKCkge1xuXHRjb25zdCBvTXlEZWZmZXJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXHRvTXlEZWZmZXJlZC5yZXNvbHZlKHt9LCB7fSwgXCJpbml0aWFsXCIpO1xuXHRyZXR1cm4gb015RGVmZmVyZWQucHJvbWlzZSgpO1xufVxuXG5mdW5jdGlvbiBmbkdldEVtcHR5U3RyaW5nKCkge1xuXHRyZXR1cm4gXCJcIjtcbn1cbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uU2VydmljZXNNb2NrIHtcblx0aW5pdFByb21pc2U6IFByb21pc2U8YW55Pjtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzKTtcblx0fVxuXG5cdGdldEludGVyZmFjZSgpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8vIHJldHVybiBlbXB0eSBvYmplY3Rcblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZSA9IGZuR2V0RW1wdHlPYmplY3Q7XG5cdHN0b3JlSW5uZXJBcHBTdGF0ZVdpdGhJbW1lZGlhdGVSZXR1cm4gPSBmbkdldEVtcHR5T2JqZWN0O1xuXHRtaXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudCA9IGZuR2V0RW1wdHlPYmplY3Q7XG5cblx0Ly8gcmV0dXJuIHByb21pc2Vcblx0Z2V0QXBwU3RhdGUgPSBmbkdldFByb21pc2U7XG5cdGdldFN0YXJ0dXBBcHBTdGF0ZSA9IGZuR2V0UHJvbWlzZTtcblx0cGFyc2VOYXZpZ2F0aW9uID0gZm5HZXRKUXVlcnlQcm9taXNlO1xuXG5cdC8vIHJldHVybiBlbXB0eSBzdHJpbmdcblx0Y29uc3RydWN0Q29udGV4dFVybCA9IGZuR2V0RW1wdHlTdHJpbmc7XG5cblx0cmVwbGFjZUlubmVyQXBwU3RhdGVLZXkoc0FwcEhhc2g6IGFueSkge1xuXHRcdHJldHVybiBzQXBwSGFzaCA/IHNBcHBIYXNoIDogXCJcIjtcblx0fVxuXG5cdG5hdmlnYXRlKCkge1xuXHRcdC8vIERvbid0IGRvIGFueXRoaW5nXG5cdH1cbn1cblxuY2xhc3MgTmF2aWdhdGlvblNlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8TmF2aWdhdGlvblNlcnZpY2VTZXR0aW5ncz4ge1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PE5hdmlnYXRpb25TZXJ2aWNlU2V0dGluZ3M+KSB7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25TZXJ2aWNlID1cblx0XHRcdHNhcC51c2hlbGwgJiYgc2FwLnVzaGVsbC5Db250YWluZXIgPyBuZXcgTmF2aWdhdGlvblNlcnZpY2Uob1NlcnZpY2VDb250ZXh0KSA6IG5ldyBOYXZpZ2F0aW9uU2VydmljZXNNb2NrKCk7XG5cdFx0Ly8gV2FpdCBGb3IgaW5pdFxuXHRcdHJldHVybiBvTmF2aWdhdGlvblNlcnZpY2UuaW5pdFByb21pc2UudGhlbihmdW5jdGlvbiAob1NlcnZpY2U6IGFueSkge1xuXHRcdFx0cmV0dXJuIG9TZXJ2aWNlO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeTtcbiJdfQ==
|