@sapui5/sap.fe.core 1.102.2 → 1.104.1
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 +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +73 -30
- package/src/sap/fe/core/AppComponent.ts +65 -43
- package/src/sap/fe/core/AppStateHandler.js +82 -70
- package/src/sap/fe/core/AppStateHandler.ts +32 -37
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +227 -126
- package/src/sap/fe/core/CommonUtils.ts +240 -163
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
- package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +170 -139
- package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
- package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +7 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
- package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
- package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
- package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
- package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
- package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
- package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +48 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
- package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
- package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
- package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +39 -63
- package/src/sap/fe/core/messagebundle_ar.properties +25 -39
- package/src/sap/fe/core/messagebundle_bg.properties +25 -39
- package/src/sap/fe/core/messagebundle_ca.properties +25 -39
- package/src/sap/fe/core/messagebundle_cs.properties +25 -39
- package/src/sap/fe/core/messagebundle_cy.properties +25 -39
- package/src/sap/fe/core/messagebundle_da.properties +25 -39
- package/src/sap/fe/core/messagebundle_de.properties +25 -39
- package/src/sap/fe/core/messagebundle_el.properties +26 -40
- package/src/sap/fe/core/messagebundle_en.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
- package/src/sap/fe/core/messagebundle_es.properties +27 -41
- package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
- package/src/sap/fe/core/messagebundle_et.properties +25 -39
- package/src/sap/fe/core/messagebundle_fi.properties +25 -39
- package/src/sap/fe/core/messagebundle_fr.properties +26 -40
- package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
- package/src/sap/fe/core/messagebundle_hi.properties +25 -39
- package/src/sap/fe/core/messagebundle_hr.properties +25 -39
- package/src/sap/fe/core/messagebundle_hu.properties +25 -39
- package/src/sap/fe/core/messagebundle_id.properties +25 -39
- package/src/sap/fe/core/messagebundle_it.properties +41 -55
- package/src/sap/fe/core/messagebundle_iw.properties +25 -39
- package/src/sap/fe/core/messagebundle_ja.properties +25 -39
- package/src/sap/fe/core/messagebundle_kk.properties +25 -39
- package/src/sap/fe/core/messagebundle_ko.properties +30 -44
- package/src/sap/fe/core/messagebundle_lt.properties +25 -39
- package/src/sap/fe/core/messagebundle_lv.properties +25 -39
- package/src/sap/fe/core/messagebundle_ms.properties +25 -39
- package/src/sap/fe/core/messagebundle_nl.properties +27 -41
- package/src/sap/fe/core/messagebundle_no.properties +25 -39
- package/src/sap/fe/core/messagebundle_pl.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
- package/src/sap/fe/core/messagebundle_ro.properties +25 -39
- package/src/sap/fe/core/messagebundle_ru.properties +25 -39
- package/src/sap/fe/core/messagebundle_sh.properties +25 -39
- package/src/sap/fe/core/messagebundle_sk.properties +25 -39
- package/src/sap/fe/core/messagebundle_sl.properties +25 -39
- package/src/sap/fe/core/messagebundle_sv.properties +25 -39
- package/src/sap/fe/core/messagebundle_th.properties +25 -39
- package/src/sap/fe/core/messagebundle_tr.properties +25 -39
- package/src/sap/fe/core/messagebundle_uk.properties +25 -39
- package/src/sap/fe/core/messagebundle_vi.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +16 -15
- package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +152 -95
- package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -56,7 +56,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
56
56
|
_proto.toExternal = function
|
|
57
57
|
/*oNavArgumentsArr: Array<object>, oComponent: object*/
|
|
58
58
|
toExternal() {
|
|
59
|
-
|
|
59
|
+
/* Do Nothing */
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
_proto.getStartupAppState = function
|
|
@@ -66,7 +66,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
66
66
|
};
|
|
67
67
|
|
|
68
68
|
_proto.backToPreviousApp = function backToPreviousApp() {
|
|
69
|
-
|
|
69
|
+
/* Do Nothing */
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
_proto.hrefForExternal = function
|
|
@@ -75,7 +75,9 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
75
75
|
return "";
|
|
76
76
|
};
|
|
77
77
|
|
|
78
|
-
_proto.hrefForExternalAsync = function
|
|
78
|
+
_proto.hrefForExternalAsync = function
|
|
79
|
+
/*oArgs?: object, oComponent?: object*/
|
|
80
|
+
hrefForExternalAsync() {
|
|
79
81
|
return Promise.resolve({});
|
|
80
82
|
};
|
|
81
83
|
|
|
@@ -91,6 +93,12 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
91
93
|
return Promise.resolve({});
|
|
92
94
|
};
|
|
93
95
|
|
|
96
|
+
_proto.createEmptyAppStateAsync = function
|
|
97
|
+
/*oComponent: object*/
|
|
98
|
+
createEmptyAppStateAsync() {
|
|
99
|
+
return Promise.resolve({});
|
|
100
|
+
};
|
|
101
|
+
|
|
94
102
|
_proto.isNavigationSupported = function
|
|
95
103
|
/*oNavArgumentsArr: Array<object>, oComponent: object*/
|
|
96
104
|
isNavigationSupported() {
|
|
@@ -132,19 +140,19 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
132
140
|
_proto.setDirtyFlag = function
|
|
133
141
|
/*bDirty: boolean*/
|
|
134
142
|
setDirtyFlag() {
|
|
135
|
-
|
|
143
|
+
/* Do Nothing */
|
|
136
144
|
};
|
|
137
145
|
|
|
138
146
|
_proto.registerDirtyStateProvider = function
|
|
139
147
|
/*fnDirtyStateProvider: Function*/
|
|
140
148
|
registerDirtyStateProvider() {
|
|
141
|
-
|
|
149
|
+
/* Do Nothing */
|
|
142
150
|
};
|
|
143
151
|
|
|
144
152
|
_proto.deregisterDirtyStateProvider = function
|
|
145
153
|
/*fnDirtyStateProvider: Function*/
|
|
146
154
|
deregisterDirtyStateProvider() {
|
|
147
|
-
|
|
155
|
+
/* Do Nothing */
|
|
148
156
|
};
|
|
149
157
|
|
|
150
158
|
_proto.createRenderer = function createRenderer() {
|
|
@@ -162,31 +170,31 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
162
170
|
_proto.registerNavigationFilter = function
|
|
163
171
|
/*fnNavFilter: Function*/
|
|
164
172
|
registerNavigationFilter() {
|
|
165
|
-
|
|
173
|
+
/* Do Nothing */
|
|
166
174
|
};
|
|
167
175
|
|
|
168
176
|
_proto.unregisterNavigationFilter = function
|
|
169
177
|
/*fnNavFilter: Function*/
|
|
170
178
|
unregisterNavigationFilter() {
|
|
171
|
-
|
|
179
|
+
/* Do Nothing */
|
|
172
180
|
};
|
|
173
181
|
|
|
174
182
|
_proto.setBackNavigation = function
|
|
175
183
|
/*fnCallBack?: Function*/
|
|
176
184
|
setBackNavigation() {
|
|
177
|
-
|
|
185
|
+
/* Do Nothing */
|
|
178
186
|
};
|
|
179
187
|
|
|
180
188
|
_proto.setHierarchy = function
|
|
181
189
|
/*aHierarchyLevels: Array<object>*/
|
|
182
190
|
setHierarchy() {
|
|
183
|
-
|
|
191
|
+
/* Do Nothing */
|
|
184
192
|
};
|
|
185
193
|
|
|
186
194
|
_proto.setTitle = function
|
|
187
195
|
/*sTitle: string*/
|
|
188
196
|
setTitle() {
|
|
189
|
-
|
|
197
|
+
/* Do Nothing */
|
|
190
198
|
};
|
|
191
199
|
|
|
192
200
|
_proto.getContentDensity = function getContentDensity() {
|
|
@@ -218,8 +226,8 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
218
226
|
* Wrap a JQuery Promise within a native {Promise}.
|
|
219
227
|
*
|
|
220
228
|
* @template {object} T
|
|
221
|
-
* @param
|
|
222
|
-
* @returns
|
|
229
|
+
* @param jqueryPromise The original jquery promise
|
|
230
|
+
* @returns A native promise wrapping the same object
|
|
223
231
|
* @private
|
|
224
232
|
*/
|
|
225
233
|
function wrapJQueryPromise(jqueryPromise) {
|
|
@@ -311,9 +319,9 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
311
319
|
*
|
|
312
320
|
* @private
|
|
313
321
|
* @ui5-restricted
|
|
314
|
-
* @param
|
|
322
|
+
* @param oArgs Check the definition of
|
|
315
323
|
* sap.ushell.services.CrossApplicationNavigation=>getLinks arguments
|
|
316
|
-
* @returns
|
|
324
|
+
* @returns Promise which will be resolved to target links array
|
|
317
325
|
*/
|
|
318
326
|
;
|
|
319
327
|
|
|
@@ -323,7 +331,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
323
331
|
return new Promise(function (resolve, reject) {
|
|
324
332
|
// eslint-disable-next-line promise/catch-or-return
|
|
325
333
|
_this2.crossAppNavService.getLinks(oArgs).fail(function (oError) {
|
|
326
|
-
reject(new Error(oError
|
|
334
|
+
reject(new Error("".concat(oError, " sap.fe.core.services.NavigationServiceFactory.getLinks")));
|
|
327
335
|
}).then(resolve);
|
|
328
336
|
});
|
|
329
337
|
}
|
|
@@ -335,9 +343,9 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
335
343
|
*
|
|
336
344
|
* @private
|
|
337
345
|
* @ui5-restricted
|
|
338
|
-
* @param
|
|
346
|
+
* @param oArgs Check the definition of
|
|
339
347
|
* sap.ushell.services.CrossApplicationNavigation=>getLinks arguments
|
|
340
|
-
* @returns
|
|
348
|
+
* @returns Promise which will be resolved to target links array
|
|
341
349
|
*/
|
|
342
350
|
;
|
|
343
351
|
|
|
@@ -356,7 +364,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
356
364
|
} else {
|
|
357
365
|
// eslint-disable-next-line promise/catch-or-return
|
|
358
366
|
_this3.crossAppNavService.getLinks(oCacheResults.newArgs).fail(function (oError) {
|
|
359
|
-
reject(new Error(oError
|
|
367
|
+
reject(new Error("".concat(oError, " sap.fe.core.services.NavigationServiceFactory.getLinksWithCache")));
|
|
360
368
|
}).then(function (aLinks) {
|
|
361
369
|
if (aLinks.length !== 0) {
|
|
362
370
|
var oSemanticObjectsLinks = {};
|
|
@@ -403,7 +411,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
403
411
|
* @private
|
|
404
412
|
* @ui5-restricted
|
|
405
413
|
* sap.ushell.container
|
|
406
|
-
* @returns
|
|
414
|
+
* @returns Object with predefined shellContainer methods
|
|
407
415
|
*/
|
|
408
416
|
;
|
|
409
417
|
|
|
@@ -415,10 +423,9 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
415
423
|
*
|
|
416
424
|
* @private
|
|
417
425
|
* @ui5-restricted
|
|
418
|
-
* @param
|
|
419
|
-
* @param
|
|
426
|
+
* @param oNavArgumentsArr And
|
|
427
|
+
* @param oComponent Check the definition of
|
|
420
428
|
* sap.ushell.services.CrossApplicationNavigation=>toExternal arguments
|
|
421
|
-
* @returns {void}
|
|
422
429
|
*/
|
|
423
430
|
;
|
|
424
431
|
|
|
@@ -433,9 +440,9 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
433
440
|
*
|
|
434
441
|
* @private
|
|
435
442
|
* @ui5-restricted
|
|
436
|
-
* @param
|
|
443
|
+
* @param oArgs Check the definition of
|
|
437
444
|
* sap.ushell.services.CrossApplicationNavigation=>getStartupAppState arguments
|
|
438
|
-
* @returns
|
|
445
|
+
* @returns Promise which will be resolved to Object
|
|
439
446
|
*/
|
|
440
447
|
;
|
|
441
448
|
|
|
@@ -446,14 +453,14 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
446
453
|
// JQuery Promise behaves differently
|
|
447
454
|
// eslint-disable-next-line promise/catch-or-return
|
|
448
455
|
_this4.crossAppNavService.getStartupAppState(oArgs).fail(function (oError) {
|
|
449
|
-
reject(new Error(oError
|
|
456
|
+
reject(new Error("".concat(oError, " sap.fe.core.services.NavigationServiceFactory.getStartupAppState")));
|
|
450
457
|
}).then(resolve);
|
|
451
458
|
});
|
|
452
459
|
}
|
|
453
460
|
/**
|
|
454
461
|
* Will call backToPreviousApp method of CrossApplicationNavigation service.
|
|
455
462
|
*
|
|
456
|
-
* @returns
|
|
463
|
+
* @returns Something that indicate we've navigated
|
|
457
464
|
* @private
|
|
458
465
|
* @ui5-restricted
|
|
459
466
|
*/
|
|
@@ -467,11 +474,11 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
467
474
|
*
|
|
468
475
|
* @private
|
|
469
476
|
* @ui5-restricted
|
|
470
|
-
* @param
|
|
471
|
-
* @param
|
|
472
|
-
* @param
|
|
477
|
+
* @param oArgs Check the definition of
|
|
478
|
+
* @param oComponent The appComponent
|
|
479
|
+
* @param bAsync Whether this call should be async or not
|
|
473
480
|
* sap.ushell.services.CrossApplicationNavigation=>hrefForExternal arguments
|
|
474
|
-
* @returns
|
|
481
|
+
* @returns Promise which will be resolved to string
|
|
475
482
|
*/
|
|
476
483
|
;
|
|
477
484
|
|
|
@@ -483,10 +490,10 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
483
490
|
*
|
|
484
491
|
* @private
|
|
485
492
|
* @ui5-restricted
|
|
486
|
-
* @param
|
|
487
|
-
* @param
|
|
493
|
+
* @param oArgs Check the definition of
|
|
494
|
+
* @param oComponent The appComponent
|
|
488
495
|
* sap.ushell.services.CrossApplicationNavigation=>hrefForExternalAsync arguments
|
|
489
|
-
* @returns
|
|
496
|
+
* @returns Promise which will be resolved to string
|
|
490
497
|
*/
|
|
491
498
|
;
|
|
492
499
|
|
|
@@ -498,10 +505,10 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
498
505
|
*
|
|
499
506
|
* @private
|
|
500
507
|
* @ui5-restricted
|
|
501
|
-
* @param
|
|
502
|
-
* @param
|
|
508
|
+
* @param oComponent
|
|
509
|
+
* @param sAppStateKey Check the definition of
|
|
503
510
|
* sap.ushell.services.CrossApplicationNavigation=>getAppState arguments
|
|
504
|
-
* @returns
|
|
511
|
+
* @returns Promise which will be resolved to object
|
|
505
512
|
*/
|
|
506
513
|
;
|
|
507
514
|
|
|
@@ -513,24 +520,38 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
513
520
|
*
|
|
514
521
|
* @private
|
|
515
522
|
* @ui5-restricted
|
|
516
|
-
* @param
|
|
523
|
+
* @param oComponent Check the definition of
|
|
517
524
|
* sap.ushell.services.CrossApplicationNavigation=>createEmptyAppState arguments
|
|
518
|
-
* @returns
|
|
525
|
+
* @returns Promise which will be resolved to object
|
|
519
526
|
*/
|
|
520
527
|
;
|
|
521
528
|
|
|
522
529
|
_proto2.createEmptyAppState = function createEmptyAppState(oComponent) {
|
|
523
530
|
return this.crossAppNavService.createEmptyAppState(oComponent);
|
|
524
531
|
}
|
|
532
|
+
/**
|
|
533
|
+
* Will call createEmptyAppStateAsync method of CrossApplicationNavigation service with oComponent.
|
|
534
|
+
*
|
|
535
|
+
* @private
|
|
536
|
+
* @ui5-restricted
|
|
537
|
+
* @param oComponent Check the definition of
|
|
538
|
+
* sap.ushell.services.CrossApplicationNavigation=>createEmptyAppStateAsync arguments
|
|
539
|
+
* @returns Promise which will be resolved to object
|
|
540
|
+
*/
|
|
541
|
+
;
|
|
542
|
+
|
|
543
|
+
_proto2.createEmptyAppStateAsync = function createEmptyAppStateAsync(oComponent) {
|
|
544
|
+
return this.crossAppNavService.createEmptyAppStateAsync(oComponent);
|
|
545
|
+
}
|
|
525
546
|
/**
|
|
526
547
|
* Will call isNavigationSupported method of CrossApplicationNavigation service with Navigation Arguments and oComponent.
|
|
527
548
|
*
|
|
528
549
|
* @private
|
|
529
550
|
* @ui5-restricted
|
|
530
|
-
* @param
|
|
531
|
-
* @param
|
|
551
|
+
* @param oNavArgumentsArr
|
|
552
|
+
* @param oComponent Check the definition of
|
|
532
553
|
* sap.ushell.services.CrossApplicationNavigation=>isNavigationSupported arguments
|
|
533
|
-
* @returns
|
|
554
|
+
* @returns Promise which will be resolved to object
|
|
534
555
|
*/
|
|
535
556
|
;
|
|
536
557
|
|
|
@@ -542,7 +563,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
542
563
|
*
|
|
543
564
|
* @private
|
|
544
565
|
* @ui5-restricted
|
|
545
|
-
* @returns
|
|
566
|
+
* @returns Promise which will be resolved to boolean
|
|
546
567
|
*/
|
|
547
568
|
;
|
|
548
569
|
|
|
@@ -554,7 +575,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
554
575
|
*
|
|
555
576
|
* @private
|
|
556
577
|
* @ui5-restricted
|
|
557
|
-
* @returns
|
|
578
|
+
* @returns Promise which will be resolved to boolean
|
|
558
579
|
*/
|
|
559
580
|
;
|
|
560
581
|
|
|
@@ -564,8 +585,8 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
564
585
|
/**
|
|
565
586
|
* Will call expandCompactHash method of CrossApplicationNavigation service.
|
|
566
587
|
*
|
|
567
|
-
* @param
|
|
568
|
-
* @returns
|
|
588
|
+
* @param sHashFragment An (internal format) shell hash
|
|
589
|
+
* @returns A promise the success handler of the resolve promise get an expanded shell hash as first argument
|
|
569
590
|
* @private
|
|
570
591
|
* @ui5-restricted
|
|
571
592
|
*/
|
|
@@ -579,9 +600,9 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
579
600
|
*
|
|
580
601
|
* @private
|
|
581
602
|
* @ui5-restricted
|
|
582
|
-
* @param
|
|
603
|
+
* @param sHash Check the definition of
|
|
583
604
|
* sap.ushell.services.URLParsing=>parseShellHash arguments
|
|
584
|
-
* @returns
|
|
605
|
+
* @returns The parsed url
|
|
585
606
|
*/
|
|
586
607
|
;
|
|
587
608
|
|
|
@@ -593,9 +614,9 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
593
614
|
*
|
|
594
615
|
* @private
|
|
595
616
|
* @ui5-restricted
|
|
596
|
-
* @param
|
|
617
|
+
* @param sHash Check the definition of
|
|
597
618
|
* sap.ushell.services.URLParsing=>splitHash arguments
|
|
598
|
-
* @returns
|
|
619
|
+
* @returns Promise which will be resolved to object
|
|
599
620
|
*/
|
|
600
621
|
;
|
|
601
622
|
|
|
@@ -607,9 +628,9 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
607
628
|
*
|
|
608
629
|
* @private
|
|
609
630
|
* @ui5-restricted
|
|
610
|
-
* @param
|
|
631
|
+
* @param oNewShellHash Check the definition of
|
|
611
632
|
* sap.ushell.services.URLParsing=>constructShellHash arguments
|
|
612
|
-
* @returns
|
|
633
|
+
* @returns Shell Hash string
|
|
613
634
|
*/
|
|
614
635
|
;
|
|
615
636
|
|
|
@@ -621,7 +642,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
621
642
|
*
|
|
622
643
|
* @private
|
|
623
644
|
* @ui5-restricted
|
|
624
|
-
* @param
|
|
645
|
+
* @param bDirty Check the definition of sap.ushell.Container.setDirtyFlag arguments
|
|
625
646
|
*/
|
|
626
647
|
;
|
|
627
648
|
|
|
@@ -633,7 +654,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
633
654
|
*
|
|
634
655
|
* @private
|
|
635
656
|
* @ui5-restricted
|
|
636
|
-
* @param
|
|
657
|
+
* @param fnDirtyStateProvider Check the definition of sap.ushell.Container.registerDirtyStateProvider arguments
|
|
637
658
|
*/
|
|
638
659
|
;
|
|
639
660
|
|
|
@@ -645,7 +666,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
645
666
|
*
|
|
646
667
|
* @private
|
|
647
668
|
* @ui5-restricted
|
|
648
|
-
* @param
|
|
669
|
+
* @param fnDirtyStateProvider Check the definition of sap.ushell.Container.deregisterDirtyStateProvider arguments
|
|
649
670
|
*/
|
|
650
671
|
;
|
|
651
672
|
|
|
@@ -657,7 +678,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
657
678
|
*
|
|
658
679
|
* @private
|
|
659
680
|
* @ui5-restricted
|
|
660
|
-
* @returns
|
|
681
|
+
* @returns Returns renderer object
|
|
661
682
|
*/
|
|
662
683
|
;
|
|
663
684
|
|
|
@@ -669,7 +690,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
669
690
|
*
|
|
670
691
|
* @private
|
|
671
692
|
* @ui5-restricted
|
|
672
|
-
* @returns
|
|
693
|
+
* @returns Returns User object
|
|
673
694
|
*/
|
|
674
695
|
;
|
|
675
696
|
|
|
@@ -681,7 +702,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
681
702
|
*
|
|
682
703
|
* @private
|
|
683
704
|
* @ui5-restricted
|
|
684
|
-
* @returns
|
|
705
|
+
* @returns Returns true
|
|
685
706
|
*/
|
|
686
707
|
;
|
|
687
708
|
|
|
@@ -691,8 +712,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
691
712
|
/**
|
|
692
713
|
* Will call registerNavigationFilter method of shellNavigation.
|
|
693
714
|
*
|
|
694
|
-
* @param
|
|
695
|
-
* @returns {void}
|
|
715
|
+
* @param fnNavFilter The filter function to register
|
|
696
716
|
* @private
|
|
697
717
|
* @ui5-restricted
|
|
698
718
|
*/
|
|
@@ -704,8 +724,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
704
724
|
/**
|
|
705
725
|
* Will call unregisterNavigationFilter method of shellNavigation.
|
|
706
726
|
*
|
|
707
|
-
* @param
|
|
708
|
-
* @returns {void}
|
|
727
|
+
* @param fnNavFilter The filter function to unregister
|
|
709
728
|
* @private
|
|
710
729
|
* @ui5-restricted
|
|
711
730
|
*/
|
|
@@ -718,8 +737,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
718
737
|
* Will call setBackNavigation method of ShellUIService
|
|
719
738
|
* that displays the back button in the shell header.
|
|
720
739
|
*
|
|
721
|
-
* @param
|
|
722
|
-
* @returns {void}
|
|
740
|
+
* @param [fnCallBack] A callback function called when the button is clicked in the UI.
|
|
723
741
|
* @private
|
|
724
742
|
* @ui5-restricted
|
|
725
743
|
*/
|
|
@@ -732,8 +750,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
732
750
|
* Will call setHierarchy method of ShellUIService
|
|
733
751
|
* that displays the given hierarchy in the shell header.
|
|
734
752
|
*
|
|
735
|
-
* @param
|
|
736
|
-
* @returns {void}
|
|
753
|
+
* @param [aHierarchyLevels] An array representing hierarchies of the currently displayed app.
|
|
737
754
|
* @private
|
|
738
755
|
* @ui5-restricted
|
|
739
756
|
*/
|
|
@@ -746,8 +763,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
746
763
|
* Will call setTitle method of ShellUIService
|
|
747
764
|
* that displays the given title in the shell header.
|
|
748
765
|
*
|
|
749
|
-
* @param
|
|
750
|
-
* @returns {void}
|
|
766
|
+
* @param [sTitle] The new title. The default title is set if this argument is not given.
|
|
751
767
|
* @private
|
|
752
768
|
* @ui5-restricted
|
|
753
769
|
*/
|
|
@@ -759,7 +775,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
759
775
|
/**
|
|
760
776
|
* Retrieves the currently defined content density.
|
|
761
777
|
*
|
|
762
|
-
* @returns
|
|
778
|
+
* @returns The content density value
|
|
763
779
|
*/
|
|
764
780
|
;
|
|
765
781
|
|
|
@@ -773,9 +789,9 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
773
789
|
*
|
|
774
790
|
* @private
|
|
775
791
|
* @ui5-restricted
|
|
776
|
-
* @param
|
|
777
|
-
* @param
|
|
778
|
-
* @returns
|
|
792
|
+
* @param sSemanticObject Semantic object.
|
|
793
|
+
* @param mParameters See #CrossApplicationNavigation#getLinks for description.
|
|
794
|
+
* @returns Promise which will be resolved with an object containing the intent if it exists.
|
|
779
795
|
*/
|
|
780
796
|
;
|
|
781
797
|
|
|
@@ -785,7 +801,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
785
801
|
return new Promise(function (resolve, reject) {
|
|
786
802
|
// eslint-disable-next-line promise/catch-or-return
|
|
787
803
|
_this5.crossAppNavService.getPrimaryIntent(sSemanticObject, mParameters).fail(function (oError) {
|
|
788
|
-
reject(new Error(oError
|
|
804
|
+
reject(new Error("".concat(oError, " sap.fe.core.services.NavigationServiceFactory.getPrimaryIntent")));
|
|
789
805
|
}).then(resolve);
|
|
790
806
|
});
|
|
791
807
|
};
|
|
@@ -811,8 +827,8 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
811
827
|
/**
|
|
812
828
|
* Creates either a standard or a mock Shell service depending on the configuration.
|
|
813
829
|
*
|
|
814
|
-
* @param
|
|
815
|
-
* @returns
|
|
830
|
+
* @param oServiceContext The shellservice context
|
|
831
|
+
* @returns A promise for a shell service implementation
|
|
816
832
|
* @see ServiceFactory#createInstance
|
|
817
833
|
*/
|
|
818
834
|
_proto3.createInstance = function createInstance(oServiceContext) {
|
|
@@ -833,4 +849,4 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
|
|
|
833
849
|
|
|
834
850
|
return ShellServicesFactory;
|
|
835
851
|
}, false);
|
|
836
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNoZWxsU2VydmljZXNGYWN0b3J5LnRzIl0sIm5hbWVzIjpbIlNoZWxsU2VydmljZU1vY2siLCJpbml0IiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImluc3RhbmNlVHlwZSIsImdldExpbmtzIiwiZ2V0TGlua3NXaXRoQ2FjaGUiLCJ0b0V4dGVybmFsIiwiZ2V0U3RhcnR1cEFwcFN0YXRlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJocmVmRm9yRXh0ZXJuYWxBc3luYyIsIm9BcmdzIiwib0NvbXBvbmVudCIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsImlzSW5pdGlhbE5hdmlnYXRpb24iLCJpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMiLCJleHBhbmRDb21wYWN0SGFzaCIsInBhcnNlU2hlbGxIYXNoIiwic3BsaXRIYXNoIiwiY29uc3RydWN0U2hlbGxIYXNoIiwic2V0RGlydHlGbGFnIiwicmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIiwiY3JlYXRlUmVuZGVyZXIiLCJnZXRVc2VyIiwiaGFzVVNoZWxsIiwicmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwidW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInNldEhpZXJhcmNoeSIsInNldFRpdGxlIiwiZ2V0Q29udGVudERlbnNpdHkiLCJkb2N1bWVudCIsImJvZHkiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImdldFByaW1hcnlJbnRlbnQiLCJTZXJ2aWNlIiwid3JhcEpRdWVyeVByb21pc2UiLCJqcXVlcnlQcm9taXNlIiwicmVqZWN0IiwiZG9uZSIsImZhaWwiLCJTaGVsbFNlcnZpY2VzIiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwic2NvcGVPYmplY3QiLCJvU2hlbGxDb250YWluZXIiLCJzZXR0aW5ncyIsInNoZWxsQ29udGFpbmVyIiwibGlua3NDYWNoZSIsImZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUiLCJfb0FyZ3MiLCJhQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwiYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cyIsImkiLCJsZW5ndGgiLCJzZW1hbnRpY09iamVjdCIsInB1c2giLCJsaW5rcyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJvbGRBcmdzIiwibmV3QXJncyIsImNhY2hlZExpbmtzIiwicmVzb2x2ZUZuIiwicmVqZWN0Rm4iLCJvQ3Jvc3NBcHBOYXZTZXJ2aWNlUHJvbWlzZSIsImdldFNlcnZpY2VBc3luYyIsIm9VcmxQYXJzaW5nU2VydmljZVByb21pc2UiLCJvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UiLCJvU2hlbGxVSVNlcnZpY2VQcm9taXNlIiwiZ2V0U2VydmljZSIsImFsbCIsInRoZW4iLCJvQ3Jvc3NBcHBOYXZTZXJ2aWNlIiwib1VybFBhcnNpbmdTZXJ2aWNlIiwib1NoZWxsTmF2aWdhdGlvbiIsIm9TaGVsbFVJU2VydmljZSIsImNyb3NzQXBwTmF2U2VydmljZSIsInVybFBhcnNpbmdTZXJ2aWNlIiwic2hlbGxOYXZpZ2F0aW9uIiwic2hlbGxVSVNlcnZpY2UiLCJjYXRjaCIsIm9FcnJvciIsIkVycm9yIiwib0NhY2hlUmVzdWx0cyIsImFMaW5rcyIsIm9TZW1hbnRpY09iamVjdHNMaW5rcyIsInVuZGVmaW5lZCIsImFzc2lnbiIsImFNZXJnZWRMaW5rcyIsImoiLCJrIiwiZ2V0U2hlbGxDb250YWluZXIiLCJvTmF2QXJndW1lbnRzQXJyIiwiYkFzeW5jIiwic0FwcFN0YXRlS2V5Iiwic0hhc2hGcmFnbWVudCIsInNIYXNoIiwib05ld1NoZWxsSGFzaCIsImJEaXJ0eSIsImZuRGlydHlTdGF0ZVByb3ZpZGVyIiwiZm5OYXZGaWx0ZXIiLCJmbkNhbGxCYWNrIiwiYUhpZXJhcmNoeUxldmVscyIsInNUaXRsZSIsInNTZW1hbnRpY09iamVjdCIsIm1QYXJhbWV0ZXJzIiwiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsIm9TaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwiU2VydmljZUZhY3RvcnkiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUNNQSxnQjs7Ozs7Ozs7O1dBSUxDLEksR0FBQSxnQkFBTztBQUNOLFdBQUtDLFdBQUwsR0FBbUJDLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixJQUFoQixDQUFuQjtBQUNBLFdBQUtDLFlBQUwsR0FBb0IsTUFBcEI7QUFDQSxLOztXQUVEQyxRLEdBQUE7QUFBUztBQUFULGVBQTRCO0FBQzNCLGFBQU9ILE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0EsSzs7V0FFREcsaUIsR0FBQTtBQUFrQjtBQUFsQix3QkFBcUM7QUFDcEMsYUFBT0osT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDQSxLOztXQUVESSxVLEdBQUE7QUFBVztBQUFYLGlCQUFvRTtBQUNuRTtBQUNBLEs7O1dBRURDLGtCLEdBQUE7QUFBbUI7QUFBbkIseUJBQXNDO0FBQ3JDLGFBQU9OLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixJQUFoQixDQUFQO0FBQ0EsSzs7V0FFRE0saUIsR0FBQSw2QkFBb0I7QUFDbkI7QUFDQSxLOztXQUVEQyxlLEdBQUE7QUFBZ0I7QUFBaEIsc0JBQTJFO0FBQzFFLGFBQU8sRUFBUDtBQUNBLEs7O1dBRURDLG9CLEdBQUEsOEJBQXFCQyxLQUFyQixFQUFxQ0MsVUFBckMsRUFBMEQ7QUFDekQsYUFBT1gsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDQSxLOztXQUVEVyxXLEdBQUE7QUFBWTtBQUFaLGtCQUEwRDtBQUN6RCxhQUFPWixP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LElBQWVELEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFwRTtBQUNBLFVBQU1DLGFBQWEsR0FBR0osZUFBZSxDQUFDaEUsUUFBaEIsQ0FBeUJDLGNBQXpCLEdBQ25CLElBQUlOLGFBQUosQ0FBa0JxRSxlQUFsQixDQURtQixHQUVuQixJQUFJcEgsZ0JBQUosQ0FBcUJvSCxlQUFyQixDQUZIO0FBR0EsYUFBT0ksYUFBYSxDQUFDdEgsV0FBZCxDQUEwQjZFLElBQTFCLENBQStCLFlBQU07QUFDM0M7QUFDQ3FDLFFBQUFBLGVBQWUsQ0FBQ2xFLFdBQWpCLENBQXFDdUUsZ0JBQXJDLEdBQXdEO0FBQUEsaUJBQU1ELGFBQU47QUFBQSxTQUF4RDs7QUFDQSxlQUFPQSxhQUFQO0FBQ0EsT0FKTSxDQUFQO0FBS0EsSzs7O0lBbEJpQ0UsYzs7U0FxQnBCUixvQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBDb250YWluZXIgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvQ29udGFpbmVyXCI7XG5pbXBvcnQgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cIjtcbmltcG9ydCBTaGVsbE5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvU2hlbGxOYXZpZ2F0aW9uXCI7XG5pbXBvcnQgVVJMUGFyc2luZyBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9VUkxQYXJzaW5nXCI7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzIHtcblx0aW5pdFByb21pc2U6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXHRpbnN0YW5jZVR5cGU6IHN0cmluZztcblx0Y3Jvc3NBcHBOYXZTZXJ2aWNlPzogQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb247XG5cdGdldExpbmtzKG9BcmdzOiBvYmplY3QpOiBQcm9taXNlPGFueT47XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M6IG9iamVjdCk6IFByb21pc2U8YW55W10+O1xuXG5cdHRvRXh0ZXJuYWwob05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0KTogdm9pZDtcblxuXHRnZXRTdGFydHVwQXBwU3RhdGUob0FyZ3M6IG9iamVjdCk6IFByb21pc2U8YW55PjtcblxuXHRiYWNrVG9QcmV2aW91c0FwcCgpOiB2b2lkO1xuXG5cdGhyZWZGb3JFeHRlcm5hbChvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbik6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcblxuXHRocmVmRm9yRXh0ZXJuYWxBc3luYyhvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCk6IFByb21pc2U8YW55PjtcblxuXHRnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuXG5cdGNyZWF0ZUVtcHR5QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50KTogb2JqZWN0O1xuXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTxhbnk+O1xuXG5cdGlzSW5pdGlhbE5hdmlnYXRpb24oKTogYm9vbGVhbjtcblxuXHRpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMoKTogUHJvbWlzZTxhbnk+O1xuXG5cdGV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQ6IHN0cmluZyk6IGFueTtcblxuXHRwYXJzZVNoZWxsSGFzaChzSGFzaDogc3RyaW5nKTogYW55O1xuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogb2JqZWN0O1xuXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmc7XG5cblx0c2V0RGlydHlGbGFnKGJEaXJ0eTogYm9vbGVhbik6IHZvaWQ7XG5cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0Y3JlYXRlUmVuZGVyZXIoKTogb2JqZWN0O1xuXG5cdGdldFVzZXIoKTogYW55O1xuXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuO1xuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0c2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjaz86IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRzZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0Pik6IHZvaWQ7XG5cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkO1xuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZztcblxuXHRnZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCk6IFByb21pc2U8YW55Pjtcbn1cblxuLyoqXG4gKiBNb2NrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGVsbFNlcnZpY2UgZm9yIE9wZW5GRVxuICpcbiAqIEBpbXBsZW1lbnRzIHtJU2hlbGxTZXJ2aWNlc31cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZU1vY2sgZXh0ZW5kcyBTZXJ2aWNlPFNoZWxsU2VydmljZXNTZXR0aW5ncz4gaW1wbGVtZW50cyBJU2hlbGxTZXJ2aWNlcyB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRpbnN0YW5jZVR5cGUhOiBzdHJpbmc7XG5cblx0aW5pdCgpIHtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuXHRcdHRoaXMuaW5zdGFuY2VUeXBlID0gXCJtb2NrXCI7XG5cdH1cblxuXHRnZXRMaW5rcygvKm9BcmdzOiBvYmplY3QqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUoLypvQXJnczogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdHRvRXh0ZXJuYWwoLypvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QqLykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZSgvKm9BcmdzOiBvYmplY3QqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblxuXHRiYWNrVG9QcmV2aW91c0FwcCgpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRocmVmRm9yRXh0ZXJuYWwoLypvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbiovKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRocmVmRm9yRXh0ZXJuYWxBc3luYyhvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0Z2V0QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QsIHNBcHBTdGF0ZUtleTogc3RyaW5nKi8pIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGNyZWF0ZUVtcHR5QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0aXNOYXZpZ2F0aW9uU3VwcG9ydGVkKC8qb05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGlzSW5pdGlhbE5hdmlnYXRpb24oKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aXNJbml0aWFsTmF2aWdhdGlvbkFzeW5jKCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0ZXhwYW5kQ29tcGFjdEhhc2goLypzSGFzaEZyYWdtZW50OiBzdHJpbmcqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0cGFyc2VTaGVsbEhhc2goLypzSGFzaDogc3RyaW5nKi8pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRzcGxpdEhhc2goLypzSGFzaDogc3RyaW5nKi8pIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGNvbnN0cnVjdFNoZWxsSGFzaCgvKm9OZXdTaGVsbEhhc2g6IG9iamVjdCovKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRzZXREaXJ0eUZsYWcoLypiRGlydHk6IGJvb2xlYW4qLykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjcmVhdGVSZW5kZXJlcigpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRnZXRVc2VyKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGhhc1VTaGVsbCgpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoLypmbk5hdkZpbHRlcjogRnVuY3Rpb24qLyk6IHZvaWQge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKC8qZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRzZXRCYWNrTmF2aWdhdGlvbigvKmZuQ2FsbEJhY2s/OiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2V0SGllcmFyY2h5KC8qYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0PiovKTogdm9pZCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2V0VGl0bGUoLypzVGl0bGU6IHN0cmluZyovKTogdm9pZCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nIHtcblx0XHQvLyBpbiBjYXNlIHRoZXJlIGlzIG5vIHNoZWxsIHdlIHByb2JhYmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgY2xhc3NlcyBiZWluZyBkZWZpbmVkIG9uIHRoZSBib2R5XG5cdFx0aWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2FwVWlTaXplQ296eVwiKSkge1xuXHRcdFx0cmV0dXJuIFwiY296eVwiO1xuXHRcdH0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb21wYWN0XCIpKSB7XG5cdFx0XHRyZXR1cm4gXCJjb21wYWN0XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdGdldFByaW1hcnlJbnRlbnQoLypzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgbVBhcmFtZXRlcnM/OiBvYmplY3QqLyk6IFByb21pc2U8YW55PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgU2hlbGxTZXJ2aWNlc1NldHRpbmdzXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgdHlwZSBTaGVsbFNlcnZpY2VzU2V0dGluZ3MgPSB7XG5cdHNoZWxsQ29udGFpbmVyPzogQ29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBXcmFwIGEgSlF1ZXJ5IFByb21pc2Ugd2l0aGluIGEgbmF0aXZlIHtQcm9taXNlfS5cbiAqXG4gKiBAdGVtcGxhdGUge29iamVjdH0gVFxuICogQHBhcmFtIHtqUXVlcnkuUHJvbWlzZTxUPn0ganF1ZXJ5UHJvbWlzZSBUaGUgb3JpZ2luYWwganF1ZXJ5IHByb21pc2VcbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSBBIG5hdGl2ZSBwcm9taXNlIHdyYXBwaW5nIHRoZSBzYW1lIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gd3JhcEpRdWVyeVByb21pc2U8VD4oanF1ZXJ5UHJvbWlzZTogalF1ZXJ5LlByb21pc2UpOiBQcm9taXNlPFQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9jYXRjaC1vci1yZXR1cm5cblx0XHRqcXVlcnlQcm9taXNlLmRvbmUocmVzb2x2ZSBhcyBhbnkpLmZhaWwocmVqZWN0KTtcblx0fSk7XG59XG5cbi8qKlxuICogQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2hlbGxTZXJ2aWNlc1xuICpcbiAqIEBpbXBsZW1lbnRzIHtJU2hlbGxTZXJ2aWNlc31cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZXMgZXh0ZW5kcyBTZXJ2aWNlPFJlcXVpcmVkPFNoZWxsU2VydmljZXNTZXR0aW5ncz4+IGltcGxlbWVudHMgSVNoZWxsU2VydmljZXMge1xuXHRyZXNvbHZlRm46IGFueTtcblx0cmVqZWN0Rm46IGFueTtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPGFueT47XG5cdC8vICE6IG1lYW5zIHRoYXQgd2Uga25vdyBpdCB3aWxsIGJlIGFzc2lnbmVkIGJlZm9yZSB1c2FnZVxuXHRjcm9zc0FwcE5hdlNlcnZpY2UhOiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbjtcblx0dXJsUGFyc2luZ1NlcnZpY2UhOiBVUkxQYXJzaW5nO1xuXHRzaGVsbE5hdmlnYXRpb24hOiBTaGVsbE5hdmlnYXRpb247XG5cdG9TaGVsbENvbnRhaW5lciE6IENvbnRhaW5lcjtcblx0c2hlbGxVSVNlcnZpY2UhOiBhbnk7XG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblx0bGlua3NDYWNoZSE6IGFueTtcblx0Zm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZTogYW55O1xuXG5cdGluaXQoKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3QgYXMgYW55O1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyID0gb0NvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXI7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcInJlYWxcIjtcblx0XHR0aGlzLmxpbmtzQ2FjaGUgPSB7fTtcblx0XHR0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUgPSBmdW5jdGlvbiAob0FyZ3M6IGFueSk6IG9iamVjdCB7XG5cdFx0XHRjb25zdCBfb0FyZ3M6IGFueSA9IG9BcmdzO1xuXHRcdFx0Y29uc3QgYUNhY2hlZFNlbWFudGljT2JqZWN0cyA9IFtdO1xuXHRcdFx0Y29uc3QgYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cyA9IFtdO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBfb0FyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKCEhX29BcmdzW2ldWzBdICYmICEhX29BcmdzW2ldWzBdLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMubGlua3NDYWNoZVtfb0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3RdKSB7XG5cdFx0XHRcdFx0XHRhQ2FjaGVkU2VtYW50aWNPYmplY3RzLnB1c2godGhpcy5saW5rc0NhY2hlW19vQXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9BcmdzW2ldWzBdLCBcImxpbmtzXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHRoaXMubGlua3NDYWNoZVtfb0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3RdLmxpbmtzXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cy5wdXNoKF9vQXJnc1tpXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4geyBvbGRBcmdzOiBvQXJncywgbmV3QXJnczogYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cywgY2FjaGVkTGlua3M6IGFDYWNoZWRTZW1hbnRpY09iamVjdHMgfTtcblx0XHR9O1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnJlc29sdmVGbiA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnJlamVjdEZuID0gcmVqZWN0O1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9Dcm9zc0FwcE5hdlNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cIik7XG5cdFx0Y29uc3Qgb1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlVSTFBhcnNpbmdcIik7XG5cdFx0Y29uc3Qgb1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiU2hlbGxOYXZpZ2F0aW9uXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFVJU2VydmljZVByb21pc2UgPSBvQ29tcG9uZW50LmdldFNlcnZpY2UoXCJTaGVsbFVJU2VydmljZVwiKTtcblx0XHRQcm9taXNlLmFsbChbb0Nyb3NzQXBwTmF2U2VydmljZVByb21pc2UsIG9VcmxQYXJzaW5nU2VydmljZVByb21pc2UsIG9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSwgb1NoZWxsVUlTZXJ2aWNlUHJvbWlzZV0pXG5cdFx0XHQudGhlbigoW29Dcm9zc0FwcE5hdlNlcnZpY2UsIG9VcmxQYXJzaW5nU2VydmljZSwgb1NoZWxsTmF2aWdhdGlvbiwgb1NoZWxsVUlTZXJ2aWNlXSkgPT4ge1xuXHRcdFx0XHR0aGlzLmNyb3NzQXBwTmF2U2VydmljZSA9IG9Dcm9zc0FwcE5hdlNlcnZpY2U7XG5cdFx0XHRcdHRoaXMudXJsUGFyc2luZ1NlcnZpY2UgPSBvVXJsUGFyc2luZ1NlcnZpY2U7XG5cdFx0XHRcdHRoaXMuc2hlbGxOYXZpZ2F0aW9uID0gb1NoZWxsTmF2aWdhdGlvbjtcblx0XHRcdFx0dGhpcy5zaGVsbFVJU2VydmljZSA9IG9TaGVsbFVJU2VydmljZTtcblx0XHRcdFx0dGhpcy5yZXNvbHZlRm4oKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb25cblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0TGlua3MgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gdGFyZ2V0IGxpbmtzIGFycmF5XG5cdCAqL1xuXHRnZXRMaW5rcyhvQXJnczogb2JqZWN0KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0dGhpcy5jcm9zc0FwcE5hdlNlcnZpY2Vcblx0XHRcdFx0LmdldExpbmtzKG9BcmdzKVxuXHRcdFx0XHQuZmFpbCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKG9FcnJvciArIFwiIHNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeS5nZXRMaW5rc1wiKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKHJlc29sdmUpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IGxpbmtzIGNvbmZpZ3VyZWQgZm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0ICYgYWN0aW9uIGluIGNhY2hlXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uXG5cdCAqIHNlcnZpY2UgcmVmZXJlbmNlIGNhbGwgdGhlIGdldExpbmtzIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldExpbmtzIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M6IG9iamVjdCk6IFByb21pc2U8YW55W10+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvY2F0Y2gtb3ItcmV0dXJuXG5cdFx0XHRpZiAoKG9BcmdzIGFzIE9iamVjdFtdKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmVzb2x2ZShbXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvQ2FjaGVSZXN1bHRzID0gdGhpcy5mbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlKG9BcmdzKTtcblxuXHRcdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5uZXdBcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHJlc29sdmUob0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvY2F0Y2gtb3ItcmV0dXJuXG5cdFx0XHRcdFx0dGhpcy5jcm9zc0FwcE5hdlNlcnZpY2Vcblx0XHRcdFx0XHRcdC5nZXRMaW5rcyhvQ2FjaGVSZXN1bHRzLm5ld0FyZ3MpXG5cdFx0XHRcdFx0XHQuZmFpbCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihvRXJyb3IgKyBcIiBzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnkuZ2V0TGlua3NXaXRoQ2FjaGVcIikpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50aGVuKChhTGlua3M6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdHNMaW5rczogYW55ID0ge307XG5cblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFMaW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFMaW5rc1tpXS5sZW5ndGggPiAwICYmIG9DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5saW5rcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdHNMaW5rc1tvQ2FjaGVSZXN1bHRzLm5ld0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3RdID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxpbmtzOiBhTGlua3NbaV1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5saW5rc0NhY2hlID0gT2JqZWN0LmFzc2lnbih0aGlzLmxpbmtzQ2FjaGUsIG9TZW1hbnRpY09iamVjdHNMaW5rcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKG9DYWNoZVJlc3VsdHMuY2FjaGVkTGlua3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShhTGlua3MpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFNZXJnZWRMaW5rcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcblxuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgb0NhY2hlUmVzdWx0cy5vbGRBcmdzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaiA8IGFMaW5rcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFMaW5rc1tqXS5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0NhY2hlUmVzdWx0cy5vbGRBcmdzW2tdWzBdLnNlbWFudGljT2JqZWN0ID09PSBvQ2FjaGVSZXN1bHRzLm5ld0FyZ3Nbal1bMF0uc2VtYW50aWNPYmplY3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goYUxpbmtzW2pdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2gob0NhY2hlUmVzdWx0cy5vbGRBcmdzW2tdWzBdLmxpbmtzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2gob0NhY2hlUmVzdWx0cy5vbGRBcmdzW2tdWzBdLmxpbmtzKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShhTWVyZ2VkTGlua3MpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIFNoZWxsQ29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogc2FwLnVzaGVsbC5jb250YWluZXJcblx0ICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IHdpdGggcHJlZGVmaW5lZCBzaGVsbENvbnRhaW5lciBtZXRob2RzXG5cdCAqL1xuXHRnZXRTaGVsbENvbnRhaW5lcigpIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXI7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHRvRXh0ZXJuYWwgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBOYXZpZ2F0aW9uIEFyZ3VtZW50cyBhbmQgb0NvbXBvbmVudC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSB7QXJyYXl9IG9OYXZBcmd1bWVudHNBcnIgQW5kXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PnRvRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmNyb3NzQXBwTmF2U2VydmljZS50b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IHN0YXJ0dXBBcHBTdGF0ZVxuXHQgKiBXaWxsIGNoZWNrIHRoZSBleGlzdGFuY2Ugb2YgdGhlIFNoZWxsQ29udGFpbmVyIGFuZCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0U3RhcnR1cEFwcFN0YXRlIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldFN0YXJ0dXBBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBPYmplY3Rcblx0ICovXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZShvQXJnczogQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdC8vIEpRdWVyeSBQcm9taXNlIGJlaGF2ZXMgZGlmZmVyZW50bHlcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0KHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlIGFzIGFueSlcblx0XHRcdFx0LmdldFN0YXJ0dXBBcHBTdGF0ZShvQXJncylcblx0XHRcdFx0LmZhaWwoKG9FcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihvRXJyb3IgKyBcIiBzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnkuZ2V0U3RhcnR1cEFwcFN0YXRlXCIpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4ocmVzb2x2ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGJhY2tUb1ByZXZpb3VzQXBwIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRiYWNrVG9QcmV2aW91c0FwcCgpIHtcblx0XHRyZXR1cm4gdGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuYmFja1RvUHJldmlvdXNBcHAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaHJlZkZvckV4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIHtib29sZWFufSBiQXN5bmMgV2hldGhlciB0aGlzIGNhbGwgc2hvdWxkIGJlIGFzeW5jIG9yIG5vdFxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5ocmVmRm9yRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBzdHJpbmdcblx0ICovXG5cdGhyZWZGb3JFeHRlcm5hbChvQXJnczogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlLmhyZWZGb3JFeHRlcm5hbChvQXJncywgb0NvbXBvbmVudCBhcyBvYmplY3QsICEhYkFzeW5jKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaHJlZkZvckV4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+aHJlZkZvckV4dGVybmFsQXN5bmMgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBzdHJpbmdcblx0ICovXG5cdGhyZWZGb3JFeHRlcm5hbEFzeW5jKG9BcmdzOiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpIHtcblx0XHRyZXR1cm4gdGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuaHJlZkZvckV4dGVybmFsQXN5bmMob0FyZ3MsIG9Db21wb25lbnQgYXMgb2JqZWN0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0QXBwU3RhdGUgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBvQ29tcG9uZW50IGFuZCBvQXBwU3RhdGVLZXkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbXBvbmVudFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0FwcFN0YXRlS2V5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0Z2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZykge1xuXHRcdHJldHVybiB3cmFwSlF1ZXJ5UHJvbWlzZSgodGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UgYXMgYW55KS5nZXRBcHBTdGF0ZShvQ29tcG9uZW50LCBzQXBwU3RhdGVLZXkpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY3JlYXRlRW1wdHlBcHBTdGF0ZSBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5jcmVhdGVFbXB0eUFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpIHtcblx0XHRyZXR1cm4gKHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlIGFzIGFueSkuY3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge0FycmF5fSBvTmF2QXJndW1lbnRzQXJyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmlzTmF2aWdhdGlvblN1cHBvcnRlZCBhcmd1bWVudHNcblx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QpIHtcblx0XHRyZXR1cm4gd3JhcEpRdWVyeVByb21pc2UodGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNJbml0aWFsTmF2aWdhdGlvbiBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gYm9vbGVhblxuXHQgKi9cblx0aXNJbml0aWFsTmF2aWdhdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuaXNJbml0aWFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIGJvb2xlYW5cblx0ICovXG5cdGlzSW5pdGlhbE5hdmlnYXRpb25Bc3luYygpIHtcblx0XHRyZXR1cm4gdGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuaXNJbml0aWFsTmF2aWdhdGlvbkFzeW5jKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGV4cGFuZENvbXBhY3RIYXNoIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0hhc2hGcmFnbWVudCBBbiAoaW50ZXJuYWwgZm9ybWF0KSBzaGVsbCBoYXNoXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBBIHByb21pc2UgdGhlIHN1Y2Nlc3MgaGFuZGxlciBvZiB0aGUgcmVzb2x2ZSBwcm9taXNlIGdldCBhbiBleHBhbmRlZCBzaGVsbCBoYXNoIGFzIGZpcnN0IGFyZ3VtZW50XG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0ZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlLmV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBwYXJzZVNoZWxsSGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5wYXJzZVNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMge29iamVjdH1cblx0ICovXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5wYXJzZVNoZWxsSGFzaChzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNwbGl0SGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5zcGxpdEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRzcGxpdEhhc2goc0hhc2g6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLnNwbGl0SGFzaChzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNvbnN0cnVjdFNoZWxsSGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb05ld1NoZWxsSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PmNvbnN0cnVjdFNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMge3N0cmluZ30gU2hlbGwgSGFzaCBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5jb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldERpcnR5RmxhZyBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRpcnR5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLnNldERpcnR5RmxhZyBhcmd1bWVudHNcblx0ICovXG5cdHNldERpcnR5RmxhZyhiRGlydHk6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5zZXREaXJ0eUZsYWcoYkRpcnR5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgYXJndW1lbnRzXG5cdCAqL1xuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24pIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBhcmd1bWVudHNcblx0ICovXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKSB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNyZWF0ZVJlbmRlcmVyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHJldHVybnMge29iamVjdH0gUmV0dXJucyByZW5kZXJlciBvYmplY3Rcblx0ICovXG5cdGNyZWF0ZVJlbmRlcmVyKCkge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5jcmVhdGVSZW5kZXJlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRVc2VyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHJldHVybnMge29iamVjdH0gUmV0dXJucyBVc2VyIG9iamVjdFxuXHQgKi9cblx0Z2V0VXNlcigpIHtcblx0XHRyZXR1cm4gKHRoaXMub1NoZWxsQ29udGFpbmVyIGFzIGFueSkuZ2V0VXNlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2hlY2sgaWYgdXNoZWxsIGNvbnRhaW5lciBpcyBhdmFpbGFibGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZVxuXHQgKi9cblx0aGFzVVNoZWxsKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCByZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byByZWdpc3RlclxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKSB7XG5cdFx0KHRoaXMuc2hlbGxOYXZpZ2F0aW9uIGFzIGFueSkucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgdW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbikge1xuXHRcdCh0aGlzLnNoZWxsTmF2aWdhdGlvbiBhcyBhbnkpLnVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0QmFja05hdmlnYXRpb24gbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGJhY2sgYnV0dG9uIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbkNhbGxCYWNrXSBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCBpbiB0aGUgVUkuXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdHNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2s/OiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEhpZXJhcmNoeSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gaGllcmFyY2h5IGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0W119IFthSGllcmFyY2h5TGV2ZWxzXSBBbiBhcnJheSByZXByZXNlbnRpbmcgaGllcmFyY2hpZXMgb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgYXBwLlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRzZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0Pik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtzVGl0bGVdIFRoZSBuZXcgdGl0bGUuIFRoZSBkZWZhdWx0IHRpdGxlIGlzIHNldCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBnaXZlbi5cblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsVUlTZXJ2aWNlLnNldFRpdGxlKHNUaXRsZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjdXJyZW50bHkgZGVmaW5lZCBjb250ZW50IGRlbnNpdHkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb250ZW50IGRlbnNpdHkgdmFsdWVcblx0ICovXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuICgodGhpcy5vU2hlbGxDb250YWluZXIgYXMgYW55KS5nZXRVc2VyKCkgYXMgYW55KS5nZXRDb250ZW50RGVuc2l0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvciBhIGdpdmVuIHNlbWFudGljIG9iamVjdCwgdGhpcyBtZXRob2QgY29uc2lkZXJzIGFsbCBhY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VtYW50aWMgb2JqZWN0IGFuZFxuXHQgKiByZXR1cm5zIHRoZSBvbmUgdGFnZ2VkIGFzIGEgXCJwcmltYXJ5QWN0aW9uXCIuIElmIG5vIGluYm91bmQgdGFnZ2VkIGFzIFwicHJpbWFyeUFjdGlvblwiIGV4aXN0cywgdGhlbiBpdCByZXR1cm5zXG5cdCAqIHRoZSBpbnRlbnQgb2YgdGhlIGZpcnN0IGluYm91bmQgKGFmdGVyIHNvcnRpbmcgaGFzIGJlZW4gYXBwbGllZCkgbWF0Y2hpbmcgdGhlIGFjdGlvbiBcImRpc3BsYXlGYWN0U2hlZXRcIi5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzU2VtYW50aWNPYmplY3QgU2VtYW50aWMgb2JqZWN0LlxuXHQgKiBAcGFyYW0ge29iamVjdH0gbVBhcmFtZXRlcnMgU2VlICNDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiNnZXRMaW5rcyBmb3IgZGVzY3JpcHRpb24uXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW50ZW50IGlmIGl0IGV4aXN0cy5cblx0ICovXG5cdGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxhbnk+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvY2F0Y2gtb3ItcmV0dXJuXG5cdFx0XHR0aGlzLmNyb3NzQXBwTmF2U2VydmljZVxuXHRcdFx0XHQuZ2V0UHJpbWFyeUludGVudChzU2VtYW50aWNPYmplY3QsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQuZmFpbCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKG9FcnJvciArIFwiIHNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeS5nZXRQcmltYXJ5SW50ZW50XCIpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4ocmVzb2x2ZSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlIEZhY3RvcnkgZm9yIHRoZSBTaGVsbFNlcnZpY2VzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU2hlbGxTZXJ2aWNlc0ZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+IHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgZWl0aGVyIGEgc3RhbmRhcmQgb3IgYSBtb2NrIFNoZWxsIHNlcnZpY2UgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1NlcnZpY2VDb250ZXh0PFNoZWxsU2VydmljZXNTZXR0aW5ncz59IG9TZXJ2aWNlQ29udGV4dCBUaGUgc2hlbGxzZXJ2aWNlIGNvbnRleHRcblx0ICogQHJldHVybnMge1Byb21pc2U8SVNoZWxsU2VydmljZXM+fSBBIHByb21pc2UgZm9yIGEgc2hlbGwgc2VydmljZSBpbXBsZW1lbnRhdGlvblxuXHQgKiBAc2VlIFNlcnZpY2VGYWN0b3J5I2NyZWF0ZUluc3RhbmNlXG5cdCAqL1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFNoZWxsU2VydmljZXNTZXR0aW5ncz4pOiBQcm9taXNlPElTaGVsbFNlcnZpY2VzPiB7XG5cdFx0b1NlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyID0gc2FwLnVzaGVsbCAmJiAoc2FwLnVzaGVsbC5Db250YWluZXIgYXMgQ29udGFpbmVyKTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlID0gb1NlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyXG5cdFx0XHQ/IG5ldyBTaGVsbFNlcnZpY2VzKG9TZXJ2aWNlQ29udGV4dCBhcyBTZXJ2aWNlQ29udGV4dDxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+Pilcblx0XHRcdDogbmV3IFNoZWxsU2VydmljZU1vY2sob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gb1NoZWxsU2VydmljZS5pbml0UHJvbWlzZS50aGVuKCgpID0+IHtcblx0XHRcdC8vIEVucmljaCB0aGUgYXBwQ29tcG9uZW50IHdpdGggdGhpcyBtZXRob2Rcblx0XHRcdChvU2VydmljZUNvbnRleHQuc2NvcGVPYmplY3QgYXMgYW55KS5nZXRTaGVsbFNlcnZpY2VzID0gKCkgPT4gb1NoZWxsU2VydmljZTtcblx0XHRcdHJldHVybiBvU2hlbGxTZXJ2aWNlO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoZWxsU2VydmljZXNGYWN0b3J5O1xuIl19
|
|
852
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNoZWxsU2VydmljZXNGYWN0b3J5LnRzIl0sIm5hbWVzIjpbIlNoZWxsU2VydmljZU1vY2siLCJpbml0IiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImluc3RhbmNlVHlwZSIsImdldExpbmtzIiwiZ2V0TGlua3NXaXRoQ2FjaGUiLCJ0b0V4dGVybmFsIiwiZ2V0U3RhcnR1cEFwcFN0YXRlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJocmVmRm9yRXh0ZXJuYWxBc3luYyIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsImlzSW5pdGlhbE5hdmlnYXRpb24iLCJpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMiLCJleHBhbmRDb21wYWN0SGFzaCIsInBhcnNlU2hlbGxIYXNoIiwic3BsaXRIYXNoIiwiY29uc3RydWN0U2hlbGxIYXNoIiwic2V0RGlydHlGbGFnIiwicmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIiwiY3JlYXRlUmVuZGVyZXIiLCJnZXRVc2VyIiwiaGFzVVNoZWxsIiwicmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwidW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInNldEhpZXJhcmNoeSIsInNldFRpdGxlIiwiZ2V0Q29udGVudERlbnNpdHkiLCJkb2N1bWVudCIsImJvZHkiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImdldFByaW1hcnlJbnRlbnQiLCJTZXJ2aWNlIiwid3JhcEpRdWVyeVByb21pc2UiLCJqcXVlcnlQcm9taXNlIiwicmVqZWN0IiwiZG9uZSIsImZhaWwiLCJTaGVsbFNlcnZpY2VzIiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwib0NvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib1NoZWxsQ29udGFpbmVyIiwic2V0dGluZ3MiLCJzaGVsbENvbnRhaW5lciIsImxpbmtzQ2FjaGUiLCJmbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlIiwib0FyZ3MiLCJfb0FyZ3MiLCJhQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwiYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cyIsImkiLCJsZW5ndGgiLCJzZW1hbnRpY09iamVjdCIsInB1c2giLCJsaW5rcyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJvbGRBcmdzIiwibmV3QXJncyIsImNhY2hlZExpbmtzIiwicmVzb2x2ZUZuIiwicmVqZWN0Rm4iLCJvQ3Jvc3NBcHBOYXZTZXJ2aWNlUHJvbWlzZSIsImdldFNlcnZpY2VBc3luYyIsIm9VcmxQYXJzaW5nU2VydmljZVByb21pc2UiLCJvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UiLCJvU2hlbGxVSVNlcnZpY2VQcm9taXNlIiwiZ2V0U2VydmljZSIsImFsbCIsInRoZW4iLCJvQ3Jvc3NBcHBOYXZTZXJ2aWNlIiwib1VybFBhcnNpbmdTZXJ2aWNlIiwib1NoZWxsTmF2aWdhdGlvbiIsIm9TaGVsbFVJU2VydmljZSIsImNyb3NzQXBwTmF2U2VydmljZSIsInVybFBhcnNpbmdTZXJ2aWNlIiwic2hlbGxOYXZpZ2F0aW9uIiwic2hlbGxVSVNlcnZpY2UiLCJjYXRjaCIsIm9FcnJvciIsIkVycm9yIiwib0NhY2hlUmVzdWx0cyIsImFMaW5rcyIsIm9TZW1hbnRpY09iamVjdHNMaW5rcyIsInVuZGVmaW5lZCIsImFzc2lnbiIsImFNZXJnZWRMaW5rcyIsImoiLCJrIiwiZ2V0U2hlbGxDb250YWluZXIiLCJvTmF2QXJndW1lbnRzQXJyIiwiYkFzeW5jIiwic0FwcFN0YXRlS2V5Iiwic0hhc2hGcmFnbWVudCIsInNIYXNoIiwib05ld1NoZWxsSGFzaCIsImJEaXJ0eSIsImZuRGlydHlTdGF0ZVByb3ZpZGVyIiwiZm5OYXZGaWx0ZXIiLCJmbkNhbGxCYWNrIiwiYUhpZXJhcmNoeUxldmVscyIsInNUaXRsZSIsInNTZW1hbnRpY09iamVjdCIsIm1QYXJhbWV0ZXJzIiwiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsIm9TaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwiU2VydmljZUZhY3RvcnkiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUNNQSxnQjs7Ozs7Ozs7O1dBSUxDLEksR0FBQSxnQkFBTztBQUNOLFdBQUtDLFdBQUwsR0FBbUJDLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixJQUFoQixDQUFuQjtBQUNBLFdBQUtDLFlBQUwsR0FBb0IsTUFBcEI7QUFDQSxLOztXQUVEQyxRLEdBQUE7QUFBUztBQUFULGVBQTRCO0FBQzNCLGFBQU9ILE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0EsSzs7V0FFREcsaUIsR0FBQTtBQUFrQjtBQUFsQix3QkFBcUM7QUFDcEMsYUFBT0osT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDQSxLOztXQUVESSxVLEdBQUE7QUFBVztBQUFYLGlCQUFvRTtBQUNuRTtBQUNBLEs7O1dBRURDLGtCLEdBQUE7QUFBbUI7QUFBbkIseUJBQXNDO0FBQ3JDLGFBQU9OLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixJQUFoQixDQUFQO0FBQ0EsSzs7V0FFRE0saUIsR0FBQSw2QkFBb0I7QUFDbkI7QUFDQSxLOztXQUVEQyxlLEdBQUE7QUFBZ0I7QUFBaEIsc0JBQTJFO0FBQzFFLGFBQU8sRUFBUDtBQUNBLEs7O1dBRURDLG9CLEdBQUE7QUFBcUI7QUFBckIsMkJBQThEO0FBQzdELGFBQU9ULE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0EsSzs7V0FFRFMsVyxHQUFBO0FBQVk7QUFBWixrQkFBMEQ7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QUFDQTtBQUNBO0FBQ0E7OztNQUNNMkUsb0I7Ozs7Ozs7OztBQUNMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO1lBQ0NDLGMsR0FBQSx3QkFBZUMsZUFBZixFQUFnRztBQUMvRkEsTUFBQUEsZUFBZSxDQUFDakUsUUFBaEIsQ0FBeUJDLGNBQXpCLEdBQTBDaUUsR0FBRyxDQUFDQyxNQUFKLElBQWVELEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFwRTtBQUNBLFVBQU1DLGFBQWEsR0FBR0osZUFBZSxDQUFDakUsUUFBaEIsQ0FBeUJDLGNBQXpCLEdBQ25CLElBQUlQLGFBQUosQ0FBa0J1RSxlQUFsQixDQURtQixHQUVuQixJQUFJckgsZ0JBQUosQ0FBcUJxSCxlQUFyQixDQUZIO0FBR0EsYUFBT0ksYUFBYSxDQUFDdkgsV0FBZCxDQUEwQjhFLElBQTFCLENBQStCLFlBQU07QUFDM0M7QUFDQ3FDLFFBQUFBLGVBQWUsQ0FBQ25FLFdBQWpCLENBQXFDd0UsZ0JBQXJDLEdBQXdEO0FBQUEsaUJBQU1ELGFBQU47QUFBQSxTQUF4RDs7QUFDQSxlQUFPQSxhQUFQO0FBQ0EsT0FKTSxDQUFQO0FBS0EsSzs7O0lBbEJpQ0UsYzs7U0FxQnBCUixvQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFNoZWxsTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9TaGVsbE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFVSTFBhcnNpbmcgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVVJMUGFyc2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzIHtcblx0aW5pdFByb21pc2U6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXHRpbnN0YW5jZVR5cGU6IHN0cmluZztcblx0Y3Jvc3NBcHBOYXZTZXJ2aWNlPzogQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb247XG5cdGdldExpbmtzKG9BcmdzOiBvYmplY3QpOiBQcm9taXNlPGFueT47XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M6IG9iamVjdCk6IFByb21pc2U8YW55W10+O1xuXG5cdHRvRXh0ZXJuYWwob05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0KTogdm9pZDtcblxuXHRnZXRTdGFydHVwQXBwU3RhdGUob0FyZ3M6IG9iamVjdCk6IFByb21pc2U8YW55PjtcblxuXHRiYWNrVG9QcmV2aW91c0FwcCgpOiB2b2lkO1xuXG5cdGhyZWZGb3JFeHRlcm5hbChvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbik6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcblxuXHRocmVmRm9yRXh0ZXJuYWxBc3luYyhvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCk6IFByb21pc2U8YW55PjtcblxuXHRnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuXG5cdGNyZWF0ZUVtcHR5QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50KTogb2JqZWN0O1xuXG5cdGNyZWF0ZUVtcHR5QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTxhbnk+O1xuXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTxhbnk+O1xuXG5cdGlzSW5pdGlhbE5hdmlnYXRpb24oKTogYm9vbGVhbjtcblxuXHRpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMoKTogUHJvbWlzZTxhbnk+O1xuXG5cdGV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQ6IHN0cmluZyk6IGFueTtcblxuXHRwYXJzZVNoZWxsSGFzaChzSGFzaDogc3RyaW5nKTogYW55O1xuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogb2JqZWN0O1xuXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmc7XG5cblx0c2V0RGlydHlGbGFnKGJEaXJ0eTogYm9vbGVhbik6IHZvaWQ7XG5cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0Y3JlYXRlUmVuZGVyZXIoKTogb2JqZWN0O1xuXG5cdGdldFVzZXIoKTogYW55O1xuXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuO1xuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0c2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjaz86IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRzZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0Pik6IHZvaWQ7XG5cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkO1xuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZztcblxuXHRnZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCk6IFByb21pc2U8YW55Pjtcbn1cblxuLyoqXG4gKiBNb2NrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGVsbFNlcnZpY2UgZm9yIE9wZW5GRVxuICpcbiAqIEBpbXBsZW1lbnRzIHtJU2hlbGxTZXJ2aWNlc31cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZU1vY2sgZXh0ZW5kcyBTZXJ2aWNlPFNoZWxsU2VydmljZXNTZXR0aW5ncz4gaW1wbGVtZW50cyBJU2hlbGxTZXJ2aWNlcyB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRpbnN0YW5jZVR5cGUhOiBzdHJpbmc7XG5cblx0aW5pdCgpIHtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuXHRcdHRoaXMuaW5zdGFuY2VUeXBlID0gXCJtb2NrXCI7XG5cdH1cblxuXHRnZXRMaW5rcygvKm9BcmdzOiBvYmplY3QqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUoLypvQXJnczogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdHRvRXh0ZXJuYWwoLypvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QqLykge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZSgvKm9BcmdzOiBvYmplY3QqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblxuXHRiYWNrVG9QcmV2aW91c0FwcCgpIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRocmVmRm9yRXh0ZXJuYWwoLypvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbiovKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRocmVmRm9yRXh0ZXJuYWxBc3luYygvKm9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGdldEFwcFN0YXRlKC8qb0NvbXBvbmVudDogb2JqZWN0LCBzQXBwU3RhdGVLZXk6IHN0cmluZyovKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKC8qb0NvbXBvbmVudDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYygvKm9Db21wb25lbnQ6IG9iamVjdCovKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRpc05hdmlnYXRpb25TdXBwb3J0ZWQoLypvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0aXNJbml0aWFsTmF2aWdhdGlvbigpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRleHBhbmRDb21wYWN0SGFzaCgvKnNIYXNoRnJhZ21lbnQ6IHN0cmluZyovKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRwYXJzZVNoZWxsSGFzaCgvKnNIYXNoOiBzdHJpbmcqLykge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdHNwbGl0SGFzaCgvKnNIYXNoOiBzdHJpbmcqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0Y29uc3RydWN0U2hlbGxIYXNoKC8qb05ld1NoZWxsSGFzaDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdHNldERpcnR5RmxhZygvKmJEaXJ0eTogYm9vbGVhbiovKSB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoLypmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24qLykge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoLypmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24qLykge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdGNyZWF0ZVJlbmRlcmVyKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldFVzZXIoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0aGFzVVNoZWxsKCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcigvKmZuTmF2RmlsdGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoLypmbk5hdkZpbHRlcjogRnVuY3Rpb24qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdHNldEJhY2tOYXZpZ2F0aW9uKC8qZm5DYWxsQmFjaz86IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRIaWVyYXJjaHkoLyphSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+Ki8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRUaXRsZSgvKnNUaXRsZTogc3RyaW5nKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdC8vIGluIGNhc2UgdGhlcmUgaXMgbm8gc2hlbGwgd2UgcHJvYmFibHkgbmVlZCB0byBsb29rIGF0IHRoZSBjbGFzc2VzIGJlaW5nIGRlZmluZWQgb24gdGhlIGJvZHlcblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb3p5XCIpKSB7XG5cdFx0XHRyZXR1cm4gXCJjb3p5XCI7XG5cdFx0fSBlbHNlIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvbXBhY3RcIikpIHtcblx0XHRcdHJldHVybiBcImNvbXBhY3RcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Z2V0UHJpbWFyeUludGVudCgvKnNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCovKTogUHJvbWlzZTxhbnk+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBTaGVsbFNlcnZpY2VzU2V0dGluZ3NcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCB0eXBlIFNoZWxsU2VydmljZXNTZXR0aW5ncyA9IHtcblx0c2hlbGxDb250YWluZXI/OiBDb250YWluZXI7XG59O1xuXG4vKipcbiAqIFdyYXAgYSBKUXVlcnkgUHJvbWlzZSB3aXRoaW4gYSBuYXRpdmUge1Byb21pc2V9LlxuICpcbiAqIEB0ZW1wbGF0ZSB7b2JqZWN0fSBUXG4gKiBAcGFyYW0ganF1ZXJ5UHJvbWlzZSBUaGUgb3JpZ2luYWwganF1ZXJ5IHByb21pc2VcbiAqIEByZXR1cm5zIEEgbmF0aXZlIHByb21pc2Ugd3JhcHBpbmcgdGhlIHNhbWUgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB3cmFwSlF1ZXJ5UHJvbWlzZTxUPihqcXVlcnlQcm9taXNlOiBqUXVlcnkuUHJvbWlzZSk6IFByb21pc2U8VD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdGpxdWVyeVByb21pc2UuZG9uZShyZXNvbHZlIGFzIGFueSkuZmFpbChyZWplY3QpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBCYXNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGVsbFNlcnZpY2VzXG4gKlxuICogQGltcGxlbWVudHMge0lTaGVsbFNlcnZpY2VzfVxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU2hlbGxTZXJ2aWNlcyBleHRlbmRzIFNlcnZpY2U8UmVxdWlyZWQ8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPj4gaW1wbGVtZW50cyBJU2hlbGxTZXJ2aWNlcyB7XG5cdHJlc29sdmVGbjogYW55O1xuXHRyZWplY3RGbjogYW55O1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8YW55Pjtcblx0Ly8gITogbWVhbnMgdGhhdCB3ZSBrbm93IGl0IHdpbGwgYmUgYXNzaWduZWQgYmVmb3JlIHVzYWdlXG5cdGNyb3NzQXBwTmF2U2VydmljZSE6IENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uO1xuXHR1cmxQYXJzaW5nU2VydmljZSE6IFVSTFBhcnNpbmc7XG5cdHNoZWxsTmF2aWdhdGlvbiE6IFNoZWxsTmF2aWdhdGlvbjtcblx0b1NoZWxsQ29udGFpbmVyITogQ29udGFpbmVyO1xuXHRzaGVsbFVJU2VydmljZSE6IGFueTtcblx0aW5zdGFuY2VUeXBlITogc3RyaW5nO1xuXHRsaW5rc0NhY2hlITogYW55O1xuXHRmbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlOiBhbnk7XG5cblx0aW5pdCgpIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdCBhcyBhbnk7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIgPSBvQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lcjtcblx0XHR0aGlzLmluc3RhbmNlVHlwZSA9IFwicmVhbFwiO1xuXHRcdHRoaXMubGlua3NDYWNoZSA9IHt9O1xuXHRcdHRoaXMuZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZSA9IGZ1bmN0aW9uIChvQXJnczogYW55KTogb2JqZWN0IHtcblx0XHRcdGNvbnN0IF9vQXJnczogYW55ID0gb0FyZ3M7XG5cdFx0XHRjb25zdCBhQ2FjaGVkU2VtYW50aWNPYmplY3RzID0gW107XG5cdFx0XHRjb25zdCBhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzID0gW107XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IF9vQXJncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoISFfb0FyZ3NbaV1bMF0gJiYgISFfb0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5saW5rc0NhY2hlW19vQXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0pIHtcblx0XHRcdFx0XHRcdGFDYWNoZWRTZW1hbnRpY09iamVjdHMucHVzaCh0aGlzLmxpbmtzQ2FjaGVbX29BcmdzW2ldWzBdLnNlbWFudGljT2JqZWN0XS5saW5rcyk7XG5cdFx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob0FyZ3NbaV1bMF0sIFwibGlua3NcIiwge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZTogdGhpcy5saW5rc0NhY2hlW19vQXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0ubGlua3Ncblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzLnB1c2goX29BcmdzW2ldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB7IG9sZEFyZ3M6IG9BcmdzLCBuZXdBcmdzOiBhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzLCBjYWNoZWRMaW5rczogYUNhY2hlZFNlbWFudGljT2JqZWN0cyB9O1xuXHRcdH07XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucmVzb2x2ZUZuID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucmVqZWN0Rm4gPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb0Nyb3NzQXBwTmF2U2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvblwiKTtcblx0XHRjb25zdCBvVXJsUGFyc2luZ1NlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiVVJMUGFyc2luZ1wiKTtcblx0XHRjb25zdCBvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJTaGVsbE5hdmlnYXRpb25cIik7XG5cdFx0Y29uc3Qgb1NoZWxsVUlTZXJ2aWNlUHJvbWlzZSA9IG9Db21wb25lbnQuZ2V0U2VydmljZShcIlNoZWxsVUlTZXJ2aWNlXCIpO1xuXHRcdFByb21pc2UuYWxsKFtvQ3Jvc3NBcHBOYXZTZXJ2aWNlUHJvbWlzZSwgb1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSwgb1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlLCBvU2hlbGxVSVNlcnZpY2VQcm9taXNlXSlcblx0XHRcdC50aGVuKChbb0Nyb3NzQXBwTmF2U2VydmljZSwgb1VybFBhcnNpbmdTZXJ2aWNlLCBvU2hlbGxOYXZpZ2F0aW9uLCBvU2hlbGxVSVNlcnZpY2VdKSA9PiB7XG5cdFx0XHRcdHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlID0gb0Nyb3NzQXBwTmF2U2VydmljZTtcblx0XHRcdFx0dGhpcy51cmxQYXJzaW5nU2VydmljZSA9IG9VcmxQYXJzaW5nU2VydmljZTtcblx0XHRcdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24gPSBvU2hlbGxOYXZpZ2F0aW9uO1xuXHRcdFx0XHR0aGlzLnNoZWxsVUlTZXJ2aWNlID0gb1NoZWxsVUlTZXJ2aWNlO1xuXHRcdFx0XHR0aGlzLnJlc29sdmVGbigpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCh0aGlzLnJlamVjdEZuKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhcmdldCBsaW5rcyBjb25maWd1cmVkIGZvciBhIGdpdmVuIHNlbWFudGljIG9iamVjdCAmIGFjdGlvblxuXHQgKiBXaWxsIHJldHJpZXZlIHRoZSBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvblxuXHQgKiBzZXJ2aWNlIHJlZmVyZW5jZSBjYWxsIHRoZSBnZXRMaW5rcyBtZXRob2QuIEluIGNhc2Ugc2VydmljZSBpcyBub3QgYXZhaWxhYmxlIG9yIGFueSBleGNlcHRpb25cblx0ICogbWV0aG9kIHRocm93cyBleGNlcHRpb24gZXJyb3IgaW4gY29uc29sZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0Z2V0TGlua3Mob0FyZ3M6IG9iamVjdCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9jYXRjaC1vci1yZXR1cm5cblx0XHRcdHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlXG5cdFx0XHRcdC5nZXRMaW5rcyhvQXJncylcblx0XHRcdFx0LmZhaWwoKG9FcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihgJHtvRXJyb3J9IHNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeS5nZXRMaW5rc2ApKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4ocmVzb2x2ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb24gaW4gY2FjaGVcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0TGlua3MgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byB0YXJnZXQgbGlua3MgYXJyYXlcblx0ICovXG5cdGdldExpbmtzV2l0aENhY2hlKG9BcmdzOiBvYmplY3QpOiBQcm9taXNlPGFueVtdPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0aWYgKChvQXJncyBhcyBPYmplY3RbXSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHJlc29sdmUoW10pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb0NhY2hlUmVzdWx0cyA9IHRoaXMuZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZShvQXJncyk7XG5cblx0XHRcdFx0aWYgKG9DYWNoZVJlc3VsdHMubmV3QXJncy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXNvbHZlKG9DYWNoZVJlc3VsdHMuY2FjaGVkTGlua3MpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0XHRcdHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlXG5cdFx0XHRcdFx0XHQuZ2V0TGlua3Mob0NhY2hlUmVzdWx0cy5uZXdBcmdzKVxuXHRcdFx0XHRcdFx0LmZhaWwoKG9FcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoYCR7b0Vycm9yfSBzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnkuZ2V0TGlua3NXaXRoQ2FjaGVgKSk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0LnRoZW4oKGFMaW5rczogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChhTGlua3MubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0c0xpbmtzOiBhbnkgPSB7fTtcblxuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2ldLmxlbmd0aCA+IDAgJiYgb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2ldWzBdLmxpbmtzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0c0xpbmtzW29DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGlua3M6IGFMaW5rc1tpXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmxpbmtzQ2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMubGlua3NDYWNoZSwgb1NlbWFudGljT2JqZWN0c0xpbmtzKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGFMaW5rcyk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYU1lcmdlZExpbmtzID0gW107XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGogPSAwO1xuXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgayA9IDA7IGsgPCBvQ2FjaGVSZXN1bHRzLm9sZEFyZ3MubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChqIDwgYUxpbmtzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUxpbmtzW2pdLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQ2FjaGVSZXN1bHRzLm9sZEFyZ3Nba11bMF0uc2VtYW50aWNPYmplY3QgPT09IG9DYWNoZVJlc3VsdHMubmV3QXJnc1tqXVswXS5zZW1hbnRpY09iamVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVyZ2VkTGlua3MucHVzaChhTGlua3Nbal0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGorKztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVyZ2VkTGlua3MucHVzaChvQ2FjaGVSZXN1bHRzLm9sZEFyZ3Nba11bMF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVyZ2VkTGlua3MucHVzaChvQ2FjaGVSZXN1bHRzLm9sZEFyZ3Nba11bMF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGFNZXJnZWRMaW5rcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgU2hlbGxDb250YWluZXIuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBzYXAudXNoZWxsLmNvbnRhaW5lclxuXHQgKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBwcmVkZWZpbmVkIHNoZWxsQ29udGFpbmVyIG1ldGhvZHNcblx0ICovXG5cdGdldFNoZWxsQ29udGFpbmVyKCkge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgdG9FeHRlcm5hbCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIE5hdmlnYXRpb24gQXJndW1lbnRzIGFuZCBvQ29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIG9OYXZBcmd1bWVudHNBcnIgQW5kXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PnRvRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqL1xuXHR0b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnI6IEFycmF5PG9iamVjdD4sIG9Db21wb25lbnQ6IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlLnRvRXh0ZXJuYWwob05hdkFyZ3VtZW50c0Fyciwgb0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgc3RhcnR1cEFwcFN0YXRlXG5cdCAqIFdpbGwgY2hlY2sgdGhlIGV4aXN0YW5jZSBvZiB0aGUgU2hlbGxDb250YWluZXIgYW5kIHJldHJpZXZlIHRoZSBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvblxuXHQgKiBzZXJ2aWNlIHJlZmVyZW5jZSBjYWxsIHRoZSBnZXRTdGFydHVwQXBwU3RhdGUgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0U3RhcnR1cEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gT2JqZWN0XG5cdCAqL1xuXHRnZXRTdGFydHVwQXBwU3RhdGUob0FyZ3M6IENvbXBvbmVudCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHQvLyBKUXVlcnkgUHJvbWlzZSBiZWhhdmVzIGRpZmZlcmVudGx5XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9jYXRjaC1vci1yZXR1cm5cblx0XHRcdCh0aGlzLmNyb3NzQXBwTmF2U2VydmljZSBhcyBhbnkpXG5cdFx0XHRcdC5nZXRTdGFydHVwQXBwU3RhdGUob0FyZ3MpXG5cdFx0XHRcdC5mYWlsKChvRXJyb3I6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoYCR7b0Vycm9yfSBzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnkuZ2V0U3RhcnR1cEFwcFN0YXRlYCkpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbihyZXNvbHZlKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgYmFja1RvUHJldmlvdXNBcHAgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFNvbWV0aGluZyB0aGF0IGluZGljYXRlIHdlJ3ZlIG5hdmlnYXRlZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGJhY2tUb1ByZXZpb3VzQXBwKCkge1xuXHRcdHJldHVybiB0aGlzLmNyb3NzQXBwTmF2U2VydmljZS5iYWNrVG9QcmV2aW91c0FwcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBocmVmRm9yRXh0ZXJuYWwgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogQHBhcmFtIG9Db21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gYkFzeW5jIFdoZXRoZXIgdGhpcyBjYWxsIHNob3VsZCBiZSBhc3luYyBvciBub3Rcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+aHJlZkZvckV4dGVybmFsIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gc3RyaW5nXG5cdCAqL1xuXHRocmVmRm9yRXh0ZXJuYWwob0FyZ3M6IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbikge1xuXHRcdHJldHVybiB0aGlzLmNyb3NzQXBwTmF2U2VydmljZS5ocmVmRm9yRXh0ZXJuYWwob0FyZ3MsIG9Db21wb25lbnQgYXMgb2JqZWN0LCAhIWJBc3luYyk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGhyZWZGb3JFeHRlcm5hbCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmhyZWZGb3JFeHRlcm5hbEFzeW5jIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gc3RyaW5nXG5cdCAqL1xuXHRocmVmRm9yRXh0ZXJuYWxBc3luYyhvQXJnczogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0KSB7XG5cdFx0cmV0dXJuIHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlLmhyZWZGb3JFeHRlcm5hbEFzeW5jKG9BcmdzLCBvQ29tcG9uZW50IGFzIG9iamVjdCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGdldEFwcFN0YXRlIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggb0NvbXBvbmVudCBhbmQgb0FwcFN0YXRlS2V5LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIG9Db21wb25lbnRcblx0ICogQHBhcmFtIHNBcHBTdGF0ZUtleSBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0Z2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZykge1xuXHRcdHJldHVybiB3cmFwSlF1ZXJ5UHJvbWlzZSgodGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UgYXMgYW55KS5nZXRBcHBTdGF0ZShvQ29tcG9uZW50LCBzQXBwU3RhdGVLZXkpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY3JlYXRlRW1wdHlBcHBTdGF0ZSBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5jcmVhdGVFbXB0eUFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCkge1xuXHRcdHJldHVybiAodGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UgYXMgYW55KS5jcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjcmVhdGVFbXB0eUFwcFN0YXRlQXN5bmMgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBvQ29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIG9Db21wb25lbnQgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Y3JlYXRlRW1wdHlBcHBTdGF0ZUFzeW5jIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRjcmVhdGVFbXB0eUFwcFN0YXRlQXN5bmMob0NvbXBvbmVudDogQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuICh0aGlzLmNyb3NzQXBwTmF2U2VydmljZSBhcyBhbnkpLmNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYyhvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gb05hdkFyZ3VtZW50c0FyclxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5pc05hdmlnYXRpb25TdXBwb3J0ZWQgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QpIHtcblx0XHRyZXR1cm4gd3JhcEpRdWVyeVByb21pc2UodGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNJbml0aWFsTmF2aWdhdGlvbiBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBib29sZWFuXG5cdCAqL1xuXHRpc0luaXRpYWxOYXZpZ2F0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNyb3NzQXBwTmF2U2VydmljZS5pc0luaXRpYWxOYXZpZ2F0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGlzSW5pdGlhbE5hdmlnYXRpb25Bc3luYyBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBib29sZWFuXG5cdCAqL1xuXHRpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlLmlzSW5pdGlhbE5hdmlnYXRpb25Bc3luYygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBleHBhbmRDb21wYWN0SGFzaCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoRnJhZ21lbnQgQW4gKGludGVybmFsIGZvcm1hdCkgc2hlbGwgaGFzaFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhlIHN1Y2Nlc3MgaGFuZGxlciBvZiB0aGUgcmVzb2x2ZSBwcm9taXNlIGdldCBhbiBleHBhbmRlZCBzaGVsbCBoYXNoIGFzIGZpcnN0IGFyZ3VtZW50XG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0ZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlLmV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBwYXJzZVNoZWxsSGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5wYXJzZVNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgVGhlIHBhcnNlZCB1cmxcblx0ICovXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5wYXJzZVNoZWxsSGFzaChzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNwbGl0SGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5zcGxpdEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2Uuc3BsaXRIYXNoKHNIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY29uc3RydWN0U2hlbGxIYXNoIG1ldGhvZCBvZiBVUkxQYXJzaW5nIHNlcnZpY2Ugd2l0aCBnaXZlbiBzSGFzaC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBvTmV3U2hlbGxIYXNoIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuVVJMUGFyc2luZz0+Y29uc3RydWN0U2hlbGxIYXNoIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBTaGVsbCBIYXNoIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0U2hlbGxIYXNoKG9OZXdTaGVsbEhhc2g6IG9iamVjdCkge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLmNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0RGlydHlGbGFnIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIGJEaXJ0eSBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5zZXREaXJ0eUZsYWcgYXJndW1lbnRzXG5cdCAqL1xuXHRzZXREaXJ0eUZsYWcoYkRpcnR5OiBib29sZWFuKSB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIuc2V0RGlydHlGbGFnKGJEaXJ0eSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlIHByb3ZpZGVyIGNhbGxiYWNrIG1ldGhvZC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBmbkRpcnR5U3RhdGVQcm92aWRlciBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBhcmd1bWVudHNcblx0ICovXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbikge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZSBwcm92aWRlciBjYWxsYmFjayBtZXRob2QuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBhcmd1bWVudHNcblx0ICovXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKSB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNyZWF0ZVJlbmRlcmVyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHJldHVybnMgUmV0dXJucyByZW5kZXJlciBvYmplY3Rcblx0ICovXG5cdGNyZWF0ZVJlbmRlcmVyKCkge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5jcmVhdGVSZW5kZXJlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRVc2VyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHJldHVybnMgUmV0dXJucyBVc2VyIG9iamVjdFxuXHQgKi9cblx0Z2V0VXNlcigpIHtcblx0XHRyZXR1cm4gKHRoaXMub1NoZWxsQ29udGFpbmVyIGFzIGFueSkuZ2V0VXNlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2hlY2sgaWYgdXNoZWxsIGNvbnRhaW5lciBpcyBhdmFpbGFibGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlXG5cdCAqL1xuXHRoYXNVU2hlbGwoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciBtZXRob2Qgb2Ygc2hlbGxOYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byByZWdpc3RlclxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pIHtcblx0XHQodGhpcy5zaGVsbE5hdmlnYXRpb24gYXMgYW55KS5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCB1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciBtZXRob2Qgb2Ygc2hlbGxOYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKSB7XG5cdFx0KHRoaXMuc2hlbGxOYXZpZ2F0aW9uIGFzIGFueSkudW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRCYWNrTmF2aWdhdGlvbiBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgYmFjayBidXR0b24gaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHBhcmFtIFtmbkNhbGxCYWNrXSBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCBpbiB0aGUgVUkuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0c2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjaz86IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbFVJU2VydmljZS5zZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0SGllcmFyY2h5IG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBnaXZlbiBoaWVyYXJjaHkgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHBhcmFtIFthSGllcmFyY2h5TGV2ZWxzXSBBbiBhcnJheSByZXByZXNlbnRpbmcgaGllcmFyY2hpZXMgb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgYXBwLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdHNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+KTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbFVJU2VydmljZS5zZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVscyk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldFRpdGxlIG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBnaXZlbiB0aXRsZSBpbiB0aGUgc2hlbGwgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gW3NUaXRsZV0gVGhlIG5ldyB0aXRsZS4gVGhlIGRlZmF1bHQgdGl0bGUgaXMgc2V0IGlmIHRoaXMgYXJndW1lbnQgaXMgbm90IGdpdmVuLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbFVJU2VydmljZS5zZXRUaXRsZShzVGl0bGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudGx5IGRlZmluZWQgY29udGVudCBkZW5zaXR5LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGVudCBkZW5zaXR5IHZhbHVlXG5cdCAqL1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiAodGhpcy5vU2hlbGxDb250YWluZXIgYXMgYW55KS5nZXRVc2VyKCkuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QsIHRoaXMgbWV0aG9kIGNvbnNpZGVycyBhbGwgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbWFudGljIG9iamVjdCBhbmRcblx0ICogcmV0dXJucyB0aGUgb25lIHRhZ2dlZCBhcyBhIFwicHJpbWFyeUFjdGlvblwiLiBJZiBubyBpbmJvdW5kIHRhZ2dlZCBhcyBcInByaW1hcnlBY3Rpb25cIiBleGlzdHMsIHRoZW4gaXQgcmV0dXJuc1xuXHQgKiB0aGUgaW50ZW50IG9mIHRoZSBmaXJzdCBpbmJvdW5kIChhZnRlciBzb3J0aW5nIGhhcyBiZWVuIGFwcGxpZWQpIG1hdGNoaW5nIHRoZSBhY3Rpb24gXCJkaXNwbGF5RmFjdFNoZWV0XCIuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gc1NlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFNlZSAjQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24jZ2V0TGlua3MgZm9yIGRlc2NyaXB0aW9uLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW50ZW50IGlmIGl0IGV4aXN0cy5cblx0ICovXG5cdGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxhbnk+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvY2F0Y2gtb3ItcmV0dXJuXG5cdFx0XHR0aGlzLmNyb3NzQXBwTmF2U2VydmljZVxuXHRcdFx0XHQuZ2V0UHJpbWFyeUludGVudChzU2VtYW50aWNPYmplY3QsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQuZmFpbCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKGAke29FcnJvcn0gc2FwLmZlLmNvcmUuc2VydmljZXMuTmF2aWdhdGlvblNlcnZpY2VGYWN0b3J5LmdldFByaW1hcnlJbnRlbnRgKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKHJlc29sdmUpO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogU2VydmljZSBGYWN0b3J5IGZvciB0aGUgU2hlbGxTZXJ2aWNlc1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZXNGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPiB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGVpdGhlciBhIHN0YW5kYXJkIG9yIGEgbW9jayBTaGVsbCBzZXJ2aWNlIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG9TZXJ2aWNlQ29udGV4dCBUaGUgc2hlbGxzZXJ2aWNlIGNvbnRleHRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGZvciBhIHNoZWxsIHNlcnZpY2UgaW1wbGVtZW50YXRpb25cblx0ICogQHNlZSBTZXJ2aWNlRmFjdG9yeSNjcmVhdGVJbnN0YW5jZVxuXHQgKi9cblx0Y3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+KTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz4ge1xuXHRcdG9TZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lciA9IHNhcC51c2hlbGwgJiYgKHNhcC51c2hlbGwuQ29udGFpbmVyIGFzIENvbnRhaW5lcik7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZSA9IG9TZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lclxuXHRcdFx0PyBuZXcgU2hlbGxTZXJ2aWNlcyhvU2VydmljZUNvbnRleHQgYXMgU2VydmljZUNvbnRleHQ8UmVxdWlyZWQ8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPj4pXG5cdFx0XHQ6IG5ldyBTaGVsbFNlcnZpY2VNb2NrKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2UuaW5pdFByb21pc2UudGhlbigoKSA9PiB7XG5cdFx0XHQvLyBFbnJpY2ggdGhlIGFwcENvbXBvbmVudCB3aXRoIHRoaXMgbWV0aG9kXG5cdFx0XHQob1NlcnZpY2VDb250ZXh0LnNjb3BlT2JqZWN0IGFzIGFueSkuZ2V0U2hlbGxTZXJ2aWNlcyA9ICgpID0+IG9TaGVsbFNlcnZpY2U7XG5cdFx0XHRyZXR1cm4gb1NoZWxsU2VydmljZTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaGVsbFNlcnZpY2VzRmFjdG9yeTtcbiJdfQ==
|