@sap/open.fe 1.94.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +23 -0
- package/README.md +10 -0
- package/package.json +21 -0
- package/packages/sap.fe.common/src/sap/fe/common/.library +36 -0
- package/packages/sap.fe.common/src/sap/fe/common/.theming +6 -0
- package/packages/sap.fe.common/src/sap/fe/common/MessageButton-dbg.js +1378 -0
- package/packages/sap.fe.common/src/sap/fe/common/MessageButton.js +6 -0
- package/packages/sap.fe.common/src/sap/fe/common/MessageFilter-dbg.js +36 -0
- package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.js +6 -0
- package/packages/sap.fe.common/src/sap/fe/common/MessagePopover-dbg.js +56 -0
- package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.js +6 -0
- package/packages/sap.fe.common/src/sap/fe/common/library-dbg.js +41 -0
- package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js +18 -0
- package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js.map +9 -0
- package/packages/sap.fe.common/src/sap/fe/common/library-preload.js +68 -0
- package/packages/sap.fe.common/src/sap/fe/common/library-preload.js.map +9 -0
- package/packages/sap.fe.common/src/sap/fe/common/library.js +6 -0
- package/packages/sap.fe.common/src/sap/fe/common/manifest.json +40 -0
- package/packages/sap.fe.common/src/sap/fe/common/resources.json +186 -0
- package/packages/sap.fe.common/test/sap/fe/common/designtime/api.json +1 -0
- package/packages/sap.fe.common/test/sap/fe/common/designtime/apiref/api.json +1 -0
- package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.jsmeta.json +1 -0
- package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.jstemplates.json +1 -0
- package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.xmlmeta.json +1 -0
- package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.xmltemplates.json +1 -0
- package/packages/sap.fe.common/test/sap/fe/common/relnotes/changes-1.91.json +23 -0
- package/packages/sap.fe.common/test/sap/fe/common/relnotes/changes-1.94.json +23 -0
- package/packages/sap.fe.core/src/sap/fe/core/.library +60 -0
- package/packages/sap.fe.core/src/sap/fe/core/.supportrc +4 -0
- package/packages/sap.fe.core/src/sap/fe/core/.theming +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper-dbg.js +409 -0
- package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/AppComponent-dbg.js +433 -0
- package/packages/sap.fe.core/src/sap/fe/core/AppComponent.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler-dbg.js +184 -0
- package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/BaseController-dbg.js +65 -0
- package/packages/sap.fe.core/src/sap/fe/core/BaseController.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/BusyLocker-dbg.js +112 -0
- package/packages/sap.fe.core/src/sap/fe/core/BusyLocker.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/CommonUtils-dbg.js +2246 -0
- package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI-dbg.js +269 -0
- package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/PageController-dbg.js +120 -0
- package/packages/sap.fe.core/src/sap/fe/core/PageController.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/RouterProxy-dbg.js +822 -0
- package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/Synchronization-dbg.js +38 -0
- package/packages/sap.fe.core/src/sap/fe/core/Synchronization.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent-dbg.js +152 -0
- package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/TemplateModel-dbg.js +57 -0
- package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper-dbg.js +1584 -0
- package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/draft-dbg.js +584 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/draft.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling-dbg.js +439 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/nonDraft-dbg.js +23 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/nonDraft.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/operations-dbg.js +1174 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/operations.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/sticky-dbg.js +121 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata-dbg.js +75 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +1667 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation-dbg.js +57 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +501 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +707 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +989 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +417 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.ts +399 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +116 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady-dbg.js +403 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.ts +350 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator-dbg.js +135 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +287 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing-dbg.js +109 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener-dbg.js +9 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share-dbg.js +258 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +711 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.ts +692 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState-dbg.js +615 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +76 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/ActionPartial.fragment.xml +91 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution-dbg.js +71 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +82 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +127 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +12 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +122 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper-dbg.js +150 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar-dbg.js +162 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper-dbg.js +47 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +61 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +122 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +209 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +148 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +319 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext-dbg.js +500 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.ts +460 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings-dbg.js +90 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.ts +431 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper-dbg.js +404 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.ts +322 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter-dbg.js +1294 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.ts +1172 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter-dbg.js +100 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter.ts +126 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField-dbg.js +335 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.ts +306 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +1692 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/common/AnnotationConverter.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Action-dbg.js +349 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Action.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Action.ts +353 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +206 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Chart.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Chart.ts +202 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Criticality-dbg.js +50 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Criticality.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Criticality.ts +33 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +276 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/DataVisualization.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +296 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form-dbg.js +222 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.ts +241 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +181 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI.ts +220 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table-dbg.js +2100 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.ts +2446 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +499 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +545 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +335 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +316 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet-dbg.js +495 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +502 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +674 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +711 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +204 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation.ts +176 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +96 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.ts +76 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +217 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +211 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ID-dbg.js +90 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ID.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ID.ts +45 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +61 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/IssueManager.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/IssueManager.ts +41 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key-dbg.js +86 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.ts +49 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/SelectionVariantHelper-dbg.js +93 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +92 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/FormMenuActions-dbg.js +164 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/FormMenuActions.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +160 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +427 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +414 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +552 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.ts +601 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +320 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +314 -0
- package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +93 -0
- package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js +8 -0
- package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js.map +9 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/CriticalityFormatter-dbg.js +77 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/CriticalityFormatter.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/CriticalityFormatter.ts +58 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/FPMFormatter-dbg.js +51 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/FPMFormatter.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/FPMFormatter.ts +41 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/KPIFormatter-dbg.js +103 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/KPIFormatter.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/KPIFormatter.ts +88 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter-dbg.js +100 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.ts +80 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatterTypes-dbg.js +23 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatterTypes.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatterTypes.ts +7 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/ValueFormatter-dbg.js +162 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/ValueFormatter.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/ValueFormatter.ts +130 -0
- package/packages/sap.fe.core/src/sap/fe/core/fpm/Component-dbg.js +58 -0
- package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/fpm/manifest.json +64 -0
- package/packages/sap.fe.core/src/sap/fe/core/fpm/resources.json +18 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/AnnotationEnum-dbg.js +49 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/AnnotationEnum.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/AnnotationEnum.ts +18 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression-dbg.js +1667 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.ts +1765 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport-dbg.js +314 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.ts +232 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper-dbg.js +62 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/EditState-dbg.js +92 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/EditState.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ExcelFormatHelper-dbg.js +53 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ExcelFormatHelper.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper-dbg.js +64 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper-dbg.js +150 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/PasteHelper-dbg.js +130 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/PasteHelper.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +327 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticKeyHelper-dbg.js +78 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticKeyHelper.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/StableIdHelper-dbg.js +267 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/StableIdHelper.js +9 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/StableIdHelper.ts +228 -0
- package/packages/sap.fe.core/src/sap/fe/core/jsx-runtime/jsx-dbg.js +75 -0
- package/packages/sap.fe.core/src/sap/fe/core/jsx-runtime/jsx.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/jsx-runtime/jsx.ts +83 -0
- package/packages/sap.fe.core/src/sap/fe/core/jsx-runtime/jsxs-dbg.js +10 -0
- package/packages/sap.fe.core/src/sap/fe/core/jsx-runtime/jsxs.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/jsx-runtime/jsxs.ts +3 -0
- package/packages/sap.fe.core/src/sap/fe/core/library-dbg.js +429 -0
- package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js +123 -0
- package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js.map +9 -0
- package/packages/sap.fe.core/src/sap/fe/core/library-preload.js +1201 -0
- package/packages/sap.fe.core/src/sap/fe/core/library-preload.js.map +9 -0
- package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js +148 -0
- package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js.map +9 -0
- package/packages/sap.fe.core/src/sap/fe/core/library.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/library.support.js +32 -0
- package/packages/sap.fe.core/src/sap/fe/core/manifest.json +121 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle.properties +417 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ar.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_bg.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ca.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cs.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cy.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_da.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_de.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_el.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_GB.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_sappsd.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saprigi.properties +275 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saptrc.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es_MX.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_et.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fi.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr_CA.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hi.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hr.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hu.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_id.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_it.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_iw.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ja.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_kk.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ko.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lt.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lv.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ms.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_nl.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_no.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pl.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt_PT.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ro.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ru.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sh.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sk.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sl.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sv.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_th.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_tr.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_uk.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_vi.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_CN.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_TW.properties +273 -0
- package/packages/sap.fe.core/src/sap/fe/core/resources.json +4087 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +106 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +58 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +205 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +128 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.ts +71 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +303 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +84 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +1099 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory-dbg.js +819 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.ts +720 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +731 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.ts +668 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +471 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage-dbg.controller.js +12 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +6 -0
- package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +8 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/AnnotationIssue.support.js +38 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/AnnotationIssue.support.ts +20 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/CollectionFacetMissingID.support.js +38 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/CollectionFacetMissingID.support.ts +18 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +38 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +18 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper-dbg.js +71 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper.ts +67 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics-dbg.js +73 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics.ts +66 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +156 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/CriticalityFormatters.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/CriticalityFormatters.ts +226 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/DataFieldFormatters-dbg.js +77 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/DataFieldFormatters.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/DataFieldFormatters.ts +54 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +444 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.ts +428 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/EntitySetHelper-dbg.js +33 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/EntitySetHelper.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/EntitySetHelper.ts +13 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/FieldControlHelper-dbg.js +89 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/FieldControlHelper.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/FieldControlHelper.ts +53 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper-dbg.js +331 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.ts +310 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/FilterTemplating-dbg.js +66 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/FilterTemplating.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/FilterTemplating.ts +39 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyFormatters-dbg.js +126 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyFormatters.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyFormatters.ts +86 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper-dbg.js +303 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.ts +209 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters-dbg.js +525 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.ts +489 -0
- package/packages/sap.fe.core/src/sap/fe/core/type/Email-dbg.js +20 -0
- package/packages/sap.fe.core/src/sap/fe/core/type/Email.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/type/Email.ts +18 -0
- package/packages/sap.fe.core/test/sap/fe/core/designtime/api.json +1 -0
- package/packages/sap.fe.core/test/sap/fe/core/designtime/apiref/api.json +1 -0
- package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jsmeta.json +1 -0
- package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jstemplates.json +1 -0
- package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.xmlmeta.json +1 -0
- package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.xmltemplates.json +1 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/Component.js +56 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/controller/App.controller.js +252 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/controller/BaseController.js +46 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/controller/ControllerExtensions.controller.js +380 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/controller/CustomElements.controller.js +380 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/controller/MacrosPage.controller.js +382 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/controller/Overview.controller.js +99 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/controller/Topic.controller.js +71 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/controls/FileEditor.js +401 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/css/FileEditor.css +8 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/css/codesample.css +172 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/css/markdown-styles.css +3 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/css/style.css +48 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/css/topic.css +176 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/index.html +62 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/manifest.json +132 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/model/ControllerExtensionNavigationModel.js +174 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/model/CustomElementNavigationModel.js +327 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/model/ExploreSettingsModel.js +12 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/model/MacroNavigationModel.js +709 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/model/OverviewNavigationModel.js +15 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/scripts/boot.js +68 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/service-worker.js +100 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/template/.gitignore.tmpl +0 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/template/.npmrc.tmpl +0 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/template/README.md +43 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/template/package.json +31 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/template/ui5-local.yaml +25 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/template/ui5.yaml +25 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/template/webapp/Component.js +9 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/template/webapp/i18n/i18n.properties +9 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/template/webapp/index.html +28 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/template/webapp/manifest.json +165 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/FCL/FclNavigationButtons/Component.js +31 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/FCL/FclNavigationButtons/localService/Incidents.json +56 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/FCL/FclNavigationButtons/localService/service.cds +32 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/FCL/FclNavigationButtons/manifest.json +109 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/FCL/FclNavigationButtons/myViewTest.controller.js +6 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/FCL/FclNavigationButtons/myViewTest.view.xml +30 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/FclNavigationButtons.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/buildingBlockOverview.html +24 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/buildingBlockOverview.md +23 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartDefault/ChartDefault.controller.js +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartDefault/ChartDefault.view.xml +21 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartDefault/Component.js +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartDefault/localService/ChildEntity.json +686 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartDefault/localService/CreditLimitDetails.json +154 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartDefault/localService/RootEntity.json +252 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartDefault/localService/service.cds +122 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartDefault/manifest.json +69 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartQualifier/ChartQualifier.controller.js +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartQualifier/ChartQualifier.view.xml +20 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartQualifier/Component.js +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartQualifier/localService/ChildEntity.json +686 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartQualifier/localService/CreditLimitDetails.json +154 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartQualifier/localService/RootEntity.json +252 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartQualifier/localService/service.cds +122 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartQualifier/manifest.json +69 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartSelectionMode/ChartSelectionMode.controller.js +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartSelectionMode/ChartSelectionMode.view.xml +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartSelectionMode/Component.js +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartSelectionMode/localService/ChildEntity.json +686 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartSelectionMode/localService/CreditLimitDetails.json +154 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartSelectionMode/localService/RootEntity.json +277 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartSelectionMode/localService/service.cds +122 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartSelectionMode/manifest.json +69 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chartDefault.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chartQualifier.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chartSelectionMode.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/Component.js +34 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/FieldDisplay.view.xml +64 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/localService/ChildEntity.json +14 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/localService/FieldDisplay.cds +94 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/localService/RootEntity.json +23 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/localService/ValueHelpEntity.js +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/manifest.json +68 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEdit/Component.js +33 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEdit/FieldEdit.controller.js +10 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEdit/FieldEdit.view.xml +101 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEdit/localService/ChildEntity.json +14 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEdit/localService/FieldControlValueHelpEntity.json +14 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEdit/localService/FieldEdit.cds +77 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEdit/localService/RootEntity.json +14 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEdit/localService/localAnnotations.xml +38 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEdit/manifest.json +75 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEvents/Component.js +33 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEvents/FieldEvents.controller.js +23 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEvents/FieldEvents.view.xml +20 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEvents/localService/Entities.json +6 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEvents/localService/service.cds +6 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldEvents/manifest.json +68 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldFormatOptions/Component.js +33 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldFormatOptions/FieldFormatOptions.controller.js +10 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldFormatOptions/FieldFormatOptions.view.xml +132 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldFormatOptions/localService/Currencies.json +29 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldFormatOptions/localService/Currencies_texts.json +38 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldFormatOptions/localService/FieldFormatOptions.cds +58 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldFormatOptions/localService/Languages.json +17 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldFormatOptions/localService/Languages_texts.json +38 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldFormatOptions/localService/RootEntity.json +13 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldFormatOptions/localService/UnitOfMeasure.json +12 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldFormatOptions/manifest.json +68 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldNavProp/Component.js +33 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldNavProp/FieldNavProp.controller.js +10 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldNavProp/FieldNavProp.view.xml +114 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldNavProp/localService/FieldNavProp.cds +161 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldNavProp/localService/NavProp1.json +25 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldNavProp/localService/NavProp2.json +7 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldNavProp/localService/RootEntity.json +14 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldNavProp/localService/ValueHelpEntity.json +14 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldNavProp/manifest.json +68 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/fieldDisplay.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/fieldEdit.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/fieldEvents.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/fieldFormatOptions.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/fieldNavProp.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarDefault/Component.js +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarDefault/FilterBarDefault.controller.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarDefault/FilterBarDefault.view.xml +58 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarDefault/localService/ChildEntity.json +686 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarDefault/localService/CreditLimitDetails.json +154 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarDefault/localService/RootEntity.json +102 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarDefault/localService/ValueHelpEntity.js +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarDefault/localService/service.cds +96 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarDefault/manifest.json +68 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBarDefault.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElement/formElementCustomField/Component.js +33 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElement/formElementCustomField/FormElementCustomField.view.xml +49 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElement/formElementCustomField/localService/FormElementCustomField.cds +19 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElement/formElementCustomField/localService/RootEntity.json +13 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElement/formElementCustomField/manifest.json +68 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElement/formElementLabel/Component.js +33 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElement/formElementLabel/FormElementLabel.view.xml +32 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElement/formElementLabel/localService/FormElementLabel.cds +19 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElement/formElementLabel/localService/RootEntity.json +13 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElement/formElementLabel/manifest.json +68 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElementCustomField.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/formElementLabel.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/i18n/i18n.properties +19 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microChartDefault.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microChartDynamicSize.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microChartHideOnNoData.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microChartShowOnlyChart.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDefault/Component.js +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDefault/MicroChartDefault.controller.js +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDefault/MicroChartDefault.view.xml +83 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDefault/localService/ChildEntity.json +686 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDefault/localService/CreditLimitDetails.json +154 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDefault/localService/RootEntity.json +34 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDefault/localService/service.cds +308 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDefault/manifest.json +69 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDynamicSize/Component.js +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDynamicSize/MicroChartDynamicSize.controller.js +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDynamicSize/MicroChartDynamicSize.view.xml +93 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDynamicSize/localService/ChildEntity.json +686 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDynamicSize/localService/CreditLimitDetails.json +154 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDynamicSize/localService/RootEntity.json +34 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDynamicSize/localService/service.cds +308 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartDynamicSize/manifest.json +69 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartHideOnNoData/Component.js +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartHideOnNoData/MicroChartHideOnNoData.controller.js +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartHideOnNoData/MicroChartHideOnNoData.view.xml +91 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartHideOnNoData/localService/ChildEntity.json +686 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartHideOnNoData/localService/CreditLimitDetails.json +154 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartHideOnNoData/localService/RootEntity.json +34 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartHideOnNoData/localService/service.cds +308 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartHideOnNoData/manifest.json +69 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartShowOnlyChart/Component.js +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartShowOnlyChart/MicroChartShowOnlyChart.controller.js +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartShowOnlyChart/MicroChartShowOnlyChart.view.xml +93 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartShowOnlyChart/localService/ChildEntity.json +686 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartShowOnlyChart/localService/CreditLimitDetails.json +154 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartShowOnlyChart/localService/RootEntity.json +34 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartShowOnlyChart/localService/service.cds +308 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/microchart/microChartShowOnlyChart/manifest.json +69 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/paginator/paginatorDefault/Component.js +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/paginator/paginatorDefault/PaginatorDefault.controller.js +27 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/paginator/paginatorDefault/PaginatorDefault.view.xml +45 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/paginator/paginatorDefault/localService/RootEntity.json +102 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/paginator/paginatorDefault/localService/ValueHelpEntity.js +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/paginator/paginatorDefault/localService/service.cds +90 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/paginator/paginatorDefault/manifest.json +79 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/paginatorDefault.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/share/Component.js +34 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/share/Share.controller.js +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/share/Share.view.xml +23 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/share/localService/RootEntity.json +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/share/localService/Share.cds +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/share/manifest.json +68 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/shareDefault.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Component.js +40 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.controller.js +32 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.view.xml +32 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.json +82 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/service.cds +82 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/manifest.json +78 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableDefault/Component.js +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableDefault/TableDefault.controller.js +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableDefault/TableDefault.view.xml +10 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableDefault/localService/RootEntity.json +102 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableDefault/localService/ValueHelpEntity.js +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableDefault/localService/service.cds +90 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableDefault/manifest.json +79 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableEdit/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableEdit/TableEdit.controller.js +19 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableEdit/TableEdit.view.xml +31 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableEdit/localService/RootEntity.json +78 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableEdit/localService/ValueHelpCurrencyEntity.json +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableEdit/localService/ValueHelpEntity.js +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableEdit/localService/service.cds +119 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableEdit/manifest.json +82 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/tableCustoms.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/tableDefault.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/tableEdit.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility/OPExtend.controller.js +41 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility/localService/RootEntity.json +12 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility/localService/service.cds +52 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility/manifest.json +76 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/controllerExtensionsOverview.html +24 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/controllerExtensionsOverview.md +18 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/intentBasedNavigation/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/intentBasedNavigation/IntentBasedNavigation.controller.js +21 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/intentBasedNavigation/IntentBasedNavigation.view.xml +23 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/intentBasedNavigation/localService/RootEntity.json +12 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/intentBasedNavigation/localService/service.cds +40 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/intentBasedNavigation/manifest.json +76 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/intentBasedNavigation.html +70 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/routingExtensibility/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/routingExtensibility/extendLR.controller.js +63 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/routingExtensibility/extendOP.controller.js +13 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/routingExtensibility/localService/RootEntity.json +18 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/routingExtensibility/localService/service.cds +64 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/routingExtensibility/manifest.json +103 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/routingExtensibility.html +70 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/share/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/share/Share.controller.js +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/share/Share.view.xml +21 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/share/ShareExtend.js +15 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/share/localService/RootEntity.json +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/share/localService/service.cds +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/share/manifest.json +68 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/shareExtensibility.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/viewState/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/viewState/CustomSection.fragment.xml +15 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/viewState/OPExtend.controller.js +57 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/viewState/localService/RootEntity.json +12 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/viewState/localService/service.cds +40 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/viewState/manifest.json +86 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/viewState.html +70 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customAction/customActionContent/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customAction/customActionContent/CustomAction.js +41 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customAction/customActionContent/extendOP.controller.js +9 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customAction/customActionContent/localService/ChildEntity.json +22 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customAction/customActionContent/localService/RootEntity.json +10 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customAction/customActionContent/localService/service.cds +73 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customAction/customActionContent/manifest.json +133 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customActionContent.html +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/CustomColumn.js +25 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/CustomColumnAdaptation.fragment.xml +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/CustomColumnButton.fragment.xml +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/localService/ChildEntity.json +26 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/localService/RootEntity.json +9 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/localService/service.cds +55 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/manifest.json +98 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumnContent.html +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customElementsOverview.html +24 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customElementsOverview.md +21 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customFilter/customFilterContent/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customFilter/customFilterContent/CustomFilter.js +28 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customFilter/customFilterContent/CustomRatingFilter.fragment.xml +8 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customFilter/customFilterContent/CustomRatingFilterOperator.fragment.xml +17 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customFilter/customFilterContent/localService/RootEntity.json +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customFilter/customFilterContent/localService/service.cds +75 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customFilter/customFilterContent/manifest.json +87 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customFilterContent.html +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customHeaderFacet/customHeaderFacetContent/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customHeaderFacet/customHeaderFacetContent/CustomHeaderFacetColumnChart.fragment.xml +19 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customHeaderFacet/customHeaderFacetContent/CustomHeaderFacetDataPoint.fragment.xml +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customHeaderFacet/customHeaderFacetContent/CustomHeaderFacetMicroChartAndFormElement.fragment.xml +42 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customHeaderFacet/customHeaderFacetContent/localService/RootEntity.json +12 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customHeaderFacet/customHeaderFacetContent/localService/service.cds +54 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customHeaderFacet/customHeaderFacetContent/manifest.json +127 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customHeaderFacetContent.html +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/CustomDetailPage.controller.js +12 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/CustomDetailPage.view.xml +64 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/CustomPage.controller.js +10 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/CustomPage.view.xml +39 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/localService/ChildEntity.json +23 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/localService/RootEntity.json +41 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/localService/ValueHelpCurrencyEntity.json +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/localService/ValueHelpEntity.js +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/localService/resources/275081.jpg +0 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/localService/resources/275472.jpg +0 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/localService/service.cds +144 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPage/customPageContent/manifest.json +119 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customPageContent.html +70 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/Component.js +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/CustomSection.fragment.xml +13 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/CustomSectionFormElementAndTable.fragment.xml +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/CustomSectionNavigation.fragment.xml +44 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/CustomSectionNavigation.js +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/extendOP.controller.js +13 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/localService/ChildEntity.json +82 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/localService/RootEntity.json +9 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/localService/ValueHelpCurrencyEntity.json +5 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/localService/ValueHelpEntity.js +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/localService/service.cds +177 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSection/customSectionContent/manifest.json +129 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customSectionContent.html +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customViewInLR/customViewInLRContent/Component.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customViewInLR/customViewInLRContent/CustomButton.js +12 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customViewInLR/customViewInLRContent/CustomViewWithButton.fragment.xml +12 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customViewInLR/customViewInLRContent/CustomViewWithTable.fragment.xml +46 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customViewInLR/customViewInLRContent/LRExtend.controller.js +31 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customViewInLR/customViewInLRContent/localService/RootEntity.json +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customViewInLR/customViewInLRContent/localService/service.cds +70 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customViewInLR/customViewInLRContent/manifest.json +100 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customViewInLRContent.html +36 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/i18n/i18n.properties +61 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/overview/introduction.html +24 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/overview/introduction.md +6 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/util/FileUtils.js +124 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/view/App.view.xml +60 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/view/ControllerExtensions.view.xml +97 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/view/CustomElements.view.xml +97 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/view/MacrosPage.view.xml +97 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/view/Overview.view.xml +13 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/BindingExpression-AnnotationExpression.spec.js +140 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/BindingExpression-AnnotationExpression.spec.ts +142 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/BindingExpression.spec.js +504 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/BindingExpression.spec.ts +751 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.js +74 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.ts +75 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/__snapshots__/BindingExpression-AnnotationExpression.spec.ts.snap +7 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/__snapshots__/TemplateConverter.spec.ts.snap +17450 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/KPIManagement.spec.js +582 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/KPIManagement.spec.ts +515 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.js +636 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.ts +547 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.js +60 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.ts +57 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/HeaderFacet.spec.js +436 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/HeaderFacet.spec.ts +469 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/KPITag.spec.js +346 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/KPITag.spec.ts +357 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.js +255 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.ts +254 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.js +67 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.ts +43 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ObjectPageConverter.spec.js +577 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ObjectPageConverter.spec.ts +593 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.js +1206 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.ts +1361 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/__snapshots__/Table.spec.ts.snap +21 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/AnalyticalService.cds +16 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/BindingExpression-AnnotationExpression.xml +248 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/ConverterContext.cds +34 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/HeaderFacets.cds +199 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/KPI.cds +320 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/KPINone.cds +78 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/ListReportConverter.cds +164 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/MetaModelConverter.cds +43 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/MetaModelConverterBoundAction.cds +31 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/ObjectPageConverter.cds +161 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/PropertyHelper.cds +14 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/SideEffects.cds +285 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/Table.cds +98 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/TableGetSelectionMode.cds +242 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/TableNewActionNoOperationAvailable.cds +22 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/TableNewActionOperationAvailableFalse.cds +25 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/TableNewActionOperationAvailableTrue.cds +24 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/salesOrderMetadata.xml +4824 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/ValueFormatters.spec.js +54 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/ValueFormatters.spec.ts +70 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.js +607 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.ts +540 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.js +62 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.ts +45 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/type/Email.spec.js +34 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/type/Email.spec.ts +21 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/TemplatingExpressions.qunit.js +1328 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/apps/generalTests.js +18 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/apps/generalTests.json +233 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/apps/index.js +33 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/common/testHelper.js +81 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/common/utility.js +28 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/helpers/ExcelFormatHelper.qunit.js +19 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/helpers/SemanticDateOperators.qunit.js +253 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/helpers/SemanticKeyHelper.qunit.js +211 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/helpers/StableIdHelper.qunit.js +301 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/services/CacheHandlerTest.qunit.js +924 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/test/iteloMetadata.js +2752 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/test/musicDraftMetadata.js +2301 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/test/simpleMetadata.js +1186 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/test/techServiceMetadata.js +3993 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/testsuite.qunit.html +14 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/testsuite.qunit.js +33 -0
- package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.91.json +96 -0
- package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.94.json +40 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/.library +54 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/.theming +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Chart.fragment.xml +171 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata-dbg.js +200 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate-dbg.js +530 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/CommonHelper-dbg.js +1256 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/CommonHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Contact-dbg.designtime.js +93 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Contact.designtime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Contact.fragment.xml +38 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Contact.metadata-dbg.js +91 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Contact.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/ContactHelper-dbg.js +96 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/ContactHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/DelegateUtil-dbg.js +286 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/DelegateUtil.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/DraftIndicator.fragment.xml +37 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/DraftIndicator.metadata-dbg.js +91 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/DraftIndicator.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/DraftIndicatorRuntime-dbg.js +138 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/DraftIndicatorRuntime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Field.fragment.xml +37 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Field.metadata-dbg.js +144 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Field.metadata.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Field.metadata.ts +136 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI-dbg.js +234 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.ts +177 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FieldValueHelpDelegate-dbg.js +55 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FieldValueHelpDelegate.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar-dbg.designtime.js +83 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.designtime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.fragment.xml +109 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata-dbg.js +243 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI-dbg.js +130 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.ts +62 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate-dbg.js +568 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarHelper-dbg.js +48 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterField-dbg.designtime.js +339 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterField.designtime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterField.fragment.xml +57 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterField.metadata-dbg.js +130 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterField.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FlexibleColumnLayoutActions.fragment.xml +24 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FlexibleColumnLayoutActions.metadata-dbg.js +68 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FlexibleColumnLayoutActions.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Form-dbg.designtime.js +188 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Form.designtime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Form.fragment.xml +94 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata-dbg.js +209 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer-dbg.designtime.js +42 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer.designtime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer.fragment.xml +196 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer.metadata-dbg.js +132 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FormElement.fragment.xml +25 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FormElement.metadata-dbg.js +123 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FormElement.metadata.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FormElement.metadata.ts +113 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/FormWrapper.fragment.xml +26 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/KPITag.fragment.xml +33 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/KPITag.metadata-dbg.js +103 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/KPITag.metadata.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/KPITag.metadata.ts +106 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI-dbg.js +197 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.ts +120 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata-dbg.js +92 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroRuntime-dbg.js +33 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroRuntime.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroRuntime.ts +12 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroTemplating-dbg.js +22 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroTemplating.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroTemplating.ts +9 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MicroChart-dbg.designtime.js +361 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MicroChart.designtime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MicroChart.fragment.xml +36 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MicroChart.metadata-dbg.js +149 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MicroChart.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/ODataMetaModelUtil-dbg.js +600 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/ODataMetaModelUtil.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Paginator.fragment.xml +32 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Paginator.metadata-dbg.js +61 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Paginator.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil-dbg.js +615 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/QuickViewForm-dbg.designtime.js +215 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/QuickViewForm.designtime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/QuickViewForm.fragment.xml +66 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/QuickViewForm.metadata-dbg.js +84 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/QuickViewForm.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/ResourceModel-dbg.js +56 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/ResourceModel.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Share.fragment.xml +21 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Share.metadata-dbg.js +90 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Share.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/SizeHelper-dbg.js +41 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/SizeHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Table.fragment.xml +236 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata-dbg.js +489 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI-dbg.js +469 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.ts +487 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/TraceInfo-dbg.js +462 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/TraceInfo.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/ValueHelp.metadata-dbg.js +135 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/ValueHelp.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/VisualFilter.fragment.xml +87 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/VisualFilter.metadata-dbg.js +217 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/VisualFilter.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/chart/ChartHelper-dbg.js +468 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/chart/ChartHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/chart/ChartRuntime-dbg.js +118 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/chart/ChartRuntime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/chart/ChartUtils-dbg.js +221 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/chart/ChartUtils.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/designtime/library-preload.designtime.js +17 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/designtime/library-preload.designtime.js.map +9 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/DraftPopOverAdminData.fragment.xml +53 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper-dbg.js +1670 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime-dbg.js +400 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating-dbg.js +538 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.ts +541 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkContactContent.fragment.xml +95 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate-dbg.js +1136 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkForContact.fragment.xml +26 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkForDataField.fragment.xml +95 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkForEntity.fragment.xml +76 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkWithFacets.fragment.xml +40 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/CustomFilter.fragment.xml +38 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/DraftEditState-dbg.js +179 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/DraftEditState.fragment.xml +36 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/DraftEditState.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper-dbg.js +149 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldTemplating-dbg.js +23 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldTemplating.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldTemplating.ts +11 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils-dbg.js +363 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue-dbg.js +53 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range-dbg.js +38 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value-dbg.js +219 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/flexibility/FormDelegate-dbg.js +152 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/flexibility/FormDelegate.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/flexibility/ValueHelpWrapper.fragment.xml +3 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/form/AddressSection.fragment.xml +35 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/form/DataFieldCollection.fragment.xml +44 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/form/FormElement.fragment.xml +42 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/form/FormHelper-dbg.js +118 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/form/FormHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/fpm/CustomFormElement.fragment.xml +10 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/fpm/CustomFragment.fragment.xml +13 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/fpm/CustomFragment.metadata-dbg.js +73 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/fpm/CustomFragment.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/fpm/CustomHeaderFieldElement.fragment.xml +17 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/fpm/CustomSection.fragment.xml +13 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/fpm/CustomSection.metadata-dbg.js +82 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/fpm/CustomSection.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/fpm/fpm-dbg.js +15 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/fpm/fpm.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.fragment.xml +33 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata-dbg.js +167 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.ts +179 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.fragment.xml +123 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata-dbg.js +162 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field-dbg.designtime.js +811 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.designtime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.fragment.xml +20 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata-dbg.js +534 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/collectionField/MultiValueFieldDelegate-dbg.js +76 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/collectionField/MultiValueFieldDelegate.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/ConnectedDataField.fragment.xml +39 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldContent.fragment.xml +94 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldStructure.fragment.xml +55 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/AmountWithCurrency.fragment.xml +41 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Avatar.fragment.xml +57 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Button.fragment.xml +56 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Contact.fragment.xml +38 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/DataPoint.fragment.xml +45 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ExpandableText.fragment.xml +18 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/File.fragment.xml +31 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LabelSemanticKey.fragment.xml +65 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Link.fragment.xml +30 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWithQuickViewForm.fragment.xml +45 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWrapper.fragment.xml +56 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ObjectIdentifier.fragment.xml +37 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ObjectStatus.fragment.xml +16 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/SemanticKeyWithDraftIndicator.fragment.xml +35 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Text.fragment.xml +33 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/CheckBox.fragment.xml +28 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DatePicker.fragment.xml +32 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DateTimePicker.fragment.xml +33 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/File.fragment.xml +55 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/Input.fragment.xml +33 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithUnit.fragment.xml +77 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithValueHelp.fragment.xml +73 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/RatingIndicator.fragment.xml +23 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/TextArea.fragment.xml +34 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/TimePicker.fragment.xml +33 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/form/FormTemplating-dbg.js +65 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/form/FormTemplating.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/form/FormTemplating.ts +40 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating-dbg.js +244 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +229 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/TableDelegate-dbg.js +215 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueHelp-dbg.designtime.js +466 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueHelp.designtime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueHelp.fragment.xml +23 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueHelpContent.fragment.xml +62 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating-dbg.js +155 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating.ts +133 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +57 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListFilterBar.fragment.xml +20 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper-dbg.js +1286 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +67 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListTableColumnHeader.fragment.xml +25 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/library-dbg.js +144 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js +190 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js.map +9 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js +696 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js.map +9 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/library.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/macroLibrary-dbg.js +126 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/macroLibrary.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/manifest.json +115 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/massedit/MassEditDialog.fragment.xml +106 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/massedit/MassEditHandler-dbg.js +708 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/massedit/MassEditHandler.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/massedit/MassEditRuntime-dbg.js +115 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/massedit/MassEditRuntime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle.properties +215 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ar.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_bg.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ca.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cs.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cy.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_da.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_de.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_el.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_GB.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_sappsd.properties +129 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +129 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saptrc.properties +129 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es_MX.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_et.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fi.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr_CA.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hi.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hr.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hu.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_id.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_it.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_iw.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ja.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_kk.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ko.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lt.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lv.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ms.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_nl.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_no.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pl.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt_PT.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ro.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ru.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sh.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sk.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sl.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sv.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_th.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_tr.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_uk.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_vi.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_CN.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_TW.properties +140 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/MicroChartContainer-dbg.js +620 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/MicroChartContainer.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/MicroChartHelper-dbg.js +491 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/MicroChartHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/AreaMicroChart.fragment.xml +180 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/BulletMicroChart.fragment.xml +111 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/ColumnMicroChart.fragment.xml +99 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/ComparisonMicroChart.fragment.xml +64 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/HarveyBallMicroChart.fragment.xml +64 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/LineMicroChart.fragment.xml +67 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/MicroChartContent.fragment.xml +41 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/MicroChartTitle.fragment.xml +52 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/RadialMicroChart.fragment.xml +58 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/StackedBarMicroChart.fragment.xml +54 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/resources.json +4885 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/share/ShareSheet.fragment.xml +26 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/Actions.fragment.xml +215 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/BasicSearch-dbg.js +73 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/BasicSearch.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/Column.fragment.xml +27 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/ColumnContent.fragment.xml +133 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/ColumnProperty.fragment.xml +43 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/Columns.fragment.xml +37 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/CreationRow.fragment.xml +33 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/CustomColumn.fragment.xml +16 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/QuickFilterContainer-dbg.js +298 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/QuickFilterContainer.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/TableFullScreenUtil-dbg.js +194 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/TableFullScreenUtil.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper-dbg.js +1399 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/TableRuntime-dbg.js +231 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/TableRuntime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/Utils-dbg.js +468 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/Utils.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/ValueHelp.fragment.xml +34 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/ALPTableDelegate-dbg.js +32 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/ALPTableDelegateBaseMixin-dbg.js +100 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/ALPTableDelegateBaseMixin.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/AnalyticalALPTableDelegate-dbg.js +36 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/AnalyticalALPTableDelegate.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/AnalyticalTableDelegate-dbg.js +147 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/AnalyticalTableDelegate.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate-dbg.js +818 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar-dbg.designtime.js +83 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.designtime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.fragment.xml +115 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata-dbg.js +204 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/visualfilters/InteractiveChartHelper-dbg.js +476 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/visualfilters/VisualFilterRuntime-dbg.js +286 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/visualfilters/fragments/InteractiveBarChart.fragment.xml +70 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +69 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/visualfilters/fragments/InteractiveLineChart.fragment.xml +70 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/designtime/api.json +1001 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/designtime/apiref/api.json +1 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.jsmeta.json +1 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.jstemplates.json +1 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.xmlmeta.json +1 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.xmltemplates.json +1 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/CollectionField.spec.js +64 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/CollectionField.spec.ts +67 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/DatapointMacro.spec.js +326 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/DatapointMacro.spec.ts +349 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.js +127 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.ts +127 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroWithSemanticKey.spec.js +184 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroWithSemanticKey.spec.ts +263 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroWithValueHelp.spec.js +63 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroWithValueHelp.spec.ts +72 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterField.spec.js +32 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterField.spec.ts +28 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroComponent.spec.js +39 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroComponent.spec.ts +26 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/MicroChart.spec.js +53 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/MicroChart.spec.ts +54 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/PhantomUtil.spec.js +142 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/PhantomUtil.spec.ts +178 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/QuickViewForm.spec.js +401 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/QuickViewForm.spec.ts +662 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/SimpleFieldMacro.spec.js +571 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/SimpleFieldMacro.spec.ts +778 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.js +712 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.ts +800 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/ValueHelpMacro.spec.js +192 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/ValueHelpMacro.spec.ts +194 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterField.spec.ts.snap +37 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/MacroComponent.spec.ts.snap +7 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/PhantomUtil.spec.ts.snap +184 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/QuickViewForm.spec.ts.snap +820 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/ValueHelpMacro.spec.ts.snap +279 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/addTemplatingTest.md +51 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/AdminDataPopOver.cds +8 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/CollectionField.cds +48 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/FieldMacroDataFieldTypes.cds +295 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/FieldMacroWithSemanticKey.cds +62 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/FieldMacroWithValueHelp.cds +131 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/FilterFieldMacro.cds +124 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/MicroChart.cds +47 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/PhantomUtil.cds +20 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/QuickViewForm.cds +248 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/Table.cds +113 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/ValueHelpMacro.cds +163 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/simpleFieldMacro.cds +129 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.cds +115 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.js +180 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.ts +215 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/__snapshots__/FieldTemplating.spec.ts.snap +160 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/fragments/MyTestFragment.xml +15 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/fragments/MyTestFragmentRepeat.xml +27 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/tsx/TestTSX.spec.tsx +49 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/tsx/__snapshots__/TestTSX.spec.tsx.snap +33 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/common/testHelper.js +24 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/index.json +154 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/AnalyticalTableDelegate.qunit.js +158 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ChartDelegate.qunit.js +275 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ChartHelper.qunit.js +601 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ChartHelperTemplate.qunit.js +67 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/CommonHelper.qunit.js +1607 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FieldHelper.qunit.js +2478 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FieldHelperTemplate.qunit.js +383 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FilterBarDelegate.qunit.js +89 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FilterBarHelper.qunit.js +223 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FilterFieldHelper.qunit.js +712 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormContainerTemplating.qunit.js +245 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormElementTemplating.qunit.js +83 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormHelper.qunit.js +209 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormTemplating.qunit.js +577 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormTemplatingTs.qunit.js +271 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/InteractiveChartHelper.qunit.js +1227 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/MacroMetadata.qunit.js +123 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/MicroChartContainer.qunit.js +1637 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/MicroChartHelper.qunit.js +619 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/MicroChartHelperForTemplate.qunit.js +360 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/PhantomUtil.qunit.js +307 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/QuickViewLinkDelegate.qunit.js +81 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/TableDelegate.qunit.js +734 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/TableHelper.qunit.js +2630 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/TableHelperTemplate.qunit.js +201 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/TableRuntime.qunit.js +861 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueHelpTemplating.qunit.js +176 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueListHelper.qunit.js +1133 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/chartMetadata/metadata.xml +461 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/flexibility/FormDelegate.qunit.js +408 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/fragments/FilterFieldMacro.fragment.xml +9 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/fragments/FilterFieldMacroMissingID.fragment.xml +9 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/fragments/TableMacro.fragment.xml +22 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/metadata/simpleMetadata.js +1415 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/teststarter.qunit.html +13 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/testsuite.qunit.html +14 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/testsuite.qunit.js +41 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.91.json +76 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.94.json +29 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/.library +36 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/.theming +6 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/NavError-dbg.js +49 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/NavError.js +6 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/NavigationHandler-dbg.js +2215 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/NavigationHandler.js +6 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/PresentationVariant-dbg.js +347 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/PresentationVariant.js +6 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/SelectionVariant-dbg.js +774 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/SelectionVariant.js +6 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library-dbg.js +170 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js +19 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js.map +9 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js +129 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js.map +9 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library.js +6 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/manifest.json +44 -0
- package/packages/sap.fe.navigation/src/sap/fe/navigation/resources.json +215 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/api.json +1 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/apiref/api.json +1 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/codeassistance/Library.jsmeta.json +1 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/codeassistance/Library.jstemplates.json +1 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/codeassistance/Library.xmlmeta.json +1 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/codeassistance/Library.xmltemplates.json +1 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/qunit/index.json +17 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/qunit/navigation/CrossAppNavigationServiceMock.js +110 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/qunit/navigation/NavigationHandlerTest.qunit.js +8625 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/qunit/navigation/PresentationVariantTest.qunit.js +179 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/qunit/navigation/SelectionVariantTest.qunit.js +1366 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/qunit/teststarter.qunit.html +13 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/qunit/testsuite.qunit.html +14 -0
- package/packages/sap.fe.navigation/test/sap/fe/navigation/qunit/testsuite.qunit.js +41 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.library +35 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.theming +5 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/controller/Placeholder-dbg.controller.js +60 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/controller/Placeholder.controller.js +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-dbg.js +41 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js +20 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js.map +9 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js +21 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js.map +9 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library.js +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/manifest.json +49 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/resources.json +725 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/.theming +5 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/Placeholder.less +504 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/css_variables.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/css_variables.less +4 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/css_variables.source.less +1439 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/library-RTL.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/library-parameters.json +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/library.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/library.less +511 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/library.source.less +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/library_skeleton-RTL.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/library_skeleton.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/resources.json +70 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/.theming +27 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.css +4 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.less +1497 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.source.less +1487 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/library-RTL.css +4 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/library-parameters.json +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/library.css +4 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/library.less +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/library.source.less +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/library_skeleton-RTL.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/library_skeleton.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/resources.json +64 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/.theming +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.less +1463 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.source.less +1453 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/library-RTL.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/library-parameters.json +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/library.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/library.less +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/library.source.less +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/library_skeleton-RTL.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/library_skeleton.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/resources.json +64 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/.theming +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.less +1463 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.source.less +1453 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/library-RTL.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/library-parameters.json +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/library.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/library.less +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/library.source.less +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/library_skeleton-RTL.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/library_skeleton.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/resources.json +64 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/.theming +26 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.css +4 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.less +1497 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.source.less +1487 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/library-RTL.css +4 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/library-parameters.json +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/library.css +4 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/library.less +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/library.source.less +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/library_skeleton-RTL.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/library_skeleton.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/resources.json +64 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/.theming +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.less +1468 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.source.less +1458 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/library-RTL.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/library-parameters.json +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/library.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/library.less +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/library.source.less +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/library_skeleton-RTL.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/library_skeleton.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/resources.json +64 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/.theming +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.less +1468 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.source.less +1458 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/library-RTL.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/library-parameters.json +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/library.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/library.less +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/library.source.less +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/library_skeleton-RTL.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/library_skeleton.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/resources.json +64 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/.theming +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.less +1464 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.source.less +1454 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/library-RTL.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/library-parameters.json +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/library.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/library.less +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/library.source.less +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/library_skeleton-RTL.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/library_skeleton.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/resources.json +64 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/.theming +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.less +1464 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.source.less +1454 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/library-RTL.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/library-parameters.json +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/library.css +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/library.less +6 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/library.source.less +3 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/library_skeleton-RTL.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/library_skeleton.css +1 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/resources.json +64 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/view/PlaceholderALP.fragment.html +10 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/view/PlaceholderALP.view.xml +11 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/view/PlaceholderLR.fragment.html +8 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/view/PlaceholderLR.view.xml +11 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/view/PlaceholderOP.fragment.html +8 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/view/PlaceholderOP.view.xml +11 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/view/PlaceholderOVP.fragment.html +8 -0
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/view/PlaceholderOVP.view.xml +11 -0
- package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/api.json +1 -0
- package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/apiref/api.json +1 -0
- package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/codeassistance/Library.jsmeta.json +1 -0
- package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/codeassistance/Library.jstemplates.json +1 -0
- package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/codeassistance/Library.xmlmeta.json +1 -0
- package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/codeassistance/Library.xmltemplates.json +1 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/.library +74 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/.theming +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/Component-dbg.js +15 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/Component.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate-dbg.js +37 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/manifest.json +27 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/resources.json +27 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent-dbg.js +121 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component-dbg.js +42 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ExtensionAPI-dbg.js +95 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ExtensionAPI.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReport.view.xml +199 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +954 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController.controller.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/manifest.json +28 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation-dbg.js +52 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/overrides/Share-dbg.js +124 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/overrides/Share.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/overrides/ViewState-dbg.js +264 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/overrides/ViewState.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/resources.json +79 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +32 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/view/fragments/CustomView.fragment.xml +10 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.xml +49 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper-dbg.js +457 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component-dbg.js +139 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ExtensionAPI-dbg.js +130 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +184 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +1460 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox-dbg.js +90 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableVBox-dbg.js +27 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock-dbg.js +57 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox-dbg.designtime.js +19 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/StashableHBox-dbg.designtime.js +51 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/StashableVBox-dbg.designtime.js +38 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility-dbg.js +19 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility-dbg.js +15 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/manifest.json +122 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation-dbg.js +55 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/InternalRouting-dbg.js +20 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/MessageHandler-dbg.js +20 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/Routing-dbg.js +21 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/Routing.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/Share-dbg.js +303 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/Share.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/ViewState-dbg.js +45 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/resources.json +282 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating-dbg.js +117 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.js +5 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.ts +124 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +183 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +160 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +117 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/FormActionButtons.fragment.xml +79 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/FormActions.fragment.xml +24 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderContent.fragment.xml +54 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPoint.fragment.xml +26 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPointTitle.fragment.xml +69 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +90 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +41 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderImage.fragment.xml +24 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderAddress.fragment.xml +20 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +72 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/RelatedApps.fragment.xml +22 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +71 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +175 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/SectionCustomSection.fragment.xml +18 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +18 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +18 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/SectionPresentationVisualization.fragment.xml +17 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/SideContentCustomContainer.fragment.xml +19 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/TitleAndSubtitle.fragment.xml +24 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl-dbg.controller.js +816 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer-dbg.controller.js +176 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController-dbg.js +441 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/overrides/EditFlow-dbg.js +18 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/view/Fcl.view.xml +15 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/view/NavContainer.view.xml +9 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/view/PlaceholderLR.view.xml +617 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/view/PlaceholderOP.view.xml +588 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/controls/Chart.fragment.xml +20 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/controls/OverflowToolbarButtonHover-dbg.js +26 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/controls/OverflowToolbarButtonHover.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/controls/Paginator-dbg.js +174 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/controls/Paginator.control.xml +24 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/controls/Paginator.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/controls/Table.fragment.xml +23 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js +10 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js.map +9 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/library-dbg.js +72 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js +77 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js.map +9 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js +154 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js.map +9 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/library.js +6 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/manifest.json +136 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle.properties +210 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ar.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_bg.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ca.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cs.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cy.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_da.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_de.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_el.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_GB.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es_MX.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_et.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fi.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr_CA.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hi.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hr.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hu.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_id.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_it.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_iw.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ja.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_kk.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ko.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lt.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lv.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ms.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_nl.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_no.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pl.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt_PT.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ro.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ru.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sh.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sk.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sl.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sv.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_th.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_tr.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_uk.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_vi.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_CN.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_TW.properties +135 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/resources.json +2103 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/Component.js +9 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/WEB-INF/web.xml +120 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/annotations/annotations.xml +43 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/i18n/i18n.properties +13 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/manifest.json +176 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/test/manifestCreateDialogWithFCL.json +87 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/test/testFLP.html +71 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/test/testFLPService.html +82 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/flpSandbox.html +24 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/flpSandbox.js +225 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/mockServer.js +780 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/mockServerHelper.js +195 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/designtime/api.json +1 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/designtime/apiref/api.json +1 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.jsmeta.json +1 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.jstemplates.json +1 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.xmlmeta.json +1 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.xmltemplates.json +1 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/qunit/common/testHelper.js +80 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/qunit/common/utility.js +28 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/qunit/testsuite.qunit.html +14 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/qunit/testsuite.qunit.js +33 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.91.json +134 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.94.json +34 -0
- package/packages/sap.fe.test/src/sap/fe/test/.library +30 -0
- package/packages/sap.fe.test/src/sap/fe/test/.theming +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/BaseActions-dbg.js +107 -0
- package/packages/sap.fe.test/src/sap/fe/test/BaseActions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/BaseArrangements-dbg.js +199 -0
- package/packages/sap.fe.test/src/sap/fe/test/BaseArrangements.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/BaseAssertions-dbg.js +56 -0
- package/packages/sap.fe.test/src/sap/fe/test/BaseAssertions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/ConfirmDialog-dbg.js +72 -0
- package/packages/sap.fe.test/src/sap/fe/test/ConfirmDialog.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/FCLView-dbg.js +86 -0
- package/packages/sap.fe.test/src/sap/fe/test/FCLView.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/Flexibility-dbg.js +743 -0
- package/packages/sap.fe.test/src/sap/fe/test/Flexibility.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/FlexibleColumnLayout-dbg.js +149 -0
- package/packages/sap.fe.test/src/sap/fe/test/FlexibleColumnLayout.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper-dbg.js +284 -0
- package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.js +5 -0
- package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.ts +242 -0
- package/packages/sap.fe.test/src/sap/fe/test/JourneyRunner-dbg.js +314 -0
- package/packages/sap.fe.test/src/sap/fe/test/JourneyRunner.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/ListReport-dbg.js +525 -0
- package/packages/sap.fe.test/src/sap/fe/test/ListReport.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/LocationUtil-dbg.js +54 -0
- package/packages/sap.fe.test/src/sap/fe/test/LocationUtil.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/ObjectPage-dbg.js +857 -0
- package/packages/sap.fe.test/src/sap/fe/test/ObjectPage.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/Shell-dbg.js +226 -0
- package/packages/sap.fe.test/src/sap/fe/test/Shell.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/Stubs-dbg.js +97 -0
- package/packages/sap.fe.test/src/sap/fe/test/Stubs.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/TemplatePage-dbg.js +447 -0
- package/packages/sap.fe.test/src/sap/fe/test/TemplatePage.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/TemplatingTestUtils-dbg.js +243 -0
- package/packages/sap.fe.test/src/sap/fe/test/TemplatingTestUtils.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/Utils-dbg.js +301 -0
- package/packages/sap.fe.test/src/sap/fe/test/Utils.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/APIHelper-dbg.js +117 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/APIHelper.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/BaseAPI-dbg.js +285 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/BaseAPI.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/ChartActions-dbg.js +131 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/ChartActions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/ChartAssertions-dbg.js +114 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/ChartAssertions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogAPI-dbg.js +93 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogAPI.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogActions-dbg.js +101 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogActions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogAssertions-dbg.js +123 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogAssertions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogCreateActions-dbg.js +44 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogCreateActions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogCreateAssertions-dbg.js +55 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogCreateAssertions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogMessageActions-dbg.js +59 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogMessageActions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogMessageAssertions-dbg.js +87 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogMessageAssertions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogType-dbg.js +76 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogType.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogValueHelpActions-dbg.js +317 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogValueHelpActions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogValueHelpAssertions-dbg.js +263 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/DialogValueHelpAssertions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/EditState-dbg.js +67 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/EditState.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI-dbg.js +197 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarActions-dbg.js +310 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarActions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAssertions-dbg.js +413 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAssertions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FooterAPI-dbg.js +37 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FooterAPI.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FooterActionsBase-dbg.js +47 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FooterActionsBase.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FooterActionsOP-dbg.js +83 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FooterActionsOP.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FooterAssertionsBase-dbg.js +66 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FooterAssertionsBase.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FooterAssertionsOP-dbg.js +98 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FooterAssertionsOP.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FormAPI-dbg.js +82 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FormAPI.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FormActions-dbg.js +180 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FormActions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FormAssertions-dbg.js +182 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/FormAssertions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderAPI-dbg.js +152 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderAPI.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderActions-dbg.js +232 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderActions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderActionsLR-dbg.js +94 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderActionsLR.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderAssertions-dbg.js +495 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderAssertions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderAssertionsLR-dbg.js +110 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderAssertionsLR.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderLR-dbg.js +74 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/HeaderLR.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/TableAPI-dbg.js +452 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/TableAPI.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/TableActions-dbg.js +958 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/TableActions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/TableAssertions-dbg.js +697 -0
- package/packages/sap.fe.test/src/sap/fe/test/api/TableAssertions.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/DialogBuilder-dbg.js +118 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/DialogBuilder.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/FEBuilder-dbg.js +428 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/FEBuilder.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/KPIBuilder-dbg.js +56 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/KPIBuilder.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/MacroFieldBuilder-dbg.js +174 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/MacroFieldBuilder.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/MdcFieldBuilder-dbg.js +254 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/MdcFieldBuilder.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/MdcFilterBarBuilder-dbg.js +112 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/MdcFilterBarBuilder.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/MdcFilterFieldBuilder-dbg.js +54 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/MdcFilterFieldBuilder.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/MdcTableBuilder-dbg.js +1069 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/MdcTableBuilder.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/OverflowToolbarBuilder-dbg.js +89 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/OverflowToolbarBuilder.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/VMBuilder-dbg.js +268 -0
- package/packages/sap.fe.test/src/sap/fe/test/builder/VMBuilder.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/internal/FEArrangements-dbg.js +66 -0
- package/packages/sap.fe.test/src/sap/fe/test/internal/FEArrangements.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/internal/FEJourneyRunner-dbg.js +55 -0
- package/packages/sap.fe.test/src/sap/fe/test/internal/FEJourneyRunner.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/library-dbg.js +37 -0
- package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js +78 -0
- package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js.map +9 -0
- package/packages/sap.fe.test/src/sap/fe/test/library-preload.js +587 -0
- package/packages/sap.fe.test/src/sap/fe/test/library-preload.js.map +9 -0
- package/packages/sap.fe.test/src/sap/fe/test/library.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/manifest.json +39 -0
- package/packages/sap.fe.test/src/sap/fe/test/massEdit-dbg.js +99 -0
- package/packages/sap.fe.test/src/sap/fe/test/massEdit.js +6 -0
- package/packages/sap.fe.test/src/sap/fe/test/resources.json +1972 -0
- package/packages/sap.fe.test/test/sap/fe/test/designtime/api.json +1 -0
- package/packages/sap.fe.test/test/sap/fe/test/designtime/apiref/api.json +1 -0
- package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.jsmeta.json +1 -0
- package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.jstemplates.json +1 -0
- package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.xmlmeta.json +1 -0
- package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.xmltemplates.json +1 -0
- package/packages/sap.fe.test/test/sap/fe/test/mockserver/MockServer.js +134870 -0
- package/src/LICENSE.txt +23 -0
- package/ui5.yaml +66 -0
|
@@ -0,0 +1,2100 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
*/
|
|
5
|
+
sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/converters/helpers/Key", "sap/fe/core/formatters/TableFormatter", "sap/fe/core/formatters/TableFormatterTypes", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/templating/PropertyHelper", "../../helpers/Aggregation", "sap/fe/core/templating/UIFormatters", "./Criticality"], function (ManifestSettings, ID, Action, ConfigurableObject, DataField, BindingExpression, BindingHelper, Key, tableFormatters, TableFormatterTypes, DataModelPathHelper, StableIdHelper, IssueManager, PropertyHelper, Aggregation, UIFormatters, Criticality) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var _exports = {};
|
|
9
|
+
var getMessageTypeFromCriticalityType = Criticality.getMessageTypeFromCriticalityType;
|
|
10
|
+
var getDisplayMode = UIFormatters.getDisplayMode;
|
|
11
|
+
var AggregationHelper = Aggregation.AggregationHelper;
|
|
12
|
+
var getTargetValueOnDataPoint = PropertyHelper.getTargetValueOnDataPoint;
|
|
13
|
+
var isPathExpression = PropertyHelper.isPathExpression;
|
|
14
|
+
var getAssociatedCurrencyProperty = PropertyHelper.getAssociatedCurrencyProperty;
|
|
15
|
+
var getAssociatedUnitProperty = PropertyHelper.getAssociatedUnitProperty;
|
|
16
|
+
var isProperty = PropertyHelper.isProperty;
|
|
17
|
+
var IssueType = IssueManager.IssueType;
|
|
18
|
+
var IssueSeverity = IssueManager.IssueSeverity;
|
|
19
|
+
var IssueCategory = IssueManager.IssueCategory;
|
|
20
|
+
var replaceSpecialChars = StableIdHelper.replaceSpecialChars;
|
|
21
|
+
var isPathUpdatable = DataModelPathHelper.isPathUpdatable;
|
|
22
|
+
var isPathInsertable = DataModelPathHelper.isPathInsertable;
|
|
23
|
+
var isPathSearchable = DataModelPathHelper.isPathSearchable;
|
|
24
|
+
var isPathDeletable = DataModelPathHelper.isPathDeletable;
|
|
25
|
+
var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
|
|
26
|
+
var MessageType = TableFormatterTypes.MessageType;
|
|
27
|
+
var KeyHelper = Key.KeyHelper;
|
|
28
|
+
var UI = BindingHelper.UI;
|
|
29
|
+
var singletonPathVisitor = BindingHelper.singletonPathVisitor;
|
|
30
|
+
var bindingContextPathVisitor = BindingHelper.bindingContextPathVisitor;
|
|
31
|
+
var Draft = BindingHelper.Draft;
|
|
32
|
+
var resolveBindingString = BindingExpression.resolveBindingString;
|
|
33
|
+
var or = BindingExpression.or;
|
|
34
|
+
var not = BindingExpression.not;
|
|
35
|
+
var isConstant = BindingExpression.isConstant;
|
|
36
|
+
var isBinding = BindingExpression.isBinding;
|
|
37
|
+
var ifElse = BindingExpression.ifElse;
|
|
38
|
+
var formatResult = BindingExpression.formatResult;
|
|
39
|
+
var equal = BindingExpression.equal;
|
|
40
|
+
var constant = BindingExpression.constant;
|
|
41
|
+
var compileBinding = BindingExpression.compileBinding;
|
|
42
|
+
var bindingExpression = BindingExpression.bindingExpression;
|
|
43
|
+
var annotationExpression = BindingExpression.annotationExpression;
|
|
44
|
+
var and = BindingExpression.and;
|
|
45
|
+
var isDataFieldTypes = DataField.isDataFieldTypes;
|
|
46
|
+
var isDataFieldForActionAbstract = DataField.isDataFieldForActionAbstract;
|
|
47
|
+
var isDataFieldAlwaysHidden = DataField.isDataFieldAlwaysHidden;
|
|
48
|
+
var getSemanticObjectPath = DataField.getSemanticObjectPath;
|
|
49
|
+
var collectRelatedPropertiesRecursively = DataField.collectRelatedPropertiesRecursively;
|
|
50
|
+
var collectRelatedProperties = DataField.collectRelatedProperties;
|
|
51
|
+
var Placement = ConfigurableObject.Placement;
|
|
52
|
+
var insertCustomElements = ConfigurableObject.insertCustomElements;
|
|
53
|
+
var removeDuplicateActions = Action.removeDuplicateActions;
|
|
54
|
+
var isActionNavigable = Action.isActionNavigable;
|
|
55
|
+
var getActionsFromManifest = Action.getActionsFromManifest;
|
|
56
|
+
var TableID = ID.TableID;
|
|
57
|
+
var VisualizationType = ManifestSettings.VisualizationType;
|
|
58
|
+
var VariantManagementType = ManifestSettings.VariantManagementType;
|
|
59
|
+
var TemplateType = ManifestSettings.TemplateType;
|
|
60
|
+
var SelectionMode = ManifestSettings.SelectionMode;
|
|
61
|
+
var HorizontalAlign = ManifestSettings.HorizontalAlign;
|
|
62
|
+
var CreationMode = ManifestSettings.CreationMode;
|
|
63
|
+
var AvailabilityType = ManifestSettings.AvailabilityType;
|
|
64
|
+
var ActionType = ManifestSettings.ActionType;
|
|
65
|
+
|
|
66
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
67
|
+
|
|
68
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
69
|
+
|
|
70
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
71
|
+
|
|
72
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
73
|
+
|
|
74
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
75
|
+
|
|
76
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
77
|
+
|
|
78
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
79
|
+
|
|
80
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
81
|
+
|
|
82
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
83
|
+
|
|
84
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
85
|
+
|
|
86
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
87
|
+
|
|
88
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
89
|
+
|
|
90
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
91
|
+
|
|
92
|
+
var ColumnType;
|
|
93
|
+
|
|
94
|
+
(function (ColumnType) {
|
|
95
|
+
ColumnType["Default"] = "Default";
|
|
96
|
+
ColumnType["Annotation"] = "Annotation";
|
|
97
|
+
ColumnType["Slot"] = "Slot";
|
|
98
|
+
})(ColumnType || (ColumnType = {}));
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Returns an array of all annotation-based and manifest-based table actions.
|
|
102
|
+
*
|
|
103
|
+
* @param {LineItem} lineItemAnnotation
|
|
104
|
+
* @param {string} visualizationPath
|
|
105
|
+
* @param {ConverterContext} converterContext
|
|
106
|
+
* @param {NavigationSettingsConfiguration} navigationSettings
|
|
107
|
+
* @returns {BaseAction} The complete table actions
|
|
108
|
+
*/
|
|
109
|
+
function getTableActions(lineItemAnnotation, visualizationPath, converterContext, navigationSettings) {
|
|
110
|
+
var aTableActions = getTableAnnotationActions(lineItemAnnotation, visualizationPath, converterContext);
|
|
111
|
+
var aAnnotationActions = aTableActions.tableActions;
|
|
112
|
+
var aHiddenActions = aTableActions.hiddenTableActions;
|
|
113
|
+
return insertCustomElements(aAnnotationActions, getActionsFromManifest(converterContext.getManifestControlConfiguration(visualizationPath).actions, converterContext, aAnnotationActions, navigationSettings, true, aHiddenActions), {
|
|
114
|
+
isNavigable: "overwrite",
|
|
115
|
+
enableOnSelect: "overwrite",
|
|
116
|
+
enableAutoScroll: "overwrite",
|
|
117
|
+
enabled: "overwrite",
|
|
118
|
+
defaultValuesExtensionFunction: "overwrite"
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Returns an array of all columns, annotation-based as well as manifest based.
|
|
123
|
+
* They are sorted and some properties can be overwritten via the manifest (check out the keys that can be overwritten).
|
|
124
|
+
*
|
|
125
|
+
* @param {LineItem} lineItemAnnotation Collection of data fields for representation in a table or list
|
|
126
|
+
* @param {string} visualizationPath
|
|
127
|
+
* @param {ConverterContext} converterContext
|
|
128
|
+
* @param {NavigationSettingsConfiguration} navigationSettings
|
|
129
|
+
* @returns {TableColumn[]} Returns all table columns that should be available, regardless of templating or personalization or their origin
|
|
130
|
+
*/
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
_exports.getTableActions = getTableActions;
|
|
134
|
+
|
|
135
|
+
function getTableColumns(lineItemAnnotation, visualizationPath, converterContext, navigationSettings) {
|
|
136
|
+
var annotationColumns = getColumnsFromAnnotations(lineItemAnnotation, visualizationPath, converterContext);
|
|
137
|
+
var manifestColumns = getColumnsFromManifest(converterContext.getManifestControlConfiguration(visualizationPath).columns, annotationColumns, converterContext, converterContext.getAnnotationEntityType(lineItemAnnotation), navigationSettings);
|
|
138
|
+
return insertCustomElements(annotationColumns, manifestColumns, {
|
|
139
|
+
width: "overwrite",
|
|
140
|
+
isNavigable: "overwrite",
|
|
141
|
+
availability: "overwrite",
|
|
142
|
+
settings: "overwrite",
|
|
143
|
+
horizontalAlign: "overwrite",
|
|
144
|
+
formatOptions: "overwrite"
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Retrieve the custom aggregation definitions from the entityType.
|
|
149
|
+
*
|
|
150
|
+
* @param entityType The target entity type.
|
|
151
|
+
* @param tableColumns The array of columns for the entity type.
|
|
152
|
+
* @param converterContext The converter context.
|
|
153
|
+
* @returns The aggregate definitions from the entityType, or undefined if the entity doesn't support analytical queries.
|
|
154
|
+
*/
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
_exports.getTableColumns = getTableColumns;
|
|
158
|
+
|
|
159
|
+
var getAggregateDefinitionsFromEntityType = function (entityType, tableColumns, converterContext) {
|
|
160
|
+
var aggregationHelper = new AggregationHelper(entityType, converterContext);
|
|
161
|
+
|
|
162
|
+
function findColumnFromPath(path) {
|
|
163
|
+
return tableColumns.find(function (column) {
|
|
164
|
+
var annotationColumn = column;
|
|
165
|
+
return annotationColumn.propertyInfos === undefined && annotationColumn.relativePath === path;
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (!aggregationHelper.isAnalyticsSupported()) {
|
|
170
|
+
return undefined;
|
|
171
|
+
} // Keep a set of all currency/unit properties, as we don't want to consider them as aggregates
|
|
172
|
+
// They are aggregates for technical reasons (to manage multi-units situations) but it doesn't make sense from a user standpoint
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
var mCurrencyOrUnitProperties = new Set();
|
|
176
|
+
tableColumns.forEach(function (oColumn) {
|
|
177
|
+
var oTableColumn = oColumn;
|
|
178
|
+
|
|
179
|
+
if (oTableColumn.unit) {
|
|
180
|
+
mCurrencyOrUnitProperties.add(oTableColumn.unit);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
var mRawDefinitions = aggregationHelper.getCustomAggregateDefinitions();
|
|
184
|
+
var mResult = {};
|
|
185
|
+
tableColumns.forEach(function (oColumn) {
|
|
186
|
+
var oTableColumn = oColumn;
|
|
187
|
+
|
|
188
|
+
if (oTableColumn.propertyInfos === undefined && oTableColumn.relativePath) {
|
|
189
|
+
var aRawContextDefiningProperties = mRawDefinitions[oTableColumn.relativePath]; // Ignore aggregates corresponding to currencies or units of measure and dummy created property for datapoint target Value
|
|
190
|
+
|
|
191
|
+
if (aRawContextDefiningProperties && !mCurrencyOrUnitProperties.has(oTableColumn.name) && !oTableColumn.isDataPointFakeTargetProperty) {
|
|
192
|
+
mResult[oTableColumn.name] = {
|
|
193
|
+
defaultAggregate: {},
|
|
194
|
+
relativePath: oTableColumn.relativePath
|
|
195
|
+
};
|
|
196
|
+
var aContextDefiningProperties = [];
|
|
197
|
+
aRawContextDefiningProperties.forEach(function (contextDefiningPropertyName) {
|
|
198
|
+
var oColumn = findColumnFromPath(contextDefiningPropertyName);
|
|
199
|
+
|
|
200
|
+
if (oColumn) {
|
|
201
|
+
aContextDefiningProperties.push(oColumn.name);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
if (aContextDefiningProperties.length) {
|
|
206
|
+
mResult[oTableColumn.name].defaultAggregate.contextDefiningProperties = aContextDefiningProperties;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
return mResult;
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* Updates a table visualization for analytical use cases.
|
|
215
|
+
*
|
|
216
|
+
* @param tableVisualization The visualization to be updated
|
|
217
|
+
* @param entityType The entity type displayed in the table
|
|
218
|
+
* @param converterContext The converter context
|
|
219
|
+
* @param presentationVariantAnnotation The presentationVariant annotation (if any)
|
|
220
|
+
*/
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
_exports.getAggregateDefinitionsFromEntityType = getAggregateDefinitionsFromEntityType;
|
|
224
|
+
|
|
225
|
+
function updateTableVisualizationForAnalytics(tableVisualization, entityType, converterContext, presentationVariantAnnotation) {
|
|
226
|
+
if (tableVisualization.control.type === "AnalyticalTable") {
|
|
227
|
+
var aggregatesDefinitions = getAggregateDefinitionsFromEntityType(entityType, tableVisualization.columns, converterContext);
|
|
228
|
+
|
|
229
|
+
if (aggregatesDefinitions) {
|
|
230
|
+
tableVisualization.enableAnalytics = true;
|
|
231
|
+
tableVisualization.aggregates = aggregatesDefinitions; // Add group and sort conditions from the presentation variant
|
|
232
|
+
|
|
233
|
+
tableVisualization.annotation.groupConditions = getGroupConditions(presentationVariantAnnotation, tableVisualization.columns);
|
|
234
|
+
tableVisualization.annotation.aggregateConditions = getAggregateConditions(presentationVariantAnnotation, tableVisualization.columns);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
tableVisualization.control.type = "GridTable"; // AnalyticalTable isn't a real type for the MDC:Table, so we always switch back to Grid
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get the navigation target path from manifest settings.
|
|
242
|
+
*
|
|
243
|
+
* @param converterContext The converter context
|
|
244
|
+
* @param navigationPropertyPath The navigation path to check in the manifest settings
|
|
245
|
+
* @returns Navigation path from manifest settings
|
|
246
|
+
*/
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
function getNavigationTargetPath(converterContext, navigationPropertyPath) {
|
|
250
|
+
var manifestWrapper = converterContext.getManifestWrapper();
|
|
251
|
+
|
|
252
|
+
if (navigationPropertyPath && manifestWrapper.getNavigationConfiguration(navigationPropertyPath)) {
|
|
253
|
+
var navConfig = manifestWrapper.getNavigationConfiguration(navigationPropertyPath);
|
|
254
|
+
|
|
255
|
+
if (Object.keys(navConfig).length > 0) {
|
|
256
|
+
return navigationPropertyPath;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
var dataModelPath = converterContext.getDataModelObjectPath();
|
|
261
|
+
var contextPath = converterContext.getContextPath();
|
|
262
|
+
var navConfigForContextPath = manifestWrapper.getNavigationConfiguration(contextPath);
|
|
263
|
+
|
|
264
|
+
if (navConfigForContextPath && Object.keys(navConfigForContextPath).length > 0) {
|
|
265
|
+
return contextPath;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return dataModelPath.targetEntitySet ? dataModelPath.targetEntitySet.name : dataModelPath.startingEntitySet.name;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Sets the 'unit' and 'textArrangement' properties in columns when necessary.
|
|
272
|
+
*
|
|
273
|
+
* @param entityType The entity type displayed in the table
|
|
274
|
+
* @param tableColumns The columns to be updated
|
|
275
|
+
*/
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
function updateLinkedProperties(entityType, tableColumns) {
|
|
279
|
+
function findColumnByPath(path) {
|
|
280
|
+
return tableColumns.find(function (column) {
|
|
281
|
+
var annotationColumn = column;
|
|
282
|
+
return annotationColumn.propertyInfos === undefined && annotationColumn.relativePath === path;
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
tableColumns.forEach(function (oColumn) {
|
|
287
|
+
var oTableColumn = oColumn;
|
|
288
|
+
|
|
289
|
+
if (oTableColumn.propertyInfos === undefined && oTableColumn.relativePath) {
|
|
290
|
+
var oProperty = entityType.entityProperties.find(function (oProp) {
|
|
291
|
+
return oProp.name === oTableColumn.relativePath;
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
if (oProperty) {
|
|
295
|
+
var _getAssociatedCurrenc, _getAssociatedUnitPro, _oProperty$annotation;
|
|
296
|
+
|
|
297
|
+
var sUnit = ((_getAssociatedCurrenc = getAssociatedCurrencyProperty(oProperty)) === null || _getAssociatedCurrenc === void 0 ? void 0 : _getAssociatedCurrenc.name) || ((_getAssociatedUnitPro = getAssociatedUnitProperty(oProperty)) === null || _getAssociatedUnitPro === void 0 ? void 0 : _getAssociatedUnitPro.name);
|
|
298
|
+
|
|
299
|
+
if (sUnit) {
|
|
300
|
+
var oUnitColumn = findColumnByPath(sUnit);
|
|
301
|
+
oTableColumn.unit = oUnitColumn === null || oUnitColumn === void 0 ? void 0 : oUnitColumn.name;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
var displayMode = getDisplayMode(oProperty),
|
|
305
|
+
textAnnotation = (_oProperty$annotation = oProperty.annotations.Common) === null || _oProperty$annotation === void 0 ? void 0 : _oProperty$annotation.Text;
|
|
306
|
+
|
|
307
|
+
if (isPathExpression(textAnnotation) && displayMode !== "Value") {
|
|
308
|
+
var oTextColumn = findColumnByPath(textAnnotation.path);
|
|
309
|
+
|
|
310
|
+
if (oTextColumn && oTextColumn.name !== oTableColumn.name) {
|
|
311
|
+
oTableColumn.textArrangement = {
|
|
312
|
+
textProperty: oTextColumn.name,
|
|
313
|
+
mode: displayMode
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
_exports.updateLinkedProperties = updateLinkedProperties;
|
|
323
|
+
|
|
324
|
+
function createTableVisualization(lineItemAnnotation, visualizationPath, converterContext, presentationVariantAnnotation, isCondensedTableLayoutCompliant, viewConfiguration) {
|
|
325
|
+
var tableManifestConfig = getTableManifestConfiguration(lineItemAnnotation, visualizationPath, converterContext, isCondensedTableLayoutCompliant);
|
|
326
|
+
|
|
327
|
+
var _splitPath = splitPath(visualizationPath),
|
|
328
|
+
navigationPropertyPath = _splitPath.navigationPropertyPath;
|
|
329
|
+
|
|
330
|
+
var navigationTargetPath = getNavigationTargetPath(converterContext, navigationPropertyPath);
|
|
331
|
+
var navigationSettings = converterContext.getManifestWrapper().getNavigationConfiguration(navigationTargetPath);
|
|
332
|
+
var columns = getTableColumns(lineItemAnnotation, visualizationPath, converterContext, navigationSettings);
|
|
333
|
+
var operationAvailableMap = getOperationAvailableMap(lineItemAnnotation, converterContext);
|
|
334
|
+
var oVisualization = {
|
|
335
|
+
type: VisualizationType.Table,
|
|
336
|
+
annotation: getTableAnnotationConfiguration(lineItemAnnotation, visualizationPath, converterContext, tableManifestConfig, columns, presentationVariantAnnotation, viewConfiguration),
|
|
337
|
+
control: tableManifestConfig,
|
|
338
|
+
actions: removeDuplicateActions(getTableActions(lineItemAnnotation, visualizationPath, converterContext, navigationSettings)),
|
|
339
|
+
columns: columns,
|
|
340
|
+
enableDataStateFilter: converterContext.getTemplateType() === "ObjectPage",
|
|
341
|
+
operationAvailableMap: JSON.stringify(operationAvailableMap),
|
|
342
|
+
operationAvailableProperties: getOperationAvailableProperties(operationAvailableMap, converterContext)
|
|
343
|
+
};
|
|
344
|
+
updateLinkedProperties(converterContext.getAnnotationEntityType(lineItemAnnotation), columns);
|
|
345
|
+
updateTableVisualizationForAnalytics(oVisualization, converterContext.getAnnotationEntityType(lineItemAnnotation), converterContext, presentationVariantAnnotation);
|
|
346
|
+
return oVisualization;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
_exports.createTableVisualization = createTableVisualization;
|
|
350
|
+
|
|
351
|
+
function createDefaultTableVisualization(converterContext) {
|
|
352
|
+
var tableManifestConfig = getTableManifestConfiguration(undefined, "", converterContext, false);
|
|
353
|
+
var columns = getColumnsFromEntityType({}, converterContext.getEntityType(), [], [], converterContext, tableManifestConfig.type);
|
|
354
|
+
var operationAvailableMap = getOperationAvailableMap(undefined, converterContext);
|
|
355
|
+
var oVisualization = {
|
|
356
|
+
type: VisualizationType.Table,
|
|
357
|
+
annotation: getTableAnnotationConfiguration(undefined, "", converterContext, tableManifestConfig, columns),
|
|
358
|
+
control: tableManifestConfig,
|
|
359
|
+
actions: [],
|
|
360
|
+
columns: columns,
|
|
361
|
+
enableDataStateFilter: converterContext.getTemplateType() === "ObjectPage",
|
|
362
|
+
operationAvailableMap: JSON.stringify(operationAvailableMap),
|
|
363
|
+
operationAvailableProperties: getOperationAvailableProperties(operationAvailableMap, converterContext)
|
|
364
|
+
};
|
|
365
|
+
updateLinkedProperties(converterContext.getEntityType(), columns);
|
|
366
|
+
updateTableVisualizationForAnalytics(oVisualization, converterContext.getEntityType(), converterContext);
|
|
367
|
+
return oVisualization;
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Gets the map of Core.OperationAvailable property paths for all DataFieldForActions.
|
|
371
|
+
*
|
|
372
|
+
* @param lineItemAnnotation The instance of the line item
|
|
373
|
+
* @param converterContext The instance of the converter context
|
|
374
|
+
* @returns {Record<string, any>} The record containing all action names and their corresponding Core.OperationAvailable property paths
|
|
375
|
+
*/
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
_exports.createDefaultTableVisualization = createDefaultTableVisualization;
|
|
379
|
+
|
|
380
|
+
function getOperationAvailableMap(lineItemAnnotation, converterContext) {
|
|
381
|
+
var operationAvailableMap = {};
|
|
382
|
+
|
|
383
|
+
var addToMap = function (key, value) {
|
|
384
|
+
if (key) {
|
|
385
|
+
operationAvailableMap[key] = value;
|
|
386
|
+
}
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
if (lineItemAnnotation) {
|
|
390
|
+
lineItemAnnotation.forEach(function (dataField) {
|
|
391
|
+
if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction") {
|
|
392
|
+
var actionName = dataField.Action;
|
|
393
|
+
|
|
394
|
+
if ((actionName === null || actionName === void 0 ? void 0 : actionName.indexOf("/")) < 0 && !dataField.Determining) {
|
|
395
|
+
var _actionTarget$annotat, _actionTarget$annotat2, _actionTarget$paramet;
|
|
396
|
+
|
|
397
|
+
var actionTarget = dataField.ActionTarget;
|
|
398
|
+
|
|
399
|
+
if ((actionTarget === null || actionTarget === void 0 ? void 0 : (_actionTarget$annotat = actionTarget.annotations) === null || _actionTarget$annotat === void 0 ? void 0 : (_actionTarget$annotat2 = _actionTarget$annotat.Core) === null || _actionTarget$annotat2 === void 0 ? void 0 : _actionTarget$annotat2.OperationAvailable) === null) {
|
|
400
|
+
// Annotation explicitly configured with null (action advertisement related)
|
|
401
|
+
addToMap(actionName, null);
|
|
402
|
+
} else if (actionTarget !== null && actionTarget !== void 0 && (_actionTarget$paramet = actionTarget.parameters) !== null && _actionTarget$paramet !== void 0 && _actionTarget$paramet.length) {
|
|
403
|
+
var _actionTarget$annotat3, _actionTarget$annotat4, _actionTarget$annotat5, _actionTarget$annotat6;
|
|
404
|
+
|
|
405
|
+
var bindingParameterFullName = actionTarget.parameters[0].fullyQualifiedName,
|
|
406
|
+
targetExpression = annotationExpression(actionTarget === null || actionTarget === void 0 ? void 0 : (_actionTarget$annotat3 = actionTarget.annotations) === null || _actionTarget$annotat3 === void 0 ? void 0 : (_actionTarget$annotat4 = _actionTarget$annotat3.Core) === null || _actionTarget$annotat4 === void 0 ? void 0 : _actionTarget$annotat4.OperationAvailable, [], undefined, function (path) {
|
|
407
|
+
return bindingContextPathVisitor(path, converterContext, bindingParameterFullName);
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
if (targetExpression !== null && targetExpression !== void 0 && targetExpression.path) {
|
|
411
|
+
addToMap(actionName, targetExpression.path);
|
|
412
|
+
} else if ((actionTarget === null || actionTarget === void 0 ? void 0 : (_actionTarget$annotat5 = actionTarget.annotations) === null || _actionTarget$annotat5 === void 0 ? void 0 : (_actionTarget$annotat6 = _actionTarget$annotat5.Core) === null || _actionTarget$annotat6 === void 0 ? void 0 : _actionTarget$annotat6.OperationAvailable) !== undefined) {
|
|
413
|
+
addToMap(actionName, targetExpression);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
return operationAvailableMap;
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Method to retrieve all property paths assigned to the Core.OperationAvailable annotation.
|
|
425
|
+
*
|
|
426
|
+
* @param {Record<string, any>} operationAvailableMap The record consisting of actions and their Core.OperationAvailable property paths
|
|
427
|
+
* @param {ConverterContext} converterContext The instance of the converter context
|
|
428
|
+
* @returns {string} The CSV string of all property paths associated with the Core.OperationAvailable annotation
|
|
429
|
+
*/
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
function getOperationAvailableProperties(operationAvailableMap, converterContext) {
|
|
433
|
+
var properties = new Set();
|
|
434
|
+
|
|
435
|
+
for (var actionName in operationAvailableMap) {
|
|
436
|
+
var propertyName = operationAvailableMap[actionName];
|
|
437
|
+
|
|
438
|
+
if (propertyName === null) {
|
|
439
|
+
// Annotation configured with explicit 'null' (action advertisement relevant)
|
|
440
|
+
properties.add(actionName);
|
|
441
|
+
} else if (typeof propertyName === "string") {
|
|
442
|
+
// Add property paths and not Constant values.
|
|
443
|
+
properties.add(propertyName);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
if (properties.size) {
|
|
448
|
+
var _entityType$annotatio, _entityType$annotatio2, _entityType$annotatio3, _entityType$annotatio4, _entityType$annotatio5;
|
|
449
|
+
|
|
450
|
+
// Some actions have an operation available based on property --> we need to load the HeaderInfo.Title property
|
|
451
|
+
// so that the dialog on partial actions is displayed properly (BCP 2180271425)
|
|
452
|
+
var entityType = converterContext.getEntityType();
|
|
453
|
+
var titleProperty = (_entityType$annotatio = entityType.annotations) === null || _entityType$annotatio === void 0 ? void 0 : (_entityType$annotatio2 = _entityType$annotatio.UI) === null || _entityType$annotatio2 === void 0 ? void 0 : (_entityType$annotatio3 = _entityType$annotatio2.HeaderInfo) === null || _entityType$annotatio3 === void 0 ? void 0 : (_entityType$annotatio4 = _entityType$annotatio3.Title) === null || _entityType$annotatio4 === void 0 ? void 0 : (_entityType$annotatio5 = _entityType$annotatio4.Value) === null || _entityType$annotatio5 === void 0 ? void 0 : _entityType$annotatio5.path;
|
|
454
|
+
|
|
455
|
+
if (titleProperty) {
|
|
456
|
+
properties.add(titleProperty);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
return Array.from(properties).join(",");
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Iterates over the DataFieldForAction and DataFieldForIntentBasedNavigation of a line item and
|
|
464
|
+
* returns all the UI.Hidden annotation expressions.
|
|
465
|
+
*
|
|
466
|
+
* @param lineItemAnnotation Collection of data fields used for representation in a table or list
|
|
467
|
+
* @param currentEntityType Current entity type
|
|
468
|
+
* @param contextDataModelObjectPath Object path of the data model
|
|
469
|
+
* @param isEntitySet
|
|
470
|
+
* @returns All the `UI.Hidden` path expressions found in the relevant actions
|
|
471
|
+
*/
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
function getUIHiddenExpForActionsRequiringContext(lineItemAnnotation, currentEntityType, contextDataModelObjectPath, isEntitySet) {
|
|
475
|
+
var aUiHiddenPathExpressions = [];
|
|
476
|
+
lineItemAnnotation.forEach(function (dataField) {
|
|
477
|
+
var _dataField$ActionTarg, _dataField$Inline;
|
|
478
|
+
|
|
479
|
+
// Check if the lineItem context is the same as that of the action:
|
|
480
|
+
if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction" && dataField !== null && dataField !== void 0 && (_dataField$ActionTarg = dataField.ActionTarget) !== null && _dataField$ActionTarg !== void 0 && _dataField$ActionTarg.isBound && currentEntityType === (dataField === null || dataField === void 0 ? void 0 : dataField.ActionTarget.sourceEntityType) || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation" && dataField.RequiresContext && (dataField === null || dataField === void 0 ? void 0 : (_dataField$Inline = dataField.Inline) === null || _dataField$Inline === void 0 ? void 0 : _dataField$Inline.valueOf()) !== true) {
|
|
481
|
+
var _dataField$annotation, _dataField$annotation2, _dataField$annotation3;
|
|
482
|
+
|
|
483
|
+
if (typeof ((_dataField$annotation = dataField.annotations) === null || _dataField$annotation === void 0 ? void 0 : (_dataField$annotation2 = _dataField$annotation.UI) === null || _dataField$annotation2 === void 0 ? void 0 : (_dataField$annotation3 = _dataField$annotation2.Hidden) === null || _dataField$annotation3 === void 0 ? void 0 : _dataField$annotation3.valueOf()) === "object") {
|
|
484
|
+
aUiHiddenPathExpressions.push(equal(getBindingExpFromContext(dataField, contextDataModelObjectPath, isEntitySet), false));
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
});
|
|
488
|
+
return aUiHiddenPathExpressions;
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* This method is used to change the context currently referenced by this binding by removing the last navigation property.
|
|
492
|
+
*
|
|
493
|
+
* It is used (specifically in this case), to transform a binding made for a NavProp context /MainObject/NavProp1/NavProp2,
|
|
494
|
+
* into a binding on the previous context /MainObject/NavProp1.
|
|
495
|
+
*
|
|
496
|
+
* @param source DataFieldForAction | DataFieldForIntentBasedNavigation | CustomAction
|
|
497
|
+
* @param contextDataModelObjectPath DataModelObjectPath
|
|
498
|
+
* @param isEntitySet
|
|
499
|
+
* @returns The binding expression
|
|
500
|
+
*/
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
function getBindingExpFromContext(source, contextDataModelObjectPath, isEntitySet) {
|
|
504
|
+
var _sExpression;
|
|
505
|
+
|
|
506
|
+
var sExpression;
|
|
507
|
+
|
|
508
|
+
if ((source === null || source === void 0 ? void 0 : source.$Type) === "com.sap.vocabularies.UI.v1.DataFieldForAction" || (source === null || source === void 0 ? void 0 : source.$Type) === "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation") {
|
|
509
|
+
var _annotations, _annotations$UI;
|
|
510
|
+
|
|
511
|
+
sExpression = source === null || source === void 0 ? void 0 : (_annotations = source.annotations) === null || _annotations === void 0 ? void 0 : (_annotations$UI = _annotations.UI) === null || _annotations$UI === void 0 ? void 0 : _annotations$UI.Hidden;
|
|
512
|
+
} else {
|
|
513
|
+
sExpression = source === null || source === void 0 ? void 0 : source.visible;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
var sPath;
|
|
517
|
+
|
|
518
|
+
if ((_sExpression = sExpression) !== null && _sExpression !== void 0 && _sExpression.path) {
|
|
519
|
+
sPath = sExpression.path;
|
|
520
|
+
} else {
|
|
521
|
+
sPath = sExpression;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
if (sPath) {
|
|
525
|
+
if (source !== null && source !== void 0 && source.visible) {
|
|
526
|
+
sPath = sPath.substring(1, sPath.length - 1);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
if (sPath.indexOf("/") > 0) {
|
|
530
|
+
var _contextDataModelObje;
|
|
531
|
+
|
|
532
|
+
//check if the navigation property is correct:
|
|
533
|
+
var aSplitPath = sPath.split("/");
|
|
534
|
+
var sNavigationPath = aSplitPath[0];
|
|
535
|
+
|
|
536
|
+
if ((contextDataModelObjectPath === null || contextDataModelObjectPath === void 0 ? void 0 : (_contextDataModelObje = contextDataModelObjectPath.targetObject) === null || _contextDataModelObje === void 0 ? void 0 : _contextDataModelObje._type) === "NavigationProperty" && contextDataModelObjectPath.targetObject.partner === sNavigationPath) {
|
|
537
|
+
return bindingExpression(aSplitPath.slice(1).join("/"));
|
|
538
|
+
} else {
|
|
539
|
+
return constant(true);
|
|
540
|
+
} // In case there is no navigation property, if it's an entitySet, the expression binding has to be returned:
|
|
541
|
+
|
|
542
|
+
} else if (isEntitySet) {
|
|
543
|
+
return bindingExpression(sPath); // otherwise the expression binding cannot be taken into account for the selection mode evaluation:
|
|
544
|
+
} else {
|
|
545
|
+
return constant(true);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
return constant(true);
|
|
550
|
+
}
|
|
551
|
+
/**
|
|
552
|
+
* Loop through the DataFieldForAction and DataFieldForIntentBasedNavigation of a line item and check
|
|
553
|
+
* if at least one of them is always visible in the table toolbar (and requires a context).
|
|
554
|
+
*
|
|
555
|
+
* @param lineItemAnnotation Collection of data fields for representation in a table or list
|
|
556
|
+
* @param currentEntityType Current Entity Type
|
|
557
|
+
* @returns {boolean} `true` if there is at least 1 action that meets the criteria
|
|
558
|
+
*/
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
function hasBoundActionsAlwaysVisibleInToolBar(lineItemAnnotation, currentEntityType) {
|
|
562
|
+
return lineItemAnnotation.some(function (dataField) {
|
|
563
|
+
var _dataField$Inline2, _dataField$annotation4, _dataField$annotation5, _dataField$annotation6, _dataField$annotation7, _dataField$annotation8, _dataField$annotation9;
|
|
564
|
+
|
|
565
|
+
if ((dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation") && (dataField === null || dataField === void 0 ? void 0 : (_dataField$Inline2 = dataField.Inline) === null || _dataField$Inline2 === void 0 ? void 0 : _dataField$Inline2.valueOf()) !== true && (((_dataField$annotation4 = dataField.annotations) === null || _dataField$annotation4 === void 0 ? void 0 : (_dataField$annotation5 = _dataField$annotation4.UI) === null || _dataField$annotation5 === void 0 ? void 0 : (_dataField$annotation6 = _dataField$annotation5.Hidden) === null || _dataField$annotation6 === void 0 ? void 0 : _dataField$annotation6.valueOf()) === false || ((_dataField$annotation7 = dataField.annotations) === null || _dataField$annotation7 === void 0 ? void 0 : (_dataField$annotation8 = _dataField$annotation7.UI) === null || _dataField$annotation8 === void 0 ? void 0 : (_dataField$annotation9 = _dataField$annotation8.Hidden) === null || _dataField$annotation9 === void 0 ? void 0 : _dataField$annotation9.valueOf()) === undefined)) {
|
|
566
|
+
if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction") {
|
|
567
|
+
var _dataField$ActionTarg2;
|
|
568
|
+
|
|
569
|
+
// Check if the lineItem context is the same as that of the action:
|
|
570
|
+
return (dataField === null || dataField === void 0 ? void 0 : (_dataField$ActionTarg2 = dataField.ActionTarget) === null || _dataField$ActionTarg2 === void 0 ? void 0 : _dataField$ActionTarg2.isBound) && currentEntityType === (dataField === null || dataField === void 0 ? void 0 : dataField.ActionTarget.sourceEntityType);
|
|
571
|
+
} else if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation") {
|
|
572
|
+
return dataField.RequiresContext;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
return false;
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
function hasCustomActionsAlwaysVisibleInToolBar(manifestActions) {
|
|
581
|
+
return Object.keys(manifestActions).some(function (actionKey) {
|
|
582
|
+
var _action$visible;
|
|
583
|
+
|
|
584
|
+
var action = manifestActions[actionKey];
|
|
585
|
+
|
|
586
|
+
if (action.requiresSelection && ((_action$visible = action.visible) === null || _action$visible === void 0 ? void 0 : _action$visible.toString()) === "true") {
|
|
587
|
+
return true;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
return false;
|
|
591
|
+
});
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Iterates over the custom actions (with key requiresSelection) declared in the manifest for the current line item and returns all the
|
|
595
|
+
* visible key values as an expression.
|
|
596
|
+
*
|
|
597
|
+
* @param manifestActions The actions defined in the manifest
|
|
598
|
+
* @returns Array<Expression<boolean>> All the visible path expressions of the actions that meet the criteria
|
|
599
|
+
*/
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
function getVisibleExpForCustomActionsRequiringContext(manifestActions) {
|
|
603
|
+
var aVisiblePathExpressions = [];
|
|
604
|
+
|
|
605
|
+
if (manifestActions) {
|
|
606
|
+
Object.keys(manifestActions).forEach(function (actionKey) {
|
|
607
|
+
var action = manifestActions[actionKey];
|
|
608
|
+
|
|
609
|
+
if (action.requiresSelection === true && action.visible !== undefined) {
|
|
610
|
+
if (typeof action.visible === "string") {
|
|
611
|
+
var _action$visible2;
|
|
612
|
+
|
|
613
|
+
/*The final aim would be to check if the path expression depends on the parent context
|
|
614
|
+
and considers only those expressions for the expression evaluation,
|
|
615
|
+
but currently not possible from the manifest as the visible key is bound on the parent entity.
|
|
616
|
+
Tricky to differentiate the path as it's done for the Hidden annotation.
|
|
617
|
+
For the time being we consider all the paths of the manifest*/
|
|
618
|
+
aVisiblePathExpressions.push(resolveBindingString(action === null || action === void 0 ? void 0 : (_action$visible2 = action.visible) === null || _action$visible2 === void 0 ? void 0 : _action$visible2.valueOf()));
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
});
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
return aVisiblePathExpressions;
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* Evaluate if the path is statically deletable or updatable.
|
|
628
|
+
*
|
|
629
|
+
* @param converterContext
|
|
630
|
+
* @returns {TableCapabilityRestriction} The table capabilities
|
|
631
|
+
*/
|
|
632
|
+
|
|
633
|
+
|
|
634
|
+
function getCapabilityRestriction(converterContext) {
|
|
635
|
+
var isDeletable = isPathDeletable(converterContext.getDataModelObjectPath());
|
|
636
|
+
var isUpdatable = isPathUpdatable(converterContext.getDataModelObjectPath());
|
|
637
|
+
return {
|
|
638
|
+
isDeletable: !(isConstant(isDeletable) && isDeletable.value === false),
|
|
639
|
+
isUpdatable: !(isConstant(isUpdatable) && isUpdatable.value === false)
|
|
640
|
+
};
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
_exports.getCapabilityRestriction = getCapabilityRestriction;
|
|
644
|
+
|
|
645
|
+
function getSelectionMode(lineItemAnnotation, visualizationPath, converterContext, isEntitySet, targetCapabilities) {
|
|
646
|
+
var _tableManifestSetting;
|
|
647
|
+
|
|
648
|
+
if (!lineItemAnnotation) {
|
|
649
|
+
return SelectionMode.None;
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
var tableManifestSettings = converterContext.getManifestControlConfiguration(visualizationPath);
|
|
653
|
+
var selectionMode = (_tableManifestSetting = tableManifestSettings.tableSettings) === null || _tableManifestSetting === void 0 ? void 0 : _tableManifestSetting.selectionMode;
|
|
654
|
+
var aHiddenBindingExpressions = [],
|
|
655
|
+
aVisibleBindingExpressions = [];
|
|
656
|
+
var manifestActions = getActionsFromManifest(converterContext.getManifestControlConfiguration(visualizationPath).actions, converterContext, [], undefined, false);
|
|
657
|
+
var isParentDeletable, parentEntitySetDeletable;
|
|
658
|
+
|
|
659
|
+
if (converterContext.getTemplateType() === TemplateType.ObjectPage) {
|
|
660
|
+
isParentDeletable = isPathDeletable(converterContext.getDataModelObjectPath(), undefined);
|
|
661
|
+
parentEntitySetDeletable = isParentDeletable ? compileBinding(isParentDeletable, true) : isParentDeletable;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
if (selectionMode && selectionMode === SelectionMode.None) {
|
|
665
|
+
if (!isEntitySet) {
|
|
666
|
+
if (targetCapabilities.isDeletable || parentEntitySetDeletable !== "false") {
|
|
667
|
+
selectionMode = SelectionMode.Multi;
|
|
668
|
+
return compileBinding(ifElse(equal(bindingExpression("/editMode", "ui"), "Editable"), constant(selectionMode), constant("None")));
|
|
669
|
+
} else {
|
|
670
|
+
selectionMode = SelectionMode.None;
|
|
671
|
+
}
|
|
672
|
+
} else if (isEntitySet) {
|
|
673
|
+
if (targetCapabilities.isDeletable) {
|
|
674
|
+
selectionMode = SelectionMode.Multi;
|
|
675
|
+
return selectionMode;
|
|
676
|
+
} else {
|
|
677
|
+
selectionMode = SelectionMode.None;
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
} else if (!selectionMode || selectionMode === SelectionMode.Auto) {
|
|
681
|
+
selectionMode = SelectionMode.Multi;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
if (hasBoundActionsAlwaysVisibleInToolBar(lineItemAnnotation, converterContext.getEntityType()) || hasCustomActionsAlwaysVisibleInToolBar(manifestActions)) {
|
|
685
|
+
return selectionMode;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
aHiddenBindingExpressions = getUIHiddenExpForActionsRequiringContext(lineItemAnnotation, converterContext.getEntityType(), converterContext.getDataModelObjectPath(), isEntitySet);
|
|
689
|
+
aVisibleBindingExpressions = getVisibleExpForCustomActionsRequiringContext(manifestActions); // No action requiring a context:
|
|
690
|
+
|
|
691
|
+
if (aHiddenBindingExpressions.length === 0 && aVisibleBindingExpressions.length === 0) {
|
|
692
|
+
if (!isEntitySet) {
|
|
693
|
+
if (targetCapabilities.isDeletable || parentEntitySetDeletable !== "false") {
|
|
694
|
+
return compileBinding(ifElse(equal(bindingExpression("/editMode", "ui"), "Editable"), constant(selectionMode), constant(SelectionMode.None)));
|
|
695
|
+
} else {
|
|
696
|
+
return SelectionMode.None;
|
|
697
|
+
} // EntitySet deletable:
|
|
698
|
+
|
|
699
|
+
} else if (targetCapabilities.isDeletable) {
|
|
700
|
+
return selectionMode; // EntitySet not deletable:
|
|
701
|
+
} else {
|
|
702
|
+
return SelectionMode.None;
|
|
703
|
+
} // There are actions requiring a context:
|
|
704
|
+
|
|
705
|
+
} else if (!isEntitySet) {
|
|
706
|
+
if (targetCapabilities.isDeletable || parentEntitySetDeletable !== "false") {
|
|
707
|
+
return compileBinding(ifElse(equal(bindingExpression("/editMode", "ui"), "Editable"), constant(selectionMode), ifElse(or.apply(void 0, _toConsumableArray(aHiddenBindingExpressions.concat(aVisibleBindingExpressions))), constant(selectionMode), constant(SelectionMode.None))));
|
|
708
|
+
} else {
|
|
709
|
+
return compileBinding(ifElse(or.apply(void 0, _toConsumableArray(aHiddenBindingExpressions.concat(aVisibleBindingExpressions))), constant(selectionMode), constant(SelectionMode.None)));
|
|
710
|
+
} //EntitySet deletable:
|
|
711
|
+
|
|
712
|
+
} else if (targetCapabilities.isDeletable) {
|
|
713
|
+
return SelectionMode.Multi; //EntitySet not deletable:
|
|
714
|
+
} else {
|
|
715
|
+
return compileBinding(ifElse(or.apply(void 0, _toConsumableArray(aHiddenBindingExpressions.concat(aVisibleBindingExpressions))), constant(selectionMode), constant(SelectionMode.None)));
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
/**
|
|
719
|
+
* Method to retrieve all table actions from annotations.
|
|
720
|
+
*
|
|
721
|
+
* @param lineItemAnnotation
|
|
722
|
+
* @param visualizationPath
|
|
723
|
+
* @param converterContext
|
|
724
|
+
* @returns {Record<BaseAction, BaseAction>} The table annotation actions
|
|
725
|
+
*/
|
|
726
|
+
|
|
727
|
+
|
|
728
|
+
_exports.getSelectionMode = getSelectionMode;
|
|
729
|
+
|
|
730
|
+
function getTableAnnotationActions(lineItemAnnotation, visualizationPath, converterContext) {
|
|
731
|
+
var tableActions = [];
|
|
732
|
+
var hiddenTableActions = [];
|
|
733
|
+
|
|
734
|
+
if (lineItemAnnotation) {
|
|
735
|
+
lineItemAnnotation.forEach(function (dataField) {
|
|
736
|
+
var _dataField$annotation10, _dataField$annotation11, _dataField$annotation12, _dataField$annotation13, _dataField$annotation14, _dataField$annotation15, _dataField$annotation16, _dataField$annotation17, _dataField$annotation18, _dataField$annotation19;
|
|
737
|
+
|
|
738
|
+
var tableAction;
|
|
739
|
+
|
|
740
|
+
if (isDataFieldForActionAbstract(dataField) && !(((_dataField$annotation10 = dataField.annotations) === null || _dataField$annotation10 === void 0 ? void 0 : (_dataField$annotation11 = _dataField$annotation10.UI) === null || _dataField$annotation11 === void 0 ? void 0 : (_dataField$annotation12 = _dataField$annotation11.Hidden) === null || _dataField$annotation12 === void 0 ? void 0 : _dataField$annotation12.valueOf()) === true) && !dataField.Inline && !dataField.Determining) {
|
|
741
|
+
var key = KeyHelper.generateKeyFromDataField(dataField);
|
|
742
|
+
|
|
743
|
+
switch (dataField.$Type) {
|
|
744
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForAction":
|
|
745
|
+
tableAction = {
|
|
746
|
+
type: ActionType.DataFieldForAction,
|
|
747
|
+
annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
|
|
748
|
+
key: key,
|
|
749
|
+
visible: compileBinding(not(equal(annotationExpression((_dataField$annotation13 = dataField.annotations) === null || _dataField$annotation13 === void 0 ? void 0 : (_dataField$annotation14 = _dataField$annotation13.UI) === null || _dataField$annotation14 === void 0 ? void 0 : _dataField$annotation14.Hidden, [], undefined, converterContext.getRelativeModelPathFunction()), true))),
|
|
750
|
+
isNavigable: true
|
|
751
|
+
};
|
|
752
|
+
break;
|
|
753
|
+
|
|
754
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation":
|
|
755
|
+
tableAction = {
|
|
756
|
+
type: ActionType.DataFieldForIntentBasedNavigation,
|
|
757
|
+
annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
|
|
758
|
+
key: key,
|
|
759
|
+
visible: compileBinding(not(equal(annotationExpression((_dataField$annotation15 = dataField.annotations) === null || _dataField$annotation15 === void 0 ? void 0 : (_dataField$annotation16 = _dataField$annotation15.UI) === null || _dataField$annotation16 === void 0 ? void 0 : _dataField$annotation16.Hidden, [], undefined, converterContext.getRelativeModelPathFunction()), true)))
|
|
760
|
+
};
|
|
761
|
+
break;
|
|
762
|
+
|
|
763
|
+
default:
|
|
764
|
+
break;
|
|
765
|
+
}
|
|
766
|
+
} else if (((_dataField$annotation17 = dataField.annotations) === null || _dataField$annotation17 === void 0 ? void 0 : (_dataField$annotation18 = _dataField$annotation17.UI) === null || _dataField$annotation18 === void 0 ? void 0 : (_dataField$annotation19 = _dataField$annotation18.Hidden) === null || _dataField$annotation19 === void 0 ? void 0 : _dataField$annotation19.valueOf()) === true) {
|
|
767
|
+
hiddenTableActions.push({
|
|
768
|
+
type: ActionType.Default,
|
|
769
|
+
key: KeyHelper.generateKeyFromDataField(dataField)
|
|
770
|
+
});
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
if (tableAction) {
|
|
774
|
+
tableActions.push(tableAction);
|
|
775
|
+
}
|
|
776
|
+
});
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
return {
|
|
780
|
+
tableActions: tableActions,
|
|
781
|
+
hiddenTableActions: hiddenTableActions
|
|
782
|
+
};
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
function getHighlightRowBinding(criticalityAnnotation, isDraftRoot, targetEntityType) {
|
|
786
|
+
var defaultHighlightRowDefinition = MessageType.None;
|
|
787
|
+
|
|
788
|
+
if (criticalityAnnotation) {
|
|
789
|
+
if (typeof criticalityAnnotation === "object") {
|
|
790
|
+
defaultHighlightRowDefinition = annotationExpression(criticalityAnnotation);
|
|
791
|
+
} else {
|
|
792
|
+
// Enum Value so we get the corresponding static part
|
|
793
|
+
defaultHighlightRowDefinition = getMessageTypeFromCriticalityType(criticalityAnnotation);
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
return ifElse(isDraftRoot && Draft.IsNewObject, MessageType.Information, formatResult([defaultHighlightRowDefinition, bindingExpression("filteredMessages", "internal")], tableFormatters.rowHighlighting, targetEntityType));
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
function _getCreationBehaviour(lineItemAnnotation, tableManifestConfiguration, converterContext, navigationSettings) {
|
|
801
|
+
var _newAction2;
|
|
802
|
+
|
|
803
|
+
var navigation = (navigationSettings === null || navigationSettings === void 0 ? void 0 : navigationSettings.create) || (navigationSettings === null || navigationSettings === void 0 ? void 0 : navigationSettings.detail); // cross-app
|
|
804
|
+
|
|
805
|
+
if (navigation !== null && navigation !== void 0 && navigation.outbound && navigation.outboundDetail && navigationSettings !== null && navigationSettings !== void 0 && navigationSettings.create) {
|
|
806
|
+
return {
|
|
807
|
+
mode: "External",
|
|
808
|
+
outbound: navigation.outbound,
|
|
809
|
+
outboundDetail: navigation.outboundDetail,
|
|
810
|
+
navigationSettings: navigationSettings
|
|
811
|
+
};
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
var newAction;
|
|
815
|
+
|
|
816
|
+
if (lineItemAnnotation) {
|
|
817
|
+
var _converterContext$get, _targetAnnotations$Co, _targetAnnotations$Co2, _targetAnnotations$Se, _targetAnnotations$Se2;
|
|
818
|
+
|
|
819
|
+
// in-app
|
|
820
|
+
var targetAnnotations = (_converterContext$get = converterContext.getEntitySet()) === null || _converterContext$get === void 0 ? void 0 : _converterContext$get.annotations;
|
|
821
|
+
newAction = (targetAnnotations === null || targetAnnotations === void 0 ? void 0 : (_targetAnnotations$Co = targetAnnotations.Common) === null || _targetAnnotations$Co === void 0 ? void 0 : (_targetAnnotations$Co2 = _targetAnnotations$Co.DraftRoot) === null || _targetAnnotations$Co2 === void 0 ? void 0 : _targetAnnotations$Co2.NewAction) || (targetAnnotations === null || targetAnnotations === void 0 ? void 0 : (_targetAnnotations$Se = targetAnnotations.Session) === null || _targetAnnotations$Se === void 0 ? void 0 : (_targetAnnotations$Se2 = _targetAnnotations$Se.StickySessionSupported) === null || _targetAnnotations$Se2 === void 0 ? void 0 : _targetAnnotations$Se2.NewAction); // TODO: Is there really no 'NewAction' on DraftNode? targetAnnotations?.Common?.DraftNode?.NewAction
|
|
822
|
+
|
|
823
|
+
if (tableManifestConfiguration.creationMode === CreationMode.CreationRow && newAction) {
|
|
824
|
+
// A combination of 'CreationRow' and 'NewAction' does not make sense
|
|
825
|
+
// TODO: Or does it?
|
|
826
|
+
throw Error("Creation mode '".concat(CreationMode.CreationRow, "' can not be used with a custom 'new' action (").concat(newAction, ")"));
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
if (navigation !== null && navigation !== void 0 && navigation.route) {
|
|
830
|
+
var _newAction;
|
|
831
|
+
|
|
832
|
+
// route specified
|
|
833
|
+
return {
|
|
834
|
+
mode: tableManifestConfiguration.creationMode,
|
|
835
|
+
append: tableManifestConfiguration.createAtEnd,
|
|
836
|
+
newAction: (_newAction = newAction) === null || _newAction === void 0 ? void 0 : _newAction.toString(),
|
|
837
|
+
navigateToTarget: tableManifestConfiguration.creationMode === CreationMode.NewPage ? navigation.route : undefined // navigate only in NewPage mode
|
|
838
|
+
|
|
839
|
+
};
|
|
840
|
+
}
|
|
841
|
+
} // no navigation or no route specified - fallback to inline create if original creation mode was 'NewPage'
|
|
842
|
+
|
|
843
|
+
|
|
844
|
+
if (tableManifestConfiguration.creationMode === CreationMode.NewPage) {
|
|
845
|
+
tableManifestConfiguration.creationMode = CreationMode.Inline;
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
return {
|
|
849
|
+
mode: tableManifestConfiguration.creationMode,
|
|
850
|
+
append: tableManifestConfiguration.createAtEnd,
|
|
851
|
+
newAction: (_newAction2 = newAction) === null || _newAction2 === void 0 ? void 0 : _newAction2.toString()
|
|
852
|
+
};
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
var _getRowConfigurationProperty = function (lineItemAnnotation, visualizationPath, converterContext, navigationSettings, targetPath) {
|
|
856
|
+
var pressProperty, navigationTarget;
|
|
857
|
+
var criticalityProperty = MessageType.None;
|
|
858
|
+
var targetEntityType = converterContext.getEntityType();
|
|
859
|
+
|
|
860
|
+
if (navigationSettings && lineItemAnnotation) {
|
|
861
|
+
var _navigationSettings$d, _navigationSettings$d2;
|
|
862
|
+
|
|
863
|
+
navigationTarget = ((_navigationSettings$d = navigationSettings.display) === null || _navigationSettings$d === void 0 ? void 0 : _navigationSettings$d.target) || ((_navigationSettings$d2 = navigationSettings.detail) === null || _navigationSettings$d2 === void 0 ? void 0 : _navigationSettings$d2.outbound);
|
|
864
|
+
|
|
865
|
+
if (navigationTarget) {
|
|
866
|
+
pressProperty = ".handlers.onChevronPressNavigateOutBound( $controller ,'" + navigationTarget + "', ${$parameters>bindingContext})";
|
|
867
|
+
} else if (targetEntityType) {
|
|
868
|
+
var _navigationSettings$d3;
|
|
869
|
+
|
|
870
|
+
var targetEntitySet = converterContext.getEntitySet();
|
|
871
|
+
navigationTarget = (_navigationSettings$d3 = navigationSettings.detail) === null || _navigationSettings$d3 === void 0 ? void 0 : _navigationSettings$d3.route;
|
|
872
|
+
|
|
873
|
+
if (navigationTarget) {
|
|
874
|
+
var _lineItemAnnotation$a, _lineItemAnnotation$a2, _targetEntitySet$anno, _targetEntitySet$anno2, _targetEntitySet$anno3, _targetEntitySet$anno4, _targetEntitySet$anno5, _targetEntitySet$anno6, _targetEntitySet$anno7, _targetEntitySet$anno8;
|
|
875
|
+
|
|
876
|
+
criticalityProperty = getHighlightRowBinding((_lineItemAnnotation$a = lineItemAnnotation.annotations) === null || _lineItemAnnotation$a === void 0 ? void 0 : (_lineItemAnnotation$a2 = _lineItemAnnotation$a.UI) === null || _lineItemAnnotation$a2 === void 0 ? void 0 : _lineItemAnnotation$a2.Criticality, !!(targetEntitySet !== null && targetEntitySet !== void 0 && (_targetEntitySet$anno = targetEntitySet.annotations) !== null && _targetEntitySet$anno !== void 0 && (_targetEntitySet$anno2 = _targetEntitySet$anno.Common) !== null && _targetEntitySet$anno2 !== void 0 && _targetEntitySet$anno2.DraftRoot) || !!(targetEntitySet !== null && targetEntitySet !== void 0 && (_targetEntitySet$anno3 = targetEntitySet.annotations) !== null && _targetEntitySet$anno3 !== void 0 && (_targetEntitySet$anno4 = _targetEntitySet$anno3.Common) !== null && _targetEntitySet$anno4 !== void 0 && _targetEntitySet$anno4.DraftNode), targetEntityType);
|
|
877
|
+
pressProperty = "API.onTableRowPress($event, $controller, ${$parameters>bindingContext}, { callExtension: true, targetPath: '" + targetPath + "', editable : " + (targetEntitySet !== null && targetEntitySet !== void 0 && (_targetEntitySet$anno5 = targetEntitySet.annotations) !== null && _targetEntitySet$anno5 !== void 0 && (_targetEntitySet$anno6 = _targetEntitySet$anno5.Common) !== null && _targetEntitySet$anno6 !== void 0 && _targetEntitySet$anno6.DraftRoot || targetEntitySet !== null && targetEntitySet !== void 0 && (_targetEntitySet$anno7 = targetEntitySet.annotations) !== null && _targetEntitySet$anno7 !== void 0 && (_targetEntitySet$anno8 = _targetEntitySet$anno7.Common) !== null && _targetEntitySet$anno8 !== void 0 && _targetEntitySet$anno8.DraftNode ? "!${$parameters>bindingContext}.getProperty('IsActiveEntity')" : "undefined") + "})"; //Need to access to DraftRoot and DraftNode !!!!!!!
|
|
878
|
+
} else {
|
|
879
|
+
var _lineItemAnnotation$a3, _lineItemAnnotation$a4;
|
|
880
|
+
|
|
881
|
+
criticalityProperty = getHighlightRowBinding((_lineItemAnnotation$a3 = lineItemAnnotation.annotations) === null || _lineItemAnnotation$a3 === void 0 ? void 0 : (_lineItemAnnotation$a4 = _lineItemAnnotation$a3.UI) === null || _lineItemAnnotation$a4 === void 0 ? void 0 : _lineItemAnnotation$a4.Criticality, false, targetEntityType);
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
var rowNavigatedExpression = formatResult([bindingExpression("/deepestPath", "internal")], tableFormatters.navigatedRow, targetEntityType);
|
|
887
|
+
return {
|
|
888
|
+
press: pressProperty,
|
|
889
|
+
action: pressProperty ? "Navigation" : undefined,
|
|
890
|
+
rowHighlighting: compileBinding(criticalityProperty),
|
|
891
|
+
rowNavigated: compileBinding(rowNavigatedExpression)
|
|
892
|
+
};
|
|
893
|
+
};
|
|
894
|
+
/**
|
|
895
|
+
* Retrieve the columns from the entityType.
|
|
896
|
+
*
|
|
897
|
+
* @param columnsToBeCreated The columns to be created.
|
|
898
|
+
* @param entityType The target entity type.
|
|
899
|
+
* @param annotationColumns The array of columns created based on LineItem annotations.
|
|
900
|
+
* @param nonSortableColumns The array of all non sortable column names.
|
|
901
|
+
* @param converterContext The converter context.
|
|
902
|
+
* @param tableType The table type.
|
|
903
|
+
* @returns {AnnotationTableColumn[]} The column from the entityType
|
|
904
|
+
*/
|
|
905
|
+
|
|
906
|
+
|
|
907
|
+
var getColumnsFromEntityType = function (columnsToBeCreated, entityType) {
|
|
908
|
+
var annotationColumns = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
909
|
+
var nonSortableColumns = arguments.length > 3 ? arguments[3] : undefined;
|
|
910
|
+
var converterContext = arguments.length > 4 ? arguments[4] : undefined;
|
|
911
|
+
var tableType = arguments.length > 5 ? arguments[5] : undefined;
|
|
912
|
+
var tableColumns = []; // Catch already existing columns - which were added before by LineItem Annotations
|
|
913
|
+
|
|
914
|
+
var aggregationHelper = new AggregationHelper(entityType, converterContext);
|
|
915
|
+
entityType.entityProperties.forEach(function (property) {
|
|
916
|
+
// Catch already existing columns - which were added before by LineItem Annotations
|
|
917
|
+
var exists = annotationColumns.some(function (column) {
|
|
918
|
+
return column.name === property.name;
|
|
919
|
+
}); // if target type exists, it is a complex property and should be ignored
|
|
920
|
+
|
|
921
|
+
if (!property.targetType && !exists) {
|
|
922
|
+
var relatedPropertiesInfo = collectRelatedProperties(property.name, property, converterContext, true, tableType);
|
|
923
|
+
var relatedPropertyNames = Object.keys(relatedPropertiesInfo.properties);
|
|
924
|
+
var additionalPropertyNames = Object.keys(relatedPropertiesInfo.additionalProperties);
|
|
925
|
+
var columnInfo = getColumnDefinitionFromProperty(property, converterContext.getEntitySetBasedAnnotationPath(property.fullyQualifiedName), property.name, true, true, nonSortableColumns, aggregationHelper, converterContext);
|
|
926
|
+
|
|
927
|
+
if (relatedPropertyNames.length > 0) {
|
|
928
|
+
columnInfo.propertyInfos = relatedPropertyNames;
|
|
929
|
+
columnInfo.exportSettings = _objectSpread(_objectSpread({}, columnInfo.exportSettings), {}, {
|
|
930
|
+
template: relatedPropertiesInfo.exportSettingsTemplate,
|
|
931
|
+
wrap: relatedPropertiesInfo.exportSettingsWrapping
|
|
932
|
+
}); // Collect information of related columns to be created.
|
|
933
|
+
|
|
934
|
+
relatedPropertyNames.forEach(function (name) {
|
|
935
|
+
columnsToBeCreated[name] = relatedPropertiesInfo.properties[name];
|
|
936
|
+
});
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
if (additionalPropertyNames.length > 0) {
|
|
940
|
+
columnInfo.additionalPropertyInfos = additionalPropertyNames; // Create columns for additional properties identified for ALP use case.
|
|
941
|
+
|
|
942
|
+
additionalPropertyNames.forEach(function (name) {
|
|
943
|
+
// Intentional overwrite as we require only one new PropertyInfo for a related Property.
|
|
944
|
+
columnsToBeCreated[name] = relatedPropertiesInfo.additionalProperties[name];
|
|
945
|
+
});
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
tableColumns.push(columnInfo);
|
|
949
|
+
}
|
|
950
|
+
});
|
|
951
|
+
return tableColumns;
|
|
952
|
+
};
|
|
953
|
+
/**
|
|
954
|
+
* Create a column definition from a property.
|
|
955
|
+
* @param {Property} property Entity type property for which the column is created
|
|
956
|
+
* @param {string} fullPropertyPath The full path to the target property
|
|
957
|
+
* @param {string} relativePath The relative path to the target property based on the context
|
|
958
|
+
* @param {boolean} useDataFieldPrefix Should be prefixed with "DataField::", else it will be prefixed with "Property::"
|
|
959
|
+
* @param {boolean} availableForAdaptation Decides whether column should be available for adaptation
|
|
960
|
+
* @param {string[]} nonSortableColumns The array of all non sortable column names
|
|
961
|
+
* @param {AggregationHelper} aggregationHelper The aggregationHelper for the entity
|
|
962
|
+
* @param {ConverterContext} converterContext The converter context
|
|
963
|
+
* @returns {AnnotationTableColumn} The annotation column definition
|
|
964
|
+
*/
|
|
965
|
+
|
|
966
|
+
|
|
967
|
+
_exports.getColumnsFromEntityType = getColumnsFromEntityType;
|
|
968
|
+
|
|
969
|
+
var getColumnDefinitionFromProperty = function (property, fullPropertyPath, relativePath, useDataFieldPrefix, availableForAdaptation, nonSortableColumns, aggregationHelper, converterContext) {
|
|
970
|
+
var _property$annotations, _property$annotations2, _property$annotations3, _annotations2, _annotations2$UI, _annotations2$UI$Data, _annotations2$UI$Data2, _annotations2$UI$Data3, _annotations2$UI$Data4;
|
|
971
|
+
|
|
972
|
+
var name = useDataFieldPrefix ? relativePath : "Property::" + relativePath;
|
|
973
|
+
var key = (useDataFieldPrefix ? "DataField::" : "Property::") + replaceSpecialChars(relativePath);
|
|
974
|
+
var semanticObjectAnnotationPath = getSemanticObjectPath(converterContext, property);
|
|
975
|
+
var isHidden = ((_property$annotations = property.annotations) === null || _property$annotations === void 0 ? void 0 : (_property$annotations2 = _property$annotations.UI) === null || _property$annotations2 === void 0 ? void 0 : (_property$annotations3 = _property$annotations2.Hidden) === null || _property$annotations3 === void 0 ? void 0 : _property$annotations3.valueOf()) === true;
|
|
976
|
+
var groupPath = property.name ? _sliceAtSlash(property.name, true, false) : undefined;
|
|
977
|
+
var isGroup = groupPath != property.name;
|
|
978
|
+
var isDataPointFakeProperty = name.indexOf("@com.sap.vocabularies.UI.v1.DataPoint") > -1;
|
|
979
|
+
var exportSettings = isDataPointFakeProperty ? {
|
|
980
|
+
template: getTargetValueOnDataPoint(property)
|
|
981
|
+
} : undefined;
|
|
982
|
+
return {
|
|
983
|
+
key: key,
|
|
984
|
+
isGroupable: !isDataPointFakeProperty && !isHidden ? aggregationHelper.isPropertyGroupable(property) : false,
|
|
985
|
+
type: ColumnType.Annotation,
|
|
986
|
+
label: _getLabel(property, isGroup),
|
|
987
|
+
groupLabel: isGroup ? _getLabel(property) : null,
|
|
988
|
+
group: isGroup ? groupPath : null,
|
|
989
|
+
annotationPath: fullPropertyPath,
|
|
990
|
+
semanticObjectPath: semanticObjectAnnotationPath,
|
|
991
|
+
// A fake property was created for the TargetValue used on DataPoints, this property should be hidden and non sortable
|
|
992
|
+
availability: !availableForAdaptation || isHidden || isDataPointFakeProperty ? AvailabilityType.Hidden : AvailabilityType.Adaptation,
|
|
993
|
+
name: name,
|
|
994
|
+
relativePath: isDataPointFakeProperty ? ((_annotations2 = property.annotations) === null || _annotations2 === void 0 ? void 0 : (_annotations2$UI = _annotations2.UI) === null || _annotations2$UI === void 0 ? void 0 : (_annotations2$UI$Data = _annotations2$UI.DataFieldDefault) === null || _annotations2$UI$Data === void 0 ? void 0 : (_annotations2$UI$Data2 = _annotations2$UI$Data.Target) === null || _annotations2$UI$Data2 === void 0 ? void 0 : (_annotations2$UI$Data3 = _annotations2$UI$Data2.$target) === null || _annotations2$UI$Data3 === void 0 ? void 0 : (_annotations2$UI$Data4 = _annotations2$UI$Data3.Value) === null || _annotations2$UI$Data4 === void 0 ? void 0 : _annotations2$UI$Data4.path) || property.Value.path : relativePath,
|
|
995
|
+
sortable: !isHidden && nonSortableColumns.indexOf(relativePath) === -1 && !isDataPointFakeProperty,
|
|
996
|
+
isKey: property.isKey,
|
|
997
|
+
isDataPointFakeTargetProperty: isDataPointFakeProperty,
|
|
998
|
+
exportSettings: exportSettings
|
|
999
|
+
};
|
|
1000
|
+
};
|
|
1001
|
+
/**
|
|
1002
|
+
* Returns boolean true for valid columns, false for invalid columns.
|
|
1003
|
+
*
|
|
1004
|
+
* @param {DataFieldAbstractTypes} dataField Different DataField types defined in the annotations
|
|
1005
|
+
* @returns {boolean} True for valid columns, false for invalid columns
|
|
1006
|
+
* @private
|
|
1007
|
+
*/
|
|
1008
|
+
|
|
1009
|
+
|
|
1010
|
+
var _isValidColumn = function (dataField) {
|
|
1011
|
+
switch (dataField.$Type) {
|
|
1012
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForAction":
|
|
1013
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation":
|
|
1014
|
+
return !!dataField.Inline;
|
|
1015
|
+
|
|
1016
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithAction":
|
|
1017
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation":
|
|
1018
|
+
return false;
|
|
1019
|
+
|
|
1020
|
+
case "com.sap.vocabularies.UI.v1.DataField":
|
|
1021
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithUrl":
|
|
1022
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForAnnotation":
|
|
1023
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath":
|
|
1024
|
+
return true;
|
|
1025
|
+
|
|
1026
|
+
default: // Todo: Replace with proper Log statement once available
|
|
1027
|
+
// throw new Error("Unhandled DataField Abstract type: " + dataField.$Type);
|
|
1028
|
+
|
|
1029
|
+
}
|
|
1030
|
+
};
|
|
1031
|
+
/**
|
|
1032
|
+
* Returns label for property and dataField.
|
|
1033
|
+
* @param {DataFieldAbstractTypes | Property} property Entity type property or DataField defined in the annotations
|
|
1034
|
+
* @param isGroup
|
|
1035
|
+
* @returns {string} Label of the property or DataField
|
|
1036
|
+
* @private
|
|
1037
|
+
*/
|
|
1038
|
+
|
|
1039
|
+
|
|
1040
|
+
var _getLabel = function (property) {
|
|
1041
|
+
var isGroup = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1042
|
+
|
|
1043
|
+
if (!property) {
|
|
1044
|
+
return undefined;
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
if (isProperty(property)) {
|
|
1048
|
+
var _property$annotations4, _property$annotations5, _dataFieldDefault$Lab, _property$annotations6, _property$annotations7;
|
|
1049
|
+
|
|
1050
|
+
var dataFieldDefault = (_property$annotations4 = property.annotations) === null || _property$annotations4 === void 0 ? void 0 : (_property$annotations5 = _property$annotations4.UI) === null || _property$annotations5 === void 0 ? void 0 : _property$annotations5.DataFieldDefault;
|
|
1051
|
+
|
|
1052
|
+
if (dataFieldDefault && !dataFieldDefault.qualifier && (_dataFieldDefault$Lab = dataFieldDefault.Label) !== null && _dataFieldDefault$Lab !== void 0 && _dataFieldDefault$Lab.valueOf()) {
|
|
1053
|
+
var _dataFieldDefault$Lab2;
|
|
1054
|
+
|
|
1055
|
+
return compileBinding(annotationExpression((_dataFieldDefault$Lab2 = dataFieldDefault.Label) === null || _dataFieldDefault$Lab2 === void 0 ? void 0 : _dataFieldDefault$Lab2.valueOf()));
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
return compileBinding(annotationExpression(((_property$annotations6 = property.annotations.Common) === null || _property$annotations6 === void 0 ? void 0 : (_property$annotations7 = _property$annotations6.Label) === null || _property$annotations7 === void 0 ? void 0 : _property$annotations7.valueOf()) || property.name));
|
|
1059
|
+
} else if (isDataFieldTypes(property)) {
|
|
1060
|
+
var _property$Label2, _property$Value, _property$Value$$targ, _property$Value$$targ2, _property$Value$$targ3, _property$Value$$targ4, _property$Value2, _property$Value2$$tar;
|
|
1061
|
+
|
|
1062
|
+
if (!!isGroup && property.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation") {
|
|
1063
|
+
var _property$Label;
|
|
1064
|
+
|
|
1065
|
+
return compileBinding(annotationExpression((_property$Label = property.Label) === null || _property$Label === void 0 ? void 0 : _property$Label.valueOf()));
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
return compileBinding(annotationExpression(((_property$Label2 = property.Label) === null || _property$Label2 === void 0 ? void 0 : _property$Label2.valueOf()) || ((_property$Value = property.Value) === null || _property$Value === void 0 ? void 0 : (_property$Value$$targ = _property$Value.$target) === null || _property$Value$$targ === void 0 ? void 0 : (_property$Value$$targ2 = _property$Value$$targ.annotations) === null || _property$Value$$targ2 === void 0 ? void 0 : (_property$Value$$targ3 = _property$Value$$targ2.Common) === null || _property$Value$$targ3 === void 0 ? void 0 : (_property$Value$$targ4 = _property$Value$$targ3.Label) === null || _property$Value$$targ4 === void 0 ? void 0 : _property$Value$$targ4.valueOf()) || ((_property$Value2 = property.Value) === null || _property$Value2 === void 0 ? void 0 : (_property$Value2$$tar = _property$Value2.$target) === null || _property$Value2$$tar === void 0 ? void 0 : _property$Value2$$tar.name)));
|
|
1069
|
+
} else if (property.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation") {
|
|
1070
|
+
var _property$Label3, _property$Target, _property$Target$$tar, _property$Target$$tar2, _property$Target$$tar3, _property$Target$$tar4, _property$Target$$tar5, _property$Target$$tar6;
|
|
1071
|
+
|
|
1072
|
+
return compileBinding(annotationExpression(((_property$Label3 = property.Label) === null || _property$Label3 === void 0 ? void 0 : _property$Label3.valueOf()) || ((_property$Target = property.Target) === null || _property$Target === void 0 ? void 0 : (_property$Target$$tar = _property$Target.$target) === null || _property$Target$$tar === void 0 ? void 0 : (_property$Target$$tar2 = _property$Target$$tar.Value) === null || _property$Target$$tar2 === void 0 ? void 0 : (_property$Target$$tar3 = _property$Target$$tar2.$target) === null || _property$Target$$tar3 === void 0 ? void 0 : (_property$Target$$tar4 = _property$Target$$tar3.annotations) === null || _property$Target$$tar4 === void 0 ? void 0 : (_property$Target$$tar5 = _property$Target$$tar4.Common) === null || _property$Target$$tar5 === void 0 ? void 0 : (_property$Target$$tar6 = _property$Target$$tar5.Label) === null || _property$Target$$tar6 === void 0 ? void 0 : _property$Target$$tar6.valueOf())));
|
|
1073
|
+
} else {
|
|
1074
|
+
var _property$Label4;
|
|
1075
|
+
|
|
1076
|
+
return compileBinding(annotationExpression((_property$Label4 = property.Label) === null || _property$Label4 === void 0 ? void 0 : _property$Label4.valueOf()));
|
|
1077
|
+
}
|
|
1078
|
+
};
|
|
1079
|
+
/**
|
|
1080
|
+
* Creates a PropertyInfo for each identified property consumed by a LineItem.
|
|
1081
|
+
*
|
|
1082
|
+
* @param {Record<string, Property>} columnsToBeCreated Identified properties.
|
|
1083
|
+
* @param existingColumns The list of columns created for LineItems and Properties of entityType.
|
|
1084
|
+
* @param nonSortableColumns The array of column names which cannot be sorted.
|
|
1085
|
+
* @param converterContext The converter context.
|
|
1086
|
+
* @param entityType The entity type for the LineItem
|
|
1087
|
+
* @returns {AnnotationTableColumn[]} The array of columns created.
|
|
1088
|
+
*/
|
|
1089
|
+
|
|
1090
|
+
|
|
1091
|
+
var _createRelatedColumns = function (columnsToBeCreated, existingColumns, nonSortableColumns, converterContext, entityType) {
|
|
1092
|
+
var relatedColumns = [];
|
|
1093
|
+
var relatedPropertyNameMap = {};
|
|
1094
|
+
var aggregationHelper = new AggregationHelper(entityType, converterContext);
|
|
1095
|
+
Object.keys(columnsToBeCreated).forEach(function (name) {
|
|
1096
|
+
var property = columnsToBeCreated[name],
|
|
1097
|
+
annotationPath = converterContext.getAbsoluteAnnotationPath(name),
|
|
1098
|
+
// Check whether the related column already exists.
|
|
1099
|
+
relatedColumn = existingColumns.find(function (column) {
|
|
1100
|
+
return column.name === name;
|
|
1101
|
+
});
|
|
1102
|
+
|
|
1103
|
+
if (relatedColumn === undefined) {
|
|
1104
|
+
// Case 1: Key contains DataField prefix to ensure all property columns have the same key format.
|
|
1105
|
+
// New created property column is set to hidden.
|
|
1106
|
+
relatedColumns.push(getColumnDefinitionFromProperty(property, annotationPath, name, true, false, nonSortableColumns, aggregationHelper, converterContext));
|
|
1107
|
+
} else if (relatedColumn.annotationPath !== annotationPath || relatedColumn.propertyInfos && relatedColumn.propertyInfos.indexOf(name) !== -1) {
|
|
1108
|
+
// Case 2: The existing column points to a LineItem (or)
|
|
1109
|
+
// Case 3: This is a self reference from an existing column and
|
|
1110
|
+
// both cases require a dummy PropertyInfo for setting correct export settings.
|
|
1111
|
+
var newName = "Property::" + name; // Checking whether the related property column has already been created in a previous iteration.
|
|
1112
|
+
|
|
1113
|
+
if (!existingColumns.some(function (column) {
|
|
1114
|
+
return column.name === newName;
|
|
1115
|
+
})) {
|
|
1116
|
+
// Create a new property column with 'Property::' prefix,
|
|
1117
|
+
// Set it to hidden as it is only consumed by Complex property infos.
|
|
1118
|
+
relatedColumns.push(getColumnDefinitionFromProperty(property, annotationPath, name, false, false, nonSortableColumns, aggregationHelper, converterContext));
|
|
1119
|
+
relatedPropertyNameMap[name] = newName;
|
|
1120
|
+
}
|
|
1121
|
+
}
|
|
1122
|
+
}); // The property 'name' has been prefixed with 'Property::' for uniqueness.
|
|
1123
|
+
// Update the same in other propertyInfos[] references which point to this property.
|
|
1124
|
+
|
|
1125
|
+
existingColumns.forEach(function (column) {
|
|
1126
|
+
var _column$propertyInfos, _column$additionalPro;
|
|
1127
|
+
|
|
1128
|
+
column.propertyInfos = (_column$propertyInfos = column.propertyInfos) === null || _column$propertyInfos === void 0 ? void 0 : _column$propertyInfos.map(function (propertyInfo) {
|
|
1129
|
+
var _relatedPropertyNameM;
|
|
1130
|
+
|
|
1131
|
+
return (_relatedPropertyNameM = relatedPropertyNameMap[propertyInfo]) !== null && _relatedPropertyNameM !== void 0 ? _relatedPropertyNameM : propertyInfo;
|
|
1132
|
+
});
|
|
1133
|
+
column.additionalPropertyInfos = (_column$additionalPro = column.additionalPropertyInfos) === null || _column$additionalPro === void 0 ? void 0 : _column$additionalPro.map(function (propertyInfo) {
|
|
1134
|
+
var _relatedPropertyNameM2;
|
|
1135
|
+
|
|
1136
|
+
return (_relatedPropertyNameM2 = relatedPropertyNameMap[propertyInfo]) !== null && _relatedPropertyNameM2 !== void 0 ? _relatedPropertyNameM2 : propertyInfo;
|
|
1137
|
+
});
|
|
1138
|
+
});
|
|
1139
|
+
return relatedColumns;
|
|
1140
|
+
};
|
|
1141
|
+
/**
|
|
1142
|
+
* Getting the Column Name
|
|
1143
|
+
* If it points to a DataField with one property or DataPoint with one property, it will use the property name
|
|
1144
|
+
* here to be consistent with the existing flex changes.
|
|
1145
|
+
*
|
|
1146
|
+
* @param {DataFieldAbstractTypes} dataField Different DataField types defined in the annotations
|
|
1147
|
+
* @returns {string} The name of annotation columns
|
|
1148
|
+
* @private
|
|
1149
|
+
*/
|
|
1150
|
+
|
|
1151
|
+
|
|
1152
|
+
var _getAnnotationColumnName = function (dataField) {
|
|
1153
|
+
var _dataField$Target, _dataField$Target$$ta, _dataField$Target$$ta2;
|
|
1154
|
+
|
|
1155
|
+
// This is needed as we have flexibility changes already that we have to check against
|
|
1156
|
+
if (isDataFieldTypes(dataField)) {
|
|
1157
|
+
var _dataField$Value;
|
|
1158
|
+
|
|
1159
|
+
return (_dataField$Value = dataField.Value) === null || _dataField$Value === void 0 ? void 0 : _dataField$Value.path;
|
|
1160
|
+
} else if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation" && (_dataField$Target = dataField.Target) !== null && _dataField$Target !== void 0 && (_dataField$Target$$ta = _dataField$Target.$target) !== null && _dataField$Target$$ta !== void 0 && (_dataField$Target$$ta2 = _dataField$Target$$ta.Value) !== null && _dataField$Target$$ta2 !== void 0 && _dataField$Target$$ta2.path) {
|
|
1161
|
+
var _dataField$Target2, _dataField$Target2$$t;
|
|
1162
|
+
|
|
1163
|
+
// This is for removing duplicate properties. For example, 'Progress' Property is removed if it is already defined as a DataPoint
|
|
1164
|
+
return (_dataField$Target2 = dataField.Target) === null || _dataField$Target2 === void 0 ? void 0 : (_dataField$Target2$$t = _dataField$Target2.$target) === null || _dataField$Target2$$t === void 0 ? void 0 : _dataField$Target2$$t.Value.path;
|
|
1165
|
+
} else {
|
|
1166
|
+
return KeyHelper.generateKeyFromDataField(dataField);
|
|
1167
|
+
}
|
|
1168
|
+
};
|
|
1169
|
+
/**
|
|
1170
|
+
* Determines the relative path of the property with respect to the root entity.
|
|
1171
|
+
* @param dataField The `DataField` being processed.
|
|
1172
|
+
* @returns {string} The relative path
|
|
1173
|
+
*/
|
|
1174
|
+
|
|
1175
|
+
|
|
1176
|
+
var _getRelativePath = function (dataField) {
|
|
1177
|
+
var _Value, _Target;
|
|
1178
|
+
|
|
1179
|
+
var relativePath = "";
|
|
1180
|
+
|
|
1181
|
+
switch (dataField.$Type) {
|
|
1182
|
+
case "com.sap.vocabularies.UI.v1.DataField":
|
|
1183
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath":
|
|
1184
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithUrl":
|
|
1185
|
+
relativePath = dataField === null || dataField === void 0 ? void 0 : (_Value = dataField.Value) === null || _Value === void 0 ? void 0 : _Value.path;
|
|
1186
|
+
break;
|
|
1187
|
+
|
|
1188
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForAnnotation":
|
|
1189
|
+
relativePath = dataField === null || dataField === void 0 ? void 0 : (_Target = dataField.Target) === null || _Target === void 0 ? void 0 : _Target.value;
|
|
1190
|
+
break;
|
|
1191
|
+
|
|
1192
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForAction":
|
|
1193
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation":
|
|
1194
|
+
relativePath = KeyHelper.generateKeyFromDataField(dataField);
|
|
1195
|
+
break;
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
return relativePath;
|
|
1199
|
+
};
|
|
1200
|
+
|
|
1201
|
+
var _sliceAtSlash = function (path, isLastSlash, isLastPart) {
|
|
1202
|
+
var iSlashIndex = isLastSlash ? path.lastIndexOf("/") : path.indexOf("/");
|
|
1203
|
+
|
|
1204
|
+
if (iSlashIndex === -1) {
|
|
1205
|
+
return path;
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
return isLastPart ? path.substring(iSlashIndex + 1, path.length) : path.substring(0, iSlashIndex);
|
|
1209
|
+
};
|
|
1210
|
+
/**
|
|
1211
|
+
* Determine whether a column is sortable.
|
|
1212
|
+
*
|
|
1213
|
+
* @param dataField The data field being processed
|
|
1214
|
+
* @param propertyPath The property path
|
|
1215
|
+
* @param nonSortableColumns Collection of non-sortable column names as per annotation
|
|
1216
|
+
* @returns {boolean} True if the column is sortable
|
|
1217
|
+
*/
|
|
1218
|
+
|
|
1219
|
+
|
|
1220
|
+
var _isColumnSortable = function (dataField, propertyPath, nonSortableColumns) {
|
|
1221
|
+
var isSortable = false;
|
|
1222
|
+
|
|
1223
|
+
if (nonSortableColumns.indexOf(propertyPath) === -1) {
|
|
1224
|
+
// Column is not marked as non-sortable via annotation
|
|
1225
|
+
switch (dataField.$Type) {
|
|
1226
|
+
case "com.sap.vocabularies.UI.v1.DataField":
|
|
1227
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithUrl":
|
|
1228
|
+
isSortable = true;
|
|
1229
|
+
break;
|
|
1230
|
+
|
|
1231
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation":
|
|
1232
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForAction":
|
|
1233
|
+
// Action columns are not sortable
|
|
1234
|
+
isSortable = false;
|
|
1235
|
+
break;
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
return isSortable;
|
|
1240
|
+
};
|
|
1241
|
+
/**
|
|
1242
|
+
* Returns default format options for text fields in a table.
|
|
1243
|
+
*
|
|
1244
|
+
* @returns {FormatOptionsType} Collection of format options with default values
|
|
1245
|
+
*/
|
|
1246
|
+
|
|
1247
|
+
|
|
1248
|
+
function getDefaultFormatOptionsForTable() {
|
|
1249
|
+
return {
|
|
1250
|
+
textLinesEdit: 4
|
|
1251
|
+
};
|
|
1252
|
+
}
|
|
1253
|
+
/**
|
|
1254
|
+
* Returns line items from metadata annotations.
|
|
1255
|
+
*
|
|
1256
|
+
* @param {LineItem} lineItemAnnotation Collection of data fields with their annotations
|
|
1257
|
+
* @param {string} visualizationPath The visualization path
|
|
1258
|
+
* @param {ConverterContext} converterContext The converter context
|
|
1259
|
+
* @returns {TableColumn[]} The columns from the annotations
|
|
1260
|
+
*/
|
|
1261
|
+
|
|
1262
|
+
|
|
1263
|
+
var getColumnsFromAnnotations = function (lineItemAnnotation, visualizationPath, converterContext) {
|
|
1264
|
+
var _map, _converterContext$get2, _converterContext$get3, _converterContext$get4, _converterContext$get5, _converterContext$get6, _tableManifestSetting2;
|
|
1265
|
+
|
|
1266
|
+
var entityType = converterContext.getAnnotationEntityType(lineItemAnnotation),
|
|
1267
|
+
annotationColumns = [],
|
|
1268
|
+
columnsToBeCreated = {},
|
|
1269
|
+
nonSortableColumns = (_map = (_converterContext$get2 = converterContext.getEntitySet()) === null || _converterContext$get2 === void 0 ? void 0 : (_converterContext$get3 = _converterContext$get2.annotations) === null || _converterContext$get3 === void 0 ? void 0 : (_converterContext$get4 = _converterContext$get3.Capabilities) === null || _converterContext$get4 === void 0 ? void 0 : (_converterContext$get5 = _converterContext$get4.SortRestrictions) === null || _converterContext$get5 === void 0 ? void 0 : (_converterContext$get6 = _converterContext$get5.NonSortableProperties) === null || _converterContext$get6 === void 0 ? void 0 : _converterContext$get6.map(function (property) {
|
|
1270
|
+
return property.value;
|
|
1271
|
+
})) !== null && _map !== void 0 ? _map : [],
|
|
1272
|
+
tableManifestSettings = converterContext.getManifestControlConfiguration(visualizationPath),
|
|
1273
|
+
tableType = (tableManifestSettings === null || tableManifestSettings === void 0 ? void 0 : (_tableManifestSetting2 = tableManifestSettings.tableSettings) === null || _tableManifestSetting2 === void 0 ? void 0 : _tableManifestSetting2.type) || "ResponsiveTable";
|
|
1274
|
+
|
|
1275
|
+
if (lineItemAnnotation) {
|
|
1276
|
+
// Get columns from the LineItem Annotation
|
|
1277
|
+
lineItemAnnotation.forEach(function (lineItem) {
|
|
1278
|
+
var _lineItem$Value, _lineItem$Value$$targ, _lineItem$annotations, _lineItem$annotations2, _lineItem$annotations3;
|
|
1279
|
+
|
|
1280
|
+
if (!_isValidColumn(lineItem)) {
|
|
1281
|
+
return;
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
var semanticObjectAnnotationPath = isDataFieldTypes(lineItem) && (_lineItem$Value = lineItem.Value) !== null && _lineItem$Value !== void 0 && (_lineItem$Value$$targ = _lineItem$Value.$target) !== null && _lineItem$Value$$targ !== void 0 && _lineItem$Value$$targ.fullyQualifiedName ? getSemanticObjectPath(converterContext, lineItem) : undefined;
|
|
1285
|
+
|
|
1286
|
+
var relativePath = _getRelativePath(lineItem); // Determine properties which are consumed by this LineItem.
|
|
1287
|
+
|
|
1288
|
+
|
|
1289
|
+
var relatedPropertiesInfo = collectRelatedPropertiesRecursively(lineItem, converterContext, tableType);
|
|
1290
|
+
var relatedPropertyNames = Object.keys(relatedPropertiesInfo.properties);
|
|
1291
|
+
var additionalPropertyNames = Object.keys(relatedPropertiesInfo.additionalProperties);
|
|
1292
|
+
|
|
1293
|
+
var groupPath = _sliceAtSlash(relativePath, true, false);
|
|
1294
|
+
|
|
1295
|
+
var isGroup = groupPath != relativePath;
|
|
1296
|
+
|
|
1297
|
+
var sLabel = _getLabel(lineItem, isGroup);
|
|
1298
|
+
|
|
1299
|
+
var name = _getAnnotationColumnName(lineItem);
|
|
1300
|
+
|
|
1301
|
+
annotationColumns.push({
|
|
1302
|
+
key: KeyHelper.generateKeyFromDataField(lineItem),
|
|
1303
|
+
type: ColumnType.Annotation,
|
|
1304
|
+
label: sLabel,
|
|
1305
|
+
groupLabel: isGroup ? _getLabel(lineItem) : null,
|
|
1306
|
+
group: isGroup ? groupPath : null,
|
|
1307
|
+
annotationPath: converterContext.getEntitySetBasedAnnotationPath(lineItem.fullyQualifiedName),
|
|
1308
|
+
semanticObjectPath: semanticObjectAnnotationPath,
|
|
1309
|
+
availability: isDataFieldAlwaysHidden(lineItem) ? AvailabilityType.Hidden : AvailabilityType.Default,
|
|
1310
|
+
name: name,
|
|
1311
|
+
relativePath: relativePath,
|
|
1312
|
+
sortable: _isColumnSortable(lineItem, relativePath, nonSortableColumns),
|
|
1313
|
+
propertyInfos: relatedPropertyNames.length > 0 ? relatedPropertyNames : undefined,
|
|
1314
|
+
additionalPropertyInfos: additionalPropertyNames.length > 0 ? additionalPropertyNames : undefined,
|
|
1315
|
+
exportSettings: {
|
|
1316
|
+
template: relatedPropertiesInfo.exportSettingsTemplate,
|
|
1317
|
+
wrap: relatedPropertiesInfo.exportSettingsWrapping
|
|
1318
|
+
},
|
|
1319
|
+
width: ((_lineItem$annotations = lineItem.annotations) === null || _lineItem$annotations === void 0 ? void 0 : (_lineItem$annotations2 = _lineItem$annotations.HTML5) === null || _lineItem$annotations2 === void 0 ? void 0 : (_lineItem$annotations3 = _lineItem$annotations2.CssDefaults) === null || _lineItem$annotations3 === void 0 ? void 0 : _lineItem$annotations3.width) || undefined,
|
|
1320
|
+
isNavigable: true,
|
|
1321
|
+
formatOptions: getDefaultFormatOptionsForTable(),
|
|
1322
|
+
exportContactProperty: relatedPropertiesInfo.exportSettingsContactProperty
|
|
1323
|
+
}); // Collect information of related columns to be created.
|
|
1324
|
+
|
|
1325
|
+
relatedPropertyNames.forEach(function (name) {
|
|
1326
|
+
columnsToBeCreated[name] = relatedPropertiesInfo.properties[name];
|
|
1327
|
+
}); // Create columns for additional properties identified for ALP use case.
|
|
1328
|
+
|
|
1329
|
+
additionalPropertyNames.forEach(function (name) {
|
|
1330
|
+
// Intentional overwrite as we require only one new PropertyInfo for a related Property.
|
|
1331
|
+
columnsToBeCreated[name] = relatedPropertiesInfo.additionalProperties[name];
|
|
1332
|
+
});
|
|
1333
|
+
});
|
|
1334
|
+
} // Get columns from the Properties of EntityType
|
|
1335
|
+
|
|
1336
|
+
|
|
1337
|
+
var tableColumns = getColumnsFromEntityType(columnsToBeCreated, entityType, annotationColumns, nonSortableColumns, converterContext, tableType);
|
|
1338
|
+
tableColumns = tableColumns.concat(annotationColumns); // Create a propertyInfo for each related property.
|
|
1339
|
+
|
|
1340
|
+
var relatedColumns = _createRelatedColumns(columnsToBeCreated, tableColumns, nonSortableColumns, converterContext, entityType);
|
|
1341
|
+
|
|
1342
|
+
tableColumns = tableColumns.concat(relatedColumns);
|
|
1343
|
+
return tableColumns;
|
|
1344
|
+
};
|
|
1345
|
+
/**
|
|
1346
|
+
* Gets the property names from the manifest and checks against existing properties already added by annotations.
|
|
1347
|
+
* If a not yet stored property is found it adds it for sorting and filtering only to the annotationColumns.
|
|
1348
|
+
* @param {string[] | undefined} properties
|
|
1349
|
+
* @param {AnnotationTableColumn[]} annotationColumns
|
|
1350
|
+
* @param {ConverterContext} converterContext
|
|
1351
|
+
* @param entityType
|
|
1352
|
+
* @returns {string[]} The columns from the annotations
|
|
1353
|
+
*/
|
|
1354
|
+
|
|
1355
|
+
|
|
1356
|
+
var _getPropertyNames = function (properties, annotationColumns, converterContext, entityType) {
|
|
1357
|
+
var matchedProperties;
|
|
1358
|
+
|
|
1359
|
+
if (properties) {
|
|
1360
|
+
matchedProperties = properties.map(function (propertyPath) {
|
|
1361
|
+
var annotationColumn = annotationColumns.find(function (annotationColumn) {
|
|
1362
|
+
return annotationColumn.relativePath === propertyPath && annotationColumn.propertyInfos === undefined;
|
|
1363
|
+
});
|
|
1364
|
+
|
|
1365
|
+
if (annotationColumn) {
|
|
1366
|
+
return annotationColumn.name;
|
|
1367
|
+
} else {
|
|
1368
|
+
var relatedColumns = _createRelatedColumns(_defineProperty({}, propertyPath, entityType.resolvePath(propertyPath)), annotationColumns, [], converterContext, entityType);
|
|
1369
|
+
|
|
1370
|
+
annotationColumns.push(relatedColumns[0]);
|
|
1371
|
+
return relatedColumns[0].name;
|
|
1372
|
+
}
|
|
1373
|
+
});
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
return matchedProperties;
|
|
1377
|
+
};
|
|
1378
|
+
|
|
1379
|
+
var _appendCustomTemplate = function (properties) {
|
|
1380
|
+
return properties.map(function (property) {
|
|
1381
|
+
return "{".concat(properties.indexOf(property), "}");
|
|
1382
|
+
}).join("\n");
|
|
1383
|
+
};
|
|
1384
|
+
/**
|
|
1385
|
+
* Retrieves the table column property value based on certain conditions.
|
|
1386
|
+
*
|
|
1387
|
+
* Manifest defined property value for custom / annotation columns
|
|
1388
|
+
* Default property value for custom column if not overwritten in manifest.
|
|
1389
|
+
*
|
|
1390
|
+
* @param {any} property The column property defined in the manifest
|
|
1391
|
+
* @param {any} defaultValue The default value of the property
|
|
1392
|
+
* @param {boolean} isAnnotationColumn Whether the column, defined in manifest, corresponds to an existing annotation column.
|
|
1393
|
+
* @returns {any} Determined property value for the column
|
|
1394
|
+
*/
|
|
1395
|
+
|
|
1396
|
+
|
|
1397
|
+
var _getManifestOrDefaultValue = function (property, defaultValue, isAnnotationColumn) {
|
|
1398
|
+
if (property === undefined) {
|
|
1399
|
+
// If annotation column has no property defined in manifest,
|
|
1400
|
+
// do not overwrite it with manifest column's default value.
|
|
1401
|
+
return isAnnotationColumn ? undefined : defaultValue;
|
|
1402
|
+
} // Return what is defined in manifest.
|
|
1403
|
+
|
|
1404
|
+
|
|
1405
|
+
return property;
|
|
1406
|
+
};
|
|
1407
|
+
/**
|
|
1408
|
+
* Returns table column definitions from manifest.
|
|
1409
|
+
* @param columns
|
|
1410
|
+
* @param annotationColumns
|
|
1411
|
+
* @param converterContext
|
|
1412
|
+
* @param entityType
|
|
1413
|
+
* @param navigationSettings
|
|
1414
|
+
* @returns {Record<string, CustomColumn>} The columns from the manifest
|
|
1415
|
+
*/
|
|
1416
|
+
|
|
1417
|
+
|
|
1418
|
+
var getColumnsFromManifest = function (columns, annotationColumns, converterContext, entityType, navigationSettings) {
|
|
1419
|
+
var internalColumns = {};
|
|
1420
|
+
|
|
1421
|
+
var _loop = function (key) {
|
|
1422
|
+
var _manifestColumn$posit;
|
|
1423
|
+
|
|
1424
|
+
var manifestColumn = columns[key]; // To identify the annotation column property overwrite via manifest use-case.
|
|
1425
|
+
|
|
1426
|
+
var isAnnotationColumn = annotationColumns.some(function (column) {
|
|
1427
|
+
return column.key === key;
|
|
1428
|
+
});
|
|
1429
|
+
KeyHelper.validateKey(key);
|
|
1430
|
+
|
|
1431
|
+
var propertyInfos = _getPropertyNames(manifestColumn.properties, annotationColumns, converterContext, entityType);
|
|
1432
|
+
|
|
1433
|
+
internalColumns[key] = {
|
|
1434
|
+
key: key,
|
|
1435
|
+
id: "CustomColumn::" + key,
|
|
1436
|
+
name: "CustomColumn::" + key,
|
|
1437
|
+
header: manifestColumn.header,
|
|
1438
|
+
width: manifestColumn.width || undefined,
|
|
1439
|
+
horizontalAlign: _getManifestOrDefaultValue(manifestColumn === null || manifestColumn === void 0 ? void 0 : manifestColumn.horizontalAlign, HorizontalAlign.Begin, isAnnotationColumn),
|
|
1440
|
+
type: manifestColumn.type === "Slot" ? ColumnType.Slot : ColumnType.Default,
|
|
1441
|
+
availability: _getManifestOrDefaultValue(manifestColumn === null || manifestColumn === void 0 ? void 0 : manifestColumn.availability, AvailabilityType.Default, isAnnotationColumn),
|
|
1442
|
+
template: manifestColumn.template || "undefined",
|
|
1443
|
+
position: {
|
|
1444
|
+
anchor: (_manifestColumn$posit = manifestColumn.position) === null || _manifestColumn$posit === void 0 ? void 0 : _manifestColumn$posit.anchor,
|
|
1445
|
+
placement: manifestColumn.position === undefined ? Placement.After : manifestColumn.position.placement
|
|
1446
|
+
},
|
|
1447
|
+
isNavigable: isAnnotationColumn ? undefined : isActionNavigable(manifestColumn, navigationSettings, true),
|
|
1448
|
+
settings: manifestColumn.settings,
|
|
1449
|
+
sortable: false,
|
|
1450
|
+
propertyInfos: propertyInfos,
|
|
1451
|
+
formatOptions: _objectSpread(_objectSpread({}, getDefaultFormatOptionsForTable()), manifestColumn.formatOptions),
|
|
1452
|
+
exportSettings: {
|
|
1453
|
+
template: propertyInfos ? _appendCustomTemplate(propertyInfos) : undefined,
|
|
1454
|
+
fieldLabel: propertyInfos ? manifestColumn.header : undefined,
|
|
1455
|
+
wrap: propertyInfos && propertyInfos.length > 1 ? true : false
|
|
1456
|
+
}
|
|
1457
|
+
};
|
|
1458
|
+
};
|
|
1459
|
+
|
|
1460
|
+
for (var key in columns) {
|
|
1461
|
+
_loop(key);
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
return internalColumns;
|
|
1465
|
+
};
|
|
1466
|
+
|
|
1467
|
+
function getP13nMode(visualizationPath, converterContext, tableManifestConfiguration) {
|
|
1468
|
+
var _tableManifestSetting3;
|
|
1469
|
+
|
|
1470
|
+
var manifestWrapper = converterContext.getManifestWrapper();
|
|
1471
|
+
var tableManifestSettings = converterContext.getManifestControlConfiguration(visualizationPath);
|
|
1472
|
+
var variantManagement = manifestWrapper.getVariantManagement();
|
|
1473
|
+
var aPersonalization = [];
|
|
1474
|
+
var bAnalyticalTable = tableManifestConfiguration.type === "AnalyticalTable";
|
|
1475
|
+
|
|
1476
|
+
if ((tableManifestSettings === null || tableManifestSettings === void 0 ? void 0 : (_tableManifestSetting3 = tableManifestSettings.tableSettings) === null || _tableManifestSetting3 === void 0 ? void 0 : _tableManifestSetting3.personalization) !== undefined) {
|
|
1477
|
+
// Personalization configured in manifest.
|
|
1478
|
+
var personalization = tableManifestSettings.tableSettings.personalization;
|
|
1479
|
+
|
|
1480
|
+
if (personalization === true) {
|
|
1481
|
+
// Table personalization fully enabled.
|
|
1482
|
+
return bAnalyticalTable ? "Sort,Column,Filter,Group,Aggregate" : "Sort,Column,Filter";
|
|
1483
|
+
} else if (typeof personalization === "object") {
|
|
1484
|
+
// Specific personalization options enabled in manifest. Use them as is.
|
|
1485
|
+
if (personalization.sort) {
|
|
1486
|
+
aPersonalization.push("Sort");
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
if (personalization.column) {
|
|
1490
|
+
aPersonalization.push("Column");
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
if (personalization.filter) {
|
|
1494
|
+
aPersonalization.push("Filter");
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
if (personalization.group && bAnalyticalTable) {
|
|
1498
|
+
aPersonalization.push("Group");
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1501
|
+
if (personalization.aggregate && bAnalyticalTable) {
|
|
1502
|
+
aPersonalization.push("Aggregate");
|
|
1503
|
+
}
|
|
1504
|
+
|
|
1505
|
+
return aPersonalization.length > 0 ? aPersonalization.join(",") : undefined;
|
|
1506
|
+
}
|
|
1507
|
+
} else {
|
|
1508
|
+
// No personalization configured in manifest.
|
|
1509
|
+
aPersonalization.push("Sort");
|
|
1510
|
+
aPersonalization.push("Column");
|
|
1511
|
+
|
|
1512
|
+
if (variantManagement === VariantManagementType.Control) {
|
|
1513
|
+
// Feature parity with V2.
|
|
1514
|
+
// Enable table filtering by default only in case of Control level variant management.
|
|
1515
|
+
aPersonalization.push("Filter");
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1518
|
+
if (bAnalyticalTable) {
|
|
1519
|
+
aPersonalization.push("Group");
|
|
1520
|
+
aPersonalization.push("Aggregate");
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
return aPersonalization.join(",");
|
|
1524
|
+
}
|
|
1525
|
+
|
|
1526
|
+
return undefined;
|
|
1527
|
+
}
|
|
1528
|
+
/**
|
|
1529
|
+
* Function to determine the visibility of the Delete button.
|
|
1530
|
+
*
|
|
1531
|
+
* @param converterContext The instance of the converter context
|
|
1532
|
+
* @param navigationPath Path to the navigation entity
|
|
1533
|
+
* @param isTargetDeletable Flag which determines whether a target is deletable
|
|
1534
|
+
* @param viewConfiguration The instance of the configuration for the view path
|
|
1535
|
+
* @returns {BindingExpression<boolean>} The binding expression for the Delete button
|
|
1536
|
+
*/
|
|
1537
|
+
|
|
1538
|
+
|
|
1539
|
+
_exports.getP13nMode = getP13nMode;
|
|
1540
|
+
|
|
1541
|
+
function getDeleteVisible(converterContext, navigationPath, isTargetDeletable, viewConfiguration) {
|
|
1542
|
+
var _currentEntitySet$ann;
|
|
1543
|
+
|
|
1544
|
+
var currentEntitySet = converterContext.getEntitySet();
|
|
1545
|
+
var dataModelObjectPath = converterContext.getDataModelObjectPath();
|
|
1546
|
+
var visitedNavigationPaths = dataModelObjectPath.navigationProperties.map(function (navProp) {
|
|
1547
|
+
return navProp.name;
|
|
1548
|
+
});
|
|
1549
|
+
var isDeleteHiddenExpression = currentEntitySet ? annotationExpression((currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann = currentEntitySet.annotations.UI) === null || _currentEntitySet$ann === void 0 ? void 0 : _currentEntitySet$ann.DeleteHidden) || false, visitedNavigationPaths, undefined, function (path) {
|
|
1550
|
+
return singletonPathVisitor(path, converterContext, visitedNavigationPaths);
|
|
1551
|
+
}) : constant(false);
|
|
1552
|
+
var isDeleteHidden = compileBinding(isDeleteHiddenExpression);
|
|
1553
|
+
var isParentDeletable, parentEntitySetDeletable;
|
|
1554
|
+
|
|
1555
|
+
if (converterContext.getTemplateType() === TemplateType.ObjectPage) {
|
|
1556
|
+
isParentDeletable = isPathDeletable(converterContext.getDataModelObjectPath(), navigationPath);
|
|
1557
|
+
parentEntitySetDeletable = isParentDeletable ? compileBinding(isParentDeletable) : isParentDeletable;
|
|
1558
|
+
} //do not show case the delete button if parentEntitySetDeletable is false
|
|
1559
|
+
|
|
1560
|
+
|
|
1561
|
+
if (parentEntitySetDeletable === "false") {
|
|
1562
|
+
return false;
|
|
1563
|
+
} else if (parentEntitySetDeletable && isDeleteHidden !== "true") {
|
|
1564
|
+
//Delete Hidden in case of true and path based
|
|
1565
|
+
if (isDeleteHidden && isDeleteHidden !== "false") {
|
|
1566
|
+
return "{= !$" + isDeleteHidden + " && ${ui>/editMode} === 'Editable'}";
|
|
1567
|
+
} else {
|
|
1568
|
+
return "{= ${ui>/editMode} === 'Editable'}";
|
|
1569
|
+
}
|
|
1570
|
+
} else if (isDeleteHidden === "true" || !isTargetDeletable || viewConfiguration && converterContext.getManifestWrapper().hasMultipleVisualizations(viewConfiguration) || converterContext.getTemplateType() === TemplateType.AnalyticalListPage) {
|
|
1571
|
+
return false;
|
|
1572
|
+
} else if (converterContext.getTemplateType() !== TemplateType.ListReport) {
|
|
1573
|
+
if (isDeleteHidden && isDeleteHidden === "false") {
|
|
1574
|
+
return "{= !$" + isDeleteHidden + " && ${ui>/editMode} === 'Editable'}";
|
|
1575
|
+
} else {
|
|
1576
|
+
return "{= ${ui>/editMode} === 'Editable'}";
|
|
1577
|
+
}
|
|
1578
|
+
} else if (isBinding(isDeleteHiddenExpression)) {
|
|
1579
|
+
// UI.DeleteHidden annotation points to a path
|
|
1580
|
+
return compileBinding(not(isDeleteHiddenExpression));
|
|
1581
|
+
} else {
|
|
1582
|
+
return true;
|
|
1583
|
+
}
|
|
1584
|
+
}
|
|
1585
|
+
/**
|
|
1586
|
+
* Returns the enablement for the 'Mass Edit' button
|
|
1587
|
+
*
|
|
1588
|
+
* @param converterContext The converterContext
|
|
1589
|
+
* @param bMassEditVisible The visibility of the 'Mass Edit' button
|
|
1590
|
+
* @returns {*} Expression or Boolean value for the enablement of the 'Mass Edit' button
|
|
1591
|
+
*/
|
|
1592
|
+
|
|
1593
|
+
|
|
1594
|
+
_exports.getDeleteVisible = getDeleteVisible;
|
|
1595
|
+
|
|
1596
|
+
function getEnablementMassEdit(converterContext, bMassEditVisible) {
|
|
1597
|
+
if (bMassEditVisible) {
|
|
1598
|
+
var isParentUpdatable = isPathUpdatable(converterContext.getDataModelObjectPath(), undefined, true); //when updatable is path based and pointing to current entity set property, that case is handled in table helper and runtime
|
|
1599
|
+
|
|
1600
|
+
if (isParentUpdatable !== null && isParentUpdatable !== void 0 && isParentUpdatable.currentEntityRestriction) {
|
|
1601
|
+
return false;
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
var oExpression = compileBinding(isParentUpdatable);
|
|
1605
|
+
return isParentUpdatable ? "{= %{internal>numberOfSelectedContexts} >= 2 && " + compileBinding(isParentUpdatable, oExpression) + "}" : false;
|
|
1606
|
+
}
|
|
1607
|
+
|
|
1608
|
+
return false;
|
|
1609
|
+
}
|
|
1610
|
+
/**
|
|
1611
|
+
* Returns the visibility for the 'Mass Edit' button
|
|
1612
|
+
*
|
|
1613
|
+
* @param converterContext The converterContext
|
|
1614
|
+
* @param tableManifestConfiguration The manifest configuration for the table
|
|
1615
|
+
* @param targetCapabilities The target capability restrictions for the table
|
|
1616
|
+
* @param selectionMode The selection mode for the table
|
|
1617
|
+
* @returns {*} Expression or Boolean value for the visibility of the 'Mass Edit' button
|
|
1618
|
+
*/
|
|
1619
|
+
|
|
1620
|
+
|
|
1621
|
+
_exports.getEnablementMassEdit = getEnablementMassEdit;
|
|
1622
|
+
|
|
1623
|
+
function getVisibilityMassEdit(converterContext, tableManifestConfiguration, targetCapabilities, selectionMode) {
|
|
1624
|
+
var _entitySet$annotation, _entitySet$annotation2;
|
|
1625
|
+
|
|
1626
|
+
var entitySet = converterContext.getEntitySet(),
|
|
1627
|
+
bUpdateHidden = entitySet && (entitySet === null || entitySet === void 0 ? void 0 : (_entitySet$annotation = entitySet.annotations.UI) === null || _entitySet$annotation === void 0 ? void 0 : (_entitySet$annotation2 = _entitySet$annotation.UpdateHidden) === null || _entitySet$annotation2 === void 0 ? void 0 : _entitySet$annotation2.valueOf()),
|
|
1628
|
+
bMassEditEnabled = (tableManifestConfiguration === null || tableManifestConfiguration === void 0 ? void 0 : tableManifestConfiguration.enableMassEdit) || false,
|
|
1629
|
+
iSelectionLimit = tableManifestConfiguration === null || tableManifestConfiguration === void 0 ? void 0 : tableManifestConfiguration.selectionLimit;
|
|
1630
|
+
var bMassEditVisible = true;
|
|
1631
|
+
|
|
1632
|
+
if (selectionMode && selectionMode === "Single" || iSelectionLimit && iSelectionLimit < 2) {
|
|
1633
|
+
bMassEditVisible = false;
|
|
1634
|
+
} else if (selectionMode && (selectionMode === "Auto" || selectionMode === "None")) {
|
|
1635
|
+
bMassEditVisible = true;
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
if ((targetCapabilities === null || targetCapabilities === void 0 ? void 0 : targetCapabilities.isUpdatable) !== false && bMassEditVisible && bMassEditEnabled) {
|
|
1639
|
+
if (bUpdateHidden && typeof bUpdateHidden === "boolean") {
|
|
1640
|
+
return !bUpdateHidden && converterContext.getTemplateType() === TemplateType.ObjectPage ? compileBinding(UI.IsEditable) : false;
|
|
1641
|
+
} else if (bUpdateHidden && bUpdateHidden !== null && bUpdateHidden !== void 0 && bUpdateHidden.path) {
|
|
1642
|
+
return converterContext.getTemplateType() === TemplateType.ObjectPage ? compileBinding(and(equal(UI.IsEditable, true), equal(annotationExpression(bUpdateHidden), false))) : false;
|
|
1643
|
+
}
|
|
1644
|
+
|
|
1645
|
+
return converterContext.getTemplateType() === TemplateType.ObjectPage ? compileBinding(UI.IsEditable) : false;
|
|
1646
|
+
}
|
|
1647
|
+
|
|
1648
|
+
return false;
|
|
1649
|
+
}
|
|
1650
|
+
/**
|
|
1651
|
+
* Function to determine the visibility of the Create button.
|
|
1652
|
+
*
|
|
1653
|
+
* @param converterContext The instance of the converter context
|
|
1654
|
+
* @param creationMode The mode used for creation
|
|
1655
|
+
* @param isInsertable Annotation expression of InsertRestrictions.Insertable
|
|
1656
|
+
* @param viewConfiguration The instance of the configuration for the view path
|
|
1657
|
+
* @returns {Expression<boolean>} Expression or Boolean value of the 'UI.CreateHidden' annotation
|
|
1658
|
+
*/
|
|
1659
|
+
|
|
1660
|
+
|
|
1661
|
+
_exports.getVisibilityMassEdit = getVisibilityMassEdit;
|
|
1662
|
+
|
|
1663
|
+
function getCreateVisible(converterContext, creationMode, isInsertable, viewConfiguration) {
|
|
1664
|
+
var _currentEntitySet$ann2, _currentEntitySet$ann3, _currentEntitySet$ann4, _currentEntitySet$ann5, _converterContext$get7, _converterContext$get8, _converterContext$get9;
|
|
1665
|
+
|
|
1666
|
+
var currentEntitySet = converterContext.getEntitySet();
|
|
1667
|
+
var dataModelObjectPath = converterContext.getDataModelObjectPath();
|
|
1668
|
+
var visitedNavigationPaths = dataModelObjectPath.navigationProperties.map(function (navProp) {
|
|
1669
|
+
return navProp.name;
|
|
1670
|
+
});
|
|
1671
|
+
var isCreateHidden = currentEntitySet ? annotationExpression((currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann2 = currentEntitySet.annotations.UI) === null || _currentEntitySet$ann2 === void 0 ? void 0 : _currentEntitySet$ann2.CreateHidden) || false, visitedNavigationPaths, undefined, function (path) {
|
|
1672
|
+
return singletonPathVisitor(path, converterContext, visitedNavigationPaths);
|
|
1673
|
+
}) : constant(false); // if there is a custom new action the create button will be bound against this new action (instead of a POST action).
|
|
1674
|
+
// The visibility of the create button then depends on the new action's OperationAvailable annotation (instead of the insertRestrictions):
|
|
1675
|
+
// OperationAvailable = true or undefined -> create is visible
|
|
1676
|
+
// OperationAvailable = false -> create is not visible
|
|
1677
|
+
|
|
1678
|
+
var newActionName = currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann3 = currentEntitySet.annotations.Common) === null || _currentEntitySet$ann3 === void 0 ? void 0 : (_currentEntitySet$ann4 = _currentEntitySet$ann3.DraftRoot) === null || _currentEntitySet$ann4 === void 0 ? void 0 : (_currentEntitySet$ann5 = _currentEntitySet$ann4.NewAction) === null || _currentEntitySet$ann5 === void 0 ? void 0 : _currentEntitySet$ann5.toString();
|
|
1679
|
+
var showCreateForNewAction = newActionName ? annotationExpression(converterContext === null || converterContext === void 0 ? void 0 : (_converterContext$get7 = converterContext.getEntityType().actions[newActionName].annotations) === null || _converterContext$get7 === void 0 ? void 0 : (_converterContext$get8 = _converterContext$get7.Core) === null || _converterContext$get8 === void 0 ? void 0 : (_converterContext$get9 = _converterContext$get8.OperationAvailable) === null || _converterContext$get9 === void 0 ? void 0 : _converterContext$get9.valueOf(), [], true, function (path) {
|
|
1680
|
+
return singletonPathVisitor(path, converterContext, []);
|
|
1681
|
+
}) : undefined; // - If it's statically not insertable -> create is not visible
|
|
1682
|
+
// - If create is statically hidden -> create is not visible
|
|
1683
|
+
// - If it's an ALP template -> create is not visible
|
|
1684
|
+
// -
|
|
1685
|
+
// - Otherwise
|
|
1686
|
+
// - If the create mode is external -> create is visible
|
|
1687
|
+
// - If we're on the list report ->
|
|
1688
|
+
// - If UI.CreateHidden points to a property path -> provide a negated binding to this path
|
|
1689
|
+
// - Otherwise, create is visible
|
|
1690
|
+
// - Otherwise
|
|
1691
|
+
// - This depends on the value of the the UI.IsEditable
|
|
1692
|
+
|
|
1693
|
+
return ifElse(or(or(equal(showCreateForNewAction, false), and(isConstant(isInsertable), equal(isInsertable, false), equal(showCreateForNewAction, undefined))), isConstant(isCreateHidden) && equal(isCreateHidden, true), or(viewConfiguration ? converterContext.getManifestWrapper().hasMultipleVisualizations(viewConfiguration) : false, converterContext.getTemplateType() === TemplateType.AnalyticalListPage)), false, ifElse(creationMode === "External", true, ifElse(converterContext.getTemplateType() === TemplateType.ListReport, ifElse(isBinding(isCreateHidden), not(isCreateHidden), true), and(not(isCreateHidden), UI.IsEditable))));
|
|
1694
|
+
}
|
|
1695
|
+
/**
|
|
1696
|
+
* Returns the visibility for the Paste button.
|
|
1697
|
+
*
|
|
1698
|
+
* @param converterContext The instance of the converter context
|
|
1699
|
+
* @param creationBehaviour The chosen behavior of creation
|
|
1700
|
+
* @param isInsertable The expression which denotes insert restrictions
|
|
1701
|
+
* @param pasteEnabledInManifest The flag which denotes the paste enablement status via manifest
|
|
1702
|
+
* @param viewConfiguration The instance of the configuration for the view path
|
|
1703
|
+
* @returns {Expression<boolean>} Expression or Boolean value of the UI.CreateHidden annotation
|
|
1704
|
+
*/
|
|
1705
|
+
|
|
1706
|
+
|
|
1707
|
+
_exports.getCreateVisible = getCreateVisible;
|
|
1708
|
+
|
|
1709
|
+
function getPasteEnabled(converterContext, creationBehaviour, isInsertable, pasteEnabledInManifest, viewConfiguration) {
|
|
1710
|
+
// If create is not visible -> it's not enabled
|
|
1711
|
+
// If create is visible ->
|
|
1712
|
+
// If it's in the ListReport -> not enabled
|
|
1713
|
+
// If it's insertable -> enabled
|
|
1714
|
+
return ifElse(pasteEnabledInManifest && equal(getCreateVisible(converterContext, creationBehaviour.mode, isInsertable, viewConfiguration), true), converterContext.getTemplateType() === TemplateType.ObjectPage && isInsertable, false);
|
|
1715
|
+
}
|
|
1716
|
+
/**
|
|
1717
|
+
* Returns a JSON string containing Presentation Variant sort conditions.
|
|
1718
|
+
*
|
|
1719
|
+
* @param {PresentationVariantTypeTypes | undefined} presentationVariantAnnotation Presentation variant annotation
|
|
1720
|
+
* @param columns Converter processed table columns
|
|
1721
|
+
* @returns {string | undefined} Sort conditions for a Presentation variant.
|
|
1722
|
+
*/
|
|
1723
|
+
|
|
1724
|
+
|
|
1725
|
+
_exports.getPasteEnabled = getPasteEnabled;
|
|
1726
|
+
|
|
1727
|
+
function getSortConditions(presentationVariantAnnotation, columns) {
|
|
1728
|
+
var sortConditions;
|
|
1729
|
+
|
|
1730
|
+
if (presentationVariantAnnotation !== null && presentationVariantAnnotation !== void 0 && presentationVariantAnnotation.SortOrder) {
|
|
1731
|
+
var sorters = [];
|
|
1732
|
+
var conditions = {
|
|
1733
|
+
sorters: sorters
|
|
1734
|
+
};
|
|
1735
|
+
presentationVariantAnnotation.SortOrder.forEach(function (condition) {
|
|
1736
|
+
var _condition$Property, _condition$Property$$, _sortColumn$propertyI, _sortColumn$propertyI2;
|
|
1737
|
+
|
|
1738
|
+
var propertyName = (_condition$Property = condition.Property) === null || _condition$Property === void 0 ? void 0 : (_condition$Property$$ = _condition$Property.$target) === null || _condition$Property$$ === void 0 ? void 0 : _condition$Property$$.name;
|
|
1739
|
+
var sortColumn = columns.find(function (column) {
|
|
1740
|
+
return column.name === propertyName;
|
|
1741
|
+
});
|
|
1742
|
+
sortColumn === null || sortColumn === void 0 ? void 0 : (_sortColumn$propertyI = sortColumn.propertyInfos) === null || _sortColumn$propertyI === void 0 ? void 0 : _sortColumn$propertyI.forEach(function (relatedPropertyName) {
|
|
1743
|
+
// Complex PropertyInfo. Add each related property for sorting.
|
|
1744
|
+
conditions.sorters.push({
|
|
1745
|
+
name: relatedPropertyName,
|
|
1746
|
+
descending: !!condition.Descending
|
|
1747
|
+
});
|
|
1748
|
+
});
|
|
1749
|
+
|
|
1750
|
+
if (!(sortColumn !== null && sortColumn !== void 0 && (_sortColumn$propertyI2 = sortColumn.propertyInfos) !== null && _sortColumn$propertyI2 !== void 0 && _sortColumn$propertyI2.length)) {
|
|
1751
|
+
// Not a complex PropertyInfo. Consider the property itself for sorting.
|
|
1752
|
+
conditions.sorters.push({
|
|
1753
|
+
name: propertyName,
|
|
1754
|
+
descending: !!condition.Descending
|
|
1755
|
+
});
|
|
1756
|
+
}
|
|
1757
|
+
});
|
|
1758
|
+
sortConditions = conditions.sorters.length ? JSON.stringify(conditions) : undefined;
|
|
1759
|
+
}
|
|
1760
|
+
|
|
1761
|
+
return sortConditions;
|
|
1762
|
+
}
|
|
1763
|
+
/**
|
|
1764
|
+
* Converts an array of propertyPath to an array of propertyInfo names.
|
|
1765
|
+
*
|
|
1766
|
+
* @param paths the array to be converted
|
|
1767
|
+
* @param columns the array of propertyInfos
|
|
1768
|
+
* @returns an array of propertyInfo names
|
|
1769
|
+
*/
|
|
1770
|
+
|
|
1771
|
+
|
|
1772
|
+
function convertPropertyPathsToInfoNames(paths, columns) {
|
|
1773
|
+
var infoNames = [];
|
|
1774
|
+
paths.forEach(function (currentPath) {
|
|
1775
|
+
var _currentPath$$target;
|
|
1776
|
+
|
|
1777
|
+
if (currentPath !== null && currentPath !== void 0 && (_currentPath$$target = currentPath.$target) !== null && _currentPath$$target !== void 0 && _currentPath$$target.name) {
|
|
1778
|
+
var propertyInfo = columns.find(function (column) {
|
|
1779
|
+
var _currentPath$$target2;
|
|
1780
|
+
|
|
1781
|
+
var annotationColumn = column;
|
|
1782
|
+
return !annotationColumn.propertyInfos && annotationColumn.relativePath === (currentPath === null || currentPath === void 0 ? void 0 : (_currentPath$$target2 = currentPath.$target) === null || _currentPath$$target2 === void 0 ? void 0 : _currentPath$$target2.name);
|
|
1783
|
+
});
|
|
1784
|
+
|
|
1785
|
+
if (propertyInfo) {
|
|
1786
|
+
infoNames.push(propertyInfo.name);
|
|
1787
|
+
}
|
|
1788
|
+
}
|
|
1789
|
+
});
|
|
1790
|
+
return infoNames;
|
|
1791
|
+
}
|
|
1792
|
+
/**
|
|
1793
|
+
* Returns a JSON string containing Presentation Variant group conditions.
|
|
1794
|
+
*
|
|
1795
|
+
* @param {PresentationVariantTypeTypes | undefined} presentationVariantAnnotation Presentation variant annotation
|
|
1796
|
+
* @param columns Converter processed table columns
|
|
1797
|
+
* @returns {string | undefined} Group conditions for a Presentation variant.
|
|
1798
|
+
*/
|
|
1799
|
+
|
|
1800
|
+
|
|
1801
|
+
function getGroupConditions(presentationVariantAnnotation, columns) {
|
|
1802
|
+
var groupConditions;
|
|
1803
|
+
|
|
1804
|
+
if (presentationVariantAnnotation !== null && presentationVariantAnnotation !== void 0 && presentationVariantAnnotation.GroupBy) {
|
|
1805
|
+
var aGroupBy = presentationVariantAnnotation.GroupBy;
|
|
1806
|
+
var aGroupLevels = convertPropertyPathsToInfoNames(aGroupBy, columns).map(function (infoName) {
|
|
1807
|
+
return {
|
|
1808
|
+
name: infoName
|
|
1809
|
+
};
|
|
1810
|
+
});
|
|
1811
|
+
groupConditions = aGroupLevels.length ? JSON.stringify({
|
|
1812
|
+
groupLevels: aGroupLevels
|
|
1813
|
+
}) : undefined;
|
|
1814
|
+
}
|
|
1815
|
+
|
|
1816
|
+
return groupConditions;
|
|
1817
|
+
}
|
|
1818
|
+
/**
|
|
1819
|
+
* Returns a JSON string containing Presentation Variant aggregate conditions.
|
|
1820
|
+
*
|
|
1821
|
+
* @param {PresentationVariantTypeTypes | undefined} presentationVariantAnnotation Presentation variant annotation
|
|
1822
|
+
* @param columns Converter processed table columns
|
|
1823
|
+
* @returns {string | undefined} Group conditions for a Presentation variant.
|
|
1824
|
+
*/
|
|
1825
|
+
|
|
1826
|
+
|
|
1827
|
+
function getAggregateConditions(presentationVariantAnnotation, columns) {
|
|
1828
|
+
var aggregateConditions;
|
|
1829
|
+
|
|
1830
|
+
if (presentationVariantAnnotation !== null && presentationVariantAnnotation !== void 0 && presentationVariantAnnotation.Total) {
|
|
1831
|
+
var aTotals = presentationVariantAnnotation.Total;
|
|
1832
|
+
var aggregates = {};
|
|
1833
|
+
convertPropertyPathsToInfoNames(aTotals, columns).forEach(function (infoName) {
|
|
1834
|
+
aggregates[infoName] = {};
|
|
1835
|
+
});
|
|
1836
|
+
aggregateConditions = JSON.stringify(aggregates);
|
|
1837
|
+
}
|
|
1838
|
+
|
|
1839
|
+
return aggregateConditions;
|
|
1840
|
+
}
|
|
1841
|
+
|
|
1842
|
+
function getTableAnnotationConfiguration(lineItemAnnotation, visualizationPath, converterContext, tableManifestConfiguration, columns, presentationVariantAnnotation, viewConfiguration) {
|
|
1843
|
+
var _converterContext$get10, _converterContext$get11, _converterContext$get12;
|
|
1844
|
+
|
|
1845
|
+
// Need to get the target
|
|
1846
|
+
var _splitPath2 = splitPath(visualizationPath),
|
|
1847
|
+
navigationPropertyPath = _splitPath2.navigationPropertyPath;
|
|
1848
|
+
|
|
1849
|
+
var title = (_converterContext$get10 = converterContext.getDataModelObjectPath().targetEntityType.annotations) === null || _converterContext$get10 === void 0 ? void 0 : (_converterContext$get11 = _converterContext$get10.UI) === null || _converterContext$get11 === void 0 ? void 0 : (_converterContext$get12 = _converterContext$get11.HeaderInfo) === null || _converterContext$get12 === void 0 ? void 0 : _converterContext$get12.TypeNamePlural;
|
|
1850
|
+
var entitySet = converterContext.getDataModelObjectPath().targetEntitySet;
|
|
1851
|
+
var pageManifestSettings = converterContext.getManifestWrapper();
|
|
1852
|
+
var hasAbsolutePath = navigationPropertyPath.length === 0,
|
|
1853
|
+
p13nMode = getP13nMode(visualizationPath, converterContext, tableManifestConfiguration),
|
|
1854
|
+
id = navigationPropertyPath ? TableID(visualizationPath) : TableID(converterContext.getContextPath(), "LineItem");
|
|
1855
|
+
var targetCapabilities = getCapabilityRestriction(converterContext);
|
|
1856
|
+
var selectionMode = getSelectionMode(lineItemAnnotation, visualizationPath, converterContext, hasAbsolutePath, targetCapabilities);
|
|
1857
|
+
var threshold = navigationPropertyPath ? 10 : 30;
|
|
1858
|
+
|
|
1859
|
+
if (presentationVariantAnnotation !== null && presentationVariantAnnotation !== void 0 && presentationVariantAnnotation.MaxItems) {
|
|
1860
|
+
threshold = presentationVariantAnnotation.MaxItems.valueOf();
|
|
1861
|
+
}
|
|
1862
|
+
|
|
1863
|
+
var navigationTargetPath = getNavigationTargetPath(converterContext, navigationPropertyPath);
|
|
1864
|
+
var navigationSettings = pageManifestSettings.getNavigationConfiguration(navigationTargetPath);
|
|
1865
|
+
|
|
1866
|
+
var creationBehaviour = _getCreationBehaviour(lineItemAnnotation, tableManifestConfiguration, converterContext, navigationSettings);
|
|
1867
|
+
|
|
1868
|
+
var isParentDeletable, parentEntitySetDeletable;
|
|
1869
|
+
|
|
1870
|
+
if (converterContext.getTemplateType() === TemplateType.ObjectPage) {
|
|
1871
|
+
var _isParentDeletable;
|
|
1872
|
+
|
|
1873
|
+
isParentDeletable = isPathDeletable(converterContext.getDataModelObjectPath(), undefined, true);
|
|
1874
|
+
|
|
1875
|
+
if ((_isParentDeletable = isParentDeletable) !== null && _isParentDeletable !== void 0 && _isParentDeletable.currentEntityRestriction) {
|
|
1876
|
+
parentEntitySetDeletable = undefined;
|
|
1877
|
+
} else {
|
|
1878
|
+
parentEntitySetDeletable = isParentDeletable ? compileBinding(isParentDeletable, true) : isParentDeletable;
|
|
1879
|
+
}
|
|
1880
|
+
}
|
|
1881
|
+
|
|
1882
|
+
var dataModelObjectPath = converterContext.getDataModelObjectPath();
|
|
1883
|
+
var isInsertable = isPathInsertable(dataModelObjectPath);
|
|
1884
|
+
var variantManagement = pageManifestSettings.getVariantManagement();
|
|
1885
|
+
var bMassEditVisible = getVisibilityMassEdit(converterContext, tableManifestConfiguration, targetCapabilities, selectionMode);
|
|
1886
|
+
var isSearchable = isPathSearchable(converterContext.getDataModelObjectPath());
|
|
1887
|
+
return {
|
|
1888
|
+
id: id,
|
|
1889
|
+
entityName: entitySet ? entitySet.name : "",
|
|
1890
|
+
collection: getTargetObjectPath(converterContext.getDataModelObjectPath()),
|
|
1891
|
+
navigationPath: navigationPropertyPath,
|
|
1892
|
+
row: _getRowConfigurationProperty(lineItemAnnotation, visualizationPath, converterContext, navigationSettings, navigationTargetPath),
|
|
1893
|
+
p13nMode: p13nMode,
|
|
1894
|
+
show: {
|
|
1895
|
+
"delete": getDeleteVisible(converterContext, navigationPropertyPath, targetCapabilities.isDeletable, viewConfiguration),
|
|
1896
|
+
create: compileBinding(getCreateVisible(converterContext, creationBehaviour === null || creationBehaviour === void 0 ? void 0 : creationBehaviour.mode, isInsertable)),
|
|
1897
|
+
paste: compileBinding(getPasteEnabled(converterContext, creationBehaviour, isInsertable, tableManifestConfiguration.enablePaste, viewConfiguration)),
|
|
1898
|
+
massEdit: {
|
|
1899
|
+
visible: bMassEditVisible,
|
|
1900
|
+
enabled: getEnablementMassEdit(converterContext, bMassEditVisible)
|
|
1901
|
+
}
|
|
1902
|
+
},
|
|
1903
|
+
displayMode: isInDisplayMode(converterContext, viewConfiguration),
|
|
1904
|
+
create: creationBehaviour,
|
|
1905
|
+
selectionMode: selectionMode,
|
|
1906
|
+
autoBindOnInit: converterContext.getTemplateType() !== TemplateType.ListReport && converterContext.getTemplateType() !== TemplateType.AnalyticalListPage && !(viewConfiguration && converterContext.getManifestWrapper().hasMultipleVisualizations(viewConfiguration)),
|
|
1907
|
+
variantManagement: variantManagement === "Control" && !p13nMode ? VariantManagementType.None : variantManagement,
|
|
1908
|
+
threshold: threshold,
|
|
1909
|
+
sortConditions: getSortConditions(presentationVariantAnnotation, columns),
|
|
1910
|
+
parentEntityDeleteEnabled: parentEntitySetDeletable,
|
|
1911
|
+
title: title,
|
|
1912
|
+
searchable: tableManifestConfiguration.type !== "AnalyticalTable" && !(isConstant(isSearchable) && isSearchable.value === false)
|
|
1913
|
+
};
|
|
1914
|
+
}
|
|
1915
|
+
|
|
1916
|
+
_exports.getTableAnnotationConfiguration = getTableAnnotationConfiguration;
|
|
1917
|
+
|
|
1918
|
+
function isInDisplayMode(converterContext, viewConfiguration) {
|
|
1919
|
+
var templateType = converterContext.getTemplateType();
|
|
1920
|
+
|
|
1921
|
+
if (templateType === TemplateType.ListReport || templateType === TemplateType.AnalyticalListPage || viewConfiguration && converterContext.getManifestWrapper().hasMultipleVisualizations(viewConfiguration)) {
|
|
1922
|
+
return true;
|
|
1923
|
+
} // updatable will be handled at the property level
|
|
1924
|
+
|
|
1925
|
+
|
|
1926
|
+
return false;
|
|
1927
|
+
}
|
|
1928
|
+
/**
|
|
1929
|
+
* Split the visualization path into the navigation property path and annotation.
|
|
1930
|
+
*
|
|
1931
|
+
* @param visualizationPath
|
|
1932
|
+
* @returns {object}
|
|
1933
|
+
*/
|
|
1934
|
+
|
|
1935
|
+
|
|
1936
|
+
function splitPath(visualizationPath) {
|
|
1937
|
+
var _visualizationPath$sp = visualizationPath.split("@"),
|
|
1938
|
+
_visualizationPath$sp2 = _slicedToArray(_visualizationPath$sp, 2),
|
|
1939
|
+
navigationPropertyPath = _visualizationPath$sp2[0],
|
|
1940
|
+
annotationPath = _visualizationPath$sp2[1];
|
|
1941
|
+
|
|
1942
|
+
if (navigationPropertyPath.lastIndexOf("/") === navigationPropertyPath.length - 1) {
|
|
1943
|
+
// Drop trailing slash
|
|
1944
|
+
navigationPropertyPath = navigationPropertyPath.substr(0, navigationPropertyPath.length - 1);
|
|
1945
|
+
}
|
|
1946
|
+
|
|
1947
|
+
return {
|
|
1948
|
+
navigationPropertyPath: navigationPropertyPath,
|
|
1949
|
+
annotationPath: annotationPath
|
|
1950
|
+
};
|
|
1951
|
+
}
|
|
1952
|
+
|
|
1953
|
+
function getSelectionVariantConfiguration(selectionVariantPath, converterContext) {
|
|
1954
|
+
var resolvedTarget = converterContext.getEntityTypeAnnotation(selectionVariantPath);
|
|
1955
|
+
var selection = resolvedTarget.annotation;
|
|
1956
|
+
|
|
1957
|
+
if (selection) {
|
|
1958
|
+
var _selection$SelectOpti, _selection$Text;
|
|
1959
|
+
|
|
1960
|
+
var propertyNames = [];
|
|
1961
|
+
(_selection$SelectOpti = selection.SelectOptions) === null || _selection$SelectOpti === void 0 ? void 0 : _selection$SelectOpti.forEach(function (selectOption) {
|
|
1962
|
+
var propertyName = selectOption.PropertyName;
|
|
1963
|
+
var PropertyPath = propertyName.value;
|
|
1964
|
+
|
|
1965
|
+
if (propertyNames.indexOf(PropertyPath) === -1) {
|
|
1966
|
+
propertyNames.push(PropertyPath);
|
|
1967
|
+
}
|
|
1968
|
+
});
|
|
1969
|
+
return {
|
|
1970
|
+
text: selection === null || selection === void 0 ? void 0 : (_selection$Text = selection.Text) === null || _selection$Text === void 0 ? void 0 : _selection$Text.toString(),
|
|
1971
|
+
propertyNames: propertyNames
|
|
1972
|
+
};
|
|
1973
|
+
}
|
|
1974
|
+
|
|
1975
|
+
return undefined;
|
|
1976
|
+
}
|
|
1977
|
+
|
|
1978
|
+
_exports.getSelectionVariantConfiguration = getSelectionVariantConfiguration;
|
|
1979
|
+
|
|
1980
|
+
function getTableManifestConfiguration(lineItemAnnotation, visualizationPath, converterContext) {
|
|
1981
|
+
var _tableSettings$quickV5;
|
|
1982
|
+
|
|
1983
|
+
var checkCondensedLayout = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
1984
|
+
var tableManifestSettings = converterContext.getManifestControlConfiguration(visualizationPath);
|
|
1985
|
+
var tableSettings = tableManifestSettings && tableManifestSettings.tableSettings || {};
|
|
1986
|
+
var quickSelectionVariant;
|
|
1987
|
+
var quickFilterPaths = [];
|
|
1988
|
+
var enableExport = true;
|
|
1989
|
+
var creationMode = CreationMode.NewPage;
|
|
1990
|
+
var filters;
|
|
1991
|
+
var createAtEnd = true;
|
|
1992
|
+
var disableAddRowButtonForEmptyData = false;
|
|
1993
|
+
var customValidationFunction;
|
|
1994
|
+
var condensedTableLayout = false;
|
|
1995
|
+
var hideTableTitle = false;
|
|
1996
|
+
var tableType = "ResponsiveTable";
|
|
1997
|
+
var enableFullScreen = false;
|
|
1998
|
+
var selectionLimit = 200;
|
|
1999
|
+
var multiSelectMode;
|
|
2000
|
+
var enablePaste = converterContext.getTemplateType() === "ObjectPage";
|
|
2001
|
+
var isCondensedTableLayoutCompliant = checkCondensedLayout && converterContext.getManifestWrapper().isCondensedLayoutCompliant();
|
|
2002
|
+
var entityType = converterContext.getEntityType();
|
|
2003
|
+
var aggregationHelper = new AggregationHelper(entityType, converterContext);
|
|
2004
|
+
|
|
2005
|
+
if (lineItemAnnotation) {
|
|
2006
|
+
var _tableSettings$quickV, _tableSettings$quickV2, _tableSettings$creati, _tableSettings$creati2, _tableSettings$creati3, _tableSettings$creati4, _tableSettings$creati5, _tableSettings$quickV4;
|
|
2007
|
+
|
|
2008
|
+
var targetEntityType = converterContext.getAnnotationEntityType(lineItemAnnotation);
|
|
2009
|
+
tableSettings === null || tableSettings === void 0 ? void 0 : (_tableSettings$quickV = tableSettings.quickVariantSelection) === null || _tableSettings$quickV === void 0 ? void 0 : (_tableSettings$quickV2 = _tableSettings$quickV.paths) === null || _tableSettings$quickV2 === void 0 ? void 0 : _tableSettings$quickV2.forEach(function (path) {
|
|
2010
|
+
var _tableSettings$quickV3;
|
|
2011
|
+
|
|
2012
|
+
quickSelectionVariant = targetEntityType.resolvePath("@" + path.annotationPath); // quickSelectionVariant = converterContext.getEntityTypeAnnotation(path.annotationPath);
|
|
2013
|
+
|
|
2014
|
+
if (quickSelectionVariant) {
|
|
2015
|
+
quickFilterPaths.push({
|
|
2016
|
+
annotationPath: path.annotationPath
|
|
2017
|
+
});
|
|
2018
|
+
}
|
|
2019
|
+
|
|
2020
|
+
filters = {
|
|
2021
|
+
quickFilters: {
|
|
2022
|
+
enabled: converterContext.getTemplateType() === TemplateType.ListReport ? "{= ${pageInternal>hasPendingFilters} !== true}" : true,
|
|
2023
|
+
showCounts: tableSettings === null || tableSettings === void 0 ? void 0 : (_tableSettings$quickV3 = tableSettings.quickVariantSelection) === null || _tableSettings$quickV3 === void 0 ? void 0 : _tableSettings$quickV3.showCounts,
|
|
2024
|
+
paths: quickFilterPaths
|
|
2025
|
+
}
|
|
2026
|
+
};
|
|
2027
|
+
});
|
|
2028
|
+
creationMode = ((_tableSettings$creati = tableSettings.creationMode) === null || _tableSettings$creati === void 0 ? void 0 : _tableSettings$creati.name) || creationMode;
|
|
2029
|
+
createAtEnd = ((_tableSettings$creati2 = tableSettings.creationMode) === null || _tableSettings$creati2 === void 0 ? void 0 : _tableSettings$creati2.createAtEnd) !== undefined ? (_tableSettings$creati3 = tableSettings.creationMode) === null || _tableSettings$creati3 === void 0 ? void 0 : _tableSettings$creati3.createAtEnd : true;
|
|
2030
|
+
customValidationFunction = (_tableSettings$creati4 = tableSettings.creationMode) === null || _tableSettings$creati4 === void 0 ? void 0 : _tableSettings$creati4.customValidationFunction; // if a custom validation function is provided, disableAddRowButtonForEmptyData should not be considered, i.e. set to false
|
|
2031
|
+
|
|
2032
|
+
disableAddRowButtonForEmptyData = !customValidationFunction ? !!((_tableSettings$creati5 = tableSettings.creationMode) !== null && _tableSettings$creati5 !== void 0 && _tableSettings$creati5.disableAddRowButtonForEmptyData) : false;
|
|
2033
|
+
condensedTableLayout = tableSettings.condensedTableLayout !== undefined ? tableSettings.condensedTableLayout : false;
|
|
2034
|
+
hideTableTitle = !!((_tableSettings$quickV4 = tableSettings.quickVariantSelection) !== null && _tableSettings$quickV4 !== void 0 && _tableSettings$quickV4.hideTableTitle);
|
|
2035
|
+
tableType = (tableSettings === null || tableSettings === void 0 ? void 0 : tableSettings.type) || "ResponsiveTable";
|
|
2036
|
+
|
|
2037
|
+
if (converterContext.getTemplateType() !== "ObjectPage") {
|
|
2038
|
+
if ((tableSettings === null || tableSettings === void 0 ? void 0 : tableSettings.type) === "AnalyticalTable" && !aggregationHelper.isAnalyticsSupported()) {
|
|
2039
|
+
tableType = "GridTable";
|
|
2040
|
+
}
|
|
2041
|
+
|
|
2042
|
+
if (!(tableSettings !== null && tableSettings !== void 0 && tableSettings.type)) {
|
|
2043
|
+
if (converterContext.getManifestWrapper().isDesktop() && aggregationHelper.isAnalyticsSupported()) {
|
|
2044
|
+
tableType = "AnalyticalTable";
|
|
2045
|
+
} else {
|
|
2046
|
+
tableType = "ResponsiveTable";
|
|
2047
|
+
}
|
|
2048
|
+
}
|
|
2049
|
+
}
|
|
2050
|
+
|
|
2051
|
+
enableFullScreen = tableSettings.enableFullScreen || false;
|
|
2052
|
+
|
|
2053
|
+
if (enableFullScreen === true && converterContext.getTemplateType() === TemplateType.ListReport) {
|
|
2054
|
+
enableFullScreen = false;
|
|
2055
|
+
converterContext.getDiagnostics().addIssue(IssueCategory.Manifest, IssueSeverity.Low, IssueType.FULLSCREENMODE_NOT_ON_LISTREPORT);
|
|
2056
|
+
}
|
|
2057
|
+
|
|
2058
|
+
selectionLimit = tableSettings.selectAll === true || tableSettings.selectionLimit === 0 ? 0 : tableSettings.selectionLimit || 200;
|
|
2059
|
+
|
|
2060
|
+
if (tableType === "ResponsiveTable") {
|
|
2061
|
+
if (converterContext.getTemplateType() === TemplateType.ListReport || converterContext.getTemplateType() === TemplateType.AnalyticalListPage) {
|
|
2062
|
+
multiSelectMode = !!tableSettings.selectAll ? "Default" : "ClearAll";
|
|
2063
|
+
}
|
|
2064
|
+
|
|
2065
|
+
if (converterContext.getTemplateType() === TemplateType.ObjectPage) {
|
|
2066
|
+
if (converterContext.getManifestWrapper().useIconTabBar()) {
|
|
2067
|
+
multiSelectMode = !!tableSettings.selectAll ? "Default" : "ClearAll";
|
|
2068
|
+
} else {
|
|
2069
|
+
multiSelectMode = tableSettings.selectAll === false ? "ClearAll" : "Default";
|
|
2070
|
+
}
|
|
2071
|
+
}
|
|
2072
|
+
}
|
|
2073
|
+
|
|
2074
|
+
enablePaste = converterContext.getTemplateType() === "ObjectPage" && tableSettings.enablePaste !== false;
|
|
2075
|
+
enableExport = tableSettings.enableExport !== undefined ? tableSettings.enableExport : converterContext.getTemplateType() !== "ObjectPage" || enablePaste;
|
|
2076
|
+
}
|
|
2077
|
+
|
|
2078
|
+
return {
|
|
2079
|
+
filters: filters,
|
|
2080
|
+
type: tableType,
|
|
2081
|
+
enableFullScreen: enableFullScreen,
|
|
2082
|
+
headerVisible: !(quickSelectionVariant && hideTableTitle),
|
|
2083
|
+
enableExport: enableExport,
|
|
2084
|
+
creationMode: creationMode,
|
|
2085
|
+
createAtEnd: createAtEnd,
|
|
2086
|
+
disableAddRowButtonForEmptyData: disableAddRowButtonForEmptyData,
|
|
2087
|
+
customValidationFunction: customValidationFunction,
|
|
2088
|
+
useCondensedTableLayout: condensedTableLayout && isCondensedTableLayoutCompliant,
|
|
2089
|
+
selectionLimit: selectionLimit,
|
|
2090
|
+
multiSelectMode: multiSelectMode,
|
|
2091
|
+
enablePaste: enablePaste,
|
|
2092
|
+
showRowCount: !(tableSettings !== null && tableSettings !== void 0 && (_tableSettings$quickV5 = tableSettings.quickVariantSelection) !== null && _tableSettings$quickV5 !== void 0 && _tableSettings$quickV5.showCounts),
|
|
2093
|
+
enableMassEdit: tableSettings === null || tableSettings === void 0 ? void 0 : tableSettings.enableMassEdit
|
|
2094
|
+
};
|
|
2095
|
+
}
|
|
2096
|
+
|
|
2097
|
+
_exports.getTableManifestConfiguration = getTableManifestConfiguration;
|
|
2098
|
+
return _exports;
|
|
2099
|
+
}, false);
|
|
2100
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sIm5hbWVzIjpbIkNvbHVtblR5cGUiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJhVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyIsImFBbm5vdGF0aW9uQWN0aW9ucyIsInRhYmxlQWN0aW9ucyIsImFIaWRkZW5BY3Rpb25zIiwiaGlkZGVuVGFibGVBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJpc05hdmlnYWJsZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJnZXRUYWJsZUNvbHVtbnMiLCJhbm5vdGF0aW9uQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJtYW5pZmVzdENvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwid2lkdGgiLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImhvcml6b250YWxBbGlnbiIsImZvcm1hdE9wdGlvbnMiLCJnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsInRhYmxlQ29sdW1ucyIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJmaW5kQ29sdW1uRnJvbVBhdGgiLCJwYXRoIiwiZmluZCIsImNvbHVtbiIsImFubm90YXRpb25Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwidW5kZWZpbmVkIiwicmVsYXRpdmVQYXRoIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzIiwiU2V0IiwiZm9yRWFjaCIsIm9Db2x1bW4iLCJvVGFibGVDb2x1bW4iLCJ1bml0IiwiYWRkIiwibVJhd0RlZmluaXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJtUmVzdWx0IiwiYVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJoYXMiLCJuYW1lIiwiaXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHkiLCJkZWZhdWx0QWdncmVnYXRlIiwiYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUiLCJwdXNoIiwibGVuZ3RoIiwiY29udGV4dERlZmluaW5nUHJvcGVydGllcyIsInVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsInR5cGUiLCJhZ2dyZWdhdGVzRGVmaW5pdGlvbnMiLCJlbmFibGVBbmFseXRpY3MiLCJhZ2dyZWdhdGVzIiwiYW5ub3RhdGlvbiIsImdyb3VwQ29uZGl0aW9ucyIsImdldEdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwiZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZDb25maWciLCJPYmplY3QiLCJrZXlzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJjb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwibmF2Q29uZmlnRm9yQ29udGV4dFBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInVwZGF0ZUxpbmtlZFByb3BlcnRpZXMiLCJmaW5kQ29sdW1uQnlQYXRoIiwib1Byb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsIm9Qcm9wIiwic1VuaXQiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJvVW5pdENvbHVtbiIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJ0ZXh0QW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVGV4dCIsImlzUGF0aEV4cHJlc3Npb24iLCJvVGV4dENvbHVtbiIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsIm1vZGUiLCJjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50Iiwidmlld0NvbmZpZ3VyYXRpb24iLCJ0YWJsZU1hbmlmZXN0Q29uZmlnIiwiZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJzcGxpdFBhdGgiLCJuYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm9WaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsImdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24iLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZW5hYmxlRGF0YVN0YXRlRmlsdGVyIiwiZ2V0VGVtcGxhdGVUeXBlIiwiSlNPTiIsInN0cmluZ2lmeSIsIm9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImdldENvbHVtbnNGcm9tRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJhZGRUb01hcCIsImtleSIsInZhbHVlIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJhY3Rpb25OYW1lIiwiQWN0aW9uIiwiaW5kZXhPZiIsIkRldGVybWluaW5nIiwiYWN0aW9uVGFyZ2V0IiwiQWN0aW9uVGFyZ2V0IiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInBhcmFtZXRlcnMiLCJiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJ0YXJnZXRFeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwicHJvcGVydGllcyIsInByb3BlcnR5TmFtZSIsInNpemUiLCJ0aXRsZVByb3BlcnR5IiwiVUkiLCJIZWFkZXJJbmZvIiwiVGl0bGUiLCJWYWx1ZSIsIkFycmF5IiwiZnJvbSIsImpvaW4iLCJnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRW50aXR5U2V0IiwiYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zIiwiaXNCb3VuZCIsInNvdXJjZUVudGl0eVR5cGUiLCJSZXF1aXJlc0NvbnRleHQiLCJJbmxpbmUiLCJ2YWx1ZU9mIiwiSGlkZGVuIiwiZXF1YWwiLCJnZXRCaW5kaW5nRXhwRnJvbUNvbnRleHQiLCJzb3VyY2UiLCJzRXhwcmVzc2lvbiIsInZpc2libGUiLCJzUGF0aCIsInN1YnN0cmluZyIsImFTcGxpdFBhdGgiLCJzcGxpdCIsInNOYXZpZ2F0aW9uUGF0aCIsInRhcmdldE9iamVjdCIsIl90eXBlIiwicGFydG5lciIsImJpbmRpbmdFeHByZXNzaW9uIiwic2xpY2UiLCJjb25zdGFudCIsImhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJzb21lIiwiaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJtYW5pZmVzdEFjdGlvbnMiLCJhY3Rpb25LZXkiLCJhY3Rpb24iLCJyZXF1aXJlc1NlbGVjdGlvbiIsInRvU3RyaW5nIiwiZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiYVZpc2libGVQYXRoRXhwcmVzc2lvbnMiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldENhcGFiaWxpdHlSZXN0cmljdGlvbiIsImlzRGVsZXRhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwiaXNVcGRhdGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJpc0NvbnN0YW50IiwiZ2V0U2VsZWN0aW9uTW9kZSIsInRhcmdldENhcGFiaWxpdGllcyIsIlNlbGVjdGlvbk1vZGUiLCJOb25lIiwidGFibGVNYW5pZmVzdFNldHRpbmdzIiwic2VsZWN0aW9uTW9kZSIsInRhYmxlU2V0dGluZ3MiLCJhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zIiwiYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMiLCJpc1BhcmVudERlbGV0YWJsZSIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJjb21waWxlQmluZGluZyIsIk11bHRpIiwiaWZFbHNlIiwiQXV0byIsIm9yIiwiY29uY2F0IiwidGFibGVBY3Rpb24iLCJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsIm5vdCIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJEZWZhdWx0IiwiZ2V0SGlnaGxpZ2h0Um93QmluZGluZyIsImNyaXRpY2FsaXR5QW5ub3RhdGlvbiIsImlzRHJhZnRSb290IiwidGFyZ2V0RW50aXR5VHlwZSIsImRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uIiwiTWVzc2FnZVR5cGUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJEcmFmdCIsIklzTmV3T2JqZWN0IiwiSW5mb3JtYXRpb24iLCJmb3JtYXRSZXN1bHQiLCJ0YWJsZUZvcm1hdHRlcnMiLCJyb3dIaWdobGlnaHRpbmciLCJfZ2V0Q3JlYXRpb25CZWhhdmlvdXIiLCJ0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsIm5hdmlnYXRpb24iLCJjcmVhdGUiLCJkZXRhaWwiLCJvdXRib3VuZCIsIm91dGJvdW5kRGV0YWlsIiwibmV3QWN0aW9uIiwidGFyZ2V0QW5ub3RhdGlvbnMiLCJnZXRFbnRpdHlTZXQiLCJEcmFmdFJvb3QiLCJOZXdBY3Rpb24iLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uUm93IiwiRXJyb3IiLCJyb3V0ZSIsImFwcGVuZCIsImNyZWF0ZUF0RW5kIiwibmF2aWdhdGVUb1RhcmdldCIsIk5ld1BhZ2UiLCJfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInByZXNzUHJvcGVydHkiLCJuYXZpZ2F0aW9uVGFyZ2V0IiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsImRpc3BsYXkiLCJ0YXJnZXQiLCJDcml0aWNhbGl0eSIsIkRyYWZ0Tm9kZSIsInJvd05hdmlnYXRlZEV4cHJlc3Npb24iLCJuYXZpZ2F0ZWRSb3ciLCJwcmVzcyIsInJvd05hdmlnYXRlZCIsImNvbHVtbnNUb0JlQ3JlYXRlZCIsIm5vblNvcnRhYmxlQ29sdW1ucyIsInRhYmxlVHlwZSIsInByb3BlcnR5IiwiZXhpc3RzIiwidGFyZ2V0VHlwZSIsInJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVzIiwiYWRkaXRpb25hbFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNvbHVtbkluZm8iLCJnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5IiwiZXhwb3J0U2V0dGluZ3MiLCJ0ZW1wbGF0ZSIsImV4cG9ydFNldHRpbmdzVGVtcGxhdGUiLCJ3cmFwIiwiZXhwb3J0U2V0dGluZ3NXcmFwcGluZyIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zIiwiZnVsbFByb3BlcnR5UGF0aCIsInVzZURhdGFGaWVsZFByZWZpeCIsImF2YWlsYWJsZUZvckFkYXB0YXRpb24iLCJyZXBsYWNlU3BlY2lhbENoYXJzIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImlzSGlkZGVuIiwiZ3JvdXBQYXRoIiwiX3NsaWNlQXRTbGFzaCIsImlzR3JvdXAiLCJpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSIsImdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQiLCJpc0dyb3VwYWJsZSIsImlzUHJvcGVydHlHcm91cGFibGUiLCJBbm5vdGF0aW9uIiwibGFiZWwiLCJfZ2V0TGFiZWwiLCJncm91cExhYmVsIiwiZ3JvdXAiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJBdmFpbGFiaWxpdHlUeXBlIiwiQWRhcHRhdGlvbiIsIkRhdGFGaWVsZERlZmF1bHQiLCJUYXJnZXQiLCIkdGFyZ2V0Iiwic29ydGFibGUiLCJpc0tleSIsIl9pc1ZhbGlkQ29sdW1uIiwiaXNQcm9wZXJ0eSIsImRhdGFGaWVsZERlZmF1bHQiLCJxdWFsaWZpZXIiLCJMYWJlbCIsImlzRGF0YUZpZWxkVHlwZXMiLCJfY3JlYXRlUmVsYXRlZENvbHVtbnMiLCJleGlzdGluZ0NvbHVtbnMiLCJyZWxhdGVkQ29sdW1ucyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXAiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwicmVsYXRlZENvbHVtbiIsIm5ld05hbWUiLCJtYXAiLCJwcm9wZXJ0eUluZm8iLCJfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUiLCJfZ2V0UmVsYXRpdmVQYXRoIiwiaXNMYXN0U2xhc2giLCJpc0xhc3RQYXJ0IiwiaVNsYXNoSW5kZXgiLCJsYXN0SW5kZXhPZiIsIl9pc0NvbHVtblNvcnRhYmxlIiwicHJvcGVydHlQYXRoIiwiaXNTb3J0YWJsZSIsImdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUiLCJ0ZXh0TGluZXNFZGl0IiwiQ2FwYWJpbGl0aWVzIiwiU29ydFJlc3RyaWN0aW9ucyIsIk5vblNvcnRhYmxlUHJvcGVydGllcyIsImxpbmVJdGVtIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJzTGFiZWwiLCJpc0RhdGFGaWVsZEFsd2F5c0hpZGRlbiIsIkhUTUw1IiwiQ3NzRGVmYXVsdHMiLCJleHBvcnRDb250YWN0UHJvcGVydHkiLCJleHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eSIsIl9nZXRQcm9wZXJ0eU5hbWVzIiwibWF0Y2hlZFByb3BlcnRpZXMiLCJyZXNvbHZlUGF0aCIsIl9hcHBlbmRDdXN0b21UZW1wbGF0ZSIsIl9nZXRNYW5pZmVzdE9yRGVmYXVsdFZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiaXNBbm5vdGF0aW9uQ29sdW1uIiwiaW50ZXJuYWxDb2x1bW5zIiwibWFuaWZlc3RDb2x1bW4iLCJ2YWxpZGF0ZUtleSIsImlkIiwiaGVhZGVyIiwiSG9yaXpvbnRhbEFsaWduIiwiQmVnaW4iLCJTbG90IiwicG9zaXRpb24iLCJhbmNob3IiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsImlzQWN0aW9uTmF2aWdhYmxlIiwiZmllbGRMYWJlbCIsImdldFAxM25Nb2RlIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImFQZXJzb25hbGl6YXRpb24iLCJiQW5hbHl0aWNhbFRhYmxlIiwicGVyc29uYWxpemF0aW9uIiwic29ydCIsImZpbHRlciIsImFnZ3JlZ2F0ZSIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJnZXREZWxldGVWaXNpYmxlIiwibmF2aWdhdGlvblBhdGgiLCJpc1RhcmdldERlbGV0YWJsZSIsImN1cnJlbnRFbnRpdHlTZXQiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcCIsImlzRGVsZXRlSGlkZGVuRXhwcmVzc2lvbiIsIkRlbGV0ZUhpZGRlbiIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiaXNEZWxldGVIaWRkZW4iLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiTGlzdFJlcG9ydCIsImlzQmluZGluZyIsImdldEVuYWJsZW1lbnRNYXNzRWRpdCIsImJNYXNzRWRpdFZpc2libGUiLCJpc1BhcmVudFVwZGF0YWJsZSIsImN1cnJlbnRFbnRpdHlSZXN0cmljdGlvbiIsIm9FeHByZXNzaW9uIiwiZ2V0VmlzaWJpbGl0eU1hc3NFZGl0IiwiZW50aXR5U2V0IiwiYlVwZGF0ZUhpZGRlbiIsIlVwZGF0ZUhpZGRlbiIsImJNYXNzRWRpdEVuYWJsZWQiLCJlbmFibGVNYXNzRWRpdCIsImlTZWxlY3Rpb25MaW1pdCIsInNlbGVjdGlvbkxpbWl0IiwiSXNFZGl0YWJsZSIsImFuZCIsImdldENyZWF0ZVZpc2libGUiLCJpc0luc2VydGFibGUiLCJpc0NyZWF0ZUhpZGRlbiIsIkNyZWF0ZUhpZGRlbiIsIm5ld0FjdGlvbk5hbWUiLCJzaG93Q3JlYXRlRm9yTmV3QWN0aW9uIiwiZ2V0UGFzdGVFbmFibGVkIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJwYXN0ZUVuYWJsZWRJbk1hbmlmZXN0IiwiZ2V0U29ydENvbmRpdGlvbnMiLCJzb3J0Q29uZGl0aW9ucyIsIlNvcnRPcmRlciIsInNvcnRlcnMiLCJjb25kaXRpb25zIiwiY29uZGl0aW9uIiwiUHJvcGVydHkiLCJzb3J0Q29sdW1uIiwicmVsYXRlZFByb3BlcnR5TmFtZSIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwiY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyIsInBhdGhzIiwiaW5mb05hbWVzIiwiY3VycmVudFBhdGgiLCJHcm91cEJ5IiwiYUdyb3VwQnkiLCJhR3JvdXBMZXZlbHMiLCJpbmZvTmFtZSIsImdyb3VwTGV2ZWxzIiwiVG90YWwiLCJhVG90YWxzIiwidGl0bGUiLCJUeXBlTmFtZVBsdXJhbCIsInBhZ2VNYW5pZmVzdFNldHRpbmdzIiwiaGFzQWJzb2x1dGVQYXRoIiwicDEzbk1vZGUiLCJUYWJsZUlEIiwidGhyZXNob2xkIiwiTWF4SXRlbXMiLCJpc1BhdGhJbnNlcnRhYmxlIiwiaXNTZWFyY2hhYmxlIiwiaXNQYXRoU2VhcmNoYWJsZSIsImVudGl0eU5hbWUiLCJjb2xsZWN0aW9uIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsInJvdyIsInNob3ciLCJwYXN0ZSIsImVuYWJsZVBhc3RlIiwibWFzc0VkaXQiLCJpc0luRGlzcGxheU1vZGUiLCJhdXRvQmluZE9uSW5pdCIsInBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQiLCJzZWFyY2hhYmxlIiwidGVtcGxhdGVUeXBlIiwic3Vic3RyIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJzZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJzZWxlY3Rpb24iLCJwcm9wZXJ0eU5hbWVzIiwiU2VsZWN0T3B0aW9ucyIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsIlByb3BlcnR5UGF0aCIsInRleHQiLCJjaGVja0NvbmRlbnNlZExheW91dCIsInF1aWNrU2VsZWN0aW9uVmFyaWFudCIsInF1aWNrRmlsdGVyUGF0aHMiLCJlbmFibGVFeHBvcnQiLCJmaWx0ZXJzIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiaGlkZVRhYmxlVGl0bGUiLCJlbmFibGVGdWxsU2NyZWVuIiwibXVsdGlTZWxlY3RNb2RlIiwiaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQiLCJxdWlja1ZhcmlhbnRTZWxlY3Rpb24iLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwiaXNEZXNrdG9wIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJNYW5pZmVzdCIsIklzc3VlU2V2ZXJpdHkiLCJMb3ciLCJJc3N1ZVR5cGUiLCJGVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCIsInNlbGVjdEFsbCIsInVzZUljb25UYWJCYXIiLCJoZWFkZXJWaXNpYmxlIiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJzaG93Um93Q291bnQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1TUtBLFU7O2FBQUFBLFU7QUFBQUEsSUFBQUEsVTtBQUFBQSxJQUFBQSxVO0FBQUFBLElBQUFBLFU7S0FBQUEsVSxLQUFBQSxVOztBQStFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxXQUFTQyxlQUFULENBQ05DLGtCQURNLEVBRU5DLGlCQUZNLEVBR05DLGdCQUhNLEVBSU5DLGtCQUpNLEVBS1M7QUFDZixRQUFNQyxhQUFhLEdBQUdDLHlCQUF5QixDQUFDTCxrQkFBRCxFQUFxQkMsaUJBQXJCLEVBQXdDQyxnQkFBeEMsQ0FBL0M7QUFDQSxRQUFNSSxrQkFBa0IsR0FBR0YsYUFBYSxDQUFDRyxZQUF6QztBQUNBLFFBQU1DLGNBQWMsR0FBR0osYUFBYSxDQUFDSyxrQkFBckM7QUFDQSxXQUFPQyxvQkFBb0IsQ0FDMUJKLGtCQUQwQixFQUUxQkssc0JBQXNCLENBQ3JCVCxnQkFBZ0IsQ0FBQ1UsK0JBQWpCLENBQWlEWCxpQkFBakQsRUFBb0VZLE9BRC9DLEVBRXJCWCxnQkFGcUIsRUFHckJJLGtCQUhxQixFQUlyQkgsa0JBSnFCLEVBS3JCLElBTHFCLEVBTXJCSyxjQU5xQixDQUZJLEVBVTFCO0FBQ0NNLE1B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LEVBQUVBLFlBTlI7QUFPTk0sTUFBQUEsV0FBVyxFQUFFQSxXQVBQO0FBUU4yTyxNQUFBQSwrQkFBK0IsRUFBRUEsK0JBUjNCO0FBU05DLE1BQUFBLHdCQUF3QixFQUFFQSx3QkFUcEI7QUFVTnFCLE1BQUFBLHVCQUF1QixFQUFFcEIsb0JBQW9CLElBQUk3WSwrQkFWM0M7QUFXTmdVLE1BQUFBLGNBQWMsRUFBRUEsY0FYVjtBQVlOZ0YsTUFBQUEsZUFBZSxFQUFFQSxlQVpYO0FBYU43QixNQUFBQSxXQUFXLEVBQUVBLFdBYlA7QUFjTitDLE1BQUFBLFlBQVksRUFBRSxFQUFDNVQsYUFBRCxhQUFDQSxhQUFELHlDQUFDQSxhQUFhLENBQUU0UyxxQkFBaEIsbURBQUMsdUJBQXNDRSxVQUF2QyxDQWRSO0FBZU50RixNQUFBQSxjQUFjLEVBQUV4TixhQUFGLGFBQUVBLGFBQUYsdUJBQUVBLGFBQWEsQ0FBRXdOO0FBZnpCLEtBQVA7QUFpQkEiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENyaXRpY2FsaXR5VHlwZSxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFQb2ludCxcblx0RW51bVZhbHVlLFxuXHRMaW5lSXRlbSxcblx0UGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzLFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0UHJvcGVydHlQYXRoLFxuXHRTZWxlY3Rpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZSxcblx0VUlBbm5vdGF0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdEZvcm1hdE9wdGlvbnNUeXBlLFxuXHRIb3Jpem9udGFsQWxpZ24sXG5cdE1hbmlmZXN0VGFibGVDb2x1bW4sXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uLFxuXHRTZWxlY3Rpb25Nb2RlLFxuXHRUYWJsZUNvbHVtblNldHRpbmdzLFxuXHRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0VmlzdWFsaXphdGlvblR5cGVcbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEVudGl0eVR5cGUsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFRhYmxlSUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QmFzZUFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRpc0FjdGlvbk5hdmlnYWJsZSxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzLCBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSxcblx0Q29tcGxleFByb3BlcnR5SW5mbyxcblx0Z2V0U2VtYW50aWNPYmplY3RQYXRoLFxuXHRpc0RhdGFGaWVsZEFsd2F5c0hpZGRlbixcblx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCxcblx0aXNEYXRhRmllbGRUeXBlc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0YW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRiaW5kaW5nRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRFeHByZXNzaW9uLFxuXHRFeHByZXNzaW9uT3JQcmltaXRpdmUsXG5cdGZvcm1hdFJlc3VsdCxcblx0aWZFbHNlLFxuXHRpc0JpbmRpbmcsXG5cdGlzQ29uc3RhbnQsXG5cdG5vdCxcblx0b3IsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBEcmFmdCwgYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciwgc2luZ2xldG9uUGF0aFZpc2l0b3IsIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclR5cGVzXCI7XG5pbXBvcnQge1xuXHREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhEZWxldGFibGUsXG5cdGlzUGF0aFNlYXJjaGFibGUsXG5cdGlzUGF0aEluc2VydGFibGUsXG5cdGlzUGF0aFVwZGF0YWJsZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyByZXBsYWNlU3BlY2lhbENoYXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgKiBhcyBFZG0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvRWRtXCI7XG5cbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7XG5cdGlzUHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRpc1BhdGhFeHByZXNzaW9uLFxuXHRnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IERpc3BsYXlNb2RlLCBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIH0gZnJvbSBcIi4vQ3JpdGljYWxpdHlcIjtcblxuZXhwb3J0IHR5cGUgVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiA9IHtcblx0YXV0b0JpbmRPbkluaXQ6IGJvb2xlYW47XG5cdGNvbGxlY3Rpb246IHN0cmluZztcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZTtcblx0ZmlsdGVySWQ/OiBzdHJpbmc7XG5cdGlkOiBzdHJpbmc7XG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG5cdHAxM25Nb2RlPzogc3RyaW5nO1xuXHRyb3c/OiB7XG5cdFx0YWN0aW9uPzogc3RyaW5nO1xuXHRcdHByZXNzPzogc3RyaW5nO1xuXHRcdHJvd0hpZ2hsaWdodGluZzogQmluZGluZ0V4cHJlc3Npb248TWVzc2FnZVR5cGU+O1xuXHRcdHJvd05hdmlnYXRlZDogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdH07XG5cdHNlbGVjdGlvbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c2hvdz86IHtcblx0XHRjcmVhdGU/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRcdGRlbGV0ZT86IHN0cmluZyB8IGJvb2xlYW47XG5cdFx0cGFzdGU/OiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0XHRtYXNzRWRpdD86IHsgdmlzaWJsZTogYm9vbGVhbiB8IHN0cmluZzsgZW5hYmxlZDogYm9vbGVhbiB8IHN0cmluZyB9O1xuXHR9O1xuXHRkaXNwbGF5TW9kZT86IGJvb2xlYW47XG5cdHRocmVzaG9sZDogbnVtYmVyO1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdHNvcnRDb25kaXRpb25zPzogc3RyaW5nO1xuXHRncm91cENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM/OiBzdHJpbmc7XG5cblx0LyoqIENyZWF0ZSBuZXcgZW50cmllcyAqL1xuXHRjcmVhdGU6IENyZWF0ZUJlaGF2aW91ciB8IENyZWF0ZUJlaGF2aW91ckV4dGVybmFsO1xuXHRwYXJlbnRFbnRpdHlEZWxldGVFbmFibGVkPzogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdHRpdGxlOiBzdHJpbmc7XG5cdHNlYXJjaGFibGU6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGUgYXBwIChkZWZhdWx0IGNhc2UpXG4gKi9cbnR5cGUgQ3JlYXRlQmVoYXZpb3VyID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogQm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCBieSBuYXZpZ2F0aW5nIHRvIHNvbWUgdGFyZ2V0XG4gKi9cbnR5cGUgQ3JlYXRlQmVoYXZpb3VyRXh0ZXJuYWwgPSB7XG5cdG1vZGU6IFwiRXh0ZXJuYWxcIjtcblx0b3V0Ym91bmQ6IHN0cmluZztcblx0b3V0Ym91bmREZXRhaWw6IE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uW1wib3V0Ym91bmREZXRhaWxcIl07XG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uID0ge1xuXHRpc0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNVcGRhdGFibGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uID0ge1xuXHRlbmFibGVkPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0cGF0aHM6IFtcblx0XHR7XG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRcdH1cblx0XTtcblx0c2hvd0NvdW50cz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiA9IHtcblx0cHJvcGVydHlOYW1lczogc3RyaW5nW107XG5cdHRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGVBdEVuZDogYm9vbGVhbjtcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6IGJvb2xlYW47XG5cdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogYm9vbGVhbjtcblx0ZW5hYmxlRXhwb3J0OiBib29sZWFuO1xuXHRoZWFkZXJWaXNpYmxlOiBib29sZWFuO1xuXHRmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj47XG5cdHR5cGU6IFRhYmxlVHlwZTtcblx0c2VsZWN0QWxsPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uTGltaXQ6IG51bWJlcjtcblx0bXVsdGlTZWxlY3RNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVuYWJsZVBhc3RlOiBib29sZWFuO1xuXHRlbmFibGVGdWxsU2NyZWVuOiBib29sZWFuO1xuXHRzaG93Um93Q291bnQ6IGJvb2xlYW47XG5cdGVuYWJsZU1hc3NFZGl0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVUeXBlID0gXCJHcmlkVGFibGVcIiB8IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfCBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXG5lbnVtIENvbHVtblR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsIC8vIERlZmF1bHQgVHlwZVxuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG5leHBvcnQgdHlwZSBCYXNlVGFibGVDb2x1bW4gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHdpZHRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHR5cGU6IENvbHVtblR5cGU7IC8vT3JpZ2luIG9mIHRoZSBzb3VyY2Ugd2hlcmUgd2UgYXJlIGdldHRpbmcgdGhlIHRlbXBsYXRlZCBpbmZvcm1hdGlvbiBmcm9tLFxuXHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdHNldHRpbmdzPzogVGFibGVDb2x1bW5TZXR0aW5ncztcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRwcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRob3Jpem9udGFsQWxpZ24/OiBIb3Jpem9udGFsQWxpZ247XG5cdGZvcm1hdE9wdGlvbnM6IEZvcm1hdE9wdGlvbnNUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVGFibGVDb2x1bW4gPSBCYXNlVGFibGVDb2x1bW4gJiB7XG5cdGhlYWRlcj86IHN0cmluZztcblx0dGVtcGxhdGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0aXNHcm91cGFibGU/OiBib29sZWFuO1xuXHRpc0tleT86IGJvb2xlYW47XG5cdHVuaXQ/OiBzdHJpbmc7XG5cdGV4cG9ydFNldHRpbmdzPzoge1xuXHRcdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdGZpZWxkTGFiZWw/OiBzdHJpbmc7XG5cdFx0d3JhcD86IGJvb2xlYW47XG5cdH07XG5cdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5PzogYm9vbGVhbjtcblx0dGV4dEFycmFuZ2VtZW50Pzoge1xuXHRcdHRleHRQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdG1vZGU6IERpc3BsYXlNb2RlO1xuXHR9O1xuXHRleHBvcnRDb250YWN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtbiA9IEN1c3RvbVRhYmxlQ29sdW1uIHwgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXG5leHBvcnQgdHlwZSBDdXN0b21Db2x1bW4gPSBDdXN0b21FbGVtZW50PFRhYmxlQ29sdW1uPjtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRlRGF0YSA9IHtcblx0ZGVmYXVsdEFnZ3JlZ2F0ZToge1xuXHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fTtcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlO1xuXHRhbm5vdGF0aW9uOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRjb250cm9sOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGFnZ3JlZ2F0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPjtcblx0ZW5hYmxlQW5hbHl0aWNzPzogYm9vbGVhbjtcblx0ZW5hYmxlRGF0YVN0YXRlRmlsdGVyOiBib29sZWFuO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZztcblx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogc3RyaW5nO1xufTtcblxudHlwZSBTb3J0ZXJUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NlbmRpbmc6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGFubm90YXRpb24tYmFzZWQgYW5kIG1hbmlmZXN0LWJhc2VkIHRhYmxlIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtMaW5lSXRlbX0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIHtCYXNlQWN0aW9ufSBUaGUgY29tcGxldGUgdGFibGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBhVGFibGVBY3Rpb25zID0gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgYUFubm90YXRpb25BY3Rpb25zID0gYVRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnM7XG5cdGNvbnN0IGFIaWRkZW5BY3Rpb25zID0gYVRhYmxlQWN0aW9ucy5oaWRkZW5UYWJsZUFjdGlvbnM7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRhQW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRhQW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHR0cnVlLFxuXHRcdFx0YUhpZGRlbkFjdGlvbnNcblx0XHQpLFxuXHRcdHtcblx0XHRcdGlzTmF2aWdhYmxlOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0ZW5hYmxlT25TZWxlY3Q6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRlbmFibGVBdXRvU2Nyb2xsOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0ZW5hYmxlZDogXCJvdmVyd3JpdGVcIixcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIlxuXHRcdH1cblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBjb2x1bW5zLCBhbm5vdGF0aW9uLWJhc2VkIGFzIHdlbGwgYXMgbWFuaWZlc3QgYmFzZWQuXG4gKiBUaGV5IGFyZSBzb3J0ZWQgYW5kIHNvbWUgcHJvcGVydGllcyBjYW4gYmUgb3ZlcndyaXR0ZW4gdmlhIHRoZSBtYW5pZmVzdCAoY2hlY2sgb3V0IHRoZSBrZXlzIHRoYXQgY2FuIGJlIG92ZXJ3cml0dGVuKS5cbiAqXG4gKiBAcGFyYW0ge0xpbmVJdGVtfSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIHtUYWJsZUNvbHVtbltdfSBSZXR1cm5zIGFsbCB0YWJsZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSwgcmVnYXJkbGVzcyBvZiB0ZW1wbGF0aW5nIG9yIHBlcnNvbmFsaXphdGlvbiBvciB0aGVpciBvcmlnaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQ29sdW1ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGFubm90YXRpb25Db2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbWFuaWZlc3RDb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmNvbHVtbnMsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGFubm90YXRpb25Db2x1bW5zLCBtYW5pZmVzdENvbHVtbnMsIHtcblx0XHR3aWR0aDogXCJvdmVyd3JpdGVcIixcblx0XHRpc05hdmlnYWJsZTogXCJvdmVyd3JpdGVcIixcblx0XHRhdmFpbGFiaWxpdHk6IFwib3ZlcndyaXRlXCIsXG5cdFx0c2V0dGluZ3M6IFwib3ZlcndyaXRlXCIsXG5cdFx0aG9yaXpvbnRhbEFsaWduOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGZvcm1hdE9wdGlvbnM6IFwib3ZlcndyaXRlXCJcblx0fSk7XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGN1c3RvbSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZvciB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgYWdncmVnYXRlIGRlZmluaXRpb25zIGZyb20gdGhlIGVudGl0eVR5cGUsIG9yIHVuZGVmaW5lZCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24oXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRmdW5jdGlvbiBmaW5kQ29sdW1uRnJvbVBhdGgocGF0aDogc3RyaW5nKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0YWJsZUNvbHVtbnMuZmluZChjb2x1bW4gPT4ge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHBhdGg7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIWFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gS2VlcCBhIHNldCBvZiBhbGwgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHRoZW0gYXMgYWdncmVnYXRlc1xuXHQvLyBUaGV5IGFyZSBhZ2dyZWdhdGVzIGZvciB0ZWNobmljYWwgcmVhc29ucyAodG8gbWFuYWdlIG11bHRpLXVuaXRzIHNpdHVhdGlvbnMpIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZnJvbSBhIHVzZXIgc3RhbmRwb2ludFxuXHRjb25zdCBtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaChvQ29sdW1uID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdG1DdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMuYWRkKG9UYWJsZUNvbHVtbi51bml0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IG1SYXdEZWZpbml0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IG1SZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+ID0ge307XG5cblx0dGFibGVDb2x1bW5zLmZvckVhY2gob0NvbHVtbiA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Y29uc3QgYVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBtUmF3RGVmaW5pdGlvbnNbb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aF07XG5cblx0XHRcdC8vIElnbm9yZSBhZ2dyZWdhdGVzIGNvcnJlc3BvbmRpbmcgdG8gY3VycmVuY2llcyBvciB1bml0cyBvZiBtZWFzdXJlIGFuZCBkdW1teSBjcmVhdGVkIHByb3BlcnR5IGZvciBkYXRhcG9pbnQgdGFyZ2V0IFZhbHVlXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFSYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzICYmXG5cdFx0XHRcdCFtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmhhcyhvVGFibGVDb2x1bW4ubmFtZSkgJiZcblx0XHRcdFx0IW9UYWJsZUNvbHVtbi5pc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eVxuXHRcdFx0KSB7XG5cdFx0XHRcdG1SZXN1bHRbb1RhYmxlQ29sdW1uLm5hbWVdID0ge1xuXHRcdFx0XHRcdGRlZmF1bHRBZ2dyZWdhdGU6IHt9LFxuXHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCBhQ29udGV4dERlZmluaW5nUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0YVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMuZm9yRWFjaChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9Db2x1bW4gPSBmaW5kQ29sdW1uRnJvbVBhdGgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0XHRpZiAob0NvbHVtbikge1xuXHRcdFx0XHRcdFx0YUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMucHVzaChvQ29sdW1uLm5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdG1SZXN1bHRbb1RhYmxlQ29sdW1uLm5hbWVdLmRlZmF1bHRBZ2dyZWdhdGUuY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gbVJlc3VsdDtcbn07XG5cbi8qKlxuICogVXBkYXRlcyBhIHRhYmxlIHZpc3VhbGl6YXRpb24gZm9yIGFuYWx5dGljYWwgdXNlIGNhc2VzLlxuICpcbiAqIEBwYXJhbSB0YWJsZVZpc3VhbGl6YXRpb24gVGhlIHZpc3VhbGl6YXRpb24gdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFRoZSBwcmVzZW50YXRpb25WYXJpYW50IGFubm90YXRpb24gKGlmIGFueSlcbiAqL1xuZnVuY3Rpb24gdXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yQW5hbHl0aWNzKFxuXHR0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzXG4pIHtcblx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIpIHtcblx0XHRjb25zdCBhZ2dyZWdhdGVzRGVmaW5pdGlvbnMgPSBnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlKGVudGl0eVR5cGUsIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRcdGlmIChhZ2dyZWdhdGVzRGVmaW5pdGlvbnMpIHtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgPSB0cnVlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGVzRGVmaW5pdGlvbnM7XG5cblx0XHRcdC8vIEFkZCBncm91cCBhbmQgc29ydCBjb25kaXRpb25zIGZyb20gdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zKTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBnZXRBZ2dyZWdhdGVDb25kaXRpb25zKFxuXHRcdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9IFwiR3JpZFRhYmxlXCI7IC8vIEFuYWx5dGljYWxUYWJsZSBpc24ndCBhIHJlYWwgdHlwZSBmb3IgdGhlIE1EQzpUYWJsZSwgc28gd2UgYWx3YXlzIHN3aXRjaCBiYWNrIHRvIEdyaWRcblx0fVxufVxuXG4vKipcbiAqIEdldCB0aGUgbmF2aWdhdGlvbiB0YXJnZXQgcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggVGhlIG5hdmlnYXRpb24gcGF0aCB0byBjaGVjayBpbiB0aGUgbWFuaWZlc3Qgc2V0dGluZ3NcbiAqIEByZXR1cm5zIE5hdmlnYXRpb24gcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzXG4gKi9cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRjb25zdCBuYXZDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKG5hdkNvbmZpZykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3QgbmF2Q29uZmlnRm9yQ29udGV4dFBhdGggPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24oY29udGV4dFBhdGgpO1xuXHRpZiAobmF2Q29uZmlnRm9yQ29udGV4dFBhdGggJiYgT2JqZWN0LmtleXMobmF2Q29uZmlnRm9yQ29udGV4dFBhdGgpLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gY29udGV4dFBhdGg7XG5cdH1cblxuXHRyZXR1cm4gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xufVxuXG4vKipcbiAqIFNldHMgdGhlICd1bml0JyBhbmQgJ3RleHRBcnJhbmdlbWVudCcgcHJvcGVydGllcyBpbiBjb2x1bW5zIHdoZW4gbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBjb2x1bW5zIHRvIGJlIHVwZGF0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG5cdGZ1bmN0aW9uIGZpbmRDb2x1bW5CeVBhdGgocGF0aDogc3RyaW5nKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0YWJsZUNvbHVtbnMuZmluZChjb2x1bW4gPT4ge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHBhdGg7XG5cdFx0fSk7XG5cdH1cblxuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaChvQ29sdW1uID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHkgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZChvUHJvcCA9PiBvUHJvcC5uYW1lID09PSBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3Qgc1VuaXQgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpPy5uYW1lIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KT8ubmFtZTtcblx0XHRcdFx0aWYgKHNVbml0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1VuaXRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKHNVbml0KTtcblxuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi51bml0ID0gb1VuaXRDb2x1bW4/Lm5hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IGdldERpc3BsYXlNb2RlKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0dGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0O1xuXHRcdFx0XHRpZiAoaXNQYXRoRXhwcmVzc2lvbih0ZXh0QW5ub3RhdGlvbikgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikge1xuXHRcdFx0XHRcdGNvbnN0IG9UZXh0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aCh0ZXh0QW5ub3RhdGlvbi5wYXRoKTtcblx0XHRcdFx0XHRpZiAob1RleHRDb2x1bW4gJiYgb1RleHRDb2x1bW4ubmFtZSAhPT0gb1RhYmxlQ29sdW1uLm5hbWUpIHtcblx0XHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50ZXh0QXJyYW5nZW1lbnQgPSB7XG5cdFx0XHRcdFx0XHRcdHRleHRQcm9wZXJ0eTogb1RleHRDb2x1bW4ubmFtZSxcblx0XHRcdFx0XHRcdFx0bW9kZTogZGlzcGxheU1vZGVcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzLFxuXHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50PzogYm9vbGVhbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50XG5cdCk7XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRUYWJsZUNvbHVtbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRcdGNvbHVtbnMsXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHZpZXdDb25maWd1cmF0aW9uXG5cdFx0KSxcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZ2V0VGFibGVBY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncykpLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0ZW5hYmxlRGF0YVN0YXRlRmlsdGVyOiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBcIk9iamVjdFBhZ2VcIixcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG5cblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JBbmFseXRpY3MoXG5cdFx0b1Zpc3VhbGl6YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb25cblx0KTtcblxuXHRyZXR1cm4gb1Zpc3VhbGl6YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoe30sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBbXSwgW10sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcudHlwZSk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCh1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlnLCBjb2x1bW5zKSxcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IFtdLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0ZW5hYmxlRGF0YVN0YXRlRmlsdGVyOiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBcIk9iamVjdFBhZ2VcIixcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG5cblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhvVmlzdWFsaXphdGlvbiwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgb2YgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHMgZm9yIGFsbCBEYXRhRmllbGRGb3JBY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBsaW5lIGl0ZW1cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblx0Y29uc3QgYWRkVG9NYXAgPSBmdW5jdGlvbihrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdGlmIChrZXkpIHtcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcFtrZXldID0gdmFsdWU7XG5cdFx0fVxuXHR9O1xuXG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaChkYXRhRmllbGQgPT4ge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZztcblx0XHRcdFx0aWYgKGFjdGlvbk5hbWU/LmluZGV4T2YoXCIvXCIpIDwgMCAmJiAhZGF0YUZpZWxkLkRldGVybWluaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uVGFyZ2V0ID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldDtcblx0XHRcdFx0XHRpZiAoYWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHQvLyBBbm5vdGF0aW9uIGV4cGxpY2l0bHkgY29uZmlndXJlZCB3aXRoIG51bGwgKGFjdGlvbiBhZHZlcnRpc2VtZW50IHJlbGF0ZWQpXG5cdFx0XHRcdFx0XHRhZGRUb01hcChhY3Rpb25OYW1lLCBudWxsKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvblRhcmdldD8ucGFyYW1ldGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUgPSBhY3Rpb25UYXJnZXQucGFyYW1ldGVyc1swXS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHRhcmdldEV4cHJlc3Npb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdChwYXRoOiBzdHJpbmcpID0+IGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dCwgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lKVxuXHRcdFx0XHRcdFx0XHQpIGFzIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0RXhwcmVzc2lvbj8ucGF0aCkge1xuXHRcdFx0XHRcdFx0XHRhZGRUb01hcChhY3Rpb25OYW1lLCB0YXJnZXRFeHByZXNzaW9uLnBhdGgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRhZGRUb01hcChhY3Rpb25OYW1lLCB0YXJnZXRFeHByZXNzaW9uKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBvcGVyYXRpb25BdmFpbGFibGVNYXA7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NpZ25lZCB0byB0aGUgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCBUaGUgcmVjb3JkIGNvbnNpc3Rpbmcgb2YgYWN0aW9ucyBhbmQgdGhlaXIgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgQ1NWIHN0cmluZyBvZiBhbGwgcHJvcGVydHkgcGF0aHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcblx0XHRcdC8vIEFubm90YXRpb24gY29uZmlndXJlZCB3aXRoIGV4cGxpY2l0ICdudWxsJyAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsZXZhbnQpXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChhY3Rpb25OYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eU5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0eSBwYXRocyBhbmQgbm90IENvbnN0YW50IHZhbHVlcy5cblx0XHRcdHByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHByb3BlcnRpZXMuc2l6ZSkge1xuXHRcdC8vIFNvbWUgYWN0aW9ucyBoYXZlIGFuIG9wZXJhdGlvbiBhdmFpbGFibGUgYmFzZWQgb24gcHJvcGVydHkgLS0+IHdlIG5lZWQgdG8gbG9hZCB0aGUgSGVhZGVySW5mby5UaXRsZSBwcm9wZXJ0eVxuXHRcdC8vIHNvIHRoYXQgdGhlIGRpYWxvZyBvbiBwYXJ0aWFsIGFjdGlvbnMgaXMgZGlzcGxheWVkIHByb3Blcmx5IChCQ1AgMjE4MDI3MTQyNSlcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0Y29uc3QgdGl0bGVQcm9wZXJ0eSA9IChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aDtcblx0XHRpZiAodGl0bGVQcm9wZXJ0eSkge1xuXHRcdFx0cHJvcGVydGllcy5hZGQodGl0bGVQcm9wZXJ0eSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllcykuam9pbihcIixcIik7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCBvZiB0aGUgZGF0YSBtb2RlbFxuICogQHBhcmFtIGlzRW50aXR5U2V0XG4gKiBAcmV0dXJucyBBbGwgdGhlIGBVSS5IaWRkZW5gIHBhdGggZXhwcmVzc2lvbnMgZm91bmQgaW4gdGhlIHJlbGV2YW50IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogRXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zOiBFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goZGF0YUZpZWxkID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmXG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB8fFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSlcblx0XHQpIHtcblx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0YVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zLnB1c2goXG5cdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRnZXRCaW5kaW5nRXhwRnJvbUNvbnRleHQoXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRcdFx0XHRpc0VudGl0eVNldFxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGNvbnRleHQgY3VycmVudGx5IHJlZmVyZW5jZWQgYnkgdGhpcyBiaW5kaW5nIGJ5IHJlbW92aW5nIHRoZSBsYXN0IG5hdmlnYXRpb24gcHJvcGVydHkuXG4gKlxuICogSXQgaXMgdXNlZCAoc3BlY2lmaWNhbGx5IGluIHRoaXMgY2FzZSksIHRvIHRyYW5zZm9ybSBhIGJpbmRpbmcgbWFkZSBmb3IgYSBOYXZQcm9wIGNvbnRleHQgL01haW5PYmplY3QvTmF2UHJvcDEvTmF2UHJvcDIsXG4gKiBpbnRvIGEgYmluZGluZyBvbiB0aGUgcHJldmlvdXMgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS5cbiAqXG4gKiBAcGFyYW0gc291cmNlIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IEN1c3RvbUFjdGlvblxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBpc0VudGl0eVNldFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRCaW5kaW5nRXhwRnJvbUNvbnRleHQoXG5cdHNvdXJjZTogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW5cbik6IEV4cHJlc3Npb248YW55PiB7XG5cdGxldCBzRXhwcmVzc2lvbjogYW55IHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0KHNvdXJjZSBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0KHNvdXJjZSBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG5cdCkge1xuXHRcdHNFeHByZXNzaW9uID0gKHNvdXJjZSBhcyBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0fSBlbHNlIHtcblx0XHRzRXhwcmVzc2lvbiA9IChzb3VyY2UgYXMgQ3VzdG9tQWN0aW9uKT8udmlzaWJsZTtcblx0fVxuXHRsZXQgc1BhdGg6IHN0cmluZztcblx0aWYgKHNFeHByZXNzaW9uPy5wYXRoKSB7XG5cdFx0c1BhdGggPSBzRXhwcmVzc2lvbi5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHNQYXRoID0gc0V4cHJlc3Npb247XG5cdH1cblx0aWYgKHNQYXRoKSB7XG5cdFx0aWYgKChzb3VyY2UgYXMgQ3VzdG9tQWN0aW9uKT8udmlzaWJsZSkge1xuXHRcdFx0c1BhdGggPSBzUGF0aC5zdWJzdHJpbmcoMSwgc1BhdGgubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHRcdGlmIChzUGF0aC5pbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdC8vY2hlY2sgaWYgdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgaXMgY29ycmVjdDpcblx0XHRcdGNvbnN0IGFTcGxpdFBhdGggPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhU3BsaXRQYXRoWzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0Py5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJlxuXHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucGFydG5lciA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGJpbmRpbmdFeHByZXNzaW9uKGFTcGxpdFBhdGguc2xpY2UoMSkuam9pbihcIi9cIikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBubyBuYXZpZ2F0aW9uIHByb3BlcnR5LCBpZiBpdCdzIGFuIGVudGl0eVNldCwgdGhlIGV4cHJlc3Npb24gYmluZGluZyBoYXMgdG8gYmUgcmV0dXJuZWQ6XG5cdFx0fSBlbHNlIGlmIChpc0VudGl0eVNldCkge1xuXHRcdFx0cmV0dXJuIGJpbmRpbmdFeHByZXNzaW9uKHNQYXRoKTtcblx0XHRcdC8vIG90aGVyd2lzZSB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIGNhbm5vdCBiZSB0YWtlbiBpbnRvIGFjY291bnQgZm9yIHRoZSBzZWxlY3Rpb24gbW9kZSBldmFsdWF0aW9uOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb25zdGFudCh0cnVlKTtcbn1cblxuLyoqXG4gKiBMb29wIHRocm91Z2ggdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIG9mIGEgbGluZSBpdGVtIGFuZCBjaGVja1xuICogaWYgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIHRhYmxlIHRvb2xiYXIgKGFuZCByZXF1aXJlcyBhIGNvbnRleHQpLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBFbnRpdHkgVHlwZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCAxIGFjdGlvbiB0aGF0IG1lZXRzIHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sIGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogYm9vbGVhbiB7XG5cdHJldHVybiBsaW5lSXRlbUFubm90YXRpb24uc29tZShkYXRhRmllbGQgPT4ge1xuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgJiZcblx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gZmFsc2UgfHwgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHVuZGVmaW5lZClcblx0XHQpIHtcblx0XHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5zb21lKGFjdGlvbktleSA9PiB7XG5cdFx0Y29uc3QgYWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiAmJiBhY3Rpb24udmlzaWJsZT8udG9TdHJpbmcoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgdGhlIGN1c3RvbSBhY3Rpb25zICh3aXRoIGtleSByZXF1aXJlc1NlbGVjdGlvbikgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0IGZvciB0aGUgY3VycmVudCBsaW5lIGl0ZW0gYW5kIHJldHVybnMgYWxsIHRoZVxuICogdmlzaWJsZSBrZXkgdmFsdWVzIGFzIGFuIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgQXJyYXk8RXhwcmVzc2lvbjxib29sZWFuPj4gQWxsIHRoZSB2aXNpYmxlIHBhdGggZXhwcmVzc2lvbnMgb2YgdGhlIGFjdGlvbnMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogRXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVZpc2libGVQYXRoRXhwcmVzc2lvbnM6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAobWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5mb3JFYWNoKGFjdGlvbktleSA9PiB7XG5cdFx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRcdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUgJiYgYWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGFjdGlvbi52aXNpYmxlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0LypUaGUgZmluYWwgYWltIHdvdWxkIGJlIHRvIGNoZWNrIGlmIHRoZSBwYXRoIGV4cHJlc3Npb24gZGVwZW5kcyBvbiB0aGUgcGFyZW50IGNvbnRleHRcblx0XHRcdFx0XHRhbmQgY29uc2lkZXJzIG9ubHkgdGhvc2UgZXhwcmVzc2lvbnMgZm9yIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24sXG5cdFx0XHRcdFx0YnV0IGN1cnJlbnRseSBub3QgcG9zc2libGUgZnJvbSB0aGUgbWFuaWZlc3QgYXMgdGhlIHZpc2libGUga2V5IGlzIGJvdW5kIG9uIHRoZSBwYXJlbnQgZW50aXR5LlxuXHRcdFx0XHRcdFRyaWNreSB0byBkaWZmZXJlbnRpYXRlIHRoZSBwYXRoIGFzIGl0J3MgZG9uZSBmb3IgdGhlIEhpZGRlbiBhbm5vdGF0aW9uLlxuXHRcdFx0XHRcdEZvciB0aGUgdGltZSBiZWluZyB3ZSBjb25zaWRlciBhbGwgdGhlIHBhdGhzIG9mIHRoZSBtYW5pZmVzdCovXG5cblx0XHRcdFx0XHRhVmlzaWJsZVBhdGhFeHByZXNzaW9ucy5wdXNoKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbj8udmlzaWJsZT8udmFsdWVPZigpKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVZpc2libGVQYXRoRXhwcmVzc2lvbnM7XG59XG5cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIHBhdGggaXMgc3RhdGljYWxseSBkZWxldGFibGUgb3IgdXBkYXRhYmxlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7VGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb259IFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24ge1xuXHRjb25zdCBpc0RlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdGNvbnN0IGlzVXBkYXRhYmxlID0gaXNQYXRoVXBkYXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0cmV0dXJuIHtcblx0XHRpc0RlbGV0YWJsZTogIShpc0NvbnN0YW50KGlzRGVsZXRhYmxlKSAmJiBpc0RlbGV0YWJsZS52YWx1ZSA9PT0gZmFsc2UpLFxuXHRcdGlzVXBkYXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNVcGRhdGFibGUpICYmIGlzVXBkYXRhYmxlLnZhbHVlID09PSBmYWxzZSlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuLFxuXHR0YXJnZXRDYXBhYmlsaXRpZXM6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdH1cblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblx0bGV0IGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnM6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdLFxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zOiBFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRbXSxcblx0XHR1bmRlZmluZWQsXG5cdFx0ZmFsc2Vcblx0KTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlLCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB1bmRlZmluZWQpO1xuXHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnREZWxldGFibGUsIHRydWUpIDogaXNQYXJlbnREZWxldGFibGU7XG5cdH1cblx0aWYgKHNlbGVjdGlvbk1vZGUgJiYgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Ob25lKSB7XG5cdFx0aWYgKCFpc0VudGl0eVNldCkge1xuXHRcdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRzZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdGlmRWxzZShlcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIi9lZGl0TW9kZVwiLCBcInVpXCIpLCBcIkVkaXRhYmxlXCIpLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoXCJOb25lXCIpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzRW50aXR5U2V0KSB7XG5cdFx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlKSB7XG5cdFx0XHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHRcdFx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCFzZWxlY3Rpb25Nb2RlIHx8IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuQXV0bykge1xuXHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cblx0aWYgKFxuXHRcdGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSkgfHxcblx0XHRoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihtYW5pZmVzdEFjdGlvbnMpXG5cdCkge1xuXHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHR9XG5cdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRpc0VudGl0eVNldFxuXHQpO1xuXHRhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyA9IGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnMpO1xuXG5cdC8vIE5vIGFjdGlvbiByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHRpZiAoYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDAgJiYgYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0aWYgKCFpc0VudGl0eVNldCkge1xuXHRcdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0aWZFbHNlKGVxdWFsKGJpbmRpbmdFeHByZXNzaW9uKFwiL2VkaXRNb2RlXCIsIFwidWlcIiksIFwiRWRpdGFibGVcIiksIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHRcdH1cblx0XHRcdC8vIEVudGl0eVNldCBkZWxldGFibGU6XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHRcdFx0Ly8gRW50aXR5U2V0IG5vdCBkZWxldGFibGU6XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0fVxuXHRcdC8vIFRoZXJlIGFyZSBhY3Rpb25zIHJlcXVpcmluZyBhIGNvbnRleHQ6XG5cdH0gZWxzZSBpZiAoIWlzRW50aXR5U2V0KSB7XG5cdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0ZXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCIvZWRpdE1vZGVcIiwgXCJ1aVwiKSwgXCJFZGl0YWJsZVwiKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Ly9FbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSkge1xuXHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHRcdC8vRW50aXR5U2V0IG5vdCBkZWxldGFibGU6XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHRhYmxlIGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7UmVjb3JkPEJhc2VBY3Rpb24sIEJhc2VBY3Rpb24+fSBUaGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSwgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCB0YWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRjb25zdCBoaWRkZW5UYWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0bGV0IHRhYmxlQWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZCkgJiZcblx0XHRcdFx0IShkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IWRhdGFGaWVsZC5JbmxpbmUgJiZcblx0XHRcdFx0IWRhdGFGaWVsZC5EZXRlcm1pbmluZ1xuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdGtleToga2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdFx0XHRub3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5UYWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQWN0aW9uKSB7XG5cdFx0XHRcdHRhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHRhYmxlQWN0aW9uczogdGFibGVBY3Rpb25zLFxuXHRcdGhpZGRlblRhYmxlQWN0aW9uczogaGlkZGVuVGFibGVBY3Rpb25zXG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdGNyaXRpY2FsaXR5QW5ub3RhdGlvbjogUGF0aEFubm90YXRpb25FeHByZXNzaW9uPENyaXRpY2FsaXR5VHlwZT4gfCBFbnVtVmFsdWU8Q3JpdGljYWxpdHlUeXBlPiB8IHVuZGVmaW5lZCxcblx0aXNEcmFmdFJvb3Q6IGJvb2xlYW4sXG5cdHRhcmdldEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlXG4pOiBFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiB7XG5cdGxldCBkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbjogTWVzc2FnZVR5cGUgfCBFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGlmIChjcml0aWNhbGl0eUFubm90YXRpb24pIHtcblx0XHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihjcml0aWNhbGl0eUFubm90YXRpb24pIGFzIEV4cHJlc3Npb248TWVzc2FnZVR5cGU+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBFbnVtIFZhbHVlIHNvIHdlIGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgcGFydFxuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoY3JpdGljYWxpdHlBbm5vdGF0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGlmRWxzZShcblx0XHRpc0RyYWZ0Um9vdCAmJiBEcmFmdC5Jc05ld09iamVjdCxcblx0XHRNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiBhcyBNZXNzYWdlVHlwZSxcblx0XHRmb3JtYXRSZXN1bHQoXG5cdFx0XHRbZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24sIGJpbmRpbmdFeHByZXNzaW9uKGBmaWx0ZXJlZE1lc3NhZ2VzYCwgXCJpbnRlcm5hbFwiKV0sXG5cdFx0XHR0YWJsZUZvcm1hdHRlcnMucm93SGlnaGxpZ2h0aW5nLFxuXHRcdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHRcdClcblx0KTtcbn1cblxuZnVuY3Rpb24gX2dldENyZWF0aW9uQmVoYXZpb3VyKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uW1wiY3JlYXRlXCJdIHtcblx0Y29uc3QgbmF2aWdhdGlvbiA9IG5hdmlnYXRpb25TZXR0aW5ncz8uY3JlYXRlIHx8IG5hdmlnYXRpb25TZXR0aW5ncz8uZGV0YWlsO1xuXG5cdC8vIGNyb3NzLWFwcFxuXHRpZiAobmF2aWdhdGlvbj8ub3V0Ym91bmQgJiYgbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCAmJiBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRtb2RlOiBcIkV4dGVybmFsXCIsXG5cdFx0XHRvdXRib3VuZDogbmF2aWdhdGlvbi5vdXRib3VuZCxcblx0XHRcdG91dGJvdW5kRGV0YWlsOiBuYXZpZ2F0aW9uLm91dGJvdW5kRGV0YWlsLFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzOiBuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0XHR9O1xuXHR9XG5cblx0bGV0IG5ld0FjdGlvbjtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIGluLWFwcFxuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0bmV3QWN0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290Py5OZXdBY3Rpb24gfHwgdGFyZ2V0QW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/Lk5ld0FjdGlvbjsgLy8gVE9ETzogSXMgdGhlcmUgcmVhbGx5IG5vICdOZXdBY3Rpb24nIG9uIERyYWZ0Tm9kZT8gdGFyZ2V0QW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnROb2RlPy5OZXdBY3Rpb25cblxuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0Ly8gVE9ETzogT3IgZG9lcyBpdD9cblx0XHRcdHRocm93IEVycm9yKGBDcmVhdGlvbiBtb2RlICcke0NyZWF0aW9uTW9kZS5DcmVhdGlvblJvd30nIGNhbiBub3QgYmUgdXNlZCB3aXRoIGEgY3VzdG9tICduZXcnIGFjdGlvbiAoJHtuZXdBY3Rpb259KWApO1xuXHRcdH1cblx0XHRpZiAobmF2aWdhdGlvbj8ucm91dGUpIHtcblx0XHRcdC8vIHJvdXRlIHNwZWNpZmllZFxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bW9kZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdFx0XHRuZXdBY3Rpb246IG5ld0FjdGlvbj8udG9TdHJpbmcoKSxcblx0XHRcdFx0bmF2aWdhdGVUb1RhcmdldDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSA/IG5hdmlnYXRpb24ucm91dGUgOiB1bmRlZmluZWQgLy8gbmF2aWdhdGUgb25seSBpbiBOZXdQYWdlIG1vZGVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0Ly8gbm8gbmF2aWdhdGlvbiBvciBubyByb3V0ZSBzcGVjaWZpZWQgLSBmYWxsYmFjayB0byBpbmxpbmUgY3JlYXRlIGlmIG9yaWdpbmFsIGNyZWF0aW9uIG1vZGUgd2FzICdOZXdQYWdlJ1xuXHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSkge1xuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5JbmxpbmU7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpXG5cdH07XG59XG5cbmNvbnN0IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkgPSBmdW5jdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR0YXJnZXRQYXRoOiBzdHJpbmdcbikge1xuXHRsZXQgcHJlc3NQcm9wZXJ0eSwgbmF2aWdhdGlvblRhcmdldDtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxNZXNzYWdlVHlwZT4gPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGlmIChuYXZpZ2F0aW9uU2V0dGluZ3MgJiYgbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kaXNwbGF5Py50YXJnZXQgfHwgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ub3V0Ym91bmQ7XG5cdFx0aWYgKG5hdmlnYXRpb25UYXJnZXQpIHtcblx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcIi5oYW5kbGVycy5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoICRjb250cm9sbGVyICwnXCIgKyBuYXZpZ2F0aW9uVGFyZ2V0ICsgXCInLCAkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSlcIjtcblx0XHR9IGVsc2UgaWYgKHRhcmdldEVudGl0eVR5cGUpIHtcblx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ucm91dGU7XG5cdFx0XHRpZiAobmF2aWdhdGlvblRhcmdldCkge1xuXHRcdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0XHRcdFx0XHRsaW5lSXRlbUFubm90YXRpb24uYW5ub3RhdGlvbnM/LlVJPy5Dcml0aWNhbGl0eSxcblx0XHRcdFx0XHQhIXRhcmdldEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290IHx8ICEhdGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGUsXG5cdFx0XHRcdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRwcmVzc1Byb3BlcnR5ID1cblx0XHRcdFx0XHRcIkFQSS5vblRhYmxlUm93UHJlc3MoJGV2ZW50LCAkY29udHJvbGxlciwgJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0sIHsgY2FsbEV4dGVuc2lvbjogdHJ1ZSwgdGFyZ2V0UGF0aDogJ1wiICtcblx0XHRcdFx0XHR0YXJnZXRQYXRoICtcblx0XHRcdFx0XHRcIicsIGVkaXRhYmxlIDogXCIgK1xuXHRcdFx0XHRcdCh0YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fCB0YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZVxuXHRcdFx0XHRcdFx0PyBcIiEkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fS5nZXRQcm9wZXJ0eSgnSXNBY3RpdmVFbnRpdHknKVwiXG5cdFx0XHRcdFx0XHQ6IFwidW5kZWZpbmVkXCIpICtcblx0XHRcdFx0XHRcIn0pXCI7IC8vTmVlZCB0byBhY2Nlc3MgdG8gRHJhZnRSb290IGFuZCBEcmFmdE5vZGUgISEhISEhIVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IGdldEhpZ2hsaWdodFJvd0JpbmRpbmcobGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksIGZhbHNlLCB0YXJnZXRFbnRpdHlUeXBlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3Qgcm93TmF2aWdhdGVkRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuPiA9IGZvcm1hdFJlc3VsdChcblx0XHRbYmluZGluZ0V4cHJlc3Npb24oXCIvZGVlcGVzdFBhdGhcIiwgXCJpbnRlcm5hbFwiKV0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLm5hdmlnYXRlZFJvdyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG5cdHJldHVybiB7XG5cdFx0cHJlc3M6IHByZXNzUHJvcGVydHksXG5cdFx0YWN0aW9uOiBwcmVzc1Byb3BlcnR5ID8gXCJOYXZpZ2F0aW9uXCIgOiB1bmRlZmluZWQsXG5cdFx0cm93SGlnaGxpZ2h0aW5nOiBjb21waWxlQmluZGluZyhjcml0aWNhbGl0eVByb3BlcnR5KSxcblx0XHRyb3dOYXZpZ2F0ZWQ6IGNvbXBpbGVCaW5kaW5nKHJvd05hdmlnYXRlZEV4cHJlc3Npb24pXG5cdH07XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb2x1bW5zIGZyb20gdGhlIGVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNUb0JlQ3JlYXRlZCBUaGUgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHRhcmdldCBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkIGJhc2VkIG9uIExpbmVJdGVtIGFubm90YXRpb25zLlxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbiBzb3J0YWJsZSBjb2x1bW4gbmFtZXMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHJldHVybnMge0Fubm90YXRpb25UYWJsZUNvbHVtbltdfSBUaGUgY29sdW1uIGZyb20gdGhlIGVudGl0eVR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uKFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW10sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlXG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IHRhYmxlQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXTtcblx0Ly8gQ2F0Y2ggYWxyZWFkeSBleGlzdGluZyBjb2x1bW5zIC0gd2hpY2ggd2VyZSBhZGRlZCBiZWZvcmUgYnkgTGluZUl0ZW0gQW5ub3RhdGlvbnNcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0ZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdC8vIENhdGNoIGFscmVhZHkgZXhpc3RpbmcgY29sdW1ucyAtIHdoaWNoIHdlcmUgYWRkZWQgYmVmb3JlIGJ5IExpbmVJdGVtIEFubm90YXRpb25zXG5cdFx0Y29uc3QgZXhpc3RzID0gYW5ub3RhdGlvbkNvbHVtbnMuc29tZShjb2x1bW4gPT4ge1xuXHRcdFx0cmV0dXJuIGNvbHVtbi5uYW1lID09PSBwcm9wZXJ0eS5uYW1lO1xuXHRcdH0pO1xuXG5cdFx0Ly8gaWYgdGFyZ2V0IHR5cGUgZXhpc3RzLCBpdCBpcyBhIGNvbXBsZXggcHJvcGVydHkgYW5kIHNob3VsZCBiZSBpZ25vcmVkXG5cdFx0aWYgKCFwcm9wZXJ0eS50YXJnZXRUeXBlICYmICFleGlzdHMpIHtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRhYmxlVHlwZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29sdW1uSW5mby5wcm9wZXJ0eUluZm9zID0gcmVsYXRlZFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0Li4uY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzVGVtcGxhdGUsXG5cdFx0XHRcdFx0d3JhcDogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzV3JhcHBpbmdcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29sdW1uSW5mby5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzO1xuXHRcdFx0XHQvLyBDcmVhdGUgY29sdW1ucyBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgZm9yIEFMUCB1c2UgY2FzZS5cblx0XHRcdFx0YWRkaXRpb25hbFByb3BlcnR5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiB0YWJsZUNvbHVtbnM7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbHVtbiBkZWZpbml0aW9uIGZyb20gYSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IEVudGl0eSB0eXBlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBmdWxsUHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlUGF0aCBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5IGJhc2VkIG9uIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVzZURhdGFGaWVsZFByZWZpeCBTaG91bGQgYmUgcHJlZml4ZWQgd2l0aCBcIkRhdGFGaWVsZDo6XCIsIGVsc2UgaXQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIFwiUHJvcGVydHk6OlwiXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGF2YWlsYWJsZUZvckFkYXB0YXRpb24gRGVjaWRlcyB3aGV0aGVyIGNvbHVtbiBzaG91bGQgYmUgYXZhaWxhYmxlIGZvciBhZGFwdGF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGFsbCBub24gc29ydGFibGUgY29sdW1uIG5hbWVzXG4gKiBAcGFyYW0ge0FnZ3JlZ2F0aW9uSGVscGVyfSBhZ2dyZWdhdGlvbkhlbHBlciBUaGUgYWdncmVnYXRpb25IZWxwZXIgZm9yIHRoZSBlbnRpdHlcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtBbm5vdGF0aW9uVGFibGVDb2x1bW59IFRoZSBhbm5vdGF0aW9uIGNvbHVtbiBkZWZpbml0aW9uXG4gKi9cbmNvbnN0IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkgPSBmdW5jdGlvbihcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuXHR1c2VEYXRhRmllbGRQcmVmaXg6IGJvb2xlYW4sXG5cdGF2YWlsYWJsZUZvckFkYXB0YXRpb246IGJvb2xlYW4sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uIHtcblx0Y29uc3QgbmFtZSA9IHVzZURhdGFGaWVsZFByZWZpeCA/IHJlbGF0aXZlUGF0aCA6IFwiUHJvcGVydHk6OlwiICsgcmVsYXRpdmVQYXRoO1xuXHRjb25zdCBrZXkgPSAodXNlRGF0YUZpZWxkUHJlZml4ID8gXCJEYXRhRmllbGQ6OlwiIDogXCJQcm9wZXJ0eTo6XCIpICsgcmVwbGFjZVNwZWNpYWxDaGFycyhyZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5KTtcblx0Y29uc3QgaXNIaWRkZW4gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlO1xuXHRjb25zdCBncm91cFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb3BlcnR5Lm5hbWUgPyBfc2xpY2VBdFNsYXNoKHByb3BlcnR5Lm5hbWUsIHRydWUsIGZhbHNlKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSBwcm9wZXJ0eS5uYW1lO1xuXHRjb25zdCBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eTogYm9vbGVhbiA9IG5hbWUuaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgPiAtMTtcblx0Y29uc3QgZXhwb3J0U2V0dGluZ3MgPSBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eVxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludChwcm9wZXJ0eSlcblx0XHQgIH1cblx0XHQ6IHVuZGVmaW5lZDtcblx0cmV0dXJuIHtcblx0XHRrZXk6IGtleSxcblx0XHRpc0dyb3VwYWJsZTogIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5ICYmICFpc0hpZGRlbiA/IGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHkpIDogZmFsc2UsXG5cdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdGxhYmVsOiBfZ2V0TGFiZWwocHJvcGVydHksIGlzR3JvdXApLFxuXHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBfZ2V0TGFiZWwocHJvcGVydHkpIDogbnVsbCxcblx0XHRncm91cDogaXNHcm91cCA/IGdyb3VwUGF0aCA6IG51bGwsXG5cdFx0YW5ub3RhdGlvblBhdGg6IGZ1bGxQcm9wZXJ0eVBhdGgsXG5cdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoLFxuXHRcdC8vIEEgZmFrZSBwcm9wZXJ0eSB3YXMgY3JlYXRlZCBmb3IgdGhlIFRhcmdldFZhbHVlIHVzZWQgb24gRGF0YVBvaW50cywgdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgaGlkZGVuIGFuZCBub24gc29ydGFibGVcblx0XHRhdmFpbGFiaWxpdHk6XG5cdFx0XHQhYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiB8fCBpc0hpZGRlbiB8fCBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuIDogQXZhaWxhYmlsaXR5VHlwZS5BZGFwdGF0aW9uLFxuXHRcdG5hbWU6IG5hbWUsXG5cdFx0cmVsYXRpdmVQYXRoOiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eVxuXHRcdFx0PyAocHJvcGVydHkgYXMgYW55KS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LlRhcmdldD8uJHRhcmdldD8uVmFsdWU/LnBhdGggfHwgKHByb3BlcnR5IGFzIGFueSkuVmFsdWUucGF0aFxuXHRcdFx0OiByZWxhdGl2ZVBhdGgsXG5cdFx0c29ydGFibGU6ICFpc0hpZGRlbiAmJiBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihyZWxhdGl2ZVBhdGgpID09PSAtMSAmJiAhaXNEYXRhUG9pbnRGYWtlUHJvcGVydHksXG5cdFx0aXNLZXk6IHByb3BlcnR5LmlzS2V5LFxuXHRcdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5OiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSxcblx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3Ncblx0fSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG59O1xuXG4vKipcbiAqIFJldHVybnMgYm9vbGVhbiB0cnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfaXNWYWxpZENvbHVtbiA9IGZ1bmN0aW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0cmV0dXJuICEhZGF0YUZpZWxkLklubGluZTtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRkZWZhdWx0OlxuXHRcdC8vIFRvZG86IFJlcGxhY2Ugd2l0aCBwcm9wZXIgTG9nIHN0YXRlbWVudCBvbmNlIGF2YWlsYWJsZVxuXHRcdC8vICB0aHJvdyBuZXcgRXJyb3IoXCJVbmhhbmRsZWQgRGF0YUZpZWxkIEFic3RyYWN0IHR5cGU6IFwiICsgZGF0YUZpZWxkLiRUeXBlKTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGxhYmVsIGZvciBwcm9wZXJ0eSBhbmQgZGF0YUZpZWxkLlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHl9IHByb3BlcnR5IEVudGl0eSB0eXBlIHByb3BlcnR5IG9yIERhdGFGaWVsZCBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGlzR3JvdXBcbiAqIEByZXR1cm5zIHtzdHJpbmd9IExhYmVsIG9mIHRoZSBwcm9wZXJ0eSBvciBEYXRhRmllbGRcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9nZXRMYWJlbCA9IGZ1bmN0aW9uKHByb3BlcnR5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHksIGlzR3JvdXA6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghcHJvcGVydHkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERlZmF1bHQgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ7XG5cdFx0aWYgKGRhdGFGaWVsZERlZmF1bHQgJiYgIWRhdGFGaWVsZERlZmF1bHQucXVhbGlmaWVyICYmIGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnZhbHVlT2YoKSkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKTtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHByb3BlcnR5KSkge1xuXHRcdGlmICghIWlzR3JvdXAgJiYgcHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5uYW1lXG5cdFx0XHQpXG5cdFx0KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0eS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKClcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpKSk7XG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIFByb3BlcnR5SW5mbyBmb3IgZWFjaCBpZGVudGlmaWVkIHByb3BlcnR5IGNvbnN1bWVkIGJ5IGEgTGluZUl0ZW0uXG4gKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT59IGNvbHVtbnNUb0JlQ3JlYXRlZCBJZGVudGlmaWVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZXhpc3RpbmdDb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgTGluZUl0ZW1zIGFuZCBQcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGUuXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW4gbmFtZXMgd2hpY2ggY2Fubm90IGJlIHNvcnRlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBmb3IgdGhlIExpbmVJdGVtXG4gKiBAcmV0dXJucyB7QW5ub3RhdGlvblRhYmxlQ29sdW1uW119IFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQuXG4gKi9cbmNvbnN0IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyA9IGZ1bmN0aW9uKFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0ZXhpc3RpbmdDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCByZWxhdGVkQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXTtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRPYmplY3Qua2V5cyhjb2x1bW5zVG9CZUNyZWF0ZWQpLmZvckVhY2gobmFtZSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0sXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChuYW1lKSxcblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgdGhlIHJlbGF0ZWQgY29sdW1uIGFscmVhZHkgZXhpc3RzLlxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKGNvbHVtbiA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSk7XG5cdFx0aWYgKHJlbGF0ZWRDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gQ2FzZSAxOiBLZXkgY29udGFpbnMgRGF0YUZpZWxkIHByZWZpeCB0byBlbnN1cmUgYWxsIHByb3BlcnR5IGNvbHVtbnMgaGF2ZSB0aGUgc2FtZSBrZXkgZm9ybWF0LlxuXHRcdFx0Ly8gTmV3IGNyZWF0ZWQgcHJvcGVydHkgY29sdW1uIGlzIHNldCB0byBoaWRkZW4uXG5cdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKFxuXHRcdFx0XHRnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRyZWxhdGVkQ29sdW1uLmFubm90YXRpb25QYXRoICE9PSBhbm5vdGF0aW9uUGF0aCB8fFxuXHRcdFx0KHJlbGF0ZWRDb2x1bW4ucHJvcGVydHlJbmZvcyAmJiByZWxhdGVkQ29sdW1uLnByb3BlcnR5SW5mb3MuaW5kZXhPZihuYW1lKSAhPT0gLTEpXG5cdFx0KSB7XG5cdFx0XHQvLyBDYXNlIDI6IFRoZSBleGlzdGluZyBjb2x1bW4gcG9pbnRzIHRvIGEgTGluZUl0ZW0gKG9yKVxuXHRcdFx0Ly8gQ2FzZSAzOiBUaGlzIGlzIGEgc2VsZiByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBjb2x1bW4gYW5kXG5cdFx0XHQvLyBib3RoIGNhc2VzIHJlcXVpcmUgYSBkdW1teSBQcm9wZXJ0eUluZm8gZm9yIHNldHRpbmcgY29ycmVjdCBleHBvcnQgc2V0dGluZ3MuXG5cblx0XHRcdGNvbnN0IG5ld05hbWUgPSBcIlByb3BlcnR5OjpcIiArIG5hbWU7XG5cblx0XHRcdC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlbGF0ZWQgcHJvcGVydHkgY29sdW1uIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBpbiBhIHByZXZpb3VzIGl0ZXJhdGlvbi5cblx0XHRcdGlmICghZXhpc3RpbmdDb2x1bW5zLnNvbWUoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBuZXdOYW1lKSkge1xuXHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgcHJvcGVydHkgY29sdW1uIHdpdGggJ1Byb3BlcnR5OjonIHByZWZpeCxcblx0XHRcdFx0Ly8gU2V0IGl0IHRvIGhpZGRlbiBhcyBpdCBpcyBvbmx5IGNvbnN1bWVkIGJ5IENvbXBsZXggcHJvcGVydHkgaW5mb3MuXG5cdFx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2goXG5cdFx0XHRcdFx0Z2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZU1hcFtuYW1lXSA9IG5ld05hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBUaGUgcHJvcGVydHkgJ25hbWUnIGhhcyBiZWVuIHByZWZpeGVkIHdpdGggJ1Byb3BlcnR5OjonIGZvciB1bmlxdWVuZXNzLlxuXHQvLyBVcGRhdGUgdGhlIHNhbWUgaW4gb3RoZXIgcHJvcGVydHlJbmZvc1tdIHJlZmVyZW5jZXMgd2hpY2ggcG9pbnQgdG8gdGhpcyBwcm9wZXJ0eS5cblx0ZXhpc3RpbmdDb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcblx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcyA9IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5tYXAocHJvcGVydHlJbmZvID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm8pO1xuXHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcz8ubWFwKFxuXHRcdFx0cHJvcGVydHlJbmZvID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm9cblx0XHQpO1xuXHR9KTtcblxuXHRyZXR1cm4gcmVsYXRlZENvbHVtbnM7XG59O1xuXG4vKipcbiAqIEdldHRpbmcgdGhlIENvbHVtbiBOYW1lXG4gKiBJZiBpdCBwb2ludHMgdG8gYSBEYXRhRmllbGQgd2l0aCBvbmUgcHJvcGVydHkgb3IgRGF0YVBvaW50IHdpdGggb25lIHByb3BlcnR5LCBpdCB3aWxsIHVzZSB0aGUgcHJvcGVydHkgbmFtZVxuICogaGVyZSB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGV4aXN0aW5nIGZsZXggY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBEaWZmZXJlbnQgRGF0YUZpZWxkIHR5cGVzIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbmFtZSBvZiBhbm5vdGF0aW9uIGNvbHVtbnNcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZSA9IGZ1bmN0aW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHQvLyBUaGlzIGlzIG5lZWRlZCBhcyB3ZSBoYXZlIGZsZXhpYmlsaXR5IGNoYW5nZXMgYWxyZWFkeSB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgYWdhaW5zdFxuXHRpZiAoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aDtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LnBhdGgpIHtcblx0XHQvLyBUaGlzIGlzIGZvciByZW1vdmluZyBkdXBsaWNhdGUgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUsICdQcm9ncmVzcycgUHJvcGVydHkgaXMgcmVtb3ZlZCBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBEYXRhUG9pbnRcblx0XHRyZXR1cm4gKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUucGF0aDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdCBlbnRpdHkuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBgRGF0YUZpZWxkYCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcmVsYXRpdmUgcGF0aFxuICovXG5jb25zdCBfZ2V0UmVsYXRpdmVQYXRoID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogc3RyaW5nIHtcblx0bGV0IHJlbGF0aXZlUGF0aDogc3RyaW5nID0gXCJcIjtcblxuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LnBhdGg7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldD8udmFsdWU7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gcmVsYXRpdmVQYXRoO1xufTtcblxuY29uc3QgX3NsaWNlQXRTbGFzaCA9IGZ1bmN0aW9uKHBhdGg6IHN0cmluZywgaXNMYXN0U2xhc2g6IGJvb2xlYW4sIGlzTGFzdFBhcnQ6IGJvb2xlYW4pIHtcblx0Y29uc3QgaVNsYXNoSW5kZXggPSBpc0xhc3RTbGFzaCA/IHBhdGgubGFzdEluZGV4T2YoXCIvXCIpIDogcGF0aC5pbmRleE9mKFwiL1wiKTtcblxuXHRpZiAoaVNsYXNoSW5kZXggPT09IC0xKSB7XG5cdFx0cmV0dXJuIHBhdGg7XG5cdH1cblx0cmV0dXJuIGlzTGFzdFBhcnQgPyBwYXRoLnN1YnN0cmluZyhpU2xhc2hJbmRleCArIDEsIHBhdGgubGVuZ3RoKSA6IHBhdGguc3Vic3RyaW5nKDAsIGlTbGFzaEluZGV4KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2x1bW4gaXMgc29ydGFibGUuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgQ29sbGVjdGlvbiBvZiBub24tc29ydGFibGUgY29sdW1uIG5hbWVzIGFzIHBlciBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG4gKi9cbmNvbnN0IF9pc0NvbHVtblNvcnRhYmxlID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgbm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRsZXQgaXNTb3J0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXHRpZiAobm9uU29ydGFibGVDb2x1bW5zLmluZGV4T2YocHJvcGVydHlQYXRoKSA9PT0gLTEpIHtcblx0XHQvLyBDb2x1bW4gaXMgbm90IG1hcmtlZCBhcyBub24tc29ydGFibGUgdmlhIGFubm90YXRpb25cblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRcdGlzU29ydGFibGUgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0Ly8gQWN0aW9uIGNvbHVtbnMgYXJlIG5vdCBzb3J0YWJsZVxuXHRcdFx0XHRpc1NvcnRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaXNTb3J0YWJsZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIGZvciB0ZXh0IGZpZWxkcyBpbiBhIHRhYmxlLlxuICpcbiAqIEByZXR1cm5zIHtGb3JtYXRPcHRpb25zVHlwZX0gQ29sbGVjdGlvbiBvZiBmb3JtYXQgb3B0aW9ucyB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoKTogRm9ybWF0T3B0aW9uc1R5cGUge1xuXHRyZXR1cm4ge1xuXHRcdHRleHRMaW5lc0VkaXQ6IDRcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGxpbmUgaXRlbXMgZnJvbSBtZXRhZGF0YSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0xpbmVJdGVtfSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB3aXRoIHRoZWlyIGFubm90YXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGggVGhlIHZpc3VhbGl6YXRpb24gcGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge1RhYmxlQ29sdW1uW119IFRoZSBjb2x1bW5zIGZyb20gdGhlIGFubm90YXRpb25zXG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMgPSBmdW5jdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW10sXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fSxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID1cblx0XHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5Tb3J0UmVzdHJpY3Rpb25zXG5cdFx0XHRcdD8uTm9uU29ydGFibGVQcm9wZXJ0aWVzIGFzIEVkbS5Qcm9wZXJ0eVBhdGhbXSk/Lm1hcCgocHJvcGVydHk6IFByb3BlcnR5UGF0aCkgPT4gcHJvcGVydHkudmFsdWUpID8/IFtdLFxuXHRcdHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdHRhYmxlVHlwZTogVGFibGVUeXBlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIEdldCBjb2x1bW5zIGZyb20gdGhlIExpbmVJdGVtIEFubm90YXRpb25cblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaChsaW5lSXRlbSA9PiB7XG5cdFx0XHRpZiAoIV9pc1ZhbGlkQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID1cblx0XHRcdFx0aXNEYXRhRmllbGRUeXBlcyhsaW5lSXRlbSkgJiYgbGluZUl0ZW0uVmFsdWU/LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGxpbmVJdGVtKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gX2dldFJlbGF0aXZlUGF0aChsaW5lSXRlbSk7XG5cdFx0XHQvLyBEZXRlcm1pbmUgcHJvcGVydGllcyB3aGljaCBhcmUgY29uc3VtZWQgYnkgdGhpcyBMaW5lSXRlbS5cblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5KGxpbmVJdGVtLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZVR5cGUpO1xuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGdyb3VwUGF0aDogc3RyaW5nID0gX3NsaWNlQXRTbGFzaChyZWxhdGl2ZVBhdGgsIHRydWUsIGZhbHNlKTtcblx0XHRcdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcmVsYXRpdmVQYXRoO1xuXHRcdFx0Y29uc3Qgc0xhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBfZ2V0TGFiZWwobGluZUl0ZW0sIGlzR3JvdXApO1xuXHRcdFx0Y29uc3QgbmFtZSA9IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZShsaW5lSXRlbSk7XG5cdFx0XHRhbm5vdGF0aW9uQ29sdW1ucy5wdXNoKHtcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGxpbmVJdGVtKSxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRsYWJlbDogc0xhYmVsLFxuXHRcdFx0XHRncm91cExhYmVsOiBpc0dyb3VwID8gX2dldExhYmVsKGxpbmVJdGVtKSA6IG51bGwsXG5cdFx0XHRcdGdyb3VwOiBpc0dyb3VwID8gZ3JvdXBQYXRoIDogbnVsbCxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChsaW5lSXRlbS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogaXNEYXRhRmllbGRBbHdheXNIaWRkZW4obGluZUl0ZW0pID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQsXG5cdFx0XHRcdG5hbWU6IG5hbWUsXG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogcmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRzb3J0YWJsZTogX2lzQ29sdW1uU29ydGFibGUobGluZUl0ZW0sIHJlbGF0aXZlUGF0aCwgbm9uU29ydGFibGVDb2x1bW5zKSxcblx0XHRcdFx0cHJvcGVydHlJbmZvczogcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvczogYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczoge1xuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NXcmFwcGluZ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR3aWR0aDogbGluZUl0ZW0uYW5ub3RhdGlvbnM/LkhUTUw1Py5Dc3NEZWZhdWx0cz8ud2lkdGggfHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSgpLFxuXHRcdFx0XHRleHBvcnRDb250YWN0UHJvcGVydHk6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eVxuXHRcdFx0fSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXG5cdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1tuYW1lXTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgUHJvcGVydGllcyBvZiBFbnRpdHlUeXBlXG5cdGxldCB0YWJsZUNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVUeXBlXG5cdCk7XG5cdHRhYmxlQ29sdW1ucyA9IHRhYmxlQ29sdW1ucy5jb25jYXQoYW5ub3RhdGlvbkNvbHVtbnMpO1xuXG5cdC8vIENyZWF0ZSBhIHByb3BlcnR5SW5mbyBmb3IgZWFjaCByZWxhdGVkIHByb3BlcnR5LlxuXHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhjb2x1bW5zVG9CZUNyZWF0ZWQsIHRhYmxlQ29sdW1ucywgbm9uU29ydGFibGVDb2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0dGFibGVDb2x1bW5zID0gdGFibGVDb2x1bW5zLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG5cblx0cmV0dXJuIHRhYmxlQ29sdW1ucztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIGNoZWNrcyBhZ2FpbnN0IGV4aXN0aW5nIHByb3BlcnRpZXMgYWxyZWFkeSBhZGRlZCBieSBhbm5vdGF0aW9ucy5cbiAqIElmIGEgbm90IHlldCBzdG9yZWQgcHJvcGVydHkgaXMgZm91bmQgaXQgYWRkcyBpdCBmb3Igc29ydGluZyBhbmQgZmlsdGVyaW5nIG9ubHkgdG8gdGhlIGFubm90YXRpb25Db2x1bW5zLlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gcHJvcGVydGllc1xuICogQHBhcmFtIHtBbm5vdGF0aW9uVGFibGVDb2x1bW5bXX0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGVudGl0eVR5cGVcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgX2dldFByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbihcblx0cHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRsZXQgbWF0Y2hlZFByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdG1hdGNoZWRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24ocHJvcGVydHlQYXRoKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gYW5ub3RhdGlvbkNvbHVtbnMuZmluZChmdW5jdGlvbihhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcHJvcGVydHlQYXRoICYmIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbkNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5uYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0XHRcdFx0eyBbcHJvcGVydHlQYXRoXTogZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpIH0sXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2gocmVsYXRlZENvbHVtbnNbMF0pO1xuXHRcdFx0XHRyZXR1cm4gcmVsYXRlZENvbHVtbnNbMF0ubmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBtYXRjaGVkUHJvcGVydGllcztcbn07XG5cbmNvbnN0IF9hcHBlbmRDdXN0b21UZW1wbGF0ZSA9IGZ1bmN0aW9uKHByb3BlcnRpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0cmV0dXJuIHByb3BlcnRpZXNcblx0XHQubWFwKHByb3BlcnR5ID0+IHtcblx0XHRcdHJldHVybiBgeyR7cHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KX19YDtcblx0XHR9KVxuXHRcdC5qb2luKGAke1wiXFxuXCJ9YCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGFibGUgY29sdW1uIHByb3BlcnR5IHZhbHVlIGJhc2VkIG9uIGNlcnRhaW4gY29uZGl0aW9ucy5cbiAqXG4gKiBNYW5pZmVzdCBkZWZpbmVkIHByb3BlcnR5IHZhbHVlIGZvciBjdXN0b20gLyBhbm5vdGF0aW9uIGNvbHVtbnNcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWUgZm9yIGN1c3RvbSBjb2x1bW4gaWYgbm90IG92ZXJ3cml0dGVuIGluIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSB7YW55fSBwcm9wZXJ0eSBUaGUgY29sdW1uIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0ge2FueX0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIHtib29sZWFufSBpc0Fubm90YXRpb25Db2x1bW4gV2hldGhlciB0aGUgY29sdW1uLCBkZWZpbmVkIGluIG1hbmlmZXN0LCBjb3JyZXNwb25kcyB0byBhbiBleGlzdGluZyBhbm5vdGF0aW9uIGNvbHVtbi5cbiAqIEByZXR1cm5zIHthbnl9IERldGVybWluZWQgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSBjb2x1bW5cbiAqL1xuY29uc3QgX2dldE1hbmlmZXN0T3JEZWZhdWx0VmFsdWUgPSBmdW5jdGlvbihwcm9wZXJ0eTogYW55LCBkZWZhdWx0VmFsdWU6IGFueSwgaXNBbm5vdGF0aW9uQ29sdW1uOiBib29sZWFuKTogYW55IHtcblx0aWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBJZiBhbm5vdGF0aW9uIGNvbHVtbiBoYXMgbm8gcHJvcGVydHkgZGVmaW5lZCBpbiBtYW5pZmVzdCxcblx0XHQvLyBkbyBub3Qgb3ZlcndyaXRlIGl0IHdpdGggbWFuaWZlc3QgY29sdW1uJ3MgZGVmYXVsdCB2YWx1ZS5cblx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uQ29sdW1uID8gdW5kZWZpbmVkIDogZGVmYXVsdFZhbHVlO1xuXHR9XG5cdC8vIFJldHVybiB3aGF0IGlzIGRlZmluZWQgaW4gbWFuaWZlc3QuXG5cdHJldHVybiBwcm9wZXJ0eTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBjb2x1bW5zXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEN1c3RvbUNvbHVtbj59IFRoZSBjb2x1bW5zIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tTWFuaWZlc3QgPSBmdW5jdGlvbihcblx0Y29sdW1uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RUYWJsZUNvbHVtbj4sXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPiB7XG5cdGNvbnN0IGludGVybmFsQ29sdW1uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPiA9IHt9O1xuXG5cdGZvciAoY29uc3Qga2V5IGluIGNvbHVtbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbHVtbiA9IGNvbHVtbnNba2V5XTtcblx0XHQvLyBUbyBpZGVudGlmeSB0aGUgYW5ub3RhdGlvbiBjb2x1bW4gcHJvcGVydHkgb3ZlcndyaXRlIHZpYSBtYW5pZmVzdCB1c2UtY2FzZS5cblx0XHRjb25zdCBpc0Fubm90YXRpb25Db2x1bW4gPSBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKGNvbHVtbiA9PiBjb2x1bW4ua2V5ID09PSBrZXkpO1xuXHRcdEtleUhlbHBlci52YWxpZGF0ZUtleShrZXkpO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gX2dldFByb3BlcnR5TmFtZXMoXG5cdFx0XHRtYW5pZmVzdENvbHVtbi5wcm9wZXJ0aWVzLFxuXHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0ZW50aXR5VHlwZVxuXHRcdCk7XG5cblx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0aWQ6IFwiQ3VzdG9tQ29sdW1uOjpcIiArIGtleSxcblx0XHRcdG5hbWU6IFwiQ3VzdG9tQ29sdW1uOjpcIiArIGtleSxcblx0XHRcdGhlYWRlcjogbWFuaWZlc3RDb2x1bW4uaGVhZGVyLFxuXHRcdFx0d2lkdGg6IG1hbmlmZXN0Q29sdW1uLndpZHRoIHx8IHVuZGVmaW5lZCxcblx0XHRcdGhvcml6b250YWxBbGlnbjogX2dldE1hbmlmZXN0T3JEZWZhdWx0VmFsdWUobWFuaWZlc3RDb2x1bW4/Lmhvcml6b250YWxBbGlnbiwgSG9yaXpvbnRhbEFsaWduLkJlZ2luLCBpc0Fubm90YXRpb25Db2x1bW4pLFxuXHRcdFx0dHlwZTogbWFuaWZlc3RDb2x1bW4udHlwZSA9PT0gXCJTbG90XCIgPyBDb2x1bW5UeXBlLlNsb3QgOiBDb2x1bW5UeXBlLkRlZmF1bHQsXG5cdFx0XHRhdmFpbGFiaWxpdHk6IF9nZXRNYW5pZmVzdE9yRGVmYXVsdFZhbHVlKG1hbmlmZXN0Q29sdW1uPy5hdmFpbGFiaWxpdHksIEF2YWlsYWJpbGl0eVR5cGUuRGVmYXVsdCwgaXNBbm5vdGF0aW9uQ29sdW1uKSxcblx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdENvbHVtbi50ZW1wbGF0ZSB8fCBcInVuZGVmaW5lZFwiLFxuXHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0YW5jaG9yOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbj8uYW5jaG9yLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBQbGFjZW1lbnQuQWZ0ZXIgOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbi5wbGFjZW1lbnRcblx0XHRcdH0sXG5cdFx0XHRpc05hdmlnYWJsZTogaXNBbm5vdGF0aW9uQ29sdW1uID8gdW5kZWZpbmVkIDogaXNBY3Rpb25OYXZpZ2FibGUobWFuaWZlc3RDb2x1bW4sIG5hdmlnYXRpb25TZXR0aW5ncywgdHJ1ZSksXG5cdFx0XHRzZXR0aW5nczogbWFuaWZlc3RDb2x1bW4uc2V0dGluZ3MsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRwcm9wZXJ0eUluZm9zOiBwcm9wZXJ0eUluZm9zLFxuXHRcdFx0Zm9ybWF0T3B0aW9uczoge1xuXHRcdFx0XHQuLi5nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKCksXG5cdFx0XHRcdC4uLm1hbmlmZXN0Q29sdW1uLmZvcm1hdE9wdGlvbnNcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRTZXR0aW5nczoge1xuXHRcdFx0XHR0ZW1wbGF0ZTogcHJvcGVydHlJbmZvcyA/IF9hcHBlbmRDdXN0b21UZW1wbGF0ZShwcm9wZXJ0eUluZm9zKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZmllbGRMYWJlbDogcHJvcGVydHlJbmZvcyA/IG1hbmlmZXN0Q29sdW1uLmhlYWRlciA6IHVuZGVmaW5lZCxcblx0XHRcdFx0d3JhcDogcHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eUluZm9zLmxlbmd0aCA+IDEgPyB0cnVlIDogZmFsc2Vcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdHJldHVybiBpbnRlcm5hbENvbHVtbnM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UDEzbk1vZGUoXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gbWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGFQZXJzb25hbGl6YXRpb246IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IGJBbmFseXRpY2FsVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRpZiAodGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5wZXJzb25hbGl6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIFBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGNvbnN0IHBlcnNvbmFsaXphdGlvbjogYW55ID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MucGVyc29uYWxpemF0aW9uO1xuXHRcdGlmIChwZXJzb25hbGl6YXRpb24gPT09IHRydWUpIHtcblx0XHRcdC8vIFRhYmxlIHBlcnNvbmFsaXphdGlvbiBmdWxseSBlbmFibGVkLlxuXHRcdFx0cmV0dXJuIGJBbmFseXRpY2FsVGFibGUgPyBcIlNvcnQsQ29sdW1uLEZpbHRlcixHcm91cCxBZ2dyZWdhdGVcIiA6IFwiU29ydCxDb2x1bW4sRmlsdGVyXCI7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5jb2x1bW4pIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5maWx0ZXIpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5ncm91cCAmJiBiQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5hZ2dyZWdhdGUgJiYgYkFuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5sZW5ndGggPiAwID8gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTm8gcGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCkge1xuXHRcdFx0Ly8gRmVhdHVyZSBwYXJpdHkgd2l0aCBWMi5cblx0XHRcdC8vIEVuYWJsZSB0YWJsZSBmaWx0ZXJpbmcgYnkgZGVmYXVsdCBvbmx5IGluIGNhc2Ugb2YgQ29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0fVxuXHRcdGlmIChiQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkFnZ3JlZ2F0ZVwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIik7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIERlbGV0ZSBidXR0b24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25QYXRoIFBhdGggdG8gdGhlIG5hdmlnYXRpb24gZW50aXR5XG4gKiBAcGFyYW0gaXNUYXJnZXREZWxldGFibGUgRmxhZyB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgYSB0YXJnZXQgaXMgZGVsZXRhYmxlXG4gKiBAcGFyYW0gdmlld0NvbmZpZ3VyYXRpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdmlldyBwYXRoXG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVWaXNpYmxlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nLFxuXHRpc1RhcmdldERlbGV0YWJsZTogYm9vbGVhbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgdmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKG5hdlByb3AgPT4gbmF2UHJvcC5uYW1lKTtcblx0Y29uc3QgaXNEZWxldGVIaWRkZW5FeHByZXNzaW9uID0gY3VycmVudEVudGl0eVNldFxuXHRcdD8gYW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdChjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+KSB8fCBmYWxzZSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHQocGF0aDogc3RyaW5nKSA9PiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzKVxuXHRcdCAgKVxuXHRcdDogY29uc3RhbnQoZmFsc2UpO1xuXHRjb25zdCBpc0RlbGV0ZUhpZGRlbjogYW55ID0gY29tcGlsZUJpbmRpbmcoaXNEZWxldGVIaWRkZW5FeHByZXNzaW9uKTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlLCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBuYXZpZ2F0aW9uUGF0aCk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlQmluZGluZyhpc1BhcmVudERlbGV0YWJsZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXHQvL2RvIG5vdCBzaG93IGNhc2UgdGhlIGRlbGV0ZSBidXR0b24gaWYgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIGlzIGZhbHNlXG5cdGlmIChwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPT09IFwiZmFsc2VcIikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmIChwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgJiYgaXNEZWxldGVIaWRkZW4gIT09IFwidHJ1ZVwiKSB7XG5cdFx0Ly9EZWxldGUgSGlkZGVuIGluIGNhc2Ugb2YgdHJ1ZSBhbmQgcGF0aCBiYXNlZFxuXHRcdGlmIChpc0RlbGV0ZUhpZGRlbiAmJiBpc0RlbGV0ZUhpZGRlbiAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJ7PSAhJFwiICsgaXNEZWxldGVIaWRkZW4gKyBcIiAmJiAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZSd9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIns9ICR7dWk+L2VkaXRNb2RlfSA9PT0gJ0VkaXRhYmxlJ31cIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0aXNEZWxldGVIaWRkZW4gPT09IFwidHJ1ZVwiIHx8XG5cdFx0IWlzVGFyZ2V0RGVsZXRhYmxlIHx8XG5cdFx0KHZpZXdDb25maWd1cmF0aW9uICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRpZiAoaXNEZWxldGVIaWRkZW4gJiYgaXNEZWxldGVIaWRkZW4gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0cmV0dXJuIFwiez0gISRcIiArIGlzRGVsZXRlSGlkZGVuICsgXCIgJiYgJHt1aT4vZWRpdE1vZGV9ID09PSAnRWRpdGFibGUnfVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJ7PSAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZSd9XCI7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzQmluZGluZyhpc0RlbGV0ZUhpZGRlbkV4cHJlc3Npb24pKSB7XG5cdFx0Ly8gVUkuRGVsZXRlSGlkZGVuIGFubm90YXRpb24gcG9pbnRzIHRvIGEgcGF0aFxuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhub3QoaXNEZWxldGVIaWRkZW5FeHByZXNzaW9uKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbmFibGVtZW50IGZvciB0aGUgJ01hc3MgRWRpdCcgYnV0dG9uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBiTWFzc0VkaXRWaXNpYmxlIFRoZSB2aXNpYmlsaXR5IG9mIHRoZSAnTWFzcyBFZGl0JyBidXR0b25cbiAqIEByZXR1cm5zIHsqfSBFeHByZXNzaW9uIG9yIEJvb2xlYW4gdmFsdWUgZm9yIHRoZSBlbmFibGVtZW50IG9mIHRoZSAnTWFzcyBFZGl0JyBidXR0b25cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5hYmxlbWVudE1hc3NFZGl0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRiTWFzc0VkaXRWaXNpYmxlOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBib29sZWFuIHtcblx0aWYgKGJNYXNzRWRpdFZpc2libGUpIHtcblx0XHRjb25zdCBpc1BhcmVudFVwZGF0YWJsZTogYW55ID0gaXNQYXRoVXBkYXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdC8vd2hlbiB1cGRhdGFibGUgaXMgcGF0aCBiYXNlZCBhbmQgcG9pbnRpbmcgdG8gY3VycmVudCBlbnRpdHkgc2V0IHByb3BlcnR5LCB0aGF0IGNhc2UgaXMgaGFuZGxlZCBpbiB0YWJsZSBoZWxwZXIgYW5kIHJ1bnRpbWVcblx0XHRpZiAoaXNQYXJlbnRVcGRhdGFibGU/LmN1cnJlbnRFbnRpdHlSZXN0cmljdGlvbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCBvRXhwcmVzc2lvbjogYW55ID0gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnRVcGRhdGFibGUpO1xuXHRcdHJldHVybiBpc1BhcmVudFVwZGF0YWJsZVxuXHRcdFx0PyBcIns9ICV7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAyICYmIFwiICsgY29tcGlsZUJpbmRpbmcoaXNQYXJlbnRVcGRhdGFibGUsIG9FeHByZXNzaW9uKSArIFwifVwiXG5cdFx0XHQ6IGZhbHNlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2aXNpYmlsaXR5IGZvciB0aGUgJ01hc3MgRWRpdCcgYnV0dG9uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiBUaGUgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhYmxlXG4gKiBAcGFyYW0gdGFyZ2V0Q2FwYWJpbGl0aWVzIFRoZSB0YXJnZXQgY2FwYWJpbGl0eSByZXN0cmljdGlvbnMgZm9yIHRoZSB0YWJsZVxuICogQHBhcmFtIHNlbGVjdGlvbk1vZGUgVGhlIHNlbGVjdGlvbiBtb2RlIGZvciB0aGUgdGFibGVcbiAqIEByZXR1cm5zIHsqfSBFeHByZXNzaW9uIG9yIEJvb2xlYW4gdmFsdWUgZm9yIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSAnTWFzcyBFZGl0JyBidXR0b25cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJpbGl0eU1hc3NFZGl0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0Q2FwYWJpbGl0aWVzOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbixcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRiVXBkYXRlSGlkZGVuOiBhbnkgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuPy52YWx1ZU9mKCksXG5cdFx0Yk1hc3NFZGl0RW5hYmxlZDogYm9vbGVhbiA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy5lbmFibGVNYXNzRWRpdCB8fCBmYWxzZSxcblx0XHRpU2VsZWN0aW9uTGltaXQ6IG51bWJlciA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy5zZWxlY3Rpb25MaW1pdDtcblx0bGV0IGJNYXNzRWRpdFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xuXHRpZiAoKHNlbGVjdGlvbk1vZGUgJiYgc2VsZWN0aW9uTW9kZSA9PT0gXCJTaW5nbGVcIikgfHwgKGlTZWxlY3Rpb25MaW1pdCAmJiBpU2VsZWN0aW9uTGltaXQgPCAyKSkge1xuXHRcdGJNYXNzRWRpdFZpc2libGUgPSBmYWxzZTtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlICYmIChzZWxlY3Rpb25Nb2RlID09PSBcIkF1dG9cIiB8fCBzZWxlY3Rpb25Nb2RlID09PSBcIk5vbmVcIikpIHtcblx0XHRiTWFzc0VkaXRWaXNpYmxlID0gdHJ1ZTtcblx0fVxuXHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzPy5pc1VwZGF0YWJsZSAhPT0gZmFsc2UgJiYgYk1hc3NFZGl0VmlzaWJsZSAmJiBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0aWYgKGJVcGRhdGVIaWRkZW4gJiYgdHlwZW9mIGJVcGRhdGVIaWRkZW4gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRyZXR1cm4gIWJVcGRhdGVIaWRkZW4gJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgPyBjb21waWxlQmluZGluZyhVSS5Jc0VkaXRhYmxlKSA6IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoYlVwZGF0ZUhpZGRlbiAmJiBiVXBkYXRlSGlkZGVuPy5wYXRoKSB7XG5cdFx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2Vcblx0XHRcdFx0PyBjb21waWxlQmluZGluZyhhbmQoZXF1YWwoVUkuSXNFZGl0YWJsZSwgdHJ1ZSksIGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGJVcGRhdGVIaWRkZW4pLCBmYWxzZSkpKVxuXHRcdFx0XHQ6IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgPyBjb21waWxlQmluZGluZyhVSS5Jc0VkaXRhYmxlKSA6IGZhbHNlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIENyZWF0ZSBidXR0b24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNyZWF0aW9uTW9kZSBUaGUgbW9kZSB1c2VkIGZvciBjcmVhdGlvblxuICogQHBhcmFtIGlzSW5zZXJ0YWJsZSBBbm5vdGF0aW9uIGV4cHJlc3Npb24gb2YgSW5zZXJ0UmVzdHJpY3Rpb25zLkluc2VydGFibGVcbiAqIEBwYXJhbSB2aWV3Q29uZmlndXJhdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB2aWV3IHBhdGhcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBFeHByZXNzaW9uIG9yIEJvb2xlYW4gdmFsdWUgb2YgdGhlICdVSS5DcmVhdGVIaWRkZW4nIGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVZpc2libGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlIHwgXCJFeHRlcm5hbFwiLFxuXHRpc0luc2VydGFibGU6IEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgdmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKG5hdlByb3AgPT4gbmF2UHJvcC5uYW1lKTtcblx0Y29uc3QgaXNDcmVhdGVIaWRkZW46IEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjdXJyZW50RW50aXR5U2V0XG5cdFx0PyBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0KGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5DcmVhdGVIaWRkZW4gYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4pIHx8IGZhbHNlLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMpXG5cdFx0ICApXG5cdFx0OiBjb25zdGFudChmYWxzZSk7XG5cblx0Ly8gaWYgdGhlcmUgaXMgYSBjdXN0b20gbmV3IGFjdGlvbiB0aGUgY3JlYXRlIGJ1dHRvbiB3aWxsIGJlIGJvdW5kIGFnYWluc3QgdGhpcyBuZXcgYWN0aW9uIChpbnN0ZWFkIG9mIGEgUE9TVCBhY3Rpb24pLlxuXHQvLyBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgY3JlYXRlIGJ1dHRvbiB0aGVuIGRlcGVuZHMgb24gdGhlIG5ldyBhY3Rpb24ncyBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiAoaW5zdGVhZCBvZiB0aGUgaW5zZXJ0UmVzdHJpY3Rpb25zKTpcblx0Ly8gT3BlcmF0aW9uQXZhaWxhYmxlID0gdHJ1ZSBvciB1bmRlZmluZWQgLT4gY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gT3BlcmF0aW9uQXZhaWxhYmxlID0gZmFsc2UgLT4gY3JlYXRlIGlzIG5vdCB2aXNpYmxlXG5cdGNvbnN0IG5ld0FjdGlvbk5hbWU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gPSBjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uPy50b1N0cmluZygpO1xuXHRjb25zdCBzaG93Q3JlYXRlRm9yTmV3QWN0aW9uID0gbmV3QWN0aW9uTmFtZVxuXHRcdD8gYW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGUoKS5hY3Rpb25zW25ld0FjdGlvbk5hbWVdLmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSxcblx0XHRcdFx0W10sXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQsIFtdKVxuXHRcdCAgKVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdC8vIC0gSWYgaXQncyBzdGF0aWNhbGx5IG5vdCBpbnNlcnRhYmxlIC0+IGNyZWF0ZSBpcyBub3QgdmlzaWJsZVxuXHQvLyAtIElmIGNyZWF0ZSBpcyBzdGF0aWNhbGx5IGhpZGRlbiAtPiBjcmVhdGUgaXMgbm90IHZpc2libGVcblx0Ly8gLSBJZiBpdCdzIGFuIEFMUCB0ZW1wbGF0ZSAtPiBjcmVhdGUgaXMgbm90IHZpc2libGVcblx0Ly8gLVxuXHQvLyAtIE90aGVyd2lzZVxuXHQvLyBcdCAtIElmIHRoZSBjcmVhdGUgbW9kZSBpcyBleHRlcm5hbCAtPiBjcmVhdGUgaXMgdmlzaWJsZVxuXHQvLyBcdCAtIElmIHdlJ3JlIG9uIHRoZSBsaXN0IHJlcG9ydCAtPlxuXHQvLyBcdCBcdC0gSWYgVUkuQ3JlYXRlSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5IHBhdGggLT4gcHJvdmlkZSBhIG5lZ2F0ZWQgYmluZGluZyB0byB0aGlzIHBhdGhcblx0Ly8gXHQgXHQtIE90aGVyd2lzZSwgY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgLSBPdGhlcndpc2Vcblx0Ly8gXHQgICAtIFRoaXMgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgdGhlIHRoZSBVSS5Jc0VkaXRhYmxlXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0b3IoXG5cdFx0XHRvcihcblx0XHRcdFx0ZXF1YWwoc2hvd0NyZWF0ZUZvck5ld0FjdGlvbiwgZmFsc2UpLFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChpc0luc2VydGFibGUpLCBlcXVhbChpc0luc2VydGFibGUsIGZhbHNlKSwgZXF1YWwoc2hvd0NyZWF0ZUZvck5ld0FjdGlvbiwgdW5kZWZpbmVkKSlcblx0XHRcdCksXG5cdFx0XHRpc0NvbnN0YW50KGlzQ3JlYXRlSGlkZGVuKSAmJiBlcXVhbChpc0NyZWF0ZUhpZGRlbiwgdHJ1ZSksXG5cdFx0XHRvcihcblx0XHRcdFx0dmlld0NvbmZpZ3VyYXRpb24gPyBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnModmlld0NvbmZpZ3VyYXRpb24pIDogZmFsc2UsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHRcdClcblx0XHQpLFxuXHRcdGZhbHNlLFxuXHRcdGlmRWxzZShcblx0XHRcdGNyZWF0aW9uTW9kZSA9PT0gXCJFeHRlcm5hbFwiLFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRcdGlmRWxzZShpc0JpbmRpbmcoaXNDcmVhdGVIaWRkZW4pLCBub3QoaXNDcmVhdGVIaWRkZW4pLCB0cnVlKSxcblx0XHRcdFx0YW5kKG5vdChpc0NyZWF0ZUhpZGRlbiksIFVJLklzRWRpdGFibGUpXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpc2liaWxpdHkgZm9yIHRoZSBQYXN0ZSBidXR0b24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNyZWF0aW9uQmVoYXZpb3VyIFRoZSBjaG9zZW4gYmVoYXZpb3Igb2YgY3JlYXRpb25cbiAqIEBwYXJhbSBpc0luc2VydGFibGUgVGhlIGV4cHJlc3Npb24gd2hpY2ggZGVub3RlcyBpbnNlcnQgcmVzdHJpY3Rpb25zXG4gKiBAcGFyYW0gcGFzdGVFbmFibGVkSW5NYW5pZmVzdCBUaGUgZmxhZyB3aGljaCBkZW5vdGVzIHRoZSBwYXN0ZSBlbmFibGVtZW50IHN0YXR1cyB2aWEgbWFuaWZlc3RcbiAqIEBwYXJhbSB2aWV3Q29uZmlndXJhdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB2aWV3IHBhdGhcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBFeHByZXNzaW9uIG9yIEJvb2xlYW4gdmFsdWUgb2YgdGhlIFVJLkNyZWF0ZUhpZGRlbiBhbm5vdGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXN0ZUVuYWJsZWQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNyZWF0aW9uQmVoYXZpb3VyOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uW1wiY3JlYXRlXCJdLFxuXHRpc0luc2VydGFibGU6IEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHBhc3RlRW5hYmxlZEluTWFuaWZlc3Q6IGJvb2xlYW4sXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly8gSWYgY3JlYXRlIGlzIG5vdCB2aXNpYmxlIC0+IGl0J3Mgbm90IGVuYWJsZWRcblx0Ly8gSWYgY3JlYXRlIGlzIHZpc2libGUgLT5cblx0Ly8gXHQgSWYgaXQncyBpbiB0aGUgTGlzdFJlcG9ydCAtPiBub3QgZW5hYmxlZFxuXHQvL1x0IElmIGl0J3MgaW5zZXJ0YWJsZSAtPiBlbmFibGVkXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0cGFzdGVFbmFibGVkSW5NYW5pZmVzdCAmJiBlcXVhbChnZXRDcmVhdGVWaXNpYmxlKGNvbnZlcnRlckNvbnRleHQsIGNyZWF0aW9uQmVoYXZpb3VyLm1vZGUsIGlzSW5zZXJ0YWJsZSwgdmlld0NvbmZpZ3VyYXRpb24pLCB0cnVlKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSAmJiBpc0luc2VydGFibGUsXG5cdFx0ZmFsc2Vcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyBQcmVzZW50YXRpb24gVmFyaWFudCBzb3J0IGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHtQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkfSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IFNvcnQgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0U29ydENvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgc29ydENvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXIpIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJUeXBlW10gPSBbXTtcblx0XHRjb25zdCBjb25kaXRpb25zID0ge1xuXHRcdFx0c29ydGVyczogc29ydGVyc1xuXHRcdH07XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goY29uZGl0aW9uID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IChjb25kaXRpb24uUHJvcGVydHkgYXMgUHJvcGVydHlQYXRoKT8uJHRhcmdldD8ubmFtZTtcblx0XHRcdGNvbnN0IHNvcnRDb2x1bW4gPSBjb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBwcm9wZXJ0eU5hbWUpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdHNvcnRDb2x1bW4/LnByb3BlcnR5SW5mb3M/LmZvckVhY2gocmVsYXRlZFByb3BlcnR5TmFtZSA9PiB7XG5cdFx0XHRcdC8vIENvbXBsZXggUHJvcGVydHlJbmZvLiBBZGQgZWFjaCByZWxhdGVkIHByb3BlcnR5IGZvciBzb3J0aW5nLlxuXHRcdFx0XHRjb25kaXRpb25zLnNvcnRlcnMucHVzaCh7XG5cdFx0XHRcdFx0bmFtZTogcmVsYXRlZFByb3BlcnR5TmFtZSxcblx0XHRcdFx0XHRkZXNjZW5kaW5nOiAhIWNvbmRpdGlvbi5EZXNjZW5kaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICghc29ydENvbHVtbj8ucHJvcGVydHlJbmZvcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIE5vdCBhIGNvbXBsZXggUHJvcGVydHlJbmZvLiBDb25zaWRlciB0aGUgcHJvcGVydHkgaXRzZWxmIGZvciBzb3J0aW5nLlxuXHRcdFx0XHRjb25kaXRpb25zLnNvcnRlcnMucHVzaCh7XG5cdFx0XHRcdFx0bmFtZTogcHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdGRlc2NlbmRpbmc6ICEhY29uZGl0aW9uLkRlc2NlbmRpbmdcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c29ydENvbmRpdGlvbnMgPSBjb25kaXRpb25zLnNvcnRlcnMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoY29uZGl0aW9ucykgOiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHNvcnRDb25kaXRpb25zO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHByb3BlcnR5UGF0aCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhdGhzIHRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKHBhdGhzOiBQcm9wZXJ0eVBhdGhbXSwgY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHN0cmluZ1tdIHtcblx0Y29uc3QgaW5mb05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRwYXRocy5mb3JFYWNoKGN1cnJlbnRQYXRoID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LiR0YXJnZXQ/Lm5hbWUpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IGNvbHVtbnMuZmluZChjb2x1bW4gPT4ge1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy4kdGFyZ2V0Py5uYW1lO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdGluZm9OYW1lcy5wdXNoKHByb3BlcnR5SW5mby5uYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBpbmZvTmFtZXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge1ByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGdyb3VwQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lkdyb3VwQnkpIHtcblx0XHRjb25zdCBhR3JvdXBCeSA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkdyb3VwQnkgYXMgUHJvcGVydHlQYXRoW107XG5cdFx0Y29uc3QgYUdyb3VwTGV2ZWxzID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhR3JvdXBCeSwgY29sdW1ucykubWFwKGluZm9OYW1lID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGluZm9OYW1lIH07XG5cdFx0fSk7XG5cblx0XHRncm91cENvbmRpdGlvbnMgPSBhR3JvdXBMZXZlbHMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoeyBncm91cExldmVsczogYUdyb3VwTGV2ZWxzIH0pIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgYWdncmVnYXRlIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHtQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkfSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgYWdncmVnYXRlQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlRvdGFsKSB7XG5cdFx0Y29uc3QgYVRvdGFscyA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlRvdGFsIGFzIFByb3BlcnR5UGF0aFtdO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0XHRjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFUb3RhbHMsIGNvbHVtbnMpLmZvckVhY2goaW5mb05hbWUgPT4ge1xuXHRcdFx0YWdncmVnYXRlc1tpbmZvTmFtZV0gPSB7fTtcblx0XHR9KTtcblxuXHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBKU09OLnN0cmluZ2lmeShhZ2dyZWdhdGVzKTtcblx0fVxuXG5cdHJldHVybiBhZ2dyZWdhdGVDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGl0bGU6IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZVBsdXJhbDtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgaGFzQWJzb2x1dGVQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDAsXG5cdFx0cDEzbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiksXG5cdFx0aWQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gVGFibGVJRCh2aXN1YWxpemF0aW9uUGF0aCkgOiBUYWJsZUlEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSwgXCJMaW5lSXRlbVwiKTtcblx0Y29uc3QgdGFyZ2V0Q2FwYWJpbGl0aWVzID0gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZWxlY3Rpb25Nb2RlID0gZ2V0U2VsZWN0aW9uTW9kZShsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBoYXNBYnNvbHV0ZVBhdGgsIHRhcmdldENhcGFiaWxpdGllcyk7XG5cdGxldCB0aHJlc2hvbGQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gMTAgOiAzMDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5NYXhJdGVtcykge1xuXHRcdHRocmVzaG9sZCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLk1heEl0ZW1zLnZhbHVlT2YoKSBhcyBudW1iZXI7XG5cdH1cblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gcGFnZU1hbmlmZXN0U2V0dGluZ3MuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBjcmVhdGlvbkJlaGF2aW91ciA9IF9nZXRDcmVhdGlvbkJlaGF2aW91cihsaW5lSXRlbUFubm90YXRpb24sIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpO1xuXHRsZXQgaXNQYXJlbnREZWxldGFibGU6IGFueSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRpZiAoaXNQYXJlbnREZWxldGFibGU/LmN1cnJlbnRFbnRpdHlSZXN0cmljdGlvbikge1xuXHRcdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVCaW5kaW5nKGlzUGFyZW50RGVsZXRhYmxlLCB0cnVlKSA6IGlzUGFyZW50RGVsZXRhYmxlO1xuXHRcdH1cblx0fVxuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGlzSW5zZXJ0YWJsZTogRXhwcmVzc2lvbjxib29sZWFuPiA9IGlzUGF0aEluc2VydGFibGUoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBiTWFzc0VkaXRWaXNpYmxlOiBhbnkgPSBnZXRWaXNpYmlsaXR5TWFzc0VkaXQoY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sIHRhcmdldENhcGFiaWxpdGllcywgc2VsZWN0aW9uTW9kZSk7XG5cdGNvbnN0IGlzU2VhcmNoYWJsZSA9IGlzUGF0aFNlYXJjaGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXG5cdHJldHVybiB7XG5cdFx0aWQ6IGlkLFxuXHRcdGVudGl0eU5hbWU6IGVudGl0eVNldCA/IGVudGl0eVNldC5uYW1lIDogXCJcIixcblx0XHRjb2xsZWN0aW9uOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHRyb3c6IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkoXG5cdFx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0UGF0aFxuXHRcdCksXG5cdFx0cDEzbk1vZGU6IHAxM25Nb2RlLFxuXHRcdHNob3c6IHtcblx0XHRcdFwiZGVsZXRlXCI6IGdldERlbGV0ZVZpc2libGUoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgdGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlLCB2aWV3Q29uZmlndXJhdGlvbiksXG5cdFx0XHRjcmVhdGU6IGNvbXBpbGVCaW5kaW5nKGdldENyZWF0ZVZpc2libGUoY29udmVydGVyQ29udGV4dCwgY3JlYXRpb25CZWhhdmlvdXI/Lm1vZGUsIGlzSW5zZXJ0YWJsZSkpLFxuXHRcdFx0cGFzdGU6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRnZXRQYXN0ZUVuYWJsZWQoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRjcmVhdGlvbkJlaGF2aW91cixcblx0XHRcdFx0XHRpc0luc2VydGFibGUsXG5cdFx0XHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uZW5hYmxlUGFzdGUsXG5cdFx0XHRcdFx0dmlld0NvbmZpZ3VyYXRpb25cblx0XHRcdFx0KVxuXHRcdFx0KSxcblx0XHRcdG1hc3NFZGl0OiB7XG5cdFx0XHRcdHZpc2libGU6IGJNYXNzRWRpdFZpc2libGUsXG5cdFx0XHRcdGVuYWJsZWQ6IGdldEVuYWJsZW1lbnRNYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBiTWFzc0VkaXRWaXNpYmxlKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGlzcGxheU1vZGU6IGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29uZmlndXJhdGlvbiksXG5cdFx0Y3JlYXRlOiBjcmVhdGlvbkJlaGF2aW91cixcblx0XHRzZWxlY3Rpb25Nb2RlOiBzZWxlY3Rpb25Nb2RlLFxuXHRcdGF1dG9CaW5kT25Jbml0OlxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgJiZcblx0XHRcdCEodmlld0NvbmZpZ3VyYXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKSksXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIiAmJiAhcDEzbk1vZGUgPyBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZSA6IHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdHRocmVzaG9sZDogdGhyZXNob2xkLFxuXHRcdHNvcnRDb25kaXRpb25zOiBnZXRTb3J0Q29uZGl0aW9ucyhwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29sdW1ucyksXG5cdFx0cGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZDogcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHRzZWFyY2hhYmxlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlICE9PSBcIkFuYWx5dGljYWxUYWJsZVwiICYmICEoaXNDb25zdGFudChpc1NlYXJjaGFibGUpICYmIGlzU2VhcmNoYWJsZS52YWx1ZSA9PT0gZmFsc2UpXG5cdH07XG59XG5cbmZ1bmN0aW9uIGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29uZmlndXJhdGlvbj86IFZpZXdQYXRoQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRjb25zdCB0ZW1wbGF0ZVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpO1xuXHRpZiAoXG5cdFx0dGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCB8fFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSB8fFxuXHRcdCh2aWV3Q29uZmlndXJhdGlvbiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnModmlld0NvbmZpZ3VyYXRpb24pKVxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvLyB1cGRhdGFibGUgd2lsbCBiZSBoYW5kbGVkIGF0IHRoZSBwcm9wZXJ0eSBsZXZlbFxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogU3BsaXQgdGhlIHZpc3VhbGl6YXRpb24gcGF0aCBpbnRvIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IHBhdGggYW5kIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGg6IHN0cmluZykge1xuXHRsZXQgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoXSA9IHZpc3VhbGl6YXRpb25QYXRoLnNwbGl0KFwiQFwiKTtcblxuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdC8vIERyb3AgdHJhaWxpbmcgc2xhc2hcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHIoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0fVxuXHRyZXR1cm4geyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24oXG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHNlbGVjdGlvblZhcmlhbnRQYXRoKTtcblx0Y29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb25WYXJpYW50VHlwZSA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgU2VsZWN0aW9uVmFyaWFudFR5cGU7XG5cblx0aWYgKHNlbGVjdGlvbikge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gW107XG5cdFx0c2VsZWN0aW9uLlNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lOiBhbnkgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3QgUHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWUudmFsdWU7XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lcy5pbmRleE9mKFByb3BlcnR5UGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdHByb3BlcnR5TmFtZXMucHVzaChQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0ZXh0OiBzZWxlY3Rpb24/LlRleHQ/LnRvU3RyaW5nKCksXG5cdFx0XHRwcm9wZXJ0eU5hbWVzOiBwcm9wZXJ0eU5hbWVzXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNoZWNrQ29uZGVuc2VkTGF5b3V0OiBib29sZWFuID0gZmFsc2Vcbik6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGFibGVTZXR0aW5ncyA9ICh0YWJsZU1hbmlmZXN0U2V0dGluZ3MgJiYgdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MpIHx8IHt9O1xuXHRsZXQgcXVpY2tTZWxlY3Rpb25WYXJpYW50OiBhbnk7XG5cdGNvbnN0IHF1aWNrRmlsdGVyUGF0aHM6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9W10gPSBbXTtcblx0bGV0IGVuYWJsZUV4cG9ydCA9IHRydWU7XG5cdGxldCBjcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuTmV3UGFnZTtcblx0bGV0IGZpbHRlcnM7XG5cdGxldCBjcmVhdGVBdEVuZCA9IHRydWU7XG5cdGxldCBkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhID0gZmFsc2U7XG5cdGxldCBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb247XG5cdGxldCBjb25kZW5zZWRUYWJsZUxheW91dCA9IGZhbHNlO1xuXHRsZXQgaGlkZVRhYmxlVGl0bGUgPSBmYWxzZTtcblx0bGV0IHRhYmxlVHlwZTogVGFibGVUeXBlID0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0bGV0IGVuYWJsZUZ1bGxTY3JlZW4gPSBmYWxzZTtcblx0bGV0IHNlbGVjdGlvbkxpbWl0ID0gMjAwO1xuXHRsZXQgbXVsdGlTZWxlY3RNb2RlO1xuXHRsZXQgZW5hYmxlUGFzdGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBcIk9iamVjdFBhZ2VcIjtcblx0Y29uc3QgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCA9IGNoZWNrQ29uZGVuc2VkTGF5b3V0ICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQoKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbik7XG5cdFx0dGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5wYXRocz8uZm9yRWFjaCgocGF0aDogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0pID0+IHtcblx0XHRcdHF1aWNrU2VsZWN0aW9uVmFyaWFudCA9IHRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgoXCJAXCIgKyBwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdC8vIHF1aWNrU2VsZWN0aW9uVmFyaWFudCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRpZiAocXVpY2tTZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRcdHF1aWNrRmlsdGVyUGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBwYXRoLmFubm90YXRpb25QYXRoIH0pO1xuXHRcdFx0fVxuXHRcdFx0ZmlsdGVycyA9IHtcblx0XHRcdFx0cXVpY2tGaWx0ZXJzOiB7XG5cdFx0XHRcdFx0ZW5hYmxlZDpcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdFx0XHRcdFx0XHRcdD8gXCJ7PSAke3BhZ2VJbnRlcm5hbD5oYXNQZW5kaW5nRmlsdGVyc30gIT09IHRydWV9XCJcblx0XHRcdFx0XHRcdFx0OiB0cnVlLFxuXHRcdFx0XHRcdHNob3dDb3VudHM6IHRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uc2hvd0NvdW50cyxcblx0XHRcdFx0XHRwYXRoczogcXVpY2tGaWx0ZXJQYXRoc1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0pO1xuXHRcdGNyZWF0aW9uTW9kZSA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5uYW1lIHx8IGNyZWF0aW9uTW9kZTtcblx0XHRjcmVhdGVBdEVuZCA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCAhPT0gdW5kZWZpbmVkID8gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kIDogdHJ1ZTtcblx0XHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRcdC8vIGlmIGEgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkLCBpLmUuIHNldCB0byBmYWxzZVxuXHRcdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgPSAhY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID8gISF0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSA6IGZhbHNlO1xuXHRcdGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dCAhPT0gdW5kZWZpbmVkID8gdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dCA6IGZhbHNlO1xuXHRcdGhpZGVUYWJsZVRpdGxlID0gISF0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uaGlkZVRhYmxlVGl0bGU7XG5cdFx0dGFibGVUeXBlID0gdGFibGVTZXR0aW5ncz8udHlwZSB8fCBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdFx0aWYgKHRhYmxlU2V0dGluZ3M/LnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIgJiYgIWFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0dGFibGVUeXBlID0gXCJHcmlkVGFibGVcIjtcblx0XHRcdH1cblx0XHRcdGlmICghdGFibGVTZXR0aW5ncz8udHlwZSkge1xuXHRcdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc0Rlc2t0b3AoKSAmJiBhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdFx0dGFibGVUeXBlID0gXCJBbmFseXRpY2FsVGFibGVcIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YWJsZVR5cGUgPSBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVuYWJsZUZ1bGxTY3JlZW4gPSB0YWJsZVNldHRpbmdzLmVuYWJsZUZ1bGxTY3JlZW4gfHwgZmFsc2U7XG5cdFx0aWYgKGVuYWJsZUZ1bGxTY3JlZW4gPT09IHRydWUgJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRcdGVuYWJsZUZ1bGxTY3JlZW4gPSBmYWxzZTtcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuRlVMTFNDUkVFTk1PREVfTk9UX09OX0xJU1RSRVBPUlQpO1xuXHRcdH1cblx0XHRzZWxlY3Rpb25MaW1pdCA9IHRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSB0cnVlIHx8IHRhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgPT09IDAgPyAwIDogdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCB8fCAyMDA7XG5cdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCB8fFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdFx0XHQpIHtcblx0XHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gISF0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA/IFwiRGVmYXVsdFwiIDogXCJDbGVhckFsbFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLnVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0XHRcdG11bHRpU2VsZWN0TW9kZSA9ICEhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkRlZmF1bHRcIiA6IFwiQ2xlYXJBbGxcIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSB0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA9PT0gZmFsc2UgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRlbmFibGVQYXN0ZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiICYmIHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGUgIT09IGZhbHNlO1xuXHRcdGVuYWJsZUV4cG9ydCA9XG5cdFx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnRcblx0XHRcdFx0OiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBcIk9iamVjdFBhZ2VcIiB8fCBlbmFibGVQYXN0ZTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGZpbHRlcnM6IGZpbHRlcnMsXG5cdFx0dHlwZTogdGFibGVUeXBlLFxuXHRcdGVuYWJsZUZ1bGxTY3JlZW46IGVuYWJsZUZ1bGxTY3JlZW4sXG5cdFx0aGVhZGVyVmlzaWJsZTogIShxdWlja1NlbGVjdGlvblZhcmlhbnQgJiYgaGlkZVRhYmxlVGl0bGUpLFxuXHRcdGVuYWJsZUV4cG9ydDogZW5hYmxlRXhwb3J0LFxuXHRcdGNyZWF0aW9uTW9kZTogY3JlYXRpb25Nb2RlLFxuXHRcdGNyZWF0ZUF0RW5kOiBjcmVhdGVBdEVuZCxcblx0XHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiBkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhLFxuXHRcdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLFxuXHRcdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBjb25kZW5zZWRUYWJsZUxheW91dCAmJiBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LFxuXHRcdHNlbGVjdGlvbkxpbWl0OiBzZWxlY3Rpb25MaW1pdCxcblx0XHRtdWx0aVNlbGVjdE1vZGU6IG11bHRpU2VsZWN0TW9kZSxcblx0XHRlbmFibGVQYXN0ZTogZW5hYmxlUGFzdGUsXG5cdFx0c2hvd1Jvd0NvdW50OiAhdGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5zaG93Q291bnRzLFxuXHRcdGVuYWJsZU1hc3NFZGl0OiB0YWJsZVNldHRpbmdzPy5lbmFibGVNYXNzRWRpdFxuXHR9O1xufVxuIl19
|