@sapui5/sap.fe.core 1.100.0 → 1.102.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 +4 -4
- package/src/sap/fe/core/.library +2 -3
- package/src/sap/fe/core/AppComponent.js +23 -30
- package/src/sap/fe/core/AppComponent.ts +35 -40
- package/src/sap/fe/core/AppStateHandler.js +8 -8
- package/src/sap/fe/core/AppStateHandler.ts +11 -11
- package/src/sap/fe/core/BaseController.js +9 -9
- package/src/sap/fe/core/BaseController.ts +3 -4
- package/src/sap/fe/core/CommonUtils.js +122 -101
- package/src/sap/fe/core/CommonUtils.ts +239 -193
- package/src/sap/fe/core/ExtensionAPI.js +12 -13
- package/src/sap/fe/core/ExtensionAPI.ts +21 -31
- package/src/sap/fe/core/PageController.js +19 -13
- package/src/sap/fe/core/PageController.ts +40 -34
- package/src/sap/fe/core/TemplateComponent.js +198 -123
- package/src/sap/fe/core/TemplateComponent.ts +109 -121
- package/src/sap/fe/core/TemplateModel.js +7 -9
- package/src/sap/fe/core/TemplateModel.ts +3 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +935 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +837 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
- package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
- package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.js +660 -288
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +513 -331
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +43 -25
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +132 -103
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +16 -16
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +64 -55
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +166 -99
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +187 -149
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
- package/src/sap/fe/core/controllerextensions/MassEdit.js +13 -12
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +22 -22
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +14 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +20 -30
- package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
- package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
- package/src/sap/fe/core/controllerextensions/Paginator.js +24 -15
- package/src/sap/fe/core/controllerextensions/Paginator.ts +35 -20
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +34 -16
- package/src/sap/fe/core/controllerextensions/Share.ts +50 -32
- package/src/sap/fe/core/controllerextensions/SideEffects.js +15 -15
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +64 -65
- package/src/sap/fe/core/controllerextensions/ViewState.js +27 -31
- package/src/sap/fe/core/controllerextensions/ViewState.ts +103 -102
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +90 -132
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +18 -8
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +264 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +35 -33
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +100 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1584 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +190 -159
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +780 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +329 -76
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1149 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +169 -97
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +592 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +83 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +52 -36
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- package/src/sap/fe/core/controls/Any.js +28 -0
- package/src/sap/fe/core/controls/Any.ts +30 -0
- package/src/sap/fe/core/controls/CommandExecution.js +50 -16
- package/src/sap/fe/core/controls/CommandExecution.ts +31 -22
- package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +371 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +282 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +74 -36
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +23 -32
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +52 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +127 -67
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +127 -67
- package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
- package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
- package/src/sap/fe/core/controls/FileWrapper.js +360 -0
- package/src/sap/fe/core/controls/FileWrapper.ts +202 -0
- package/src/sap/fe/core/controls/FilterBar.js +154 -119
- package/src/sap/fe/core/controls/FilterBar.ts +128 -123
- package/src/sap/fe/core/controls/FormElementWrapper.js +102 -37
- package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -35
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +41 -81
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -35
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +9 -2
- package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
- package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
- package/src/sap/fe/core/converters/annotations/DataField.js +20 -5
- package/src/sap/fe/core/converters/annotations/DataField.ts +27 -6
- package/src/sap/fe/core/converters/controls/Common/Action.js +14 -21
- package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -28
- package/src/sap/fe/core/converters/controls/Common/Chart.js +17 -10
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -14
- package/src/sap/fe/core/converters/controls/Common/Form.js +16 -18
- package/src/sap/fe/core/converters/controls/Common/Form.ts +20 -20
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
- package/src/sap/fe/core/converters/controls/Common/Table.js +389 -173
- package/src/sap/fe/core/converters/controls/Common/Table.ts +440 -244
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +26 -16
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -19
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +78 -47
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +146 -107
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +30 -25
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +39 -34
- package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -28
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +38 -45
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
- package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
- package/src/sap/fe/core/formatters/TableFormatter.js +74 -13
- package/src/sap/fe/core/formatters/TableFormatter.ts +71 -16
- package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
- package/src/sap/fe/core/fpm/Component.js +46 -17
- package/src/sap/fe/core/fpm/Component.ts +11 -16
- package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
- package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
- package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
- package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
- package/src/sap/fe/core/helpers/ClassSupport.ts +315 -237
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
- package/src/sap/fe/core/helpers/MassEditHelper.js +522 -147
- package/src/sap/fe/core/helpers/MassEditHelper.ts +563 -236
- package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +39 -26
- package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
- package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +5 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -8
- package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
- package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
- package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
- package/src/sap/fe/core/library.js +13 -5
- package/src/sap/fe/core/library.ts +26 -17
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
- package/src/sap/fe/core/messagebundle.properties +135 -180
- package/src/sap/fe/core/messagebundle_ar.properties +31 -64
- package/src/sap/fe/core/messagebundle_bg.properties +31 -64
- package/src/sap/fe/core/messagebundle_ca.properties +31 -64
- package/src/sap/fe/core/messagebundle_cs.properties +31 -64
- package/src/sap/fe/core/messagebundle_cy.properties +32 -65
- package/src/sap/fe/core/messagebundle_da.properties +31 -64
- package/src/sap/fe/core/messagebundle_de.properties +29 -62
- package/src/sap/fe/core/messagebundle_el.properties +32 -65
- package/src/sap/fe/core/messagebundle_en.properties +32 -65
- package/src/sap/fe/core/messagebundle_en_GB.properties +29 -62
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -74
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +32 -65
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +20 -6
- package/src/sap/fe/core/messagebundle_es.properties +31 -64
- package/src/sap/fe/core/messagebundle_es_MX.properties +31 -64
- package/src/sap/fe/core/messagebundle_et.properties +31 -64
- package/src/sap/fe/core/messagebundle_fi.properties +29 -62
- package/src/sap/fe/core/messagebundle_fr.properties +36 -69
- package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -66
- package/src/sap/fe/core/messagebundle_hi.properties +29 -62
- package/src/sap/fe/core/messagebundle_hr.properties +32 -65
- package/src/sap/fe/core/messagebundle_hu.properties +30 -63
- package/src/sap/fe/core/messagebundle_id.properties +32 -65
- package/src/sap/fe/core/messagebundle_it.properties +31 -64
- package/src/sap/fe/core/messagebundle_iw.properties +31 -64
- package/src/sap/fe/core/messagebundle_ja.properties +29 -62
- package/src/sap/fe/core/messagebundle_kk.properties +31 -64
- package/src/sap/fe/core/messagebundle_ko.properties +31 -64
- package/src/sap/fe/core/messagebundle_lt.properties +31 -64
- package/src/sap/fe/core/messagebundle_lv.properties +32 -65
- package/src/sap/fe/core/messagebundle_ms.properties +31 -64
- package/src/sap/fe/core/messagebundle_nl.properties +31 -64
- package/src/sap/fe/core/messagebundle_no.properties +31 -64
- package/src/sap/fe/core/messagebundle_pl.properties +34 -67
- package/src/sap/fe/core/messagebundle_pt.properties +32 -65
- package/src/sap/fe/core/messagebundle_pt_PT.properties +31 -64
- package/src/sap/fe/core/messagebundle_ro.properties +33 -66
- package/src/sap/fe/core/messagebundle_ru.properties +33 -66
- package/src/sap/fe/core/messagebundle_sh.properties +31 -64
- package/src/sap/fe/core/messagebundle_sk.properties +31 -64
- package/src/sap/fe/core/messagebundle_sl.properties +29 -62
- package/src/sap/fe/core/messagebundle_sv.properties +30 -63
- package/src/sap/fe/core/messagebundle_th.properties +31 -64
- package/src/sap/fe/core/messagebundle_tr.properties +31 -64
- package/src/sap/fe/core/messagebundle_uk.properties +32 -65
- package/src/sap/fe/core/messagebundle_vi.properties +31 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +32 -65
- package/src/sap/fe/core/messagebundle_zh_TW.properties +34 -67
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +11 -8
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -13
- package/src/sap/fe/core/services/NavigationServiceFactory.js +5 -5
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +9 -5
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +105 -66
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +59 -49
- package/src/sap/fe/core/services/ShellServicesFactory.js +104 -29
- package/src/sap/fe/core/services/ShellServicesFactory.ts +64 -30
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +11 -10
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +38 -51
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +0 -3
- package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +27 -6
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
- package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
- package/src/sap/fe/core/templating/FilterHelper.js +4 -4
- package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
- package/src/sap/fe/core/templating/PropertyHelper.js +70 -33
- package/src/sap/fe/core/templating/PropertyHelper.ts +49 -27
- package/src/sap/fe/core/templating/UIFormatters.js +133 -22
- package/src/sap/fe/core/templating/UIFormatters.ts +144 -50
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
- package/src/sap/fe/core/type/Email.js +26 -8
- package/src/sap/fe/core/type/Email.ts +8 -7
- package/src/sap/fe/core/AnnotationHelper.js +0 -312
- package/src/sap/fe/core/AnnotationHelper.ts +0 -315
- package/src/sap/fe/core/RouterProxy.js +0 -926
- package/src/sap/fe/core/TransactionHelper.js +0 -1562
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -392
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -136
- package/src/sap/fe/core/actions/collaboration/Manage.js +0 -262
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +0 -103
- package/src/sap/fe/core/actions/draft.js +0 -523
- package/src/sap/fe/core/actions/messageHandling.js +0 -567
- package/src/sap/fe/core/actions/nonDraft.js +0 -20
- package/src/sap/fe/core/actions/nonDraft.ts +0 -12
- package/src/sap/fe/core/actions/operations.js +0 -1096
- package/src/sap/fe/core/actions/sticky.js +0 -130
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
|
@@ -2,28 +2,28 @@
|
|
|
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(["
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/templating/DataModelPathHelper", "../helpers/BindingHelper", "../ManifestSettings"], function (Action, ConfigurableObject, Key, BindingExpression, DataModelPathHelper, BindingHelper, ManifestSettings) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
+
var ActionType = ManifestSettings.ActionType;
|
|
9
10
|
var UI = BindingHelper.UI;
|
|
10
11
|
var singletonPathVisitor = BindingHelper.singletonPathVisitor;
|
|
11
12
|
var Draft = BindingHelper.Draft;
|
|
12
13
|
var isPathDeletable = DataModelPathHelper.isPathDeletable;
|
|
13
|
-
var
|
|
14
|
-
var constant = BindingExpression.constant;
|
|
14
|
+
var not = BindingExpression.not;
|
|
15
15
|
var ifElse = BindingExpression.ifElse;
|
|
16
|
-
var and = BindingExpression.and;
|
|
17
16
|
var fn = BindingExpression.fn;
|
|
18
17
|
var equal = BindingExpression.equal;
|
|
19
|
-
var
|
|
18
|
+
var constant = BindingExpression.constant;
|
|
20
19
|
var compileBinding = BindingExpression.compileBinding;
|
|
21
20
|
var annotationExpression = BindingExpression.annotationExpression;
|
|
21
|
+
var and = BindingExpression.and;
|
|
22
|
+
var KeyHelper = Key.KeyHelper;
|
|
22
23
|
var Placement = ConfigurableObject.Placement;
|
|
23
24
|
var getSemanticObjectMapping = Action.getSemanticObjectMapping;
|
|
24
25
|
var getEnabledForAnnotationAction = Action.getEnabledForAnnotationAction;
|
|
25
26
|
var ButtonType = Action.ButtonType;
|
|
26
|
-
var ActionType = ManifestSettings.ActionType;
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* Retrieves all the data field for actions for the identification annotation
|
|
@@ -59,7 +59,7 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
|
|
|
59
59
|
*
|
|
60
60
|
* @param {EntityType} entityType The current entitytype
|
|
61
61
|
* @param {boolean} bDetermining Whether or not the action should be determining
|
|
62
|
-
* @returns {DataFieldForIntentBasedNavigationTypes[]} An array of
|
|
62
|
+
* @returns {DataFieldForIntentBasedNavigationTypes[]} An array of data field for action respecting the bDetermining property.
|
|
63
63
|
*/
|
|
64
64
|
|
|
65
65
|
|
|
@@ -233,21 +233,35 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
|
|
|
233
233
|
}
|
|
234
234
|
}),
|
|
235
235
|
bParentEntitySetDeletable = isParentDeletable ? compileBinding(isParentDeletable) : isParentDeletable,
|
|
236
|
-
headerDataFieldForActions = getIdentificationDataFieldForActions(converterContext.getEntityType(), false); //
|
|
236
|
+
headerDataFieldForActions = getIdentificationDataFieldForActions(converterContext.getEntityType(), false); // Initialize actions and start with draft actions if available since they should appear in the first
|
|
237
|
+
// leftmost position in the actions area of the OP header
|
|
238
|
+
// This is more like a placeholder than a single action, since this controls not only the templating of
|
|
239
|
+
// the button for switching between draft and active document versions but also the controls for
|
|
240
|
+
// the collaborative draft fragment.
|
|
241
|
+
|
|
242
|
+
var headerActions = [];
|
|
243
|
+
|
|
244
|
+
if (oDraftRoot !== null && oDraftRoot !== void 0 && oDraftRoot.EditAction && bUpdateHidden !== true) {
|
|
245
|
+
headerActions.push({
|
|
246
|
+
type: ActionType.DraftActions,
|
|
247
|
+
key: "DraftActions"
|
|
248
|
+
});
|
|
249
|
+
} // Then add the "Critical" DataFieldForActions
|
|
237
250
|
|
|
238
|
-
|
|
251
|
+
|
|
252
|
+
headerDataFieldForActions.filter(function (dataField) {
|
|
239
253
|
return IMPORTANT_CRITICALITIES.indexOf(dataField === null || dataField === void 0 ? void 0 : dataField.Criticality) > -1;
|
|
240
|
-
}).
|
|
254
|
+
}).forEach(function (dataField) {
|
|
241
255
|
var _dataField$annotation, _dataField$annotation2;
|
|
242
256
|
|
|
243
|
-
|
|
257
|
+
headerActions.push({
|
|
244
258
|
type: ActionType.DataFieldForAction,
|
|
245
259
|
annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
|
|
246
260
|
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
247
261
|
visible: compileBinding(not(equal(annotationExpression((_dataField$annotation = dataField.annotations) === null || _dataField$annotation === void 0 ? void 0 : (_dataField$annotation2 = _dataField$annotation.UI) === null || _dataField$annotation2 === void 0 ? void 0 : _dataField$annotation2.Hidden), true))),
|
|
248
262
|
enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
|
|
249
263
|
isNavigable: true
|
|
250
|
-
};
|
|
264
|
+
});
|
|
251
265
|
}); // Then the edit action if it exists
|
|
252
266
|
|
|
253
267
|
if ((oDraftRoot !== null && oDraftRoot !== void 0 && oDraftRoot.EditAction || oStickySessionSupported !== null && oStickySessionSupported !== void 0 && oStickySessionSupported.EditAction) && bUpdateHidden !== true) {
|
|
@@ -276,17 +290,6 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
|
|
|
276
290
|
});
|
|
277
291
|
}
|
|
278
292
|
|
|
279
|
-
if (oDraftRoot !== null && oDraftRoot !== void 0 && oDraftRoot.EditAction && bUpdateHidden !== true) {
|
|
280
|
-
headerActions.push({
|
|
281
|
-
type: ActionType.SwitchToActiveObject,
|
|
282
|
-
key: "SwitchToActiveObject"
|
|
283
|
-
});
|
|
284
|
-
headerActions.push({
|
|
285
|
-
type: ActionType.SwitchToDraftObject,
|
|
286
|
-
key: "SwitchToDraftObject"
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
|
|
290
293
|
var headerDataFieldForIBNActions = getIdentificationDataFieldForIBNActions(converterContext.getEntityType(), false);
|
|
291
294
|
headerDataFieldForIBNActions.filter(function (dataField) {
|
|
292
295
|
return IMPORTANT_CRITICALITIES.indexOf(dataField === null || dataField === void 0 ? void 0 : dataField.Criticality) === -1;
|
|
@@ -445,4 +448,4 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
|
|
|
445
448
|
_exports.getFooterDefaultActions = getFooterDefaultActions;
|
|
446
449
|
return _exports;
|
|
447
450
|
}, false);
|
|
448
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhlYWRlckFuZEZvb3RlckFjdGlvbi50cyJdLCJuYW1lcyI6WyJnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMiLCJlbnRpdHlUeXBlIiwiYkRldGVybWluaW5nIiwiYW5ub3RhdGlvbnMiLCJVSSIsIklkZW50aWZpY2F0aW9uIiwiZmlsdGVyIiwiaWRlbnRpZmljYXRpb25EYXRhRmllbGQiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiJFR5cGUiLCJEZXRlcm1pbmluZyIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwiZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMiLCJnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5IiwiY29udmVydGVyQ29udGV4dCIsImRlbGV0ZUhpZGRlbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2UHJvcCIsIm5hbWUiLCJkZWxldGVIaWRkZW5FeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsInZpZXdMZXZlbCIsImdldFZpZXdMZXZlbCIsImVkaXRhYmxlRXhwcmVzc2lvbiIsIklzRWRpdGFibGUiLCJub3QiLCJpZkVsc2UiLCJhbmQiLCJlcXVhbCIsImdldERlbGV0ZUJ1dHRvbkVuYWJsZWQiLCJpc0RlbGV0YWJsZSIsImlzUGFyZW50RGVsZXRhYmxlIiwiY29uc3RhbnQiLCJnZXRFZGl0QnV0dG9uVmlzaWJpbGl0eSIsInVwZGF0ZUhpZGRlbiIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsInVwZGF0ZUhpZGRlbkV4cHJlc3Npb24iLCJub3RFZGl0YWJsZUV4cHJlc3Npb24iLCJyZXN1bHRhbnRFeHByZXNzaW9uIiwiRHJhZnQiLCJIYXNOb0RyYWZ0Rm9yQ3VycmVudFVzZXIiLCJnZXRFZGl0QnV0dG9uRW5hYmxlZCIsImlzRHJhZnRSb290IiwiaXNTdGlja3kiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImVkaXRBY3Rpb25OYW1lIiwiRWRpdEFjdGlvbiIsImVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJlZGl0QWN0aW9ucyIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsImFjdGlvbnMiLCJsZW5ndGgiLCJlZGl0QWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsImdldEVudGl0eVR5cGUiLCJvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIm9EcmFmdFJvb3QiLCJvRW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zIiwiQ2FwYWJpbGl0aWVzIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiYlVwZGF0ZUhpZGRlbiIsIlVwZGF0ZUhpZGRlbiIsImlzUGF0aERlbGV0YWJsZSIsInBhdGhWaXNpdG9yIiwibmF2aWdhdGlvblBhdGhzIiwiYlBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsImNvbXBpbGVCaW5kaW5nIiwiaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucyIsImhlYWRlckFjdGlvbnMiLCJkYXRhRmllbGQiLCJpbmRleE9mIiwiQ3JpdGljYWxpdHkiLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsInZpc2libGUiLCJlbmFibGVkIiwiaXNOYXZpZ2FibGUiLCJwdXNoIiwiUHJpbWFyeSIsIkRlbGV0YWJsZSIsIkRlbGV0ZUhpZGRlbiIsIlNlY29uZGFyeSIsInBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQiLCJTd2l0Y2hUb0FjdGl2ZU9iamVjdCIsIlN3aXRjaFRvRHJhZnRPYmplY3QiLCJoZWFkZXJEYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiZm9yRWFjaCIsIm9OYXZpZ2F0aW9uUGFyYW1zIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiTWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIlJlcXVpcmVzQ29udGV4dCIsIkVycm9yIiwiTGFiZWwiLCJJbmxpbmUiLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJ0ZXh0IiwidG9TdHJpbmciLCJidXR0b25UeXBlIiwiQnV0dG9uVHlwZSIsIkdob3N0IiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldEhpZGRlbkhlYWRlckFjdGlvbnMiLCJoaWRkZW5BY3Rpb25zIiwiRGVmYXVsdCIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwic0VudGl0eVNldERyYWZ0Um9vdCIsInRlcm0iLCJiQ29uZGl0aW9uU2F2ZSIsIlNhdmVBY3Rpb24iLCJiQ29uZGl0aW9uQXBwbHkiLCJiQ29uZGl0aW9uQ2FuY2VsIiwiRGlzY2FyZEFjdGlvbiIsImZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnMiLCJmb290ZXJBY3Rpb25zIiwiZW50aXR5VHlwZU5hbWUiLCJEZWZhdWx0QXBwbHkiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkVuZCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sV0FBU0Esb0NBQVQsQ0FBOENDLFVBQTlDLEVBQXNFQyxZQUF0RSxFQUF3SDtBQUFBOztBQUM5SCxXQUFRLDBCQUFBRCxVQUFVLENBQUNFLFdBQVgsMEdBQXdCQyxFQUF4Qiw0R0FBNEJDLGNBQTVCLGtGQUE0Q0MsTUFBNUMsQ0FBbUQsVUFBQUMsdUJBQXVCLEVBQUk7QUFBQTs7QUFDckYsVUFBSSxDQUFBQSx1QkFBdUIsU0FBdkIsSUFBQUEsdUJBQXVCLFdBQXZCLHFDQUFBQSx1QkFBdUIsQ0FBRUosV0FBekIsMEdBQXNDQyxFQUF0Qyw0R0FBMENJLE1BQTFDLGtGQUFrREMsT0FBbEQsUUFBZ0UsSUFBcEUsRUFBMEU7QUFBQTs7QUFDekUsWUFDQyxDQUFBRix1QkFBdUIsU0FBdkIsSUFBQUEsdUJBQXVCLFdBQXZCLFlBQUFBLHVCQUF1QixDQUFFRyxLQUF6QixNQUFtQywrQ0FBbkMsSUFDQSxDQUFDLENBQUNILHVCQUF1QixDQUFDSSxXQUExQixLQUEwQ1QsWUFEMUMsS0FFQyxFQUFDSyx1QkFBRCxhQUFDQSx1QkFBRCx5Q0FBQ0EsdUJBQXVCLENBQUVLLFlBQTFCLG1EQUFDLHVCQUF1Q0MsT0FBeEMsS0FDQSxDQUFBTix1QkFBdUIsU0FBdkIsSUFBQUEsdUJBQXVCLFdBQXZCLHNDQUFBQSx1QkFBdUIsQ0FBRUssWUFBekIsNEdBQXVDVCxXQUF2Qyw0R0FBb0RXLElBQXBELDRHQUEwREMsa0JBQTFELGtGQUE4RU4sT0FBOUUsUUFBNEYsS0FIN0YsQ0FERCxFQUtFO0FBQ0QsaUJBQU8sSUFBUDtBQUNBO0FBQ0Q7O0FBQ0QsYUFBTyxLQUFQO0FBQ0EsS0FaTyxNQVlGLEVBWk47QUFhQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDQSxXQUFTTyx1Q0FBVCxDQUFpRGYsVUFBakQsRUFBeUVDLFlBQXpFLEVBQTBJO0FBQUE7O0FBQ3pJLFdBQVEsMkJBQUFELFVBQVUsQ0FBQ0UsV0FBWCw0R0FBd0JDLEVBQXhCLDRHQUE0QkMsY0FBNUIsa0ZBQTRDQyxNQUE1QyxDQUFtRCxVQUFBQyx1QkFBdUIsRUFBSTtBQUFBOztBQUNyRixVQUFJLENBQUFBLHVCQUF1QixTQUF2QixJQUFBQSx1QkFBdUIsV0FBdkIsc0NBQUFBLHVCQUF1QixDQUFFSixXQUF6Qiw2R0FBc0NDLEVBQXRDLCtHQUEwQ0ksTUFBMUMsb0ZBQWtEQyxPQUFsRCxRQUFnRSxJQUFwRSxFQUEwRTtBQUN6RSxZQUNDLENBQUFGLHVCQUF1QixTQUF2QixJQUFBQSx1QkFBdUIsV0FBdkIsWUFBQUEsdUJBQXVCLENBQUVHLEtBQXpCLE1BQW1DLDhEQUFuQyxJQUNBLENBQUMsQ0FBQ0gsdUJBQXVCLENBQUNJLFdBQTFCLEtBQTBDVCxZQUYzQyxFQUdFO0FBQ0QsaUJBQU8sSUFBUDtBQUNBO0FBQ0Q7O0FBRUQsYUFBTyxLQUFQO0FBQ0EsS0FYTyxNQVdGLEVBWE47QUFZQTs7QUFFRCxNQUFNZSx1QkFBdUIsR0FBRyxDQUMvQixpQ0FEK0IsRUFFL0IsNkJBRitCLEVBRy9CLDZCQUgrQixFQUkvQixpQ0FKK0IsQ0FBaEM7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDTyxXQUFTQyx5QkFBVCxDQUNOQyxnQkFETSxFQUVOQyxZQUZNLEVBR2dCO0FBQ3RCLFFBQU1DLG1CQUFtQixHQUFHRixnQkFBZ0IsQ0FBQ0csc0JBQWpCLEVBQTVCO0FBQUEsUUFDQ0Msc0JBQXNCLEdBQUdGLG1CQUFtQixDQUFDRyxvQkFBcEIsQ0FBeUNDLEdBQXpDLENBQTZDLFVBQUFDLE9BQU87QUFBQSxhQUFJQSxPQUFPLENBQUNDLElBQVo7QUFBQSxLQUFwRCxDQUQxQjtBQUFBLFFBRUM7QUFDQTtBQUNBQyxJQUFBQSxzQkFBdUQsR0FBR0Msb0JBQW9CLENBQzdFVCxZQUQ2RSxFQUU3RUcsc0JBRjZFLEVBRzdFTyxTQUg2RSxFQUk3RSxVQUFDQyxJQUFEO0FBQUEsYUFBa0JDLG9CQUFvQixDQUFDRCxJQUFELEVBQU9aLGdCQUFnQixDQUFDYyxpQkFBakIsRUFBUCxFQUE2QyxFQUE3QyxDQUF0QztBQUFBLEtBSjZFLENBSi9FO0FBQUEsUUFVQ0MsZUFBZSxHQUFHZixnQkFBZ0IsQ0FBQ2dCLGtCQUFqQixFQVZuQjtBQUFBLFFBV0NDLFNBQVMsR0FBR0YsZUFBZSxDQUFDRyxZQUFoQixFQVhiO0FBQUEsUUFZQztBQUNBO0FBQ0E7QUFDQUMsSUFBQUEsa0JBQXVDLEdBQUdGLFNBQVMsR0FBRyxDQUFaLEdBQWdCaEMsRUFBRSxDQUFDbUMsVUFBbkIsR0FBZ0NDLEdBQUcsQ0FBQ3BDLEVBQUUsQ0FBQ21DLFVBQUosQ0FmOUUsQ0FEc0IsQ0FrQnRCO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFdBQU9FLE1BQU0sQ0FDWnJCLFlBQVksS0FBS1UsU0FBakIsSUFBOEJWLFlBQVksQ0FBQ1gsT0FBYixPQUEyQixLQUQ3QyxFQUVaNkIsa0JBRlksRUFHWkksR0FBRyxDQUFDSixrQkFBRCxFQUFxQkssS0FBSyxDQUFDZixzQkFBRCxFQUF5QixLQUF6QixDQUExQixDQUhTLENBQWI7QUFLQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLFdBQVNnQixzQkFBVCxDQUNOQyxXQURNLEVBRU5DLGlCQUZNLEVBR2dCO0FBQ3RCLFdBQU9MLE1BQU0sQ0FDWkssaUJBQWlCLEtBQUtoQixTQURWLEVBRVpnQixpQkFGWSxFQUdaTCxNQUFNLENBQUNJLFdBQVcsS0FBS2YsU0FBakIsRUFBNEJhLEtBQUssQ0FBQ0UsV0FBRCxFQUFjLElBQWQsQ0FBakMsRUFBc0RFLFFBQVEsQ0FBQyxJQUFELENBQTlELENBSE0sQ0FBYjtBQUtBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sV0FBU0MsdUJBQVQsQ0FDTjdCLGdCQURNLEVBRU44QixZQUZNLEVBR2dCO0FBQUE7O0FBQ3RCLFFBQU1DLFNBQVMsR0FBRy9CLGdCQUFnQixDQUFDZ0MsWUFBakIsRUFBbEI7QUFBQSxRQUNDQyxZQUFZLEdBQUdGLFNBQVMsNkJBQUlBLFNBQVMsQ0FBQy9DLFdBQVYsQ0FBc0JrRCxNQUExQixrREFBSSxzQkFBOEJDLFNBQTNDLEdBQXVELElBQXZELEdBQThELEtBRDlFO0FBQUEsUUFFQ2pDLG1CQUFtQixHQUFHRixnQkFBZ0IsQ0FBQ0csc0JBQWpCLEVBRnZCO0FBQUEsUUFHQ0Msc0JBQXNCLEdBQUdGLG1CQUFtQixDQUFDRyxvQkFBcEIsQ0FBeUNDLEdBQXpDLENBQTZDLFVBQUFDLE9BQU87QUFBQSxhQUFJQSxPQUFPLENBQUNDLElBQVo7QUFBQSxLQUFwRCxDQUgxQjtBQUFBLFFBSUM7QUFDQTtBQUNBNEIsSUFBQUEsc0JBQXVELEdBQUcxQixvQkFBb0IsQ0FDN0VvQixZQUQ2RSxFQUU3RTFCLHNCQUY2RSxFQUc3RU8sU0FINkUsRUFJN0UsVUFBQ0MsSUFBRDtBQUFBLGFBQWtCQyxvQkFBb0IsQ0FBQ0QsSUFBRCxFQUFPWixnQkFBZ0IsQ0FBQ2MsaUJBQWpCLEVBQVAsRUFBNkNWLHNCQUE3QyxDQUF0QztBQUFBLEtBSjZFLENBTi9FO0FBQUEsUUFZQ2lDLHFCQUEwQyxHQUFHaEIsR0FBRyxDQUFDcEMsRUFBRSxDQUFDbUMsVUFBSixDQVpqRCxDQURzQixDQWV0QjtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxRQUFNa0IsbUJBQXdDLEdBQUdoQixNQUFNLENBQ3REUSxZQUFZLEtBQUtuQixTQUFqQixJQUE4Qm1CLFlBQVksQ0FBQ3hDLE9BQWIsT0FBMkIsS0FESCxFQUV0RCtDLHFCQUZzRCxFQUd0RGQsR0FBRyxDQUFDYyxxQkFBRCxFQUF3QmIsS0FBSyxDQUFDWSxzQkFBRCxFQUF5QixLQUF6QixDQUE3QixDQUhtRCxDQUF2RDtBQUtBLFdBQU9kLE1BQU0sQ0FBQ1csWUFBRCxFQUFlVixHQUFHLENBQUNlLG1CQUFELEVBQXNCQyxLQUFLLENBQUNDLHdCQUE1QixDQUFsQixFQUF5RUYsbUJBQXpFLENBQWI7QUFDQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxXQUFTRyxvQkFBVCxDQUE4QnpDLGdCQUE5QixFQUE4RjtBQUFBOztBQUNwRyxRQUFNK0IsU0FBUyxHQUFHL0IsZ0JBQWdCLENBQUNnQyxZQUFqQixFQUFsQjtBQUFBLFFBQ0NVLFdBQVcsR0FBR1gsU0FBUyw4QkFBSUEsU0FBUyxDQUFDL0MsV0FBVixDQUFzQmtELE1BQTFCLG1EQUFJLHVCQUE4QkMsU0FBM0MsR0FBdUQsSUFBdkQsR0FBOEQsS0FEN0U7QUFBQSxRQUVDUSxRQUFRLEdBQUdaLFNBQVMsOEJBQUlBLFNBQVMsQ0FBQy9DLFdBQVYsQ0FBc0I0RCxPQUExQixtREFBSSx1QkFBK0JDLHNCQUE1QyxHQUFxRSxJQUFyRSxHQUE0RSxLQUZ4RjtBQUlBLFFBQUlDLGNBQUo7O0FBQ0EsUUFBSUosV0FBSixFQUFpQjtBQUFBOztBQUNoQkksTUFBQUEsY0FBYyxHQUFHZixTQUFILGFBQUdBLFNBQUgsaURBQUdBLFNBQVMsQ0FBRS9DLFdBQVgsQ0FBdUJrRCxNQUExQixxRkFBRyx1QkFBK0JDLFNBQWxDLDJEQUFHLHVCQUEwQ1ksVUFBM0Q7QUFDQSxLQUZELE1BRU8sSUFBSUosUUFBSixFQUFjO0FBQUE7O0FBQ3BCRyxNQUFBQSxjQUFjLEdBQUdmLFNBQUgsYUFBR0EsU0FBSCxpREFBR0EsU0FBUyxDQUFFL0MsV0FBWCxDQUF1QjRELE9BQTFCLHFGQUFHLHVCQUFnQ0Msc0JBQW5DLDJEQUFHLHVCQUF3REUsVUFBekU7QUFDQTs7QUFDRCxRQUFJRCxjQUFKLEVBQW9CO0FBQUE7O0FBQ25CLFVBQU1FLHdCQUF3QixHQUFHaEQsZ0JBQWdCLENBQUNpRCx5QkFBakIsQ0FBMkNILGNBQTNDLENBQWpDO0FBQUEsVUFDQ0ksV0FBVyw0QkFBSWxELGdCQUFnQixDQUFDbUQsdUJBQWpCLENBQXlDSCx3QkFBekMsQ0FBSixvRkFBSSxzQkFBb0VJLFVBQXhFLDJEQUFHLHVCQUF5RkMsT0FEeEc7O0FBRUEsVUFBSUgsV0FBSixhQUFJQSxXQUFKLGVBQUlBLFdBQVcsQ0FBRUksTUFBakIsRUFBeUI7QUFBQTs7QUFDeEIsWUFBTUMsVUFBVSxHQUFHTCxXQUFXLENBQUMsQ0FBRCxDQUE5Qjs7QUFDQSxZQUFJLENBQUFLLFVBQVUsU0FBVixJQUFBQSxVQUFVLFdBQVYscUNBQUFBLFVBQVUsQ0FBRXZFLFdBQVosMEdBQXlCVyxJQUF6QixrRkFBK0JDLGtCQUEvQixNQUFzRCxJQUExRCxFQUFnRTtBQUMvRCxpQkFBTyxXQUFXa0QsY0FBWCxHQUE0QixvQkFBbkM7QUFDQSxTQUZELE1BRU87QUFDTixpQkFBT1UsNkJBQTZCLENBQUN4RCxnQkFBRCxFQUFtQnVELFVBQW5CLENBQXBDO0FBQ0E7QUFDRDtBQUNEOztBQUNELFdBQU8sSUFBUDtBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sV0FBU0UsdUJBQVQsQ0FBaUN6RCxnQkFBakMsRUFBbUY7QUFBQTs7QUFDekYsUUFBTStCLFNBQVMsR0FBRy9CLGdCQUFnQixDQUFDZ0MsWUFBakIsRUFBbEI7QUFBQSxRQUNDbEQsVUFBVSxHQUFHa0IsZ0JBQWdCLENBQUMwRCxhQUFqQixFQURkO0FBQUEsUUFFQ0MsdUJBQXVCLEdBQUc1QixTQUFTLCtCQUFJQSxTQUFTLENBQUMvQyxXQUFkLHFGQUFJLHVCQUF1QjRELE9BQTNCLDJEQUFJLHVCQUFnQ0Msc0JBQXBDLENBRnBDO0FBQUEsUUFFZ0c7QUFDL0ZlLElBQUFBLFVBQVUsR0FBRzdCLFNBQVMsZ0NBQUlBLFNBQVMsQ0FBQy9DLFdBQVYsQ0FBc0JrRCxNQUExQiw0REFBSSx3QkFBOEJDLFNBQWxDLENBSHZCO0FBQUEsUUFJQzBCLHlCQUF5QixHQUFHOUIsU0FBUyxnQ0FBSUEsU0FBUyxDQUFDL0MsV0FBZCx1RkFBSSx3QkFBdUI4RSxZQUEzQiw0REFBSSx3QkFBcUNDLGtCQUF6QyxDQUp0QztBQUFBLFFBS0NDLGFBQWEsR0FBR2pDLFNBQVMsZ0NBQUlBLFNBQVMsQ0FBQy9DLFdBQVYsQ0FBc0JDLEVBQTFCLHVGQUFJLHdCQUEwQmdGLFlBQTlCLDREQUFJLHdCQUF3QzNFLE9BQXhDLEVBQUosQ0FMMUI7QUFBQSxRQU1DWSxtQkFBbUIsR0FBR0YsZ0JBQWdCLENBQUNHLHNCQUFqQixFQU52QjtBQUFBLFFBT0N3QixpQkFBaUIsR0FBR3VDLGVBQWUsQ0FBQ2hFLG1CQUFELEVBQXNCO0FBQ3hEaUUsTUFBQUEsV0FBVyxFQUFFLFVBQUN2RCxJQUFELEVBQWV3RCxlQUFmO0FBQUEsZUFDWnZELG9CQUFvQixDQUFDRCxJQUFELEVBQU9aLGdCQUFnQixDQUFDYyxpQkFBakIsRUFBUCxFQUE2Q3NELGVBQTdDLENBRFI7QUFBQTtBQUQyQyxLQUF0QixDQVBwQztBQUFBLFFBV0NDLHlCQUF5QixHQUFHMUMsaUJBQWlCLEdBQUcyQyxjQUFjLENBQUMzQyxpQkFBRCxDQUFqQixHQUF1Q0EsaUJBWHJGO0FBQUEsUUFZQzRDLHlCQUF5QixHQUFHMUYsb0NBQW9DLENBQUNtQixnQkFBZ0IsQ0FBQzBELGFBQWpCLEVBQUQsRUFBbUMsS0FBbkMsQ0FaakUsQ0FEeUYsQ0FlekY7O0FBQ0EsUUFBTWMsYUFBMkIsR0FBR0QseUJBQXlCLENBQzNEcEYsTUFEa0MsQ0FDM0IsVUFBQXNGLFNBQVMsRUFBSTtBQUNwQixhQUFPM0UsdUJBQXVCLENBQUM0RSxPQUF4QixDQUFnQ0QsU0FBaEMsYUFBZ0NBLFNBQWhDLHVCQUFnQ0EsU0FBUyxDQUFFRSxXQUEzQyxJQUFvRSxDQUFDLENBQTVFO0FBQ0EsS0FIa0MsRUFJbENyRSxHQUprQyxDQUk5QixVQUFBbUUsU0FBUyxFQUFJO0FBQUE7O0FBQ2pCLGFBQU87QUFDTkcsUUFBQUEsSUFBSSxFQUFFQyxVQUFVLENBQUNDLGtCQURYO0FBRU5DLFFBQUFBLGNBQWMsRUFBRS9FLGdCQUFnQixDQUFDZ0YsK0JBQWpCLENBQWlEUCxTQUFTLENBQUNRLGtCQUEzRCxDQUZWO0FBR05DLFFBQUFBLEdBQUcsRUFBRUMsU0FBUyxDQUFDQyx3QkFBVixDQUFtQ1gsU0FBbkMsQ0FIQztBQUlOWSxRQUFBQSxPQUFPLEVBQUVmLGNBQWMsQ0FBQ2pELEdBQUcsQ0FBQ0csS0FBSyxDQUFDZCxvQkFBb0IsMEJBQUMrRCxTQUFTLENBQUN6RixXQUFYLG9GQUFDLHNCQUF1QkMsRUFBeEIsMkRBQUMsdUJBQTJCSSxNQUE1QixDQUFyQixFQUEwRCxJQUExRCxDQUFOLENBQUosQ0FKakI7QUFLTmlHLFFBQUFBLE9BQU8sRUFBRTlCLDZCQUE2QixDQUFDeEQsZ0JBQUQsRUFBbUJ5RSxTQUFTLENBQUNoRixZQUE3QixDQUxoQztBQU1OOEYsUUFBQUEsV0FBVyxFQUFFO0FBTlAsT0FBUDtBQVFBLEtBYmtDLENBQXBDLENBaEJ5RixDQStCekY7O0FBQ0EsUUFBSSxDQUFDM0IsVUFBVSxTQUFWLElBQUFBLFVBQVUsV0FBVixJQUFBQSxVQUFVLENBQUViLFVBQVosSUFBMEJZLHVCQUExQixhQUEwQkEsdUJBQTFCLGVBQTBCQSx1QkFBdUIsQ0FBRVosVUFBcEQsS0FBbUVpQixhQUFhLEtBQUssSUFBekYsRUFBK0Y7QUFBQTs7QUFDOUYsVUFBTWxDLFlBQVksR0FBSSxDQUFBQyxTQUFTLFNBQVQsSUFBQUEsU0FBUyxXQUFULHVDQUFBQSxTQUFTLENBQUUvQyxXQUFYLENBQXVCQyxFQUF2QiwrR0FBMkJnRixZQUEzQixvRkFBeUMzRSxPQUF6QyxRQUF1RHFCLFNBQXZELEdBQ25Cb0IsU0FEbUIsYUFDbkJBLFNBRG1CLGtEQUNuQkEsU0FBUyxDQUFFL0MsV0FBWCxDQUF1QkMsRUFESiw0REFDbkIsd0JBQTJCZ0YsWUFEUixHQUVuQm5GLFVBRm1CLGFBRW5CQSxVQUZtQixpREFFbkJBLFVBQVUsQ0FBRUUsV0FBWixDQUF3QkMsRUFGTCwyREFFbkIsdUJBQTRCZ0YsWUFGL0I7QUFHQU8sTUFBQUEsYUFBYSxDQUFDZ0IsSUFBZCxDQUFtQjtBQUNsQlosUUFBQUEsSUFBSSxFQUFFQyxVQUFVLENBQUNZLE9BREM7QUFFbEJQLFFBQUFBLEdBQUcsRUFBRSxZQUZhO0FBR2xCRyxRQUFBQSxPQUFPLEVBQUVmLGNBQWMsQ0FBQ3pDLHVCQUF1QixDQUFDN0IsZ0JBQUQsRUFBbUI4QixZQUFuQixDQUF4QixDQUhMO0FBSWxCd0QsUUFBQUEsT0FBTyxFQUFFN0Msb0JBQW9CLENBQUN6QyxnQkFBRDtBQUpYLE9BQW5CO0FBTUEsS0ExQ3dGLENBMkN6Rjs7O0FBQ0EsUUFDRXFFLHlCQUF5QixJQUFJQSx5QkFBeUIsS0FBSyxPQUE1RCxJQUNDLENBQUFSLHlCQUF5QixTQUF6QixJQUFBQSx5QkFBeUIsV0FBekIscUNBQUFBLHlCQUF5QixDQUFFNkIsU0FBM0IsZ0ZBQXNDcEcsT0FBdEMsUUFBb0QsS0FBcEQsSUFBNkQrRSx5QkFBeUIsS0FBSyxPQUY3RixFQUdFO0FBQUE7O0FBQ0QsVUFBTXBFLFlBQVksR0FBSSxDQUFBOEIsU0FBUyxTQUFULElBQUFBLFNBQVMsV0FBVCx1Q0FBQUEsU0FBUyxDQUFFL0MsV0FBWCxDQUF1QkMsRUFBdkIsK0dBQTJCMEcsWUFBM0Isb0ZBQXlDckcsT0FBekMsUUFBdURxQixTQUF2RCxHQUNuQm9CLFNBRG1CLGFBQ25CQSxTQURtQixrREFDbkJBLFNBQVMsQ0FBRS9DLFdBQVgsQ0FBdUJDLEVBREosNERBQ25CLHdCQUEyQjBHLFlBRFIsR0FFbkI3RyxVQUZtQixhQUVuQkEsVUFGbUIsaURBRW5CQSxVQUFVLENBQUVFLFdBQVosQ0FBd0JDLEVBRkwsMkRBRW5CLHVCQUE0QjBHLFlBRi9CO0FBR0FuQixNQUFBQSxhQUFhLENBQUNnQixJQUFkLENBQW1CO0FBQ2xCWixRQUFBQSxJQUFJLEVBQUVDLFVBQVUsQ0FBQ2UsU0FEQztBQUVsQlYsUUFBQUEsR0FBRyxFQUFFLGNBRmE7QUFHbEJHLFFBQUFBLE9BQU8sRUFBRWYsY0FBYyxDQUFDdkUseUJBQXlCLENBQUNDLGdCQUFELEVBQW1CQyxZQUFuQixDQUExQixDQUhMO0FBSWxCcUYsUUFBQUEsT0FBTyxFQUFFaEIsY0FBYyxDQUFDN0Msc0JBQXNCLENBQUNvQyx5QkFBRCxhQUFDQSx5QkFBRCx1QkFBQ0EseUJBQXlCLENBQUU2QixTQUE1QixFQUF1Qy9ELGlCQUF2QyxDQUF2QixDQUpMO0FBS2xCa0UsUUFBQUEseUJBQXlCLEVBQUV4QjtBQUxULE9BQW5CO0FBT0E7O0FBRUQsUUFBSVQsVUFBVSxTQUFWLElBQUFBLFVBQVUsV0FBVixJQUFBQSxVQUFVLENBQUViLFVBQVosSUFBMEJpQixhQUFhLEtBQUssSUFBaEQsRUFBc0Q7QUFDckRRLE1BQUFBLGFBQWEsQ0FBQ2dCLElBQWQsQ0FBbUI7QUFBRVosUUFBQUEsSUFBSSxFQUFFQyxVQUFVLENBQUNpQixvQkFBbkI7QUFBeUNaLFFBQUFBLEdBQUcsRUFBRTtBQUE5QyxPQUFuQjtBQUNBVixNQUFBQSxhQUFhLENBQUNnQixJQUFkLENBQW1CO0FBQUVaLFFBQUFBLElBQUksRUFBRUMsVUFBVSxDQUFDa0IsbUJBQW5CO0FBQXdDYixRQUFBQSxHQUFHLEVBQUU7QUFBN0MsT0FBbkI7QUFDQTs7QUFFRCxRQUFNYyw0QkFBNEIsR0FBR25HLHVDQUF1QyxDQUFDRyxnQkFBZ0IsQ0FBQzBELGFBQWpCLEVBQUQsRUFBbUMsS0FBbkMsQ0FBNUU7QUFFQXNDLElBQUFBLDRCQUE0QixDQUMxQjdHLE1BREYsQ0FDUyxVQUFBc0YsU0FBUyxFQUFJO0FBQ3BCLGFBQU8zRSx1QkFBdUIsQ0FBQzRFLE9BQXhCLENBQWdDRCxTQUFoQyxhQUFnQ0EsU0FBaEMsdUJBQWdDQSxTQUFTLENBQUVFLFdBQTNDLE1BQXNFLENBQUMsQ0FBOUU7QUFDQSxLQUhGLEVBSUVzQixPQUpGLENBSVUsVUFBQXhCLFNBQVMsRUFBSTtBQUFBOztBQUNyQixVQUFNeUIsaUJBQWlCLEdBQUc7QUFDekJDLFFBQUFBLHFCQUFxQixFQUFFMUIsU0FBUyxDQUFDMkIsT0FBVixHQUFvQkMsd0JBQXdCLENBQUM1QixTQUFTLENBQUMyQixPQUFYLENBQTVDLEdBQWtFO0FBRGhFLE9BQTFCOztBQUlBLFVBQUksMEJBQUEzQixTQUFTLENBQUM2QixlQUFWLGdGQUEyQmhILE9BQTNCLFFBQXlDLElBQTdDLEVBQW1EO0FBQ2xELGNBQU0sSUFBSWlILEtBQUosQ0FBVSx5RUFBeUU5QixTQUFTLENBQUMrQixLQUE3RixDQUFOO0FBQ0EsT0FGRCxNQUVPLElBQUksc0JBQUEvQixTQUFTLENBQUNnQyxNQUFWLHdFQUFrQm5ILE9BQWxCLFFBQWdDLElBQXBDLEVBQTBDO0FBQ2hELGNBQU0sSUFBSWlILEtBQUosQ0FBVSxnRUFBZ0U5QixTQUFTLENBQUMrQixLQUFwRixDQUFOO0FBQ0E7O0FBQ0RoQyxNQUFBQSxhQUFhLENBQUNnQixJQUFkLENBQW1CO0FBQ2xCWixRQUFBQSxJQUFJLEVBQUVDLFVBQVUsQ0FBQzZCLGlDQURDO0FBRWxCQyxRQUFBQSxJQUFJLHNCQUFFbEMsU0FBUyxDQUFDK0IsS0FBWixxREFBRSxpQkFBaUJJLFFBQWpCLEVBRlk7QUFHbEI3QixRQUFBQSxjQUFjLEVBQUUvRSxnQkFBZ0IsQ0FBQ2dGLCtCQUFqQixDQUFpRFAsU0FBUyxDQUFDUSxrQkFBM0QsQ0FIRTtBQUlsQjRCLFFBQUFBLFVBQVUsRUFBRUMsVUFBVSxDQUFDQyxLQUpMO0FBS2xCMUIsUUFBQUEsT0FBTyxFQUFFZixjQUFjLENBQUNqRCxHQUFHLENBQUNHLEtBQUssQ0FBQ2Qsb0JBQW9CLDJCQUFDK0QsU0FBUyxDQUFDekYsV0FBWCxxRkFBQyx1QkFBdUJDLEVBQXhCLHFGQUFDLHVCQUEyQkksTUFBNUIsMkRBQUMsdUJBQW1DQyxPQUFuQyxFQUFELENBQXJCLEVBQXFFLElBQXJFLENBQU4sQ0FBSixDQUxMO0FBTWxCZ0csUUFBQUEsT0FBTyxFQUNOYixTQUFTLENBQUN1QyxtQkFBVixLQUFrQ3JHLFNBQWxDLEdBQ0cyRCxjQUFjLENBQUM5QyxLQUFLLENBQUNkLG9CQUFvQiwwQkFBQytELFNBQVMsQ0FBQ3VDLG1CQUFYLDBEQUFDLHNCQUErQjFILE9BQS9CLEVBQUQsQ0FBckIsRUFBaUUsSUFBakUsQ0FBTixDQURqQixHQUVHLElBVGM7QUFVbEI0RixRQUFBQSxHQUFHLEVBQUVDLFNBQVMsQ0FBQ0Msd0JBQVYsQ0FBbUNYLFNBQW5DLENBVmE7QUFXbEJjLFFBQUFBLFdBQVcsRUFBRSxJQVhLO0FBWWxCMEIsUUFBQUEsS0FBSyxFQUFFM0MsY0FBYyxDQUNwQjRDLEVBQUUsQ0FBQyxrQ0FBRCxFQUFxQyxDQUN0Q3hHLG9CQUFvQixDQUFDK0QsU0FBUyxDQUFDMEMsY0FBWCxDQURrQixFQUV0Q3pHLG9CQUFvQixDQUFDK0QsU0FBUyxDQUFDMkMsTUFBWCxDQUZrQixFQUd0Q2xCLGlCQUhzQyxDQUFyQyxDQURrQixDQVpIO0FBbUJsQm1CLFFBQUFBLFVBQVUsRUFBRS9DLGNBQWMsQ0FBQztBQUMxQmdELFVBQUFBLGNBQWMsRUFBRTVHLG9CQUFvQixDQUFDK0QsU0FBUyxDQUFDMEMsY0FBWCxDQURWO0FBRTFCSSxVQUFBQSxNQUFNLEVBQUU3RyxvQkFBb0IsQ0FBQytELFNBQVMsQ0FBQzJDLE1BQVg7QUFGRixTQUFEO0FBbkJSLE9BQW5CO0FBd0JBLEtBdENGLEVBbkV5RixDQTBHekY7O0FBQ0E3QyxJQUFBQSx5QkFBeUIsQ0FDdkJwRixNQURGLENBQ1MsVUFBQXNGLFNBQVMsRUFBSTtBQUNwQixhQUFPM0UsdUJBQXVCLENBQUM0RSxPQUF4QixDQUFnQ0QsU0FBaEMsYUFBZ0NBLFNBQWhDLHVCQUFnQ0EsU0FBUyxDQUFFRSxXQUEzQyxNQUFzRSxDQUFDLENBQTlFO0FBQ0EsS0FIRixFQUlFc0IsT0FKRixDQUlVLFVBQUF4QixTQUFTLEVBQUk7QUFBQTs7QUFDckJELE1BQUFBLGFBQWEsQ0FBQ2dCLElBQWQsQ0FBbUI7QUFDbEJaLFFBQUFBLElBQUksRUFBRUMsVUFBVSxDQUFDQyxrQkFEQztBQUVsQkMsUUFBQUEsY0FBYyxFQUFFL0UsZ0JBQWdCLENBQUNnRiwrQkFBakIsQ0FBaURQLFNBQVMsQ0FBQ1Esa0JBQTNELENBRkU7QUFHbEJDLFFBQUFBLEdBQUcsRUFBRUMsU0FBUyxDQUFDQyx3QkFBVixDQUFtQ1gsU0FBbkMsQ0FIYTtBQUlsQlksUUFBQUEsT0FBTyxFQUFFZixjQUFjLENBQUNqRCxHQUFHLENBQUNHLEtBQUssQ0FBQ2Qsb0JBQW9CLDJCQUFDK0QsU0FBUyxDQUFDekYsV0FBWCxxRkFBQyx1QkFBdUJDLEVBQXhCLDJEQUFDLHVCQUEyQkksTUFBNUIsQ0FBckIsRUFBMEQsSUFBMUQsQ0FBTixDQUFKLENBSkw7QUFLbEJpRyxRQUFBQSxPQUFPLEVBQUU5Qiw2QkFBNkIsQ0FBQ3hELGdCQUFELEVBQW1CeUUsU0FBUyxDQUFDaEYsWUFBN0IsQ0FMcEI7QUFNbEI4RixRQUFBQSxXQUFXLEVBQUU7QUFOSyxPQUFuQjtBQVFBLEtBYkY7QUFlQSxXQUFPZixhQUFQO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxXQUFTZ0Qsc0JBQVQsQ0FBZ0N4SCxnQkFBaEMsRUFBa0Y7QUFBQTs7QUFDeEYsUUFBTWxCLFVBQVUsR0FBR2tCLGdCQUFnQixDQUFDMEQsYUFBakIsRUFBbkI7QUFDQSxRQUFNK0QsYUFBYSxHQUFJLDJCQUFBM0ksVUFBVSxDQUFDRSxXQUFYLDZHQUF3QkMsRUFBeEIsK0dBQTRCQyxjQUE1QixvRkFBNENDLE1BQTVDLENBQW1ELFVBQUFDLHVCQUF1QixFQUFJO0FBQUE7O0FBQ3BHLGFBQU8sQ0FBQUEsdUJBQXVCLFNBQXZCLElBQUFBLHVCQUF1QixXQUF2Qix1Q0FBQUEsdUJBQXVCLENBQUVKLFdBQXpCLCtHQUFzQ0MsRUFBdEMsK0dBQTBDSSxNQUExQyxvRkFBa0RDLE9BQWxELFFBQWdFLElBQXZFO0FBQ0EsS0FGc0IsTUFFakIsRUFGTjtBQUdBLFdBQU9tSSxhQUFhLENBQUNuSCxHQUFkLENBQWtCLFVBQUFtRSxTQUFTLEVBQUk7QUFDckMsYUFBTztBQUNORyxRQUFBQSxJQUFJLEVBQUVDLFVBQVUsQ0FBQzZDLE9BRFg7QUFFTnhDLFFBQUFBLEdBQUcsRUFBRUMsU0FBUyxDQUFDQyx3QkFBVixDQUFtQ1gsU0FBbkM7QUFGQyxPQUFQO0FBSUEsS0FMTSxDQUFQO0FBTUE7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLFdBQVNrRCx1QkFBVCxDQUFpQzFHLFNBQWpDLEVBQW9EakIsZ0JBQXBELEVBQXNHO0FBQUE7O0FBQzVHLFFBQU0rQixTQUFTLEdBQUcvQixnQkFBZ0IsQ0FBQ2dDLFlBQWpCLEVBQWxCO0FBQ0EsUUFBTWxELFVBQVUsR0FBR2tCLGdCQUFnQixDQUFDMEQsYUFBakIsRUFBbkI7QUFDQSxRQUFNQyx1QkFBdUIsR0FBRzVCLFNBQVMsZ0NBQUlBLFNBQVMsQ0FBQy9DLFdBQWQsdUZBQUksd0JBQXVCNEQsT0FBM0IsNERBQUksd0JBQWdDQyxzQkFBcEMsQ0FBekM7QUFBQSxRQUFxRztBQUNwRytFLElBQUFBLG1CQUFtQixHQUNsQjdGLFNBQVMsS0FBSyw0QkFBQUEsU0FBUyxDQUFDL0MsV0FBVixDQUFzQmtELE1BQXRCLCtHQUE4QkMsU0FBOUIsb0ZBQXlDMEYsSUFBekMsaUNBQWlEOUYsU0FBUyxDQUFDL0MsV0FBM0QsdUZBQWlELHdCQUF1QjRELE9BQXhFLHVGQUFpRCx3QkFBZ0NDLHNCQUFqRiw0REFBaUQsd0JBQXdEZ0YsSUFBekcsQ0FBTCxDQUZYO0FBQUEsUUFHQ0MsY0FBYyxHQUNiRixtQkFBbUIsS0FBSywwQ0FBeEIsSUFDQ2pFLHVCQUF1QixLQUFJQSx1QkFBSixhQUFJQSx1QkFBSix1QkFBSUEsdUJBQXVCLENBQUVvRSxVQUE3QixDQUwxQjtBQUFBLFFBTUNDLGVBQWUsR0FBRy9HLFNBQVMsR0FBRyxDQU4vQjtBQUFBLFFBT0NnSCxnQkFBZ0IsR0FDZkwsbUJBQW1CLEtBQUssMENBQXhCLElBQ0NqRSx1QkFBdUIsS0FBSUEsdUJBQUosYUFBSUEsdUJBQUosdUJBQUlBLHVCQUF1QixDQUFFdUUsYUFBN0IsQ0FUMUIsQ0FINEcsQ0FjNUc7O0FBQ0EsUUFBTUMseUJBQXlCLEdBQUd0SixvQ0FBb0MsQ0FBQ21CLGdCQUFnQixDQUFDMEQsYUFBakIsRUFBRCxFQUFtQyxJQUFuQyxDQUF0RSxDQWY0RyxDQWlCNUc7O0FBQ0EsUUFBTTBFLGFBQTJCLEdBQUdELHlCQUF5QixDQUMzRGhKLE1BRGtDLENBQzNCLFVBQUFzRixTQUFTLEVBQUk7QUFDcEIsYUFBTzNFLHVCQUF1QixDQUFDNEUsT0FBeEIsQ0FBZ0NELFNBQWhDLGFBQWdDQSxTQUFoQyx1QkFBZ0NBLFNBQVMsQ0FBRUUsV0FBM0MsSUFBb0UsQ0FBQyxDQUE1RTtBQUNBLEtBSGtDLEVBSWxDckUsR0FKa0MsQ0FJOUIsVUFBQW1FLFNBQVMsRUFBSTtBQUFBOztBQUNqQixhQUFPO0FBQ05HLFFBQUFBLElBQUksRUFBRUMsVUFBVSxDQUFDQyxrQkFEWDtBQUVOQyxRQUFBQSxjQUFjLEVBQUUvRSxnQkFBZ0IsQ0FBQ2dGLCtCQUFqQixDQUFpRFAsU0FBUyxDQUFDUSxrQkFBM0QsQ0FGVjtBQUdOQyxRQUFBQSxHQUFHLEVBQUVDLFNBQVMsQ0FBQ0Msd0JBQVYsQ0FBbUNYLFNBQW5DLENBSEM7QUFJTlksUUFBQUEsT0FBTyxFQUFFZixjQUFjLENBQUNqRCxHQUFHLENBQUNHLEtBQUssQ0FBQ2Qsb0JBQW9CLDJCQUFDK0QsU0FBUyxDQUFDekYsV0FBWCxxRkFBQyx1QkFBdUJDLEVBQXhCLDJEQUFDLHVCQUEyQkksTUFBNUIsQ0FBckIsRUFBMEQsSUFBMUQsQ0FBTixDQUFKLENBSmpCO0FBS05pRyxRQUFBQSxPQUFPLEVBQUU5Qiw2QkFBNkIsQ0FBQ3hELGdCQUFELEVBQW1CeUUsU0FBUyxDQUFDaEYsWUFBN0IsQ0FMaEM7QUFNTjhGLFFBQUFBLFdBQVcsRUFBRTtBQU5QLE9BQVA7QUFRQSxLQWJrQyxDQUFwQyxDQWxCNEcsQ0FpQzVHOztBQUNBLFFBQUksQ0FBQXhELFNBQVMsU0FBVCxJQUFBQSxTQUFTLFdBQVQsWUFBQUEsU0FBUyxDQUFFc0csY0FBWCxPQUE4QnZKLFVBQTlCLGFBQThCQSxVQUE5Qix1QkFBOEJBLFVBQVUsQ0FBRW1HLGtCQUExQyxLQUFnRTZDLGNBQXBFLEVBQW9GO0FBQ25GTSxNQUFBQSxhQUFhLENBQUM1QyxJQUFkLENBQW1CO0FBQUVaLFFBQUFBLElBQUksRUFBRUMsVUFBVSxDQUFDWSxPQUFuQjtBQUE0QlAsUUFBQUEsR0FBRyxFQUFFO0FBQWpDLE9BQW5CO0FBQ0EsS0FwQzJHLENBc0M1Rzs7O0FBQ0EsUUFBSThDLGVBQUosRUFBcUI7QUFDcEJJLE1BQUFBLGFBQWEsQ0FBQzVDLElBQWQsQ0FBbUI7QUFBRVosUUFBQUEsSUFBSSxFQUFFQyxVQUFVLENBQUN5RCxZQUFuQjtBQUFpQ3BELFFBQUFBLEdBQUcsRUFBRTtBQUF0QyxPQUFuQjtBQUNBLEtBekMyRyxDQTJDNUc7OztBQUNBaUQsSUFBQUEseUJBQXlCLENBQ3ZCaEosTUFERixDQUNTLFVBQUFzRixTQUFTLEVBQUk7QUFDcEIsYUFBTzNFLHVCQUF1QixDQUFDNEUsT0FBeEIsQ0FBZ0NELFNBQWhDLGFBQWdDQSxTQUFoQyx1QkFBZ0NBLFNBQVMsQ0FBRUUsV0FBM0MsTUFBc0UsQ0FBQyxDQUE5RTtBQUNBLEtBSEYsRUFJRXNCLE9BSkYsQ0FJVSxVQUFBeEIsU0FBUyxFQUFJO0FBQUE7O0FBQ3JCMkQsTUFBQUEsYUFBYSxDQUFDNUMsSUFBZCxDQUFtQjtBQUNsQlosUUFBQUEsSUFBSSxFQUFFQyxVQUFVLENBQUNDLGtCQURDO0FBRWxCQyxRQUFBQSxjQUFjLEVBQUUvRSxnQkFBZ0IsQ0FBQ2dGLCtCQUFqQixDQUFpRFAsU0FBUyxDQUFDUSxrQkFBM0QsQ0FGRTtBQUdsQkMsUUFBQUEsR0FBRyxFQUFFQyxTQUFTLENBQUNDLHdCQUFWLENBQW1DWCxTQUFuQyxDQUhhO0FBSWxCWSxRQUFBQSxPQUFPLEVBQUVmLGNBQWMsQ0FBQ2pELEdBQUcsQ0FBQ0csS0FBSyxDQUFDZCxvQkFBb0IsNEJBQUMrRCxTQUFTLENBQUN6RixXQUFYLHVGQUFDLHdCQUF1QkMsRUFBeEIsNERBQUMsd0JBQTJCSSxNQUE1QixDQUFyQixFQUEwRCxJQUExRCxDQUFOLENBQUosQ0FKTDtBQUtsQmlHLFFBQUFBLE9BQU8sRUFBRTlCLDZCQUE2QixDQUFDeEQsZ0JBQUQsRUFBbUJ5RSxTQUFTLENBQUNoRixZQUE3QixDQUxwQjtBQU1sQjhGLFFBQUFBLFdBQVcsRUFBRTtBQU5LLE9BQW5CO0FBUUEsS0FiRixFQTVDNEcsQ0EyRDVHOztBQUNBLFFBQUkwQyxnQkFBSixFQUFzQjtBQUNyQkcsTUFBQUEsYUFBYSxDQUFDNUMsSUFBZCxDQUFtQjtBQUNsQlosUUFBQUEsSUFBSSxFQUFFQyxVQUFVLENBQUNlLFNBREM7QUFFbEJWLFFBQUFBLEdBQUcsRUFBRSxjQUZhO0FBR2xCcUQsUUFBQUEsUUFBUSxFQUFFO0FBQUVDLFVBQUFBLFNBQVMsRUFBRUMsU0FBUyxDQUFDQztBQUF2QjtBQUhRLE9BQW5CO0FBS0E7O0FBQ0QsV0FBT04sYUFBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QmFzZUFjdGlvbixcblx0QnV0dG9uVHlwZSxcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZ1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcywgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXMsIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0YW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRub3QsXG5cdGVxdWFsLFxuXHRmbixcblx0RXhwcmVzc2lvbixcblx0YW5kLFxuXHRpZkVsc2UsXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRjb25zdGFudFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IGlzUGF0aERlbGV0YWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBEcmFmdCwgc2luZ2xldG9uUGF0aFZpc2l0b3IsIFVJIH0gZnJvbSBcIi4uL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgdGhlIGRhdGEgZmllbGQgZm9yIGFjdGlvbnMgZm9yIHRoZSBpZGVudGlmaWNhdGlvbiBhbm5vdGF0aW9uXG4gKiBUaGV5IG11c3QgYmVcbiAqIC0gTm90IHN0YXRpY2FsbHkgaGlkZGVuXG4gKiAtIEVpdGhlciBsaW5rZWQgdG8gYW4gVW5ib3VuZCBhY3Rpb24gb3IgdG8gYW4gYWN0aW9uIHdoaWNoIGhhcyBhbiBPcGVyYXRpb25BdmFpbGFibGUgdGhhdCBpcyBub3Qgc2V0IHRvIGZhbHNlIHN0YXRpY2FsbHkuXG4gKlxuICogQHBhcmFtIHtFbnRpdHlUeXBlfSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJEZXRlcm1pbmluZyBUaGUgZmxhZyB3aGljaCBkZW5vdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gaXMgYSBkZXRlcm1pbmluZyBhY3Rpb25cbiAqIEByZXR1cm5zIHtEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdfSBBbiBhcnJheSBvZiBEYXRhRmllbGQgZm9yIGFjdGlvbiByZXNwZWN0aW5nIHRoZSBpbnB1dCBwYXJhbWV0ZXIgJ2JEZXRlcm1pbmluZydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBiRGV0ZXJtaW5pbmc6IGJvb2xlYW4pOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdIHtcblx0cmV0dXJuIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSWRlbnRpZmljYXRpb24/LmZpbHRlcihpZGVudGlmaWNhdGlvbkRhdGFGaWVsZCA9PiB7XG5cdFx0aWYgKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiAmJlxuXHRcdFx0XHQhIWlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nID09PSBiRGV0ZXJtaW5pbmcgJiZcblx0XHRcdFx0KCFpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kIHx8XG5cdFx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbGwgdGhlIElCTiBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvbi5cbiAqIFRoZXkgbXVzdCBiZVxuICogLSBOb3Qgc3RhdGljYWxseSBoaWRkZW4uXG4gKlxuICogQHBhcmFtIHtFbnRpdHlUeXBlfSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eXR5cGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRldGVybWluaW5nIFdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gc2hvdWxkIGJlIGRldGVybWluaW5nXG4gKiBAcmV0dXJucyB7RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXX0gQW4gYXJyYXkgb2YgZGF0YWZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgYkRldGVybWluaW5nIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvcklCTkFjdGlvbnMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgYkRldGVybWluaW5nOiBib29sZWFuKTogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXSB7XG5cdHJldHVybiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uPy5maWx0ZXIoaWRlbnRpZmljYXRpb25EYXRhRmllbGQgPT4ge1xuXHRcdGlmIChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIgJiZcblx0XHRcdFx0ISFpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC5EZXRlcm1pbmluZyA9PT0gYkRldGVybWluaW5nXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXTtcbn1cblxuY29uc3QgSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMgPSBbXG5cdFwiVUkuQ3JpdGljYWxpdHlUeXBlL1ZlcnlQb3NpdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9OZWdhdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9WZXJ5TmVnYXRpdmVcIlxuXTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAndmlzaWJsZScgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB7UHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4gfCB1bmRlZmluZWR9IGRlbGV0ZUhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIFVJLkRlbGV0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIHRoZSBlbnRpdHkgc2V0IC8gdHlwZS5cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSBEZWxldGUgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlQnV0dG9uVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZGVsZXRlSGlkZGVuOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPiB8IHVuZGVmaW5lZFxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAobmF2UHJvcCA9PiBuYXZQcm9wLm5hbWUpLFxuXHRcdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0XHQvLyBGb3IgZS5nLiAvY29tLnNhcC5uYW1lc3BhY2UuRW50aXR5Q29udGFpbmVyL1NpbmdsZXRvbi9Qcm9wZXJ0eSB0byAvU2luZ2xldG9uL1Byb3BlcnR5XG5cdFx0ZGVsZXRlSGlkZGVuRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuIHwgdW5kZWZpbmVkPiA9IGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0ZGVsZXRlSGlkZGVuLFxuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0KSxcblx0XHRtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLFxuXHRcdHZpZXdMZXZlbCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSxcblx0XHQvLyBEZWxldGUgYnV0dG9uIGlzIHZpc2libGVcblx0XHQvLyBJbiBPUCBcdFx0LS0+ICB3aGVuIG5vdCBpbiBlZGl0IG1vZGVcblx0XHQvLyBJbiBzdWItT1AgXHQtLT4gIHdoZW4gaW4gZWRpdCBtb2RlXG5cdFx0ZWRpdGFibGVFeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4+ID0gdmlld0xldmVsID4gMSA/IFVJLklzRWRpdGFibGUgOiBub3QoVUkuSXNFZGl0YWJsZSk7XG5cblx0Ly8gSWYgVUkuRGVsZXRlSGlkZGVuIGFubm90YXRpb24gb24gZW50aXR5IHNldCBvciB0eXBlIGlzIGVpdGhlciBub3QgZGVmaW5lZCBvciBleHBsaWNpdGx5IHNldCB0byBmYWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGVkaXRhYmxlRXhwcmVzc2lvbi5cblx0Ly8gZWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGJvdGggYW5ub3RhdGlvbiBwYXRoIGFuZCBlZGl0YWJsZUV4cHJlc3Npb24uXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0ZGVsZXRlSGlkZGVuID09PSB1bmRlZmluZWQgfHwgZGVsZXRlSGlkZGVuLnZhbHVlT2YoKSA9PT0gZmFsc2UsXG5cdFx0ZWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGVxdWFsKGRlbGV0ZUhpZGRlbkV4cHJlc3Npb24sIGZhbHNlKSlcblx0KTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPnx1bmRlZmluZWR9IGlzRGVsZXRhYmxlIFRoZSBkZWxldGUgcmVzdHJpY3Rpb24gY29uZmlndXJlZFxuICogQHBhcmFtIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBpc1BhcmVudERlbGV0YWJsZSBUaGUgZGVsZXRlIHJlc3RyaWN0aW9uIGNvbmZpZ3VyZWQgb24gdGhlIHBhcmVudCBlbnRpdHlcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVCdXR0b25FbmFibGVkKFxuXHRpc0RlbGV0YWJsZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Qm9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdGlzUGFyZW50RGVsZXRhYmxlOiBFeHByZXNzaW9uPGJvb2xlYW4+XG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGlmRWxzZShcblx0XHRpc1BhcmVudERlbGV0YWJsZSAhPT0gdW5kZWZpbmVkLFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlLFxuXHRcdGlmRWxzZShpc0RlbGV0YWJsZSAhPT0gdW5kZWZpbmVkLCBlcXVhbChpc0RlbGV0YWJsZSwgdHJ1ZSksIGNvbnN0YW50KHRydWUpKVxuXHQpO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBiaW5kaW5nIGZvciB0aGUgRWRpdCBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB7UHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4gfCB1bmRlZmluZWR9IHVwZGF0ZUhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIFVJLlVwZGF0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIHRoZSBlbnRpdHkgc2V0IC8gdHlwZS5cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSBFZGl0IGJ1dHRvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRCdXR0b25WaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR1cGRhdGVIaWRkZW46IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+IHwgdW5kZWZpbmVkXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRiSXNEcmFmdFJvb3QgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAobmF2UHJvcCA9PiBuYXZQcm9wLm5hbWUpLFxuXHRcdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0XHQvLyBGb3IgZS5nLiAvY29tLnNhcC5uYW1lc3BhY2UuRW50aXR5Q29udGFpbmVyL1NpbmdsZXRvbi9Qcm9wZXJ0eSB0byAvU2luZ2xldG9uL1Byb3BlcnR5XG5cdFx0dXBkYXRlSGlkZGVuRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuIHwgdW5kZWZpbmVkPiA9IGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0dXBkYXRlSGlkZGVuLFxuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0XHQpLFxuXHRcdG5vdEVkaXRhYmxlRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuPiA9IG5vdChVSS5Jc0VkaXRhYmxlKTtcblxuXHQvLyBJZiBVSS5VcGRhdGVIaWRkZW4gYW5ub3RhdGlvbiBvbiBlbnRpdHkgc2V0IG9yIHR5cGUgaXMgZWl0aGVyIG5vdCBkZWZpbmVkIG9yIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLFxuXHQvLyBFZGl0IGJ1dHRvbiBpcyB2aXNpYmxlIGluIGRpc3BsYXkgbW9kZS5cblx0Ly8gZWxzZSxcblx0Ly8gRWRpdCBidXR0b24gaXMgdmlzaWJsZSBiYXNlZCBvbiBib3RoIGFubm90YXRpb24gcGF0aCBhbmQgaW4gZGlzcGxheSBtb2RlLlxuXHRjb25zdCByZXN1bHRhbnRFeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4+ID0gaWZFbHNlKFxuXHRcdHVwZGF0ZUhpZGRlbiA9PT0gdW5kZWZpbmVkIHx8IHVwZGF0ZUhpZGRlbi52YWx1ZU9mKCkgPT09IGZhbHNlLFxuXHRcdG5vdEVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRhbmQobm90RWRpdGFibGVFeHByZXNzaW9uLCBlcXVhbCh1cGRhdGVIaWRkZW5FeHByZXNzaW9uLCBmYWxzZSkpXG5cdCk7XG5cdHJldHVybiBpZkVsc2UoYklzRHJhZnRSb290LCBhbmQocmVzdWx0YW50RXhwcmVzc2lvbiwgRHJhZnQuSGFzTm9EcmFmdEZvckN1cnJlbnRVc2VyKSwgcmVzdWx0YW50RXhwcmVzc2lvbik7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvbkVuYWJsZWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRpc0RyYWZ0Um9vdCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2UsXG5cdFx0aXNTdGlja3kgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0bGV0IGVkaXRBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChpc0RyYWZ0Um9vdCkge1xuXHRcdGVkaXRBY3Rpb25OYW1lID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8uRWRpdEFjdGlvbiBhcyBzdHJpbmc7XG5cdH0gZWxzZSBpZiAoaXNTdGlja3kpIHtcblx0XHRlZGl0QWN0aW9uTmFtZSA9IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uRWRpdEFjdGlvbiBhcyBzdHJpbmc7XG5cdH1cblx0aWYgKGVkaXRBY3Rpb25OYW1lKSB7XG5cdFx0Y29uc3QgZWRpdEFjdGlvbkFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGVkaXRBY3Rpb25OYW1lIGFzIHN0cmluZyksXG5cdFx0XHRlZGl0QWN0aW9ucyA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCk/LmFubm90YXRpb24gYXMgYW55KT8uYWN0aW9ucztcblx0XHRpZiAoZWRpdEFjdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgZWRpdEFjdGlvbiA9IGVkaXRBY3Rpb25zWzBdO1xuXHRcdFx0aWYgKGVkaXRBY3Rpb24/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIFwiez0gJHsjXCIgKyBlZGl0QWN0aW9uTmFtZSArIFwifSA/IHRydWUgOiBmYWxzZSB9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZWRpdEFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7QmFzZUFjdGlvbltdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0ZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCwgLy9mb3Igc3RpY2t5IGFwcFxuXHRcdG9EcmFmdFJvb3QgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290LFxuXHRcdG9FbnRpdHlEZWxldGVSZXN0cmljdGlvbnMgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/LkRlbGV0ZVJlc3RyaWN0aW9ucyxcblx0XHRiVXBkYXRlSGlkZGVuID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuPy52YWx1ZU9mKCksXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIG5hdmlnYXRpb25QYXRocylcblx0XHR9KSxcblx0XHRiUGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlQmluZGluZyhpc1BhcmVudERlbGV0YWJsZSkgOiBpc1BhcmVudERlbGV0YWJsZSxcblx0XHRoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zID0gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBmYWxzZSk7XG5cblx0Ly8gRmlyc3QgYWRkIHRoZSBcIkNyaXRpY2FsXCIgRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zXG5cdFx0LmZpbHRlcihkYXRhRmllbGQgPT4ge1xuXHRcdFx0cmV0dXJuIElNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluZGV4T2YoZGF0YUZpZWxkPy5Dcml0aWNhbGl0eSBhcyBzdHJpbmcpID4gLTE7XG5cdFx0fSlcblx0XHQubWFwKGRhdGFGaWVsZCA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpLFxuXHRcdFx0XHRlbmFibGVkOiBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHRcdH07XG5cdFx0fSk7XG5cblx0Ly8gVGhlbiB0aGUgZWRpdCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmICgob0RyYWZ0Um9vdD8uRWRpdEFjdGlvbiB8fCBvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uRWRpdEFjdGlvbikgJiYgYlVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGNvbnN0IHVwZGF0ZUhpZGRlbiA9IChlbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW4/LnZhbHVlT2YoKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlblxuXHRcdFx0OiBlbnRpdHlUeXBlPy5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuKSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPjtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5QcmltYXJ5LFxuXHRcdFx0a2V5OiBcIkVkaXRBY3Rpb25cIixcblx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKGdldEVkaXRCdXR0b25WaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHVwZGF0ZUhpZGRlbikpLFxuXHRcdFx0ZW5hYmxlZDogZ2V0RWRpdEJ1dHRvbkVuYWJsZWQoY29udmVydGVyQ29udGV4dClcblx0XHR9KTtcblx0fVxuXHQvLyBUaGVuIHRoZSBkZWxldGUgYWN0aW9uIGlmIHdlJ3JlIG5vdCBzdGF0aWNhbGx5IG5vdCBkZWxldGFibGVcblx0aWYgKFxuXHRcdChiUGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICYmIGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIikgfHxcblx0XHQob0VudGl0eURlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlPy52YWx1ZU9mKCkgIT09IGZhbHNlICYmIGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIilcblx0KSB7XG5cdFx0Y29uc3QgZGVsZXRlSGlkZGVuID0gKGVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlbj8udmFsdWVPZigpICE9PSB1bmRlZmluZWRcblx0XHRcdD8gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuXG5cdFx0XHQ6IGVudGl0eVR5cGU/LmFubm90YXRpb25zLlVJPy5EZWxldGVIaWRkZW4pIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+O1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLlNlY29uZGFyeSxcblx0XHRcdGtleTogXCJEZWxldGVBY3Rpb25cIixcblx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKGdldERlbGV0ZUJ1dHRvblZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgZGVsZXRlSGlkZGVuKSksXG5cdFx0XHRlbmFibGVkOiBjb21waWxlQmluZGluZyhnZXREZWxldGVCdXR0b25FbmFibGVkKG9FbnRpdHlEZWxldGVSZXN0cmljdGlvbnM/LkRlbGV0YWJsZSwgaXNQYXJlbnREZWxldGFibGUpKSxcblx0XHRcdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ6IGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGVcblx0XHR9KTtcblx0fVxuXG5cdGlmIChvRHJhZnRSb290Py5FZGl0QWN0aW9uICYmIGJVcGRhdGVIaWRkZW4gIT09IHRydWUpIHtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLlN3aXRjaFRvQWN0aXZlT2JqZWN0LCBrZXk6IFwiU3dpdGNoVG9BY3RpdmVPYmplY3RcIiB9KTtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLlN3aXRjaFRvRHJhZnRPYmplY3QsIGtleTogXCJTd2l0Y2hUb0RyYWZ0T2JqZWN0XCIgfSk7XG5cdH1cblxuXHRjb25zdCBoZWFkZXJEYXRhRmllbGRGb3JJQk5BY3Rpb25zID0gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBmYWxzZSk7XG5cblx0aGVhZGVyRGF0YUZpZWxkRm9ySUJOQWN0aW9uc1xuXHRcdC5maWx0ZXIoZGF0YUZpZWxkID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA9PT0gLTE7XG5cdFx0fSlcblx0XHQuZm9yRWFjaChkYXRhRmllbGQgPT4ge1xuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25QYXJhbXMgPSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogZGF0YUZpZWxkLk1hcHBpbmcgPyBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcoZGF0YUZpZWxkLk1hcHBpbmcpIDogW11cblx0XHRcdH07XG5cblx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmVxdWlyZXNDb250ZXh0IHByb3BlcnR5IHNob3VsZCBub3QgYmUgdHJ1ZSBmb3IgaGVhZGVyIElCTiBhY3Rpb24gOiBcIiArIGRhdGFGaWVsZC5MYWJlbCk7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC5JbmxpbmU/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbmxpbmUgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB0cnVlIGZvciBoZWFkZXIgSUJOIGFjdGlvbiA6IFwiICsgZGF0YUZpZWxkLkxhYmVsKTtcblx0XHRcdH1cblx0XHRcdGhlYWRlckFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGJ1dHRvblR5cGU6IEJ1dHRvblR5cGUuR2hvc3QsXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0ZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0PyBjb21waWxlQmluZGluZyhlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRcdFx0cHJlc3M6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdGZuKFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVcIiwgW1xuXHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0XHRcdFx0b05hdmlnYXRpb25QYXJhbXNcblx0XHRcdFx0XHRdKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRjdXN0b21EYXRhOiBjb21waWxlQmluZGluZyh7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0YWN0aW9uOiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuQWN0aW9uKVxuXHRcdFx0XHR9KVxuXHRcdFx0fSBhcyBBbm5vdGF0aW9uQWN0aW9uKTtcblx0XHR9KTtcblx0Ly8gRmluYWxseSB0aGUgbm9uIGNyaXRpY2FsIERhdGFGaWVsZEZvckFjdGlvbnNcblx0aGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRcdC5maWx0ZXIoZGF0YUZpZWxkID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA9PT0gLTE7XG5cdFx0fSlcblx0XHQuZm9yRWFjaChkYXRhRmllbGQgPT4ge1xuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXG5cdHJldHVybiBoZWFkZXJBY3Rpb25zO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7QmFzZUFjdGlvbltdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBoaWRkZW5BY3Rpb25zID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkID0+IHtcblx0XHRyZXR1cm4gaWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWU7XG5cdH0pIHx8IFtdKSBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdO1xuXHRyZXR1cm4gaGlkZGVuQWN0aW9ucy5tYXAoZGF0YUZpZWxkID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZClcblx0XHR9O1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdmlld0xldmVsXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge0Jhc2VBY3Rpb25bXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKHZpZXdMZXZlbDogbnVtYmVyLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQsIC8vZm9yIHN0aWNreSBhcHBcblx0XHRzRW50aXR5U2V0RHJhZnRSb290ID1cblx0XHRcdGVudGl0eVNldCAmJiAoZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290Py50ZXJtIHx8IGVudGl0eVNldC5hbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8udGVybSksXG5cdFx0YkNvbmRpdGlvblNhdmUgPVxuXHRcdFx0c0VudGl0eVNldERyYWZ0Um9vdCA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCIgfHxcblx0XHRcdChvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCAmJiBvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uU2F2ZUFjdGlvbiksXG5cdFx0YkNvbmRpdGlvbkFwcGx5ID0gdmlld0xldmVsID4gMSxcblx0XHRiQ29uZGl0aW9uQ2FuY2VsID1cblx0XHRcdHNFbnRpdHlTZXREcmFmdFJvb3QgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiIHx8XG5cdFx0XHQob1N0aWNreVNlc3Npb25TdXBwb3J0ZWQgJiYgb1N0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LkRpc2NhcmRBY3Rpb24pO1xuXG5cdC8vIFJldHJpZXZlIGFsbCBkZXRlcm1pbmluZyBhY3Rpb25zXG5cdGNvbnN0IGZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnMgPSBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIHRydWUpO1xuXG5cdC8vIEZpcnN0IGFkZCB0aGUgXCJDcml0aWNhbFwiIERhdGFGaWVsZEZvckFjdGlvbnNcblx0Y29uc3QgZm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdID0gZm9vdGVyRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRcdC5maWx0ZXIoZGF0YUZpZWxkID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA+IC0xO1xuXHRcdH0pXG5cdFx0Lm1hcChkYXRhRmllbGQgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH0pO1xuXG5cdC8vIFRoZW4gdGhlIHNhdmUgYWN0aW9uIGlmIGl0IGV4aXN0c1xuXHRpZiAoZW50aXR5U2V0Py5lbnRpdHlUeXBlTmFtZSA9PT0gZW50aXR5VHlwZT8uZnVsbHlRdWFsaWZpZWROYW1lICYmIGJDb25kaXRpb25TYXZlKSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHsgdHlwZTogQWN0aW9uVHlwZS5QcmltYXJ5LCBrZXk6IFwiU2F2ZUFjdGlvblwiIH0pO1xuXHR9XG5cblx0Ly8gVGhlbiB0aGUgYXBwbHkgYWN0aW9uIGlmIGl0IGV4aXN0c1xuXHRpZiAoYkNvbmRpdGlvbkFwcGx5KSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHsgdHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0QXBwbHksIGtleTogXCJBcHBseUFjdGlvblwiIH0pO1xuXHR9XG5cblx0Ly8gVGhlbiB0aGUgbm9uIGNyaXRpY2FsIERhdGFGaWVsZEZvckFjdGlvbnNcblx0Zm9vdGVyRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRcdC5maWx0ZXIoZGF0YUZpZWxkID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA9PT0gLTE7XG5cdFx0fSlcblx0XHQuZm9yRWFjaChkYXRhRmllbGQgPT4ge1xuXHRcdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXG5cdC8vIFRoZW4gdGhlIGNhbmNlbCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChiQ29uZGl0aW9uQ2FuY2VsKSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuU2Vjb25kYXJ5LFxuXHRcdFx0a2V5OiBcIkNhbmNlbEFjdGlvblwiLFxuXHRcdFx0cG9zaXRpb246IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuRW5kIH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZm9vdGVyQWN0aW9ucztcbn1cbiJdfQ==
|
|
451
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhlYWRlckFuZEZvb3RlckFjdGlvbi50cyJdLCJuYW1lcyI6WyJnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMiLCJlbnRpdHlUeXBlIiwiYkRldGVybWluaW5nIiwiYW5ub3RhdGlvbnMiLCJVSSIsIklkZW50aWZpY2F0aW9uIiwiZmlsdGVyIiwiaWRlbnRpZmljYXRpb25EYXRhRmllbGQiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiJFR5cGUiLCJEZXRlcm1pbmluZyIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwiZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMiLCJnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5IiwiY29udmVydGVyQ29udGV4dCIsImRlbGV0ZUhpZGRlbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2UHJvcCIsIm5hbWUiLCJkZWxldGVIaWRkZW5FeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsInZpZXdMZXZlbCIsImdldFZpZXdMZXZlbCIsImVkaXRhYmxlRXhwcmVzc2lvbiIsIklzRWRpdGFibGUiLCJub3QiLCJpZkVsc2UiLCJhbmQiLCJlcXVhbCIsImdldERlbGV0ZUJ1dHRvbkVuYWJsZWQiLCJpc0RlbGV0YWJsZSIsImlzUGFyZW50RGVsZXRhYmxlIiwiY29uc3RhbnQiLCJnZXRFZGl0QnV0dG9uVmlzaWJpbGl0eSIsInVwZGF0ZUhpZGRlbiIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsInVwZGF0ZUhpZGRlbkV4cHJlc3Npb24iLCJub3RFZGl0YWJsZUV4cHJlc3Npb24iLCJyZXN1bHRhbnRFeHByZXNzaW9uIiwiRHJhZnQiLCJIYXNOb0RyYWZ0Rm9yQ3VycmVudFVzZXIiLCJnZXRFZGl0QnV0dG9uRW5hYmxlZCIsImlzRHJhZnRSb290IiwiaXNTdGlja3kiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImVkaXRBY3Rpb25OYW1lIiwiRWRpdEFjdGlvbiIsImVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJlZGl0QWN0aW9ucyIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsImFjdGlvbnMiLCJsZW5ndGgiLCJlZGl0QWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsImdldEVudGl0eVR5cGUiLCJvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIm9EcmFmdFJvb3QiLCJvRW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zIiwiQ2FwYWJpbGl0aWVzIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiYlVwZGF0ZUhpZGRlbiIsIlVwZGF0ZUhpZGRlbiIsImlzUGF0aERlbGV0YWJsZSIsInBhdGhWaXNpdG9yIiwibmF2aWdhdGlvblBhdGhzIiwiYlBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsImNvbXBpbGVCaW5kaW5nIiwiaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucyIsImhlYWRlckFjdGlvbnMiLCJwdXNoIiwidHlwZSIsIkFjdGlvblR5cGUiLCJEcmFmdEFjdGlvbnMiLCJrZXkiLCJkYXRhRmllbGQiLCJpbmRleE9mIiwiQ3JpdGljYWxpdHkiLCJmb3JFYWNoIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwidmlzaWJsZSIsImVuYWJsZWQiLCJpc05hdmlnYWJsZSIsIlByaW1hcnkiLCJEZWxldGFibGUiLCJEZWxldGVIaWRkZW4iLCJTZWNvbmRhcnkiLCJwYXJlbnRFbnRpdHlEZWxldGVFbmFibGVkIiwiaGVhZGVyRGF0YUZpZWxkRm9ySUJOQWN0aW9ucyIsIm9OYXZpZ2F0aW9uUGFyYW1zIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiTWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIlJlcXVpcmVzQ29udGV4dCIsIkVycm9yIiwiTGFiZWwiLCJJbmxpbmUiLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJ0ZXh0IiwidG9TdHJpbmciLCJidXR0b25UeXBlIiwiQnV0dG9uVHlwZSIsIkdob3N0IiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldEhpZGRlbkhlYWRlckFjdGlvbnMiLCJoaWRkZW5BY3Rpb25zIiwiRGVmYXVsdCIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwic0VudGl0eVNldERyYWZ0Um9vdCIsInRlcm0iLCJiQ29uZGl0aW9uU2F2ZSIsIlNhdmVBY3Rpb24iLCJiQ29uZGl0aW9uQXBwbHkiLCJiQ29uZGl0aW9uQ2FuY2VsIiwiRGlzY2FyZEFjdGlvbiIsImZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnMiLCJmb290ZXJBY3Rpb25zIiwiZW50aXR5VHlwZU5hbWUiLCJEZWZhdWx0QXBwbHkiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkVuZCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FB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QVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcywgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXMsIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRBbm5vdGF0aW9uQWN0aW9uLFxuXHRCYXNlQWN0aW9uLFxuXHRCdXR0b25UeXBlLFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbixcblx0Z2V0U2VtYW50aWNPYmplY3RNYXBwaW5nXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdEV4cHJlc3Npb24sXG5cdGZuLFxuXHRpZkVsc2UsXG5cdG5vdFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgaXNQYXRoRGVsZXRhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IERyYWZ0LCBzaW5nbGV0b25QYXRoVmlzaXRvciwgVUkgfSBmcm9tIFwiLi4vaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIHRoZSBkYXRhIGZpZWxkIGZvciBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvblxuICogVGhleSBtdXN0IGJlXG4gKiAtIE5vdCBzdGF0aWNhbGx5IGhpZGRlblxuICogLSBFaXRoZXIgbGlua2VkIHRvIGFuIFVuYm91bmQgYWN0aW9uIG9yIHRvIGFuIGFjdGlvbiB3aGljaCBoYXMgYW4gT3BlcmF0aW9uQXZhaWxhYmxlIHRoYXQgaXMgbm90IHNldCB0byBmYWxzZSBzdGF0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSB7RW50aXR5VHlwZX0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHkgdHlwZVxuICogQHBhcmFtIHtib29sZWFufSBiRGV0ZXJtaW5pbmcgVGhlIGZsYWcgd2hpY2ggZGVub3RlcyB3aGV0aGVyIG9yIG5vdCB0aGUgYWN0aW9uIGlzIGEgZGV0ZXJtaW5pbmcgYWN0aW9uXG4gKiBAcmV0dXJucyB7RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXX0gQW4gYXJyYXkgb2YgRGF0YUZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgaW5wdXQgcGFyYW1ldGVyICdiRGV0ZXJtaW5pbmcnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgYkRldGVybWluaW5nOiBib29sZWFuKTogRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXSB7XG5cdHJldHVybiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uPy5maWx0ZXIoKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkKSA9PiB7XG5cdFx0aWYgKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiAmJlxuXHRcdFx0XHQhIWlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nID09PSBiRGV0ZXJtaW5pbmcgJiZcblx0XHRcdFx0KCFpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kIHx8XG5cdFx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbGwgdGhlIElCTiBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvbi5cbiAqIFRoZXkgbXVzdCBiZVxuICogLSBOb3Qgc3RhdGljYWxseSBoaWRkZW4uXG4gKlxuICogQHBhcmFtIHtFbnRpdHlUeXBlfSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eXR5cGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRldGVybWluaW5nIFdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gc2hvdWxkIGJlIGRldGVybWluaW5nXG4gKiBAcmV0dXJucyB7RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXX0gQW4gYXJyYXkgb2YgZGF0YSBmaWVsZCBmb3IgYWN0aW9uIHJlc3BlY3RpbmcgdGhlIGJEZXRlcm1pbmluZyBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGJEZXRlcm1pbmluZzogYm9vbGVhbik6IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblR5cGVzW10ge1xuXHRyZXR1cm4gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZCkgPT4ge1xuXHRcdGlmIChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIgJiZcblx0XHRcdFx0ISFpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC5EZXRlcm1pbmluZyA9PT0gYkRldGVybWluaW5nXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXTtcbn1cblxuY29uc3QgSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMgPSBbXG5cdFwiVUkuQ3JpdGljYWxpdHlUeXBlL1ZlcnlQb3NpdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9OZWdhdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9WZXJ5TmVnYXRpdmVcIlxuXTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAndmlzaWJsZScgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB7UHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4gfCB1bmRlZmluZWR9IGRlbGV0ZUhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIFVJLkRlbGV0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIHRoZSBlbnRpdHkgc2V0IC8gdHlwZS5cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSBEZWxldGUgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlQnV0dG9uVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZGVsZXRlSGlkZGVuOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPiB8IHVuZGVmaW5lZFxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSksXG5cdFx0Ly8gU2V0IGFic29sdXRlIGJpbmRpbmcgcGF0aCBmb3IgU2luZ2xldG9uIHJlZmVyZW5jZXMsIG90aGVyd2lzZSB0aGUgY29uZmlndXJlZCBhbm5vdGF0aW9uIHBhdGggaXRzZWxmLlxuXHRcdC8vIEZvciBlLmcuIC9jb20uc2FwLm5hbWVzcGFjZS5FbnRpdHlDb250YWluZXIvU2luZ2xldG9uL1Byb3BlcnR5IHRvIC9TaW5nbGV0b24vUHJvcGVydHlcblx0XHRkZWxldGVIaWRkZW5FeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0gYW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRkZWxldGVIaWRkZW4sXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0KHBhdGg6IHN0cmluZykgPT4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBbXSlcblx0XHQpLFxuXHRcdG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCksXG5cdFx0dmlld0xldmVsID0gbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdMZXZlbCgpLFxuXHRcdC8vIERlbGV0ZSBidXR0b24gaXMgdmlzaWJsZVxuXHRcdC8vIEluIE9QIFx0XHQtLT4gIHdoZW4gbm90IGluIGVkaXQgbW9kZVxuXHRcdC8vIEluIHN1Yi1PUCBcdC0tPiAgd2hlbiBpbiBlZGl0IG1vZGVcblx0XHRlZGl0YWJsZUV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbj4gPSB2aWV3TGV2ZWwgPiAxID8gVUkuSXNFZGl0YWJsZSA6IG5vdChVSS5Jc0VkaXRhYmxlKTtcblxuXHQvLyBJZiBVSS5EZWxldGVIaWRkZW4gYW5ub3RhdGlvbiBvbiBlbnRpdHkgc2V0IG9yIHR5cGUgaXMgZWl0aGVyIG5vdCBkZWZpbmVkIG9yIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLFxuXHQvLyBEZWxldGUgYnV0dG9uIGlzIHZpc2libGUgYmFzZWQgb24gZWRpdGFibGVFeHByZXNzaW9uLlxuXHQvLyBlbHNlLFxuXHQvLyBEZWxldGUgYnV0dG9uIGlzIHZpc2libGUgYmFzZWQgb24gYm90aCBhbm5vdGF0aW9uIHBhdGggYW5kIGVkaXRhYmxlRXhwcmVzc2lvbi5cblx0cmV0dXJuIGlmRWxzZShcblx0XHRkZWxldGVIaWRkZW4gPT09IHVuZGVmaW5lZCB8fCBkZWxldGVIaWRkZW4udmFsdWVPZigpID09PSBmYWxzZSxcblx0XHRlZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0YW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZXF1YWwoZGVsZXRlSGlkZGVuRXhwcmVzc2lvbiwgZmFsc2UpKVxuXHQpO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBiaW5kaW5nIGZvciB0aGUgRGVsZXRlIGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+fHVuZGVmaW5lZH0gaXNEZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkXG4gKiBAcGFyYW0ge0V4cHJlc3Npb248Ym9vbGVhbj59IGlzUGFyZW50RGVsZXRhYmxlIFRoZSBkZWxldGUgcmVzdHJpY3Rpb24gY29uZmlndXJlZCBvbiB0aGUgcGFyZW50IGVudGl0eVxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZUJ1dHRvbkVuYWJsZWQoXG5cdGlzRGVsZXRhYmxlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxCb29sZWFuPiB8IHVuZGVmaW5lZCxcblx0aXNQYXJlbnREZWxldGFibGU6IEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlICE9PSB1bmRlZmluZWQsXG5cdFx0aXNQYXJlbnREZWxldGFibGUsXG5cdFx0aWZFbHNlKGlzRGVsZXRhYmxlICE9PSB1bmRlZmluZWQsIGVxdWFsKGlzRGVsZXRhYmxlLCB0cnVlKSwgY29uc3RhbnQodHJ1ZSkpXG5cdCk7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHtQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPiB8IHVuZGVmaW5lZH0gdXBkYXRlSGlkZGVuIFRoZSB2YWx1ZSBvZiB0aGUgVUkuVXBkYXRlSGlkZGVuIGFubm90YXRpb24gb24gdGhlIGVudGl0eSBzZXQgLyB0eXBlLlxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHVwZGF0ZUhpZGRlbjogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4gfCB1bmRlZmluZWRcbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGJJc0RyYWZ0Um9vdCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2UsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lKSxcblx0XHQvLyBTZXQgYWJzb2x1dGUgYmluZGluZyBwYXRoIGZvciBTaW5nbGV0b24gcmVmZXJlbmNlcywgb3RoZXJ3aXNlIHRoZSBjb25maWd1cmVkIGFubm90YXRpb24gcGF0aCBpdHNlbGYuXG5cdFx0Ly8gRm9yIGUuZy4gL2NvbS5zYXAubmFtZXNwYWNlLkVudGl0eUNvbnRhaW5lci9TaW5nbGV0b24vUHJvcGVydHkgdG8gL1NpbmdsZXRvbi9Qcm9wZXJ0eVxuXHRcdHVwZGF0ZUhpZGRlbkV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbiB8IHVuZGVmaW5lZD4gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdHVwZGF0ZUhpZGRlbixcblx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHQocGF0aDogc3RyaW5nKSA9PiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMpXG5cdFx0KSxcblx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbj4gPSBub3QoVUkuSXNFZGl0YWJsZSk7XG5cblx0Ly8gSWYgVUkuVXBkYXRlSGlkZGVuIGFubm90YXRpb24gb24gZW50aXR5IHNldCBvciB0eXBlIGlzIGVpdGhlciBub3QgZGVmaW5lZCBvciBleHBsaWNpdGx5IHNldCB0byBmYWxzZSxcblx0Ly8gRWRpdCBidXR0b24gaXMgdmlzaWJsZSBpbiBkaXNwbGF5IG1vZGUuXG5cdC8vIGVsc2UsXG5cdC8vIEVkaXQgYnV0dG9uIGlzIHZpc2libGUgYmFzZWQgb24gYm90aCBhbm5vdGF0aW9uIHBhdGggYW5kIGluIGRpc3BsYXkgbW9kZS5cblx0Y29uc3QgcmVzdWx0YW50RXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuPiA9IGlmRWxzZShcblx0XHR1cGRhdGVIaWRkZW4gPT09IHVuZGVmaW5lZCB8fCB1cGRhdGVIaWRkZW4udmFsdWVPZigpID09PSBmYWxzZSxcblx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0YW5kKG5vdEVkaXRhYmxlRXhwcmVzc2lvbiwgZXF1YWwodXBkYXRlSGlkZGVuRXhwcmVzc2lvbiwgZmFsc2UpKVxuXHQpO1xuXHRyZXR1cm4gaWZFbHNlKGJJc0RyYWZ0Um9vdCwgYW5kKHJlc3VsdGFudEV4cHJlc3Npb24sIERyYWZ0Lkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciksIHJlc3VsdGFudEV4cHJlc3Npb24pO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBiaW5kaW5nIGZvciB0aGUgRWRpdCBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBFZGl0IGJ1dHRvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRCdXR0b25FbmFibGVkKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0aXNEcmFmdFJvb3QgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdGlzU3RpY2t5ID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdGxldCBlZGl0QWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAoaXNEcmFmdFJvb3QpIHtcblx0XHRlZGl0QWN0aW9uTmFtZSA9IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/LkVkaXRBY3Rpb24gYXMgc3RyaW5nO1xuXHR9IGVsc2UgaWYgKGlzU3RpY2t5KSB7XG5cdFx0ZWRpdEFjdGlvbk5hbWUgPSBlbnRpdHlTZXQ/LmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LkVkaXRBY3Rpb24gYXMgc3RyaW5nO1xuXHR9XG5cdGlmIChlZGl0QWN0aW9uTmFtZSkge1xuXHRcdGNvbnN0IGVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChlZGl0QWN0aW9uTmFtZSBhcyBzdHJpbmcpLFxuXHRcdFx0ZWRpdEFjdGlvbnMgPSAoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihlZGl0QWN0aW9uQW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uIGFzIGFueSk/LmFjdGlvbnM7XG5cdFx0aWYgKGVkaXRBY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGVkaXRBY3Rpb24gPSBlZGl0QWN0aW9uc1swXTtcblx0XHRcdGlmIChlZGl0QWN0aW9uPy5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBcIns9ICR7I1wiICsgZWRpdEFjdGlvbk5hbWUgKyBcIn0gPyB0cnVlIDogZmFsc2UgfVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGVkaXRBY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge0Jhc2VBY3Rpb25bXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQsIC8vZm9yIHN0aWNreSBhcHBcblx0XHRvRHJhZnRSb290ID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCxcblx0XHRvRW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5EZWxldGVSZXN0cmljdGlvbnMsXG5cdFx0YlVwZGF0ZUhpZGRlbiA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbj8udmFsdWVPZigpLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShkYXRhTW9kZWxPYmplY3RQYXRoLCB7XG5cdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdFx0fSksXG5cdFx0YlBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnREZWxldGFibGUpIDogaXNQYXJlbnREZWxldGFibGUsXG5cdFx0aGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgZmFsc2UpO1xuXG5cdC8vIEluaXRpYWxpemUgYWN0aW9ucyBhbmQgc3RhcnQgd2l0aCBkcmFmdCBhY3Rpb25zIGlmIGF2YWlsYWJsZSBzaW5jZSB0aGV5IHNob3VsZCBhcHBlYXIgaW4gdGhlIGZpcnN0XG5cdC8vIGxlZnRtb3N0IHBvc2l0aW9uIGluIHRoZSBhY3Rpb25zIGFyZWEgb2YgdGhlIE9QIGhlYWRlclxuXHQvLyBUaGlzIGlzIG1vcmUgbGlrZSBhIHBsYWNlaG9sZGVyIHRoYW4gYSBzaW5nbGUgYWN0aW9uLCBzaW5jZSB0aGlzIGNvbnRyb2xzIG5vdCBvbmx5IHRoZSB0ZW1wbGF0aW5nIG9mXG5cdC8vIHRoZSBidXR0b24gZm9yIHN3aXRjaGluZyBiZXR3ZWVuIGRyYWZ0IGFuZCBhY3RpdmUgZG9jdW1lbnQgdmVyc2lvbnMgYnV0IGFsc28gdGhlIGNvbnRyb2xzIGZvclxuXHQvLyB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBmcmFnbWVudC5cblx0Y29uc3QgaGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGlmIChvRHJhZnRSb290Py5FZGl0QWN0aW9uICYmIGJVcGRhdGVIaWRkZW4gIT09IHRydWUpIHtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLkRyYWZ0QWN0aW9ucywga2V5OiBcIkRyYWZ0QWN0aW9uc1wiIH0pO1xuXHR9XG5cblx0Ly8gVGhlbiBhZGQgdGhlIFwiQ3JpdGljYWxcIiBEYXRhRmllbGRGb3JBY3Rpb25zXG5cdGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA+IC0xO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHQvLyBUaGVuIHRoZSBlZGl0IGFjdGlvbiBpZiBpdCBleGlzdHNcblx0aWYgKChvRHJhZnRSb290Py5FZGl0QWN0aW9uIHx8IG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5FZGl0QWN0aW9uKSAmJiBiVXBkYXRlSGlkZGVuICE9PSB0cnVlKSB7XG5cdFx0Y29uc3QgdXBkYXRlSGlkZGVuID0gKFxuXHRcdFx0ZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuPy52YWx1ZU9mKCkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlblxuXHRcdFx0XHQ6IGVudGl0eVR5cGU/LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW5cblx0XHQpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+O1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLlByaW1hcnksXG5cdFx0XHRrZXk6IFwiRWRpdEFjdGlvblwiLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgdXBkYXRlSGlkZGVuKSksXG5cdFx0XHRlbmFibGVkOiBnZXRFZGl0QnV0dG9uRW5hYmxlZChjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH0pO1xuXHR9XG5cdC8vIFRoZW4gdGhlIGRlbGV0ZSBhY3Rpb24gaWYgd2UncmUgbm90IHN0YXRpY2FsbHkgbm90IGRlbGV0YWJsZVxuXHRpZiAoXG5cdFx0KGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGUgJiYgYlBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKSB8fFxuXHRcdChvRW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zPy5EZWxldGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2UgJiYgYlBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKVxuXHQpIHtcblx0XHRjb25zdCBkZWxldGVIaWRkZW4gPSAoXG5cdFx0XHRlbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5EZWxldGVIaWRkZW4/LnZhbHVlT2YoKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuXG5cdFx0XHRcdDogZW50aXR5VHlwZT8uYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlblxuXHRcdCkgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj47XG5cdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuU2Vjb25kYXJ5LFxuXHRcdFx0a2V5OiBcIkRlbGV0ZUFjdGlvblwiLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoZ2V0RGVsZXRlQnV0dG9uVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBkZWxldGVIaWRkZW4pKSxcblx0XHRcdGVuYWJsZWQ6IGNvbXBpbGVCaW5kaW5nKGdldERlbGV0ZUJ1dHRvbkVuYWJsZWQob0VudGl0eURlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlLCBpc1BhcmVudERlbGV0YWJsZSkpLFxuXHRcdFx0cGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZDogYlBhcmVudEVudGl0eVNldERlbGV0YWJsZVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3QgaGVhZGVyRGF0YUZpZWxkRm9ySUJOQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9ySUJOQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgZmFsc2UpO1xuXG5cdGhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA9PT0gLTE7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBvTmF2aWdhdGlvblBhcmFtcyA9IHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBkYXRhRmllbGQuTWFwcGluZyA/IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhkYXRhRmllbGQuTWFwcGluZykgOiBbXVxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJSZXF1aXJlc0NvbnRleHQgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB0cnVlIGZvciBoZWFkZXIgSUJOIGFjdGlvbiA6IFwiICsgZGF0YUZpZWxkLkxhYmVsKTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLklubGluZT8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIklubGluZSBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHRydWUgZm9yIGhlYWRlciBJQk4gYWN0aW9uIDogXCIgKyBkYXRhRmllbGQuTGFiZWwpO1xuXHRcdFx0fVxuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0YnV0dG9uVHlwZTogQnV0dG9uVHlwZS5HaG9zdCxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDpcblx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHQ/IGNvbXBpbGVCaW5kaW5nKGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlPy52YWx1ZU9mKCkpLCB0cnVlKSlcblx0XHRcdFx0XHRcdDogdHJ1ZSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRwcmVzczogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0Zm4oXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLCBbXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRvTmF2aWdhdGlvblBhcmFtc1xuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdCksXG5cdFx0XHRcdGN1c3RvbURhdGE6IGNvbXBpbGVCaW5kaW5nKHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRhY3Rpb246IGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5BY3Rpb24pXG5cdFx0XHRcdH0pXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXHQvLyBGaW5hbGx5IHRoZSBub24gY3JpdGljYWwgRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5kZXhPZihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5IGFzIHN0cmluZykgPT09IC0xO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXG5cdHJldHVybiBoZWFkZXJBY3Rpb25zO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7QmFzZUFjdGlvbltdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBoaWRkZW5BY3Rpb25zID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZCkgPT4ge1xuXHRcdHJldHVybiBpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcblx0fSkgfHwgW10pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW107XG5cdHJldHVybiBoaWRkZW5BY3Rpb25zLm1hcCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGVmYXVsdCxcblx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0fTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHZpZXdMZXZlbFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtCYXNlQWN0aW9uW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyh2aWV3TGV2ZWw6IG51bWJlciwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgb1N0aWNreVNlc3Npb25TdXBwb3J0ZWQgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkLCAvL2ZvciBzdGlja3kgYXBwXG5cdFx0c0VudGl0eVNldERyYWZ0Um9vdCA9XG5cdFx0XHRlbnRpdHlTZXQgJiYgKGVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8udGVybSB8fCBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LnRlcm0pLFxuXHRcdGJDb25kaXRpb25TYXZlID1cblx0XHRcdHNFbnRpdHlTZXREcmFmdFJvb3QgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiIHx8XG5cdFx0XHQob1N0aWNreVNlc3Npb25TdXBwb3J0ZWQgJiYgb1N0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LlNhdmVBY3Rpb24pLFxuXHRcdGJDb25kaXRpb25BcHBseSA9IHZpZXdMZXZlbCA+IDEsXG5cdFx0YkNvbmRpdGlvbkNhbmNlbCA9XG5cdFx0XHRzRW50aXR5U2V0RHJhZnRSb290ID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIiB8fFxuXHRcdFx0KG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkICYmIG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5EaXNjYXJkQWN0aW9uKTtcblxuXHQvLyBSZXRyaWV2ZSBhbGwgZGV0ZXJtaW5pbmcgYWN0aW9uc1xuXHRjb25zdCBmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zID0gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCB0cnVlKTtcblxuXHQvLyBGaXJzdCBhZGQgdGhlIFwiQ3JpdGljYWxcIiBEYXRhRmllbGRGb3JBY3Rpb25zXG5cdGNvbnN0IGZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA+IC0xO1xuXHRcdH0pXG5cdFx0Lm1hcCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpLFxuXHRcdFx0XHRlbmFibGVkOiBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHRcdH07XG5cdFx0fSk7XG5cblx0Ly8gVGhlbiB0aGUgc2F2ZSBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChlbnRpdHlTZXQ/LmVudGl0eVR5cGVOYW1lID09PSBlbnRpdHlUeXBlPy5mdWxseVF1YWxpZmllZE5hbWUgJiYgYkNvbmRpdGlvblNhdmUpIHtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLlByaW1hcnksIGtleTogXCJTYXZlQWN0aW9uXCIgfSk7XG5cdH1cblxuXHQvLyBUaGVuIHRoZSBhcHBseSBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChiQ29uZGl0aW9uQXBwbHkpIHtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLkRlZmF1bHRBcHBseSwga2V5OiBcIkFwcGx5QWN0aW9uXCIgfSk7XG5cdH1cblxuXHQvLyBUaGVuIHRoZSBub24gY3JpdGljYWwgRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5kZXhPZihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5IGFzIHN0cmluZykgPT09IC0xO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXG5cdC8vIFRoZW4gdGhlIGNhbmNlbCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChiQ29uZGl0aW9uQ2FuY2VsKSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuU2Vjb25kYXJ5LFxuXHRcdFx0a2V5OiBcIkNhbmNlbEFjdGlvblwiLFxuXHRcdFx0cG9zaXRpb246IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuRW5kIH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZm9vdGVyQWN0aW9ucztcbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ActionType } from "../ManifestSettings";
|
|
2
1
|
import { EntityType } from "@sap-ux/annotation-converter";
|
|
2
|
+
import { DataFieldForActionTypes, DataFieldForIntentBasedNavigationTypes, PropertyAnnotationValue } from "@sap-ux/vocabularies-types";
|
|
3
3
|
import {
|
|
4
4
|
AnnotationAction,
|
|
5
5
|
BaseAction,
|
|
@@ -7,24 +7,24 @@ import {
|
|
|
7
7
|
getEnabledForAnnotationAction,
|
|
8
8
|
getSemanticObjectMapping
|
|
9
9
|
} from "sap/fe/core/converters/controls/Common/Action";
|
|
10
|
-
import { DataFieldForActionTypes, DataFieldForIntentBasedNavigationTypes, PropertyAnnotationValue } from "@sap-ux/vocabularies-types";
|
|
11
10
|
import { Placement } from "sap/fe/core/converters/helpers/ConfigurableObject";
|
|
11
|
+
import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
|
|
12
12
|
import {
|
|
13
|
+
and,
|
|
13
14
|
annotationExpression,
|
|
15
|
+
BindingExpression,
|
|
14
16
|
compileBinding,
|
|
15
|
-
|
|
17
|
+
constant,
|
|
16
18
|
equal,
|
|
17
|
-
fn,
|
|
18
19
|
Expression,
|
|
19
|
-
|
|
20
|
+
fn,
|
|
20
21
|
ifElse,
|
|
21
|
-
|
|
22
|
-
constant
|
|
22
|
+
not
|
|
23
23
|
} from "sap/fe/core/helpers/BindingExpression";
|
|
24
|
-
import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
|
|
25
24
|
import { isPathDeletable } from "sap/fe/core/templating/DataModelPathHelper";
|
|
26
25
|
import ConverterContext from "../ConverterContext";
|
|
27
26
|
import { Draft, singletonPathVisitor, UI } from "../helpers/BindingHelper";
|
|
27
|
+
import { ActionType } from "../ManifestSettings";
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* Retrieves all the data field for actions for the identification annotation
|
|
@@ -37,7 +37,7 @@ import { Draft, singletonPathVisitor, UI } from "../helpers/BindingHelper";
|
|
|
37
37
|
* @returns {DataFieldForActionTypes[]} An array of DataField for action respecting the input parameter 'bDetermining'
|
|
38
38
|
*/
|
|
39
39
|
export function getIdentificationDataFieldForActions(entityType: EntityType, bDetermining: boolean): DataFieldForActionTypes[] {
|
|
40
|
-
return (entityType.annotations?.UI?.Identification?.filter(identificationDataField => {
|
|
40
|
+
return (entityType.annotations?.UI?.Identification?.filter((identificationDataField) => {
|
|
41
41
|
if (identificationDataField?.annotations?.UI?.Hidden?.valueOf() !== true) {
|
|
42
42
|
if (
|
|
43
43
|
identificationDataField?.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction" &&
|
|
@@ -59,10 +59,10 @@ export function getIdentificationDataFieldForActions(entityType: EntityType, bDe
|
|
|
59
59
|
*
|
|
60
60
|
* @param {EntityType} entityType The current entitytype
|
|
61
61
|
* @param {boolean} bDetermining Whether or not the action should be determining
|
|
62
|
-
* @returns {DataFieldForIntentBasedNavigationTypes[]} An array of
|
|
62
|
+
* @returns {DataFieldForIntentBasedNavigationTypes[]} An array of data field for action respecting the bDetermining property.
|
|
63
63
|
*/
|
|
64
64
|
function getIdentificationDataFieldForIBNActions(entityType: EntityType, bDetermining: boolean): DataFieldForIntentBasedNavigationTypes[] {
|
|
65
|
-
return (entityType.annotations?.UI?.Identification?.filter(identificationDataField => {
|
|
65
|
+
return (entityType.annotations?.UI?.Identification?.filter((identificationDataField) => {
|
|
66
66
|
if (identificationDataField?.annotations?.UI?.Hidden?.valueOf() !== true) {
|
|
67
67
|
if (
|
|
68
68
|
identificationDataField?.$Type === "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation" &&
|
|
@@ -95,7 +95,7 @@ export function getDeleteButtonVisibility(
|
|
|
95
95
|
deleteHidden: PropertyAnnotationValue<boolean> | undefined
|
|
96
96
|
): Expression<boolean> {
|
|
97
97
|
const dataModelObjectPath = converterContext.getDataModelObjectPath(),
|
|
98
|
-
visitedNavigationPaths = dataModelObjectPath.navigationProperties.map(navProp => navProp.name),
|
|
98
|
+
visitedNavigationPaths = dataModelObjectPath.navigationProperties.map((navProp) => navProp.name),
|
|
99
99
|
// Set absolute binding path for Singleton references, otherwise the configured annotation path itself.
|
|
100
100
|
// For e.g. /com.sap.namespace.EntityContainer/Singleton/Property to /Singleton/Property
|
|
101
101
|
deleteHiddenExpression: Expression<boolean | undefined> = annotationExpression(
|
|
@@ -154,7 +154,7 @@ export function getEditButtonVisibility(
|
|
|
154
154
|
const entitySet = converterContext.getEntitySet(),
|
|
155
155
|
bIsDraftRoot = entitySet && entitySet.annotations.Common?.DraftRoot ? true : false,
|
|
156
156
|
dataModelObjectPath = converterContext.getDataModelObjectPath(),
|
|
157
|
-
visitedNavigationPaths = dataModelObjectPath.navigationProperties.map(navProp => navProp.name),
|
|
157
|
+
visitedNavigationPaths = dataModelObjectPath.navigationProperties.map((navProp) => navProp.name),
|
|
158
158
|
// Set absolute binding path for Singleton references, otherwise the configured annotation path itself.
|
|
159
159
|
// For e.g. /com.sap.namespace.EntityContainer/Singleton/Property to /Singleton/Property
|
|
160
160
|
updateHiddenExpression: Expression<boolean | undefined> = annotationExpression(
|
|
@@ -228,27 +228,39 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
|
|
|
228
228
|
bParentEntitySetDeletable = isParentDeletable ? compileBinding(isParentDeletable) : isParentDeletable,
|
|
229
229
|
headerDataFieldForActions = getIdentificationDataFieldForActions(converterContext.getEntityType(), false);
|
|
230
230
|
|
|
231
|
-
//
|
|
232
|
-
|
|
233
|
-
|
|
231
|
+
// Initialize actions and start with draft actions if available since they should appear in the first
|
|
232
|
+
// leftmost position in the actions area of the OP header
|
|
233
|
+
// This is more like a placeholder than a single action, since this controls not only the templating of
|
|
234
|
+
// the button for switching between draft and active document versions but also the controls for
|
|
235
|
+
// the collaborative draft fragment.
|
|
236
|
+
const headerActions: BaseAction[] = [];
|
|
237
|
+
if (oDraftRoot?.EditAction && bUpdateHidden !== true) {
|
|
238
|
+
headerActions.push({ type: ActionType.DraftActions, key: "DraftActions" });
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Then add the "Critical" DataFieldForActions
|
|
242
|
+
headerDataFieldForActions
|
|
243
|
+
.filter((dataField) => {
|
|
234
244
|
return IMPORTANT_CRITICALITIES.indexOf(dataField?.Criticality as string) > -1;
|
|
235
245
|
})
|
|
236
|
-
.
|
|
237
|
-
|
|
246
|
+
.forEach((dataField) => {
|
|
247
|
+
headerActions.push({
|
|
238
248
|
type: ActionType.DataFieldForAction,
|
|
239
249
|
annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
|
|
240
250
|
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
241
251
|
visible: compileBinding(not(equal(annotationExpression(dataField.annotations?.UI?.Hidden), true))),
|
|
242
252
|
enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
|
|
243
253
|
isNavigable: true
|
|
244
|
-
};
|
|
254
|
+
});
|
|
245
255
|
});
|
|
246
256
|
|
|
247
257
|
// Then the edit action if it exists
|
|
248
258
|
if ((oDraftRoot?.EditAction || oStickySessionSupported?.EditAction) && bUpdateHidden !== true) {
|
|
249
|
-
const updateHidden = (
|
|
250
|
-
|
|
251
|
-
|
|
259
|
+
const updateHidden = (
|
|
260
|
+
entitySet?.annotations.UI?.UpdateHidden?.valueOf() !== undefined
|
|
261
|
+
? entitySet?.annotations.UI?.UpdateHidden
|
|
262
|
+
: entityType?.annotations.UI?.UpdateHidden
|
|
263
|
+
) as PropertyAnnotationValue<boolean>;
|
|
252
264
|
headerActions.push({
|
|
253
265
|
type: ActionType.Primary,
|
|
254
266
|
key: "EditAction",
|
|
@@ -261,9 +273,11 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
|
|
|
261
273
|
(bParentEntitySetDeletable && bParentEntitySetDeletable !== "false") ||
|
|
262
274
|
(oEntityDeleteRestrictions?.Deletable?.valueOf() !== false && bParentEntitySetDeletable !== "false")
|
|
263
275
|
) {
|
|
264
|
-
const deleteHidden = (
|
|
265
|
-
|
|
266
|
-
|
|
276
|
+
const deleteHidden = (
|
|
277
|
+
entitySet?.annotations.UI?.DeleteHidden?.valueOf() !== undefined
|
|
278
|
+
? entitySet?.annotations.UI?.DeleteHidden
|
|
279
|
+
: entityType?.annotations.UI?.DeleteHidden
|
|
280
|
+
) as PropertyAnnotationValue<boolean>;
|
|
267
281
|
headerActions.push({
|
|
268
282
|
type: ActionType.Secondary,
|
|
269
283
|
key: "DeleteAction",
|
|
@@ -273,18 +287,13 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
|
|
|
273
287
|
});
|
|
274
288
|
}
|
|
275
289
|
|
|
276
|
-
if (oDraftRoot?.EditAction && bUpdateHidden !== true) {
|
|
277
|
-
headerActions.push({ type: ActionType.SwitchToActiveObject, key: "SwitchToActiveObject" });
|
|
278
|
-
headerActions.push({ type: ActionType.SwitchToDraftObject, key: "SwitchToDraftObject" });
|
|
279
|
-
}
|
|
280
|
-
|
|
281
290
|
const headerDataFieldForIBNActions = getIdentificationDataFieldForIBNActions(converterContext.getEntityType(), false);
|
|
282
291
|
|
|
283
292
|
headerDataFieldForIBNActions
|
|
284
|
-
.filter(dataField => {
|
|
293
|
+
.filter((dataField) => {
|
|
285
294
|
return IMPORTANT_CRITICALITIES.indexOf(dataField?.Criticality as string) === -1;
|
|
286
295
|
})
|
|
287
|
-
.forEach(dataField => {
|
|
296
|
+
.forEach((dataField) => {
|
|
288
297
|
const oNavigationParams = {
|
|
289
298
|
semanticObjectMapping: dataField.Mapping ? getSemanticObjectMapping(dataField.Mapping) : []
|
|
290
299
|
};
|
|
@@ -321,10 +330,10 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
|
|
|
321
330
|
});
|
|
322
331
|
// Finally the non critical DataFieldForActions
|
|
323
332
|
headerDataFieldForActions
|
|
324
|
-
.filter(dataField => {
|
|
333
|
+
.filter((dataField) => {
|
|
325
334
|
return IMPORTANT_CRITICALITIES.indexOf(dataField?.Criticality as string) === -1;
|
|
326
335
|
})
|
|
327
|
-
.forEach(dataField => {
|
|
336
|
+
.forEach((dataField) => {
|
|
328
337
|
headerActions.push({
|
|
329
338
|
type: ActionType.DataFieldForAction,
|
|
330
339
|
annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
|
|
@@ -344,10 +353,10 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
|
|
|
344
353
|
*/
|
|
345
354
|
export function getHiddenHeaderActions(converterContext: ConverterContext): BaseAction[] {
|
|
346
355
|
const entityType = converterContext.getEntityType();
|
|
347
|
-
const hiddenActions = (entityType.annotations?.UI?.Identification?.filter(identificationDataField => {
|
|
356
|
+
const hiddenActions = (entityType.annotations?.UI?.Identification?.filter((identificationDataField) => {
|
|
348
357
|
return identificationDataField?.annotations?.UI?.Hidden?.valueOf() === true;
|
|
349
358
|
}) || []) as DataFieldForActionTypes[];
|
|
350
|
-
return hiddenActions.map(dataField => {
|
|
359
|
+
return hiddenActions.map((dataField) => {
|
|
351
360
|
return {
|
|
352
361
|
type: ActionType.Default,
|
|
353
362
|
key: KeyHelper.generateKeyFromDataField(dataField)
|
|
@@ -379,10 +388,10 @@ export function getFooterDefaultActions(viewLevel: number, converterContext: Con
|
|
|
379
388
|
|
|
380
389
|
// First add the "Critical" DataFieldForActions
|
|
381
390
|
const footerActions: BaseAction[] = footerDataFieldForActions
|
|
382
|
-
.filter(dataField => {
|
|
391
|
+
.filter((dataField) => {
|
|
383
392
|
return IMPORTANT_CRITICALITIES.indexOf(dataField?.Criticality as string) > -1;
|
|
384
393
|
})
|
|
385
|
-
.map(dataField => {
|
|
394
|
+
.map((dataField) => {
|
|
386
395
|
return {
|
|
387
396
|
type: ActionType.DataFieldForAction,
|
|
388
397
|
annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
|
|
@@ -405,10 +414,10 @@ export function getFooterDefaultActions(viewLevel: number, converterContext: Con
|
|
|
405
414
|
|
|
406
415
|
// Then the non critical DataFieldForActions
|
|
407
416
|
footerDataFieldForActions
|
|
408
|
-
.filter(dataField => {
|
|
417
|
+
.filter((dataField) => {
|
|
409
418
|
return IMPORTANT_CRITICALITIES.indexOf(dataField?.Criticality as string) === -1;
|
|
410
419
|
})
|
|
411
|
-
.forEach(dataField => {
|
|
420
|
+
.forEach((dataField) => {
|
|
412
421
|
footerActions.push({
|
|
413
422
|
type: ActionType.DataFieldForAction,
|
|
414
423
|
annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
|