@sapui5/sap.fe.core 1.134.0 → 1.136.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +6 -62
- package/src/sap/fe/core/ActionRuntime.ts +14 -65
- package/src/sap/fe/core/AppComponent.js +10 -2
- package/src/sap/fe/core/AppComponent.ts +6 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -7
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/BaseController.js +1 -1
- package/src/sap/fe/core/CommonUtils.js +8 -4
- package/src/sap/fe/core/CommonUtils.ts +19 -4
- package/src/sap/fe/core/ExtensionAPI.js +7 -5
- package/src/sap/fe/core/ExtensionAPI.ts +5 -3
- package/src/sap/fe/core/IRowBindingInterface.js +1 -1
- package/src/sap/fe/core/InsightsFormattersExtension.js +1 -1
- package/src/sap/fe/core/PageController.js +36 -6
- package/src/sap/fe/core/PageController.ts +30 -0
- package/src/sap/fe/core/ResourceModel.js +1 -1
- package/src/sap/fe/core/ReuseComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/UIProvider.js +2 -2
- package/src/sap/fe/core/UIProvider.ts +3 -32
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +34 -16
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +39 -18
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +7 -7
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +9 -9
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -3
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +15 -15
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +19 -19
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -93
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +89 -108
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -1
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +355 -0
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +387 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +36 -11
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +36 -10
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +36 -6
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +5 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Paginator.js +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +1 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -9
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js +13 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -6
- package/src/sap/fe/core/controllerextensions/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +14 -11
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +20 -14
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +4 -12
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +12 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +111 -89
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +140 -105
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +137 -79
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +133 -120
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +26 -17
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +32 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +103 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +144 -53
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +29 -11
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +39 -15
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +24 -22
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +28 -26
- package/src/sap/fe/core/controllerextensions/editFlow/operations/actionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -572
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +25 -873
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +98 -56
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -80
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -3
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -4
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +1 -1
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +1 -1
- package/src/sap/fe/core/controls/Any.js +1 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/ComponentLoader.js +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/DataWatcher.js +4 -3
- package/src/sap/fe/core/controls/DataWatcher.tsx +4 -1
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +10 -4
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +13 -2
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +1 -1
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +42 -20
- package/src/sap/fe/core/converters/ManifestWrapper.js +8 -2
- package/src/sap/fe/core/converters/ManifestWrapper.ts +8 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +2 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +55 -6
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +45 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +60 -9
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.js +21 -5
- package/src/sap/fe/core/converters/controls/Common/Form.ts +25 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -1686
- package/src/sap/fe/core/converters/controls/Common/Table.ts +254 -2513
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +1701 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +2377 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +64 -15
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +76 -14
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -36
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +8 -46
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +10 -5
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +11 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +7 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +30 -8
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +5 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +184 -0
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +240 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
- package/src/sap/fe/core/designtime/messagebundle.properties +11 -0
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +27 -12
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -11
- package/src/sap/fe/core/fpm/Component.js +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +25 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +4 -3
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +6 -12
- package/src/sap/fe/core/helpers/DeleteHelper.ts +4 -9
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +9 -3
- package/src/sap/fe/core/helpers/FPMHelper.ts +13 -1
- package/src/sap/fe/core/helpers/HTTP503Handler.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
- package/src/sap/fe/core/helpers/MetaPath.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +15 -5
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +39 -40
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/WebSocket.js +11 -2
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +16 -4
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +1 -0
- package/src/sap/fe/core/manifestMerger/AddNewPage.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +25 -4
- package/src/sap/fe/core/messagebundle_bg.properties +25 -4
- package/src/sap/fe/core/messagebundle_ca.properties +24 -3
- package/src/sap/fe/core/messagebundle_cnr.properties +25 -4
- package/src/sap/fe/core/messagebundle_cs.properties +23 -2
- package/src/sap/fe/core/messagebundle_cy.properties +24 -3
- package/src/sap/fe/core/messagebundle_da.properties +25 -4
- package/src/sap/fe/core/messagebundle_de.properties +28 -7
- package/src/sap/fe/core/messagebundle_el.properties +23 -2
- package/src/sap/fe/core/messagebundle_en.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -5
- package/src/sap/fe/core/messagebundle_es.properties +23 -2
- package/src/sap/fe/core/messagebundle_es_MX.properties +23 -2
- package/src/sap/fe/core/messagebundle_et.properties +23 -2
- package/src/sap/fe/core/messagebundle_fi.properties +23 -2
- package/src/sap/fe/core/messagebundle_fr.properties +26 -5
- package/src/sap/fe/core/messagebundle_fr_CA.properties +23 -2
- package/src/sap/fe/core/messagebundle_hi.properties +24 -3
- package/src/sap/fe/core/messagebundle_hr.properties +27 -6
- package/src/sap/fe/core/messagebundle_hu.properties +23 -2
- package/src/sap/fe/core/messagebundle_id.properties +23 -2
- package/src/sap/fe/core/messagebundle_it.properties +25 -4
- package/src/sap/fe/core/messagebundle_iw.properties +24 -3
- package/src/sap/fe/core/messagebundle_ja.properties +24 -3
- package/src/sap/fe/core/messagebundle_kk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ko.properties +25 -4
- package/src/sap/fe/core/messagebundle_lt.properties +23 -2
- package/src/sap/fe/core/messagebundle_lv.properties +25 -4
- package/src/sap/fe/core/messagebundle_mk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ms.properties +24 -3
- package/src/sap/fe/core/messagebundle_nl.properties +23 -2
- package/src/sap/fe/core/messagebundle_no.properties +23 -2
- package/src/sap/fe/core/messagebundle_pl.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt_PT.properties +24 -3
- package/src/sap/fe/core/messagebundle_ro.properties +25 -4
- package/src/sap/fe/core/messagebundle_ru.properties +24 -3
- package/src/sap/fe/core/messagebundle_sh.properties +25 -4
- package/src/sap/fe/core/messagebundle_sk.properties +24 -3
- package/src/sap/fe/core/messagebundle_sl.properties +28 -7
- package/src/sap/fe/core/messagebundle_sr.properties +25 -4
- package/src/sap/fe/core/messagebundle_sv.properties +23 -2
- package/src/sap/fe/core/messagebundle_th.properties +25 -4
- package/src/sap/fe/core/messagebundle_tr.properties +23 -2
- package/src/sap/fe/core/messagebundle_uk.properties +25 -4
- package/src/sap/fe/core/messagebundle_vi.properties +25 -4
- package/src/sap/fe/core/messagebundle_zh_CN.properties +26 -5
- package/src/sap/fe/core/messagebundle_zh_TW.properties +24 -3
- package/src/sap/fe/core/rootView/Fcl.controller.js +11 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +16 -7
- package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -3
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +87 -35
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +113 -57
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +29 -13
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +8 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/InlineEditServiceFactory.js +11 -5
- package/src/sap/fe/core/services/InlineEditServiceFactory.ts +9 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +14 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +11 -5
- package/src/sap/fe/core/services/ShellServicesFactory.js +5 -4
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +28 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +199 -59
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +8 -10
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +11 -10
- package/src/sap/fe/core/templating/UIFormatters.js +5 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +3 -0
- package/src/sap/fe/core/type/Date.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +1 -1
- package/src/sap/fe/core/type/InputMask.js +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +0 -288
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.tsx +0 -208
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +0 -404
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +0 -502
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.js +0 -100
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.ts +0 -134
- package/src/sap/fe/core/operationsHelper.js +0 -192
- package/src/sap/fe/core/operationsHelper.ts +0 -277
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/library", "sap/ui/model/odata/v4/SubmitMode", "../../../helpers/ModelHelper", "../../../helpers/TypeGuards", "./ODataStrictHandling", "./actionHelper"], function (Log, deepClone, MetaModelConverter, FELibrary, SubmitMode, ModelHelper, TypeGuards, ODataStrictHandling, actionHelper) {
|
|
6
6
|
"use strict";
|
|
@@ -8,7 +8,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var isAction = TypeGuards.isAction;
|
|
10
10
|
var convertTypes = MetaModelConverter.convertTypes;
|
|
11
|
-
const Constants = FELibrary.Constants;
|
|
12
11
|
const InvocationGrouping = FELibrary.InvocationGrouping;
|
|
13
12
|
let ODataOperation = /*#__PURE__*/function () {
|
|
14
13
|
function ODataOperation(operation, parameters) {
|
|
@@ -16,7 +15,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
16
15
|
this.operationContextBindings = [];
|
|
17
16
|
this.firstIterationOperations = [];
|
|
18
17
|
this.apiGroupIdsToSubmit = new Set();
|
|
19
|
-
this.selectIsChanged = false;
|
|
20
18
|
this.bindingParameters = {};
|
|
21
19
|
this.operationParameters = [];
|
|
22
20
|
this.neverSubmitted = true;
|
|
@@ -62,15 +60,28 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
62
60
|
if (ModelHelper.isDraftRoot(entitySet)) {
|
|
63
61
|
additionalSelectProperties.push("HasActiveEntity");
|
|
64
62
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
if (
|
|
64
|
+
/* The former logic checked if the messagesPath is contained into the SideEffects
|
|
65
|
+
but the check was invalid (always true)
|
|
66
|
+
To be compliant with former version we don't check the SideEffects..
|
|
67
|
+
|
|
68
|
+
this.sideEffects &&
|
|
69
|
+
messagesPath &&
|
|
70
|
+
(this.sideEffects.pathExpressions ?? []).some((exp) => typeof exp === "string" && [messagesPath, "*"].includes(exp))*/
|
|
71
|
+
messagesPath && !!returnEntityType?.entityProperties.find(property => property.name === messagesPath)) {
|
|
72
|
+
additionalSelectProperties.push(messagesPath);
|
|
73
|
+
}
|
|
68
74
|
}
|
|
69
75
|
if (additionalSelectProperties.length) {
|
|
70
76
|
const selectProperties = additionalSelectProperties.join(",");
|
|
71
77
|
this.bindingParameters.$select = this.bindingParameters.$select ? `${this.bindingParameters.$select},${selectProperties}` : selectProperties;
|
|
72
|
-
this.selectIsChanged = true;
|
|
73
78
|
}
|
|
79
|
+
|
|
80
|
+
// We need to inherit the $select for the bound entity only if
|
|
81
|
+
// - the action returns the same entity
|
|
82
|
+
// - the $select has been customized
|
|
83
|
+
// otherwise we need to keep the value of $$inheritExpandSelect to false
|
|
84
|
+
this.bindingParameters.$$inheritExpandSelect = this.bindingParameters.$$inheritExpandSelect || !!additionalSelectProperties.length || isSameEntity;
|
|
74
85
|
}
|
|
75
86
|
}
|
|
76
87
|
|
|
@@ -127,8 +138,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
127
138
|
const groupId = this.operationProperties.groupId ?? "actionImport";
|
|
128
139
|
const promises = [this.invoke(operationContext, groupId)];
|
|
129
140
|
this.defaultSubmit(groupId);
|
|
130
|
-
|
|
141
|
+
await Promise.allSettled(this.firstIterationOperations);
|
|
131
142
|
await this.afterODataOperationExecution();
|
|
143
|
+
const currentPromiseValues = await Promise.all(promises);
|
|
132
144
|
return currentPromiseValues[0];
|
|
133
145
|
}
|
|
134
146
|
|
|
@@ -202,7 +214,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
202
214
|
* @param returnedContext The returned context of this operation
|
|
203
215
|
*/;
|
|
204
216
|
_proto.enhanceSideEffects = function enhanceSideEffects(operationContextBinding, returnedContext) {
|
|
205
|
-
if (returnedContext) {
|
|
217
|
+
if (returnedContext && this.parameters.ghostContextBindingProtection === true) {
|
|
206
218
|
const appComponent = this.parameters.appComponent;
|
|
207
219
|
const origin = operationContextBinding.requestSideEffects.bind(operationContextBinding);
|
|
208
220
|
operationContextBinding.requestSideEffects = async function () {
|
|
@@ -249,7 +261,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
249
261
|
if (context) {
|
|
250
262
|
this.failedContexts.push(context);
|
|
251
263
|
}
|
|
252
|
-
throw
|
|
264
|
+
throw error;
|
|
253
265
|
} finally {
|
|
254
266
|
await this.parameters.events?.onAfterODataInvoke?.(operationContextBinding, groupId);
|
|
255
267
|
}
|
|
@@ -396,14 +408,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
396
408
|
const sideEffectsService = this.parameters.appComponent.getSideEffectsService();
|
|
397
409
|
let promises = localPromise ?? [];
|
|
398
410
|
// trigger actions from side effects
|
|
399
|
-
if (this.sideEffects) {
|
|
400
|
-
|
|
401
|
-
// so we have to set * to get the properties back in the response
|
|
402
|
-
const pathExpressions = this.selectIsChanged ? [...(this.sideEffects.pathExpressions ?? []), ...["*"]] : this.sideEffects.pathExpressions;
|
|
403
|
-
promises = promises.concat((this.sideEffects.triggerActions ?? []).map(async action => sideEffectsService.executeAction(action, context, groupId)), pathExpressions ? sideEffectsService.requestSideEffects(pathExpressions, context, groupId) : []);
|
|
411
|
+
if (this.sideEffects && !this.parameters.disableSideEffects === true) {
|
|
412
|
+
promises = promises.concat((this.sideEffects.triggerActions ?? []).map(async action => sideEffectsService.executeAction(action, context, groupId)), this.sideEffects.pathExpressions ? sideEffectsService.requestSideEffects(this.sideEffects.pathExpressions, context, groupId) : []);
|
|
404
413
|
try {
|
|
405
414
|
await Promise.all(promises);
|
|
406
|
-
if (pathExpressions) {
|
|
415
|
+
if (this.sideEffects.pathExpressions) {
|
|
407
416
|
this.parameters.events?.onRequestSideEffects?.(this.sideEffects, this.operation, promises);
|
|
408
417
|
}
|
|
409
418
|
} catch (error) {
|
|
@@ -416,4 +425,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
416
425
|
_exports = ODataOperation;
|
|
417
426
|
return _exports;
|
|
418
427
|
}, false);
|
|
419
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zdGFudHMiLCJGRUxpYnJhcnkiLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJPRGF0YU9wZXJhdGlvbiIsIm9wZXJhdGlvbiIsInBhcmFtZXRlcnMiLCJvcGVyYXRpb25Qcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzIiwiZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zIiwiYXBpR3JvdXBJZHNUb1N1Ym1pdCIsIlNldCIsInNlbGVjdElzQ2hhbmdlZCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwib3BlcmF0aW9uUGFyYW1ldGVycyIsIm5ldmVyU3VibWl0dGVkIiwiZmFpbGVkQ29udGV4dHMiLCJvcGVyYXRpb25Qcm9taXNlcyIsImFjdGlvbk5hbWUiLCJhY3Rpb25IZWxwZXIiLCJnZXRBY3Rpb25OYW1lIiwiaXNBY3Rpb24iLCJhY3Rpb24iLCJzaWRlRWZmZWN0cyIsImFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJjb250ZXh0cyIsImlzRnVuY3Rpb24iLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJvRGF0YVN0cmljdEhhbmRsaW5nIiwiT0RhdGFTdHJpY3RIYW5kbGluZyIsImxhYmVsIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm9uU3RyaWN0UmVzcG9uc2UiLCJvblZhbGlkYXRpb24iLCJvblN0cmljdFZhbGlkYXRpb24iLCJiaW5kIiwib25DYW5jZWwiLCJvblN0cmljdENhbmNlbCIsImRlZmluZU9wZXJhdGlvblBhcmFtZXRlcnMiLCJzZXRCaW5kaW5nUGFyYW1ldGVycyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZGVlcENsb25lIiwiYWRkaXRpb25hbFNlbGVjdFByb3BlcnRpZXMiLCJlbmhhbmNlJHNlbGVjdCIsInJldHVybkVudGl0eVR5cGUiLCJtZXRhTW9kZWwiLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsIm1lc3NhZ2VzUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWVzc2FnZXNQYXRoIiwiZ2V0UGF0aCIsImVudGl0eVNldCIsImNvbnZlcnRUeXBlcyIsImVudGl0eVNldHMiLCJmaWx0ZXIiLCJlbnRpdHkiLCJlbnRpdHlUeXBlIiwiaXNTYW1lRW50aXR5IiwicmV0dXJuQ29sbGVjdGlvbiIsInNvdXJjZUVudGl0eVR5cGUiLCJpc0RyYWZ0Um9vdCIsInB1c2giLCJwYXRoRXhwcmVzc2lvbnMiLCJzb21lIiwiZXhwIiwiaW5jbHVkZXMiLCJzZWxlY3RQcm9wZXJ0aWVzIiwiam9pbiIsIiRzZWxlY3QiLCJnZXRBY3Rpb25QYXJhbWV0ZXJzIiwiY2xlYXIiLCJvcGVyYXRpb25Db250ZXh0QmluZGluZyIsImRlc3Ryb3kiLCJleGVjdXRlIiwicmVzdWx0IiwiQ2hhbmdlU2V0IiwiZXhlY3V0ZUNoYW5nZXNldCIsImV4ZWN1dGVTZXF1ZW50aWFsbHkiLCJQcm9taXNlIiwiYWxsU2V0dGxlZCIsImV4ZWN1dGVJbXBvcnQiLCJlcnJvciIsIkxvZyIsIm9uT0RhdGFSZXNwb25zZSIsIm9wZXJhdGlvbkNvbnRleHQiLCJiaW5kQ29udGV4dCIsInNldFBhcmFtZXRlcnNWYWx1ZSIsImdyb3VwSWQiLCJwcm9taXNlcyIsImludm9rZSIsImRlZmF1bHRTdWJtaXQiLCJjdXJyZW50UHJvbWlzZVZhbHVlcyIsImFsbCIsImFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24iLCJtYXAiLCJjb250ZXh0IiwiZXhlY3V0ZUJvdW5kT3BlcmF0aW9uIiwibWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscyIsIm9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbiIsInJlZHVjZSIsInByb21pc2UiLCJpZCIsInJlc29sdmUiLCJmaW5hbEdyb3VwSWQiLCJnZXRVcGRhdGVHcm91cElkIiwib3BlcmF0aW9uUHJvbWlzZSIsImVuaGFuY2VTaWRlRWZmZWN0cyIsInJldHVybmVkQ29udGV4dCIsIm9yaWdpbiIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImdldEluc3RhbmNlZFZpZXdzIiwiZmluZCIsInBhZ2VWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJmaXJzdEl0ZXJhdGlvblJlc29sdmUiLCJmaXJzdEl0ZXJhdGlvblJlamVjdCIsInN0cmljdEhhbmRsaW5nUHJvbWlzZSIsInJlamVjdCIsImlzQVBJTW9kZSIsImFkZCIsInNpZGVFZmZlY3RzQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvcGVyYXRpb25JbnZva2UiLCJpZ25vcmVFVGFnIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsInN1Ym1pdEJhdGNoIiwicmVwbGFjZVdpdGhSVkMiLCJyYWNlIiwiQWN0aW9uRXhlY3V0aW9uRmFpbGVkIiwib25BZnRlck9EYXRhSW52b2tlIiwiYm91bmRDb250ZXh0IiwicmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMiLCJpbmRleCIsImZhaWxlZENvbnRleHQiLCJzdWJtaXQiLCJzaXplIiwiQXJyYXkiLCJmcm9tIiwidmFsdWVzIiwic3VibWl0T25Nb2RlbCIsIm9uT0RhdGFTdWJtaXQiLCJpc1N0cmljdENhbmNlbGVkIiwiaXNDYW5jZWxlZCIsImRlbGV0ZSIsInN0YXJ0c1dpdGgiLCJzdWJtaXRNb2RlIiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm1vZGVscyIsInNldHRpbmdzIiwiZ3JvdXBQcm9wZXJ0aWVzIiwiU3VibWl0TW9kZSIsIkF1dG8iLCJEaXJlY3QiLCJmaXJzdFN1Ym1pdCIsImRlZmVycmVkU3VibWl0IiwiZGVmYXVsdFZhbHVlcyIsInBhcmFtZXRlcnNWYWx1ZXMiLCJwYXJhbWV0ZXIiLCJuYW1lIiwidHlwZSIsInNldFBhcmFtZXRlciIsImxvY2FsUHJvbWlzZSIsInNpZGVFZmZlY3RzU2VydmljZSIsImNvbmNhdCIsInRyaWdnZXJBY3Rpb25zIiwiZXhlY3V0ZUFjdGlvbiIsIm9uUmVxdWVzdFNpZGVFZmZlY3RzIiwiaW5mbyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT0RhdGFPcGVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25JbXBvcnQsIEFjdGlvblBhcmFtZXRlciwgQWN0aW9uIGFzIEVkbUFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBTdWJtaXRNb2RlIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvU3VibWl0TW9kZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uU2lkZUVmZmVjdHNUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQmluZENvbnRleHRQYXJhbWV0ZXJzIH0gZnJvbSBcIi4uL2RyYWZ0XCI7XG5pbXBvcnQgT0RhdGFTdHJpY3RIYW5kbGluZyBmcm9tIFwiLi9PRGF0YVN0cmljdEhhbmRsaW5nXCI7XG5pbXBvcnQgYWN0aW9uSGVscGVyIGZyb20gXCIuL2FjdGlvbkhlbHBlclwiO1xuXG5jb25zdCBDb25zdGFudHMgPSBGRUxpYnJhcnkuQ29uc3RhbnRzO1xuY29uc3QgSW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcblxuZXhwb3J0IHR5cGUgT3BlcmF0aW9uUmVzdWx0ID0ge1xuXHRyZXR1cm5lZENvbnRleHQ/OiBPRGF0YVY0Q29udGV4dDtcblx0Ym91bmRDb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9EYXRhT3BlcmF0aW9uIHtcblx0cHJpdmF0ZSBvcGVyYXRpb25Db250ZXh0QmluZGluZ3M6IE9EYXRhQ29udGV4dEJpbmRpbmdbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFwaUdyb3VwSWRzVG9TdWJtaXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgc2lkZUVmZmVjdHM6IEFjdGlvblNpZGVFZmZlY3RzVHlwZSB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvbk5hbWU6IHN0cmluZztcblxuXHRwcml2YXRlIHNlbGVjdElzQ2hhbmdlZCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgYmluZGluZ1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSA9IFtdO1xuXG5cdHByaXZhdGUgbmV2ZXJTdWJtaXR0ZWQgPSB0cnVlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgb0RhdGFTdHJpY3RIYW5kbGluZzogT0RhdGFTdHJpY3RIYW5kbGluZyB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGZhaWxlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25Qcm9taXNlczogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+W10gPSBbXTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IG9wZXJhdGlvbjogRWRtQWN0aW9uIHwgQWN0aW9uSW1wb3J0LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nPzogYm9vbGVhbjtcblx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0ZXZlbnRzPzoge1xuXHRcdFx0XHRvblN0cmljdFZhbGlkYXRpb24/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHN0cmljdCBoYW5kbGluZyBpcyB2YWxpZGF0ZWQgYnkgdGhlIGVuZCB1c2VyXG5cdFx0XHRcdG9uU3RyaWN0Q2FuY2VsPzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgY2FuY2VsZWQgYnkgdGhlIGVuZCB1c2VyXG5cdFx0XHRcdG9uU3RyaWN0UmVzcG9uc2U/OiAobWVzc2FnZXM0MTI6IE1lc3NhZ2VbXSkgPT4gdm9pZDsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gYmFja2VuZCByZXR1cm5zICA0MTIgbWVzc2FnZXMgKHN0cmljdCBoYW5kbGluZylcblx0XHRcdFx0b25PRGF0YVJlc3BvbnNlPzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIGFsbCByZXNwb25zZXMgcmVsYXRlZCB0byB0aGUgRmlvcmkgZWxlbWVudCBvcGVyYXRpb25zIGFyZSByZWNlaXZlZFxuXHRcdFx0XHRvbk9EYXRhU3VibWl0PzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIHRoZSBiYXRjaCBpcyBzdWJtaXR0ZWQgKHJlcXVlc3Qgc2VudCB0byB0aGUgYmFjayBlbmQpXG5cdFx0XHRcdG9uQWZ0ZXJPRGF0YUludm9rZT86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgcHJvbWlzZSBvZiBpbnZva2UgbWV0aG9kIG9mIHRoZSBvRGF0YUNvbnRleHRCaW5kaW5nIGlzIHJlc29sdmVkXG5cdFx0XHRcdG9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbj86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiBmaXJzdCByZXNwb25zZXMgcmVsYXRlZCB0byB0aGUgRmlvcmkgZWxlbWVudCBvcGVyYXRpb25zIGFyZSByZWNlaXZlZCAoYmVmb3JlIHN0cmljdCBoYW5kbGluZyBvciBmaW5hbCByZXNwb25zZSBpZiBubyA0MTIgYXJlIHJlY2VpdmVkKVxuXHRcdFx0XHRvblJlcXVlc3RTaWRlRWZmZWN0cz86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiBzaWRlRWZmZWN0cyBhcmUgdHJpZ2dlcmVkXG5cdFx0XHR9O1xuXHRcdFx0cGFyYW1ldGVyc1ZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdH0sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBvcGVyYXRpb25Qcm9wZXJ0aWVzOiB7XG5cdFx0XHRlbmhhbmNlJHNlbGVjdD86IGJvb2xlYW47XG5cdFx0XHRncm91cElkPzogc3RyaW5nO1xuXHRcdFx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdFx0XHRkZWZlcnJlZFN1Ym1pdD86IGJvb2xlYW47XG5cdFx0XHRpZ25vcmVFVGFnPzogYm9vbGVhbjtcblx0XHRcdHJlcGxhY2VXaXRoUlZDPzogYm9vbGVhbjtcblx0XHR9ID0ge31cblx0KSB7XG5cdFx0dGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uSGVscGVyLmdldEFjdGlvbk5hbWUoaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pID8gdGhpcy5vcGVyYXRpb24gOiB0aGlzLm9wZXJhdGlvbi5hY3Rpb24pO1xuXG5cdFx0dGhpcy5zaWRlRWZmZWN0cyA9IHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnRcblx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0LmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHModGhpcy5hY3Rpb25OYW1lLCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID8gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdIDogdW5kZWZpbmVkKTtcblxuXHRcdGlmICghKHRoaXMub3BlcmF0aW9uIGFzIEVkbUFjdGlvbikuaXNGdW5jdGlvbiAmJiB0aGlzLnBhcmFtZXRlcnMuZGlzYWJsZVN0cmljdEhhbmRsaW5nICE9PSB0cnVlKSB7XG5cdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcgPSBuZXcgT0RhdGFTdHJpY3RIYW5kbGluZyh7XG5cdFx0XHRcdGFwcENvbXBvbmVudDogdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdFx0Y29udGV4dHM6IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cyxcblx0XHRcdFx0bGFiZWw6IHRoaXMucGFyYW1ldGVycy5sYWJlbCA/PyB0aGlzLmFjdGlvbk5hbWUsXG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogdGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyxcblx0XHRcdFx0ZXZlbnRzOiB7XG5cdFx0XHRcdFx0b25SZXNwb25zZTogdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25TdHJpY3RSZXNwb25zZSxcblx0XHRcdFx0XHRvblZhbGlkYXRpb246IHRoaXMub25TdHJpY3RWYWxpZGF0aW9uLmJpbmQodGhpcyksXG5cdFx0XHRcdFx0b25DYW5jZWw6IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uU3RyaWN0Q2FuY2VsXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzLmRlZmluZU9wZXJhdGlvblBhcmFtZXRlcnMoKTtcblx0XHR0aGlzLnNldEJpbmRpbmdQYXJhbWV0ZXJzKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYmluZGluZyBwYXJhbWV0ZXJzIGZvciB0aGUgb3BlcmF0aW9ucy5cblx0ICovXG5cdHByaXZhdGUgc2V0QmluZGluZ1BhcmFtZXRlcnMoKTogdm9pZCB7XG5cdFx0dGhpcy5iaW5kaW5nUGFyYW1ldGVycyA9IGRlZXBDbG9uZSh0aGlzLm9wZXJhdGlvblByb3BlcnRpZXMuYmluZGluZ1BhcmFtZXRlcnMgPz8ge30pO1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0aWYgKGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSAmJiB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoICYmIHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5lbmhhbmNlJHNlbGVjdCA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgcmV0dXJuRW50aXR5VHlwZSA9IHRoaXMub3BlcmF0aW9uLnJldHVybkVudGl0eVR5cGU7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBtZXNzYWdlc1BhdGggPSBNb2RlbEhlbHBlci5nZXRNZXNzYWdlc1BhdGgobWV0YU1vZGVsLCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0uZ2V0UGF0aCgpKSE7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKS5lbnRpdHlTZXRzLmZpbHRlcigoZW50aXR5KSA9PiBlbnRpdHkuZW50aXR5VHlwZSA9PT0gcmV0dXJuRW50aXR5VHlwZSk/LlswXTtcblx0XHRcdGNvbnN0IGlzU2FtZUVudGl0eSA9XG5cdFx0XHRcdCF0aGlzLm9wZXJhdGlvbi5yZXR1cm5Db2xsZWN0aW9uICYmICEhcmV0dXJuRW50aXR5VHlwZSAmJiB0aGlzLm9wZXJhdGlvbi5zb3VyY2VFbnRpdHlUeXBlID09PSByZXR1cm5FbnRpdHlUeXBlO1xuXHRcdFx0aWYgKGlzU2FtZUVudGl0eSkge1xuXHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoZW50aXR5U2V0KSkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzLnB1c2goXCJIYXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5zaWRlRWZmZWN0cyAmJlxuXHRcdFx0XHRtZXNzYWdlc1BhdGggJiZcblx0XHRcdFx0KHRoaXMuc2lkZUVmZmVjdHMucGF0aEV4cHJlc3Npb25zID8/IFtdKS5zb21lKChleHApID0+IHR5cGVvZiBleHAgPT09IFwic3RyaW5nXCIgJiYgW21lc3NhZ2VzUGF0aCwgXCIqXCJdLmluY2x1ZGVzKGV4cCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0YWRkaXRpb25hbFNlbGVjdFByb3BlcnRpZXMucHVzaChtZXNzYWdlc1BhdGgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBzZWxlY3RQcm9wZXJ0aWVzID0gYWRkaXRpb25hbFNlbGVjdFByb3BlcnRpZXMuam9pbihcIixcIik7XG5cdFx0XHRcdHRoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCA9IHRoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdFxuXHRcdFx0XHRcdD8gYCR7dGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0fSwke3NlbGVjdFByb3BlcnRpZXN9YFxuXHRcdFx0XHRcdDogc2VsZWN0UHJvcGVydGllcztcblx0XHRcdFx0dGhpcy5zZWxlY3RJc0NoYW5nZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBvcGVyYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIGRlZmluZU9wZXJhdGlvblBhcmFtZXRlcnMoKTogdm9pZCB7XG5cdFx0aWYgKCFpc0FjdGlvbih0aGlzLm9wZXJhdGlvbikpIHtcblx0XHRcdHRoaXMub3BlcmF0aW9uUGFyYW1ldGVycyA9IHRoaXMub3BlcmF0aW9uLmFjdGlvbi5wYXJhbWV0ZXJzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL1JlbW92ZSB0aGUgYmluZGluZyBwYXJhbWV0ZXJzIGZyb20gdGhlIHBhcmFtZXRlcnMgbGlzdFxuXHRcdFx0dGhpcy5vcGVyYXRpb25QYXJhbWV0ZXJzID0gYWN0aW9uSGVscGVyLmdldEFjdGlvblBhcmFtZXRlcnModGhpcy5vcGVyYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIG9mIHRoaXMub3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzKSB7XG5cdFx0XHRvcGVyYXRpb25Db250ZXh0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5jbGVhcigpO1xuXHRcdHRoaXMub3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzID0gW107XG5cdFx0dGhpcy5mYWlsZWRDb250ZXh0cyA9IFtdO1xuXHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgb3BlcmF0aW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRhc3luYyBleGVjdXRlKCk6IFByb21pc2U8UHJvbWlzZVNldHRsZWRSZXN1bHQ8T3BlcmF0aW9uUmVzdWx0PltdPiB7XG5cdFx0bGV0IHJlc3VsdDogUHJvbWlzZVNldHRsZWRSZXN1bHQ8T3BlcmF0aW9uUmVzdWx0PltdO1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXN1bHQgPSBhd2FpdCAodGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHRcdD8gdGhpcy5leGVjdXRlQ2hhbmdlc2V0KClcblx0XHRcdFx0XHQ6IHRoaXMuZXhlY3V0ZVNlcXVlbnRpYWxseSgpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbdGhpcy5leGVjdXRlSW1wb3J0KCldKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIG9wZXJhdGlvbiBcIiArIHRoaXMuYWN0aW9uTmFtZSwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vbk9EYXRhUmVzcG9uc2U/LigpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBpbXBvcnQgb3BlcmF0aW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGV4ZWN1dGVJbXBvcnQoKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRjb25zdCBvcGVyYXRpb25Db250ZXh0ID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmJpbmRDb250ZXh0KGAvJHt0aGlzLmFjdGlvbk5hbWV9KC4uLilgKTtcblx0XHR0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncy5wdXNoKG9wZXJhdGlvbkNvbnRleHQpO1xuXHRcdHRoaXMuc2V0UGFyYW1ldGVyc1ZhbHVlKG9wZXJhdGlvbkNvbnRleHQpO1xuXHRcdGNvbnN0IGdyb3VwSWQgPSB0aGlzLm9wZXJhdGlvblByb3BlcnRpZXMuZ3JvdXBJZCA/PyBcImFjdGlvbkltcG9ydFwiO1xuXHRcdGNvbnN0IHByb21pc2VzID0gW3RoaXMuaW52b2tlKG9wZXJhdGlvbkNvbnRleHQsIGdyb3VwSWQpXTtcblxuXHRcdHRoaXMuZGVmYXVsdFN1Ym1pdChncm91cElkKTtcblx0XHRjb25zdCBjdXJyZW50UHJvbWlzZVZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRhd2FpdCB0aGlzLmFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTtcblx0XHRyZXR1cm4gY3VycmVudFByb21pc2VWYWx1ZXNbMF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbnMgb24gb25lIGNoYW5nZXNldC5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvbnNcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZUNoYW5nZXNldCgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKGFzeW5jIChjb250ZXh0KSA9PlxuXHRcdFx0dGhpcy5leGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dCwgdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQpXG5cdFx0KTtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMpO1xuXHRcdGF3YWl0IHRoaXMuYWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbigpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5tYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzKCk7XG5cdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uPy4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgb3BlcmF0aW9ucyBzZXF1ZW50aWFsbHkuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25zXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGV4ZWN1dGVTZXF1ZW50aWFsbHkoKTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W10+IHtcblx0XHQvLyBzZXJpYWxpemF0aW9uOiBleGVjdXRlQm91bmRPcGVyYXRpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGNvbnRleHQsIHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkID8/IGBhcGlNb2RlJHtpZCArIDF9YCkpO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHR9LCBQcm9taXNlLnJlc29sdmUoKSk7XG5cdFx0YXdhaXQgdGhpcy5hZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLm9wZXJhdGlvblByb21pc2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgYm91bmQgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgYm91bmQgY29udGV4dFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGdyb3VwSWQ/OiBzdHJpbmcpOiBQcm9taXNlPE9wZXJhdGlvblJlc3VsdD4ge1xuXHRcdGNvbnN0IG9wZXJhdGlvbkNvbnRleHQgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuYmluZENvbnRleHQoYCR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCwgY29udGV4dCwgdGhpcy5iaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0dGhpcy5zZXRQYXJhbWV0ZXJzVmFsdWUob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgZmluYWxHcm91cElkID0gZ3JvdXBJZCA/PyBvcGVyYXRpb25Db250ZXh0LmdldFVwZGF0ZUdyb3VwSWQoKTtcblx0XHRjb25zdCBvcGVyYXRpb25Qcm9taXNlID0gdGhpcy5pbnZva2Uob3BlcmF0aW9uQ29udGV4dCwgZmluYWxHcm91cElkKTtcblx0XHRwcm9taXNlcy5wdXNoKG9wZXJhdGlvblByb21pc2UpO1xuXHRcdHRoaXMuZGVmYXVsdFN1Ym1pdChmaW5hbEdyb3VwSWQpO1xuXHRcdFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cdFx0cmV0dXJuIG9wZXJhdGlvblByb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRW5oYW5jZXMgdGhlIHNpZGUgZWZmZWN0cyBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqXG5cdCAqIFdoZW4gYSBuZXcgZW50aXR5IGlzIGNyZWF0ZWQgdXNpbmcgYSBEYXRhRmllbGRGb3JBY3Rpb24sIGEgbmV3XG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgY3JlYXRlZCB0byBleGVjdXRlIHRoZSBhY3Rpb24uIEJ5IGRlZmF1bHQsIHRoaXNcblx0ICogb0RhdGFDb250ZXh0QmluZGluZyBpcyByZWxhdGl2ZSB0byB0aGUgT2RhdGFMaXN0QmluZGluZyBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEJlY2F1c2Ugb2YgdGhpcyBkZXBlbmRlbmN5LCB3aGVuIGEgU2lkZUVmZmVjdHMgaXMgZXhlY3V0ZWQgb24gdGhlXG5cdCAqIGNvbnRleHQgaW50byB0aGUgT2RhdGFMaXN0QmluZGluZyB3aGVyZSB0aGUgb0RhdGFDb250ZXh0QmluZGluZyB3YXMgYm91bmQsIHRoaXMgU2lkZUVmZmVjdHMgaXMgYWxzbyB0cmlnZ2VyZWQgb24gdGhpc1xuXHQgKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBXZSBkb24ndCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGVcblx0ICogb0RhdGFDb250ZXh0QmluZGluZy4gSXQgbWVhbnMgZXZlbiBpZiB0aGUgZHJhZnQgcmVsYXRlZCB0byB0aGUgYWN0aW9uXG5cdCAqIGlzIHJlbW92ZWQsIHRoZSBvZGF0YUNvbnRleHRCaW5kaW5nIGlzIHN0aWxsIHRoZXJlLCBzbyBpZiBhIFNpZGVFZmZlY3RzXG5cdCAqIGlzIGV4ZWN1dGVkIG9uIHRoZSBzb3VyY2UgdGFyZ2V0IGludG8gb0RhdGFDb250ZXh0QmluZGluZywgYW4gZXJyb3IgZnJvbSB0aGUgYmFjayBlbmQgd2lsbCBiZVxuXHQgKiByZWNlaXZlZCBiZWNhdXNlIHdlIGFzayB0byByZWZyZXNoIGEgcHJvcGVydHkgb24gYW4gdW5rbm93biBlbnRpdHkuXG5cdCAqXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmVxdWVzdGVkIG9ubHkgaWYgdGhlIHBhZ2UgaXMgc3RpbGwgb3Blbi5cblx0ICogVGhpcyBhdm9pZHMgZ2VuZXJhdGluZyBpc3N1ZXMgd2l0aCBnaG9zdCBvRGF0YUNvbnRleHRCaW5kaW5nIGxpbmtlZCB0byBkZXN0cm95ZWQgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIHJldHVybmVkQ29udGV4dCBUaGUgcmV0dXJuZWQgY29udGV4dCBvZiB0aGlzIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBlbmhhbmNlU2lkZUVmZmVjdHMob3BlcmF0aW9uQ29udGV4dEJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcsIHJldHVybmVkQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAocmV0dXJuZWRDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50O1xuXHRcdFx0Y29uc3Qgb3JpZ2luID0gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcucmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQob3BlcmF0aW9uQ29udGV4dEJpbmRpbmcpO1xuXHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcucmVxdWVzdFNpZGVFZmZlY3RzID0gYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKClcblx0XHRcdFx0XHRcdC5nZXRJbnN0YW5jZWRWaWV3cygpXG5cdFx0XHRcdFx0XHQuZmluZCgocGFnZVZpZXc6IFZpZXcpID0+IHBhZ2VWaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IHJldHVybmVkQ29udGV4dClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9yaWdpbiguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnZva2VzIHRoZSBvcGVyYXRpb24gb24gdGhlIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvcGVyYXRpb25Db250ZXh0QmluZGluZyBUaGUgb3BlcmF0aW9uIGNvbnRleHQgYmluZGluZ1xuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBpbnZva2Uob3BlcmF0aW9uQ29udGV4dEJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PiB7XG5cdFx0bGV0IHJldHVybmVkQ29udGV4dDtcblx0XHRsZXQgZmlyc3RJdGVyYXRpb25SZXNvbHZlITogRnVuY3Rpb247XG5cdFx0bGV0IGZpcnN0SXRlcmF0aW9uUmVqZWN0ITogRnVuY3Rpb247XG5cdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdQcm9taXNlID0gbmV3IFByb21pc2U8dW5rbm93bj4oZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdGZpcnN0SXRlcmF0aW9uUmVqZWN0ID0gcmVqZWN0O1xuXHRcdH0pO1xuXHRcdHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zLnB1c2goc3RyaWN0SGFuZGxpbmdQcm9taXNlKTtcblx0XHRpZiAoZ3JvdXBJZCAmJiB0aGlzLmlzQVBJTW9kZShncm91cElkKSkge1xuXHRcdFx0dGhpcy5hcGlHcm91cElkc1RvU3VibWl0LmFkZChncm91cElkKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzQ29udGV4dCA9XG5cdFx0XHRcdChvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpID8/IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0Y29uc3Qgb3BlcmF0aW9uSW52b2tlID0gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuaW52b2tlKFxuXHRcdFx0XHRncm91cElkLFxuXHRcdFx0XHR0aGlzLm9wZXJhdGlvblByb3BlcnRpZXMuaWdub3JlRVRhZyxcblx0XHRcdFx0dGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5oYW5kbGVPZGF0YVN0cmljdEhhbmRsaW5nLmJpbmQoXG5cdFx0XHRcdFx0dGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nLFxuXHRcdFx0XHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLFxuXHRcdFx0XHRcdGZpcnN0SXRlcmF0aW9uUmVzb2x2ZSxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c0NvbnRleHQsIGdyb3VwSWQsIFtdKTtcblx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5tb2RlbC5zdWJtaXRCYXRjaChncm91cElkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCksXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5yZXBsYWNlV2l0aFJWQ1xuXHRcdFx0KTtcblx0XHRcdHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQ29udGV4dCwgZ3JvdXBJZCwgW29wZXJhdGlvbkludm9rZV0pO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5yYWNlKFtvcGVyYXRpb25JbnZva2UsIHN0cmljdEhhbmRsaW5nUHJvbWlzZV0pO1xuXG5cdFx0XHRyZXR1cm5lZENvbnRleHQgPSBhd2FpdCBvcGVyYXRpb25JbnZva2U7XG5cdFx0XHR0aGlzLmVuaGFuY2VTaWRlRWZmZWN0cyhvcGVyYXRpb25Db250ZXh0QmluZGluZywgcmV0dXJuZWRDb250ZXh0KTtcblx0XHRcdGZpcnN0SXRlcmF0aW9uUmVzb2x2ZSgpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlamVjdChlcnJvcik7XG5cdFx0XHRjb25zdCBjb250ZXh0ID0gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Q29udGV4dCgpO1xuXHRcdFx0aWYgKGNvbnRleHQpIHtcblx0XHRcdFx0dGhpcy5mYWlsZWRDb250ZXh0cy5wdXNoKGNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBDb25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRhd2FpdCB0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vbkFmdGVyT0RhdGFJbnZva2U/LihvcGVyYXRpb25Db250ZXh0QmluZGluZywgZ3JvdXBJZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHJldHVybmVkQ29udGV4dCxcblx0XHRcdGJvdW5kQ29udGV4dDogb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KClcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqICBNYW5hZ2VzIHRoZSBzdHJpY3QgaGFuZGxpbmcgdmFsaWRhdGlvbi5cblx0ICovXG5cdHByaXZhdGUgb25TdHJpY3RWYWxpZGF0aW9uKCk6IHZvaWQge1xuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uU3RyaWN0VmFsaWRhdGlvbj8uKCk7XG5cdFx0dGhpcy5yZXRyaWdnZXJGYWlsZWRDb250ZXh0cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqICBUcmlnZ2VycyB0aGUgZmFpbGVkIG9wZXJhdGlvbnMgaW4gY2FzZSBvZiBzdHJpY3QgaGFuZGxpbmcuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBuZXcgb3BlcmF0aW9ucyBhcmUgcmVzb2x2ZWRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly9SZXRyeSB0aGUgYWN0aW9uIGV4ZWN1dGlvbiBpbiBjYXNlIG9mIHN0cmljdCBoYW5kbGluZyBhbmQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGZhaWxlZCBjb250ZXh0IChnaXZlIGl0IGFub3RoZXIgdHJ5IHRvIHN1Y2NlZWQpXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgIT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQpIHtcblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRmb3IgKGNvbnN0IGZhaWxlZENvbnRleHQgb2YgdGhpcy5mYWlsZWRDb250ZXh0cykge1xuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHR0aGlzLm9wZXJhdGlvblByb21pc2VzLnB1c2godGhpcy5leGVjdXRlQm91bmRPcGVyYXRpb24oZmFpbGVkQ29udGV4dCwgYGFwaVJldHJpZ2dlciR7aW5kZXggKyAxfWApKTtcblx0XHRcdH1cblx0XHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLm9wZXJhdGlvblByb21pc2VzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYmF0Y2ggcmVsYXRlZCB0byB0aGUgZ3JvdXBJZCBvZiB0aGUgb3BlcmF0aW9uLlxuXHQgKi9cblx0cHVibGljIHN1Ym1pdCgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMubmV2ZXJTdWJtaXR0ZWQgfHwgdGhpcy5hcGlHcm91cElkc1RvU3VibWl0LnNpemUgPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBncm91cElkIG9mIEFycmF5LmZyb20odGhpcy5hcGlHcm91cElkc1RvU3VibWl0LnZhbHVlcygpKSkge1xuXHRcdFx0dGhpcy5zdWJtaXRPbk1vZGVsKGdyb3VwSWQpO1xuXHRcdH1cblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vbk9EYXRhU3VibWl0Py4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgSXMgc3RyaWN0IGhhbmRsaW5nIGNhbmNlbGVkLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGl0IGlzIGNhbmNlbGVkLCBvdGhlcndpc2UgZmFsc2Vcblx0ICovXG5cdHB1YmxpYyBpc1N0cmljdENhbmNlbGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmc/LmlzQ2FuY2VsZWQoKSA/PyBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdWJtaXRzIHRoZSBiYXRjaCBhdCB0aGUgbW9kZWwgbGV2ZWwgcmVsYXRlZCB0byB0aGUgZ3JvdXBJZCBvZiB0aGUgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICovXG5cdHByaXZhdGUgc3VibWl0T25Nb2RlbChncm91cElkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnBhcmFtZXRlcnMubW9kZWwuc3VibWl0QmF0Y2goZ3JvdXBJZCk7XG5cdFx0dGhpcy5hcGlHcm91cElkc1RvU3VibWl0LmRlbGV0ZShncm91cElkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJcyB0aGUgU3VibWl0TW9kZSBvZiB0aGUgZ3JvdXBJZCBzZXQgdG8gQVBJLlxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgU3VibWl0TW9kZSBpcyBzZXQgdG8gQVBJLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgaXNBUElNb2RlKGdyb3VwSWQ/OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRpZiAoIWdyb3VwSWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGdyb3VwSWQuc3RhcnRzV2l0aChcIiRhdXRvXCIpIHx8IGdyb3VwSWQuc3RhcnRzV2l0aChcIiRkaXJlY3RcIikgfHwgZ3JvdXBJZC5zdGFydHNXaXRoKFwiJHNpbmdsZVwiKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCBzdWJtaXRNb2RlID0gKFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKT8ubW9kZWxzW1wiXCJdPy5zZXR0aW5ncyBhc1xuXHRcdFx0XHR8IHsgZ3JvdXBQcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgeyBzdWJtaXQ6IFN1Ym1pdE1vZGUgfT4gfVxuXHRcdFx0XHR8IHVuZGVmaW5lZFxuXHRcdCk/Lmdyb3VwUHJvcGVydGllcz8uW2dyb3VwSWRdPy5zdWJtaXQ7XG5cblx0XHRpZiAoc3VibWl0TW9kZSA9PT0gdW5kZWZpbmVkIHx8IFtTdWJtaXRNb2RlLkF1dG8sIFN1Ym1pdE1vZGUuRGlyZWN0XS5pbmNsdWRlcyhzdWJtaXRNb2RlKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBzdWJtaXQgb2YgdGhlIG9wZXJhdGlvbiBpZiB0aGUgc3VibWl0TW9kZSBpcyBvbiBBUEkgYW5kIGRlZmVycmVkU3VibWl0IGlzIG5vdCBzZXQgdG8gdHJ1ZVxuXHQgKiBUaGUgc3VibWl0QmF0Y2ggaXMgc2tpcHBlZCBpZiB0aGUgZ3JvdXBJZCBpcyAkYXV0byBvciAkZGlyZWN0IHNpbmNlIGRvbmUgYnkgdGhlIG1vZGVsLlxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICovXG5cdHByaXZhdGUgZGVmYXVsdFN1Ym1pdChncm91cElkPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlyc3RTdWJtaXQgPSB0aGlzLm5ldmVyU3VibWl0dGVkO1xuXHRcdGNvbnN0IGlzQVBJTW9kZSA9IHRoaXMuaXNBUElNb2RlKGdyb3VwSWQpO1xuXHRcdGlmICghaXNBUElNb2RlKSB7XG5cdFx0XHQvLyBUaGUgc3VibWl0QmF0Y2ggaXMgc2tpcHBlZCBpZiB0aGUgZ3JvdXBJZCBpcyAkYXV0byBvciAkZGlyZWN0IHNpbmNlIGRvbmUgYnkgdGhlIG1vZGVsXG5cdFx0XHR0aGlzLm5ldmVyU3VibWl0dGVkID0gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICh0aGlzLm9wZXJhdGlvblByb3BlcnRpZXMuZGVmZXJyZWRTdWJtaXQgIT09IHRydWUgJiYgZ3JvdXBJZCkge1xuXHRcdFx0dGhpcy5uZXZlclN1Ym1pdHRlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdWJtaXRPbk1vZGVsKGdyb3VwSWQpO1xuXHRcdH1cblx0XHRpZiAoZmlyc3RTdWJtaXQgJiYgIXRoaXMubmV2ZXJTdWJtaXR0ZWQpIHtcblx0XHRcdC8vVHJpZ2dlciB0aGUgY2FsbGJhY2sgb25seSBvbmNlXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vbk9EYXRhU3VibWl0Py4oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogIFNldHMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcgVGhlIG9wZXJhdGlvbiBjb250ZXh0IGJpbmRpbmdcblx0ICovXG5cdHByaXZhdGUgc2V0UGFyYW1ldGVyc1ZhbHVlKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nOiBPRGF0YUNvbnRleHRCaW5kaW5nKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMub3BlcmF0aW9uUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSB0aGlzLnBhcmFtZXRlcnMucGFyYW1ldGVyc1ZhbHVlcyA/PyB7fTtcblx0XHRcdGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHRoaXMub3BlcmF0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBuYW1lID0gcGFyYW1ldGVyLm5hbWU7XG5cdFx0XHRcdGlmICghZGVmYXVsdFZhbHVlc1tuYW1lXSkge1xuXHRcdFx0XHRcdHN3aXRjaCAocGFyYW1ldGVyLnR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uU3RyaW5nXCI6XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZXNbbmFtZV0gPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDE2XCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZXNbbmFtZV0gPSAwO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvcGVyYXRpb25Db250ZXh0QmluZGluZy5zZXRQYXJhbWV0ZXIobmFtZSwgZGVmYXVsdFZhbHVlc1tuYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdHMgZm9yIHRoZSBhY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIGdyb3VwSWQgIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcGFyYW0gbG9jYWxQcm9taXNlIFRoZSBwcm9taXNlIG9mIHRoZSBpbnZva2VkIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgc2lkZSBlZmZlY3Rcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBncm91cElkOiBzdHJpbmcsIGxvY2FsUHJvbWlzZT86IFByb21pc2U8dW5rbm93bj5bXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0bGV0IHByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBsb2NhbFByb21pc2UgPz8gW107XG5cdFx0Ly8gdHJpZ2dlciBhY3Rpb25zIGZyb20gc2lkZSBlZmZlY3RzXG5cdFx0aWYgKHRoaXMuc2lkZUVmZmVjdHMpIHtcblx0XHRcdC8vIFdlIGxvc3QgdGhlIHJldHVybmVkIHByb3BlcnRpZXMgc2luY2Ugd2Ugc2V0IG91ciBvd24gJHNlbGVjdCBmb3IgdGhlIGFjdGlvblxuXHRcdFx0Ly8gc28gd2UgaGF2ZSB0byBzZXQgKiB0byBnZXQgdGhlIHByb3BlcnRpZXMgYmFjayBpbiB0aGUgcmVzcG9uc2Vcblx0XHRcdGNvbnN0IHBhdGhFeHByZXNzaW9ucyA9IHRoaXMuc2VsZWN0SXNDaGFuZ2VkXG5cdFx0XHRcdD8gWy4uLih0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucyA/PyBbXSksIC4uLltcIipcIl1dXG5cdFx0XHRcdDogdGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnM7XG5cdFx0XHRwcm9taXNlcyA9IHByb21pc2VzLmNvbmNhdChcblx0XHRcdFx0KHRoaXMuc2lkZUVmZmVjdHMudHJpZ2dlckFjdGlvbnMgPz8gW10pLm1hcChhc3luYyAoYWN0aW9uKSA9PiBzaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihhY3Rpb24sIGNvbnRleHQsIGdyb3VwSWQpKSxcblx0XHRcdFx0cGF0aEV4cHJlc3Npb25zID8gc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhwYXRoRXhwcmVzc2lvbnMsIGNvbnRleHQsIGdyb3VwSWQpIDogW11cblx0XHRcdCk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHRcdGlmIChwYXRoRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblJlcXVlc3RTaWRlRWZmZWN0cz8uKHRoaXMuc2lkZUVmZmVjdHMsIHRoaXMub3BlcmF0aW9uLCBwcm9taXNlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHMgZm9yIHRoZSBvcGVyYXRpb24gXCIgKyB0aGlzLmFjdGlvbk5hbWUsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7RUFtQkEsTUFBTUEsU0FBUyxHQUFHQyxTQUFTLENBQUNELFNBQVM7RUFDckMsTUFBTUUs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
|
|
428
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YU9wZXJhdGlvbiIsIm9wZXJhdGlvbiIsInBhcmFtZXRlcnMiLCJvcGVyYXRpb25Qcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzIiwiZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zIiwiYXBpR3JvdXBJZHNUb1N1Ym1pdCIsIlNldCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwib3BlcmF0aW9uUGFyYW1ldGVycyIsIm5ldmVyU3VibWl0dGVkIiwiZmFpbGVkQ29udGV4dHMiLCJvcGVyYXRpb25Qcm9taXNlcyIsImFjdGlvbk5hbWUiLCJhY3Rpb25IZWxwZXIiLCJnZXRBY3Rpb25OYW1lIiwiaXNBY3Rpb24iLCJhY3Rpb24iLCJzaWRlRWZmZWN0cyIsImFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJjb250ZXh0cyIsImlzRnVuY3Rpb24iLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJvRGF0YVN0cmljdEhhbmRsaW5nIiwiT0RhdGFTdHJpY3RIYW5kbGluZyIsImxhYmVsIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm9uU3RyaWN0UmVzcG9uc2UiLCJvblZhbGlkYXRpb24iLCJvblN0cmljdFZhbGlkYXRpb24iLCJiaW5kIiwib25DYW5jZWwiLCJvblN0cmljdENhbmNlbCIsImRlZmluZU9wZXJhdGlvblBhcmFtZXRlcnMiLCJzZXRCaW5kaW5nUGFyYW1ldGVycyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZGVlcENsb25lIiwiYWRkaXRpb25hbFNlbGVjdFByb3BlcnRpZXMiLCJlbmhhbmNlJHNlbGVjdCIsInJldHVybkVudGl0eVR5cGUiLCJtZXRhTW9kZWwiLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsIm1lc3NhZ2VzUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWVzc2FnZXNQYXRoIiwiZ2V0UGF0aCIsImVudGl0eVNldCIsImNvbnZlcnRUeXBlcyIsImVudGl0eVNldHMiLCJmaWx0ZXIiLCJlbnRpdHkiLCJlbnRpdHlUeXBlIiwiaXNTYW1lRW50aXR5IiwicmV0dXJuQ29sbGVjdGlvbiIsInNvdXJjZUVudGl0eVR5cGUiLCJpc0RyYWZ0Um9vdCIsInB1c2giLCJlbnRpdHlQcm9wZXJ0aWVzIiwiZmluZCIsInByb3BlcnR5IiwibmFtZSIsInNlbGVjdFByb3BlcnRpZXMiLCJqb2luIiwiJHNlbGVjdCIsIiQkaW5oZXJpdEV4cGFuZFNlbGVjdCIsImdldEFjdGlvblBhcmFtZXRlcnMiLCJjbGVhciIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiZGVzdHJveSIsImV4ZWN1dGUiLCJyZXN1bHQiLCJDaGFuZ2VTZXQiLCJleGVjdXRlQ2hhbmdlc2V0IiwiZXhlY3V0ZVNlcXVlbnRpYWxseSIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZXhlY3V0ZUltcG9ydCIsImVycm9yIiwiTG9nIiwib25PRGF0YVJlc3BvbnNlIiwib3BlcmF0aW9uQ29udGV4dCIsImJpbmRDb250ZXh0Iiwic2V0UGFyYW1ldGVyc1ZhbHVlIiwiZ3JvdXBJZCIsInByb21pc2VzIiwiaW52b2tlIiwiZGVmYXVsdFN1Ym1pdCIsImFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24iLCJjdXJyZW50UHJvbWlzZVZhbHVlcyIsImFsbCIsIm1hcCIsImNvbnRleHQiLCJleGVjdXRlQm91bmRPcGVyYXRpb24iLCJtYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzIiwib25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uIiwicmVkdWNlIiwicHJvbWlzZSIsImlkIiwicmVzb2x2ZSIsImZpbmFsR3JvdXBJZCIsImdldFVwZGF0ZUdyb3VwSWQiLCJvcGVyYXRpb25Qcm9taXNlIiwiZW5oYW5jZVNpZGVFZmZlY3RzIiwicmV0dXJuZWRDb250ZXh0IiwiZ2hvc3RDb250ZXh0QmluZGluZ1Byb3RlY3Rpb24iLCJvcmlnaW4iLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRJbnN0YW5jZWRWaWV3cyIsInBhZ2VWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJmaXJzdEl0ZXJhdGlvblJlc29sdmUiLCJmaXJzdEl0ZXJhdGlvblJlamVjdCIsInN0cmljdEhhbmRsaW5nUHJvbWlzZSIsInJlamVjdCIsImlzQVBJTW9kZSIsImFkZCIsInNpZGVFZmZlY3RzQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvcGVyYXRpb25JbnZva2UiLCJpZ25vcmVFVGFnIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsInN1Ym1pdEJhdGNoIiwicmVwbGFjZVdpdGhSVkMiLCJyYWNlIiwib25BZnRlck9EYXRhSW52b2tlIiwiYm91bmRDb250ZXh0IiwicmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMiLCJpbmRleCIsImZhaWxlZENvbnRleHQiLCJzdWJtaXQiLCJzaXplIiwiQXJyYXkiLCJmcm9tIiwidmFsdWVzIiwic3VibWl0T25Nb2RlbCIsIm9uT0RhdGFTdWJtaXQiLCJpc1N0cmljdENhbmNlbGVkIiwiaXNDYW5jZWxlZCIsImRlbGV0ZSIsInN0YXJ0c1dpdGgiLCJzdWJtaXRNb2RlIiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm1vZGVscyIsInNldHRpbmdzIiwiZ3JvdXBQcm9wZXJ0aWVzIiwiU3VibWl0TW9kZSIsIkF1dG8iLCJEaXJlY3QiLCJpbmNsdWRlcyIsImZpcnN0U3VibWl0IiwiZGVmZXJyZWRTdWJtaXQiLCJkZWZhdWx0VmFsdWVzIiwicGFyYW1ldGVyc1ZhbHVlcyIsInBhcmFtZXRlciIsInR5cGUiLCJzZXRQYXJhbWV0ZXIiLCJsb2NhbFByb21pc2UiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJkaXNhYmxlU2lkZUVmZmVjdHMiLCJjb25jYXQiLCJ0cmlnZ2VyQWN0aW9ucyIsImV4ZWN1dGVBY3Rpb24iLCJwYXRoRXhwcmVzc2lvbnMiLCJvblJlcXVlc3RTaWRlRWZmZWN0cyIsImluZm8iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9EYXRhT3BlcmF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uSW1wb3J0LCBBY3Rpb25QYXJhbWV0ZXIsIEFjdGlvbiBhcyBFZG1BY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgU3VibWl0TW9kZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L1N1Ym1pdE1vZGVcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNBY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblNpZGVFZmZlY3RzVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRDb250ZXh0UGFyYW1ldGVycyB9IGZyb20gXCIuLi9kcmFmdFwiO1xuaW1wb3J0IE9EYXRhU3RyaWN0SGFuZGxpbmcgZnJvbSBcIi4vT0RhdGFTdHJpY3RIYW5kbGluZ1wiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwiLi9hY3Rpb25IZWxwZXJcIjtcblxuY29uc3QgSW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcblxuZXhwb3J0IHR5cGUgT3BlcmF0aW9uUmVzdWx0ID0ge1xuXHRyZXR1cm5lZENvbnRleHQ/OiBPRGF0YVY0Q29udGV4dDtcblx0Ym91bmRDb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9EYXRhT3BlcmF0aW9uIHtcblx0cHJpdmF0ZSBvcGVyYXRpb25Db250ZXh0QmluZGluZ3M6IE9EYXRhQ29udGV4dEJpbmRpbmdbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFwaUdyb3VwSWRzVG9TdWJtaXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgc2lkZUVmZmVjdHM6IEFjdGlvblNpZGVFZmZlY3RzVHlwZSB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvbk5hbWU6IHN0cmluZztcblxuXHRwcml2YXRlIGJpbmRpbmdQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdHByaXZhdGUgb3BlcmF0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10gPSBbXTtcblxuXHRwcml2YXRlIG5ldmVyU3VibWl0dGVkID0gdHJ1ZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG9EYXRhU3RyaWN0SGFuZGxpbmc6IE9EYXRhU3RyaWN0SGFuZGxpbmcgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBmYWlsZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXG5cdHByaXZhdGUgb3BlcmF0aW9uUHJvbWlzZXM6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PltdID0gW107XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSByZWFkb25seSBvcGVyYXRpb246IEVkbUFjdGlvbiB8IEFjdGlvbkltcG9ydCxcblx0XHRwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlcnM6IHtcblx0XHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRcdFx0Y29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRtb2RlbDogT0RhdGFNb2RlbDtcblx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW47XG5cdFx0XHRkaXNhYmxlU2lkZUVmZmVjdHM/OiBib29sZWFuO1xuXHRcdFx0Z2hvc3RDb250ZXh0QmluZGluZ1Byb3RlY3Rpb24/OiBib29sZWFuO1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRldmVudHM/OiB7XG5cdFx0XHRcdG9uU3RyaWN0VmFsaWRhdGlvbj86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgc3RyaWN0IGhhbmRsaW5nIGlzIHZhbGlkYXRlZCBieSB0aGUgZW5kIHVzZXJcblx0XHRcdFx0b25TdHJpY3RDYW5jZWw/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHN0cmljdCBoYW5kbGluZyBpcyBjYW5jZWxlZCBieSB0aGUgZW5kIHVzZXJcblx0XHRcdFx0b25TdHJpY3RSZXNwb25zZT86IChtZXNzYWdlczQxMjogTWVzc2FnZVtdKSA9PiB2b2lkOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiBiYWNrZW5kIHJldHVybnMgIDQxMiBtZXNzYWdlcyAoc3RyaWN0IGhhbmRsaW5nKVxuXHRcdFx0XHRvbk9EYXRhUmVzcG9uc2U/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gYWxsIHJlc3BvbnNlcyByZWxhdGVkIHRvIHRoZSBGaW9yaSBlbGVtZW50IG9wZXJhdGlvbnMgYXJlIHJlY2VpdmVkXG5cdFx0XHRcdG9uT0RhdGFTdWJtaXQ/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gdGhlIGJhdGNoIGlzIHN1Ym1pdHRlZCAocmVxdWVzdCBzZW50IHRvIHRoZSBiYWNrIGVuZClcblx0XHRcdFx0b25BZnRlck9EYXRhSW52b2tlPzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIHRoZSBwcm9taXNlIG9mIGludm9rZSBtZXRob2Qgb2YgdGhlIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgcmVzb2x2ZWRcblx0XHRcdFx0b25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uPzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIGZpcnN0IHJlc3BvbnNlcyByZWxhdGVkIHRvIHRoZSBGaW9yaSBlbGVtZW50IG9wZXJhdGlvbnMgYXJlIHJlY2VpdmVkIChiZWZvcmUgc3RyaWN0IGhhbmRsaW5nIG9yIGZpbmFsIHJlc3BvbnNlIGlmIG5vIDQxMiBhcmUgcmVjZWl2ZWQpXG5cdFx0XHRcdG9uUmVxdWVzdFNpZGVFZmZlY3RzPzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIHNpZGVFZmZlY3RzIGFyZSB0cmlnZ2VyZWRcblx0XHRcdH07XG5cdFx0XHRwYXJhbWV0ZXJzVmFsdWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0fSxcblx0XHRwcml2YXRlIHJlYWRvbmx5IG9wZXJhdGlvblByb3BlcnRpZXM6IHtcblx0XHRcdGVuaGFuY2Ukc2VsZWN0PzogYm9vbGVhbjtcblx0XHRcdGdyb3VwSWQ/OiBzdHJpbmc7XG5cdFx0XHRiaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVycztcblx0XHRcdGRlZmVycmVkU3VibWl0PzogYm9vbGVhbjtcblx0XHRcdGlnbm9yZUVUYWc/OiBib29sZWFuO1xuXHRcdFx0cmVwbGFjZVdpdGhSVkM/OiBib29sZWFuO1xuXHRcdH0gPSB7fVxuXHQpIHtcblx0XHR0aGlzLmFjdGlvbk5hbWUgPSBhY3Rpb25IZWxwZXIuZ2V0QWN0aW9uTmFtZShpc0FjdGlvbih0aGlzLm9wZXJhdGlvbikgPyB0aGlzLm9wZXJhdGlvbiA6IHRoaXMub3BlcmF0aW9uLmFjdGlvbik7XG5cblx0XHR0aGlzLnNpZGVFZmZlY3RzID0gdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudFxuXHRcdFx0LmdldFNpZGVFZmZlY3RzU2VydmljZSgpXG5cdFx0XHQuZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyh0aGlzLmFjdGlvbk5hbWUsIHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPyB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0gOiB1bmRlZmluZWQpO1xuXG5cdFx0aWYgKCEodGhpcy5vcGVyYXRpb24gYXMgRWRtQWN0aW9uKS5pc0Z1bmN0aW9uICYmIHRoaXMucGFyYW1ldGVycy5kaXNhYmxlU3RyaWN0SGFuZGxpbmcgIT09IHRydWUpIHtcblx0XHRcdHRoaXMub0RhdGFTdHJpY3RIYW5kbGluZyA9IG5ldyBPRGF0YVN0cmljdEhhbmRsaW5nKHtcblx0XHRcdFx0YXBwQ29tcG9uZW50OiB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0XHRjb250ZXh0czogdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLFxuXHRcdFx0XHRsYWJlbDogdGhpcy5wYXJhbWV0ZXJzLmxhYmVsID8/IHRoaXMuYWN0aW9uTmFtZSxcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiB0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nLFxuXHRcdFx0XHRldmVudHM6IHtcblx0XHRcdFx0XHRvblJlc3BvbnNlOiB0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdFJlc3BvbnNlLFxuXHRcdFx0XHRcdG9uVmFsaWRhdGlvbjogdGhpcy5vblN0cmljdFZhbGlkYXRpb24uYmluZCh0aGlzKSxcblx0XHRcdFx0XHRvbkNhbmNlbDogdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25TdHJpY3RDYW5jZWxcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXMuZGVmaW5lT3BlcmF0aW9uUGFyYW1ldGVycygpO1xuXHRcdHRoaXMuc2V0QmluZGluZ1BhcmFtZXRlcnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBiaW5kaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBvcGVyYXRpb25zLlxuXHQgKi9cblx0cHJpdmF0ZSBzZXRCaW5kaW5nUGFyYW1ldGVycygpOiB2b2lkIHtcblx0XHR0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzID0gZGVlcENsb25lKHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5iaW5kaW5nUGFyYW1ldGVycyA/PyB7fSk7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFNlbGVjdFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cblx0XHRpZiAoaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pICYmIHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggJiYgdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmVuaGFuY2Ukc2VsZWN0ID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCByZXR1cm5FbnRpdHlUeXBlID0gdGhpcy5vcGVyYXRpb24ucmV0dXJuRW50aXR5VHlwZTtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChtZXRhTW9kZWwsIHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRQYXRoKCkpITtcblx0XHRcdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpLmVudGl0eVNldHMuZmlsdGVyKChlbnRpdHkpID0+IGVudGl0eS5lbnRpdHlUeXBlID09PSByZXR1cm5FbnRpdHlUeXBlKT8uWzBdO1xuXHRcdFx0Y29uc3QgaXNTYW1lRW50aXR5ID1cblx0XHRcdFx0IXRoaXMub3BlcmF0aW9uLnJldHVybkNvbGxlY3Rpb24gJiYgISFyZXR1cm5FbnRpdHlUeXBlICYmIHRoaXMub3BlcmF0aW9uLnNvdXJjZUVudGl0eVR5cGUgPT09IHJldHVybkVudGl0eVR5cGU7XG5cdFx0XHRpZiAoaXNTYW1lRW50aXR5KSB7XG5cdFx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChlbnRpdHlTZXQpKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbFNlbGVjdFByb3BlcnRpZXMucHVzaChcIkhhc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0LyogVGhlIGZvcm1lciBsb2dpYyBjaGVja2VkIGlmIHRoZSBtZXNzYWdlc1BhdGggaXMgY29udGFpbmVkIGludG8gdGhlIFNpZGVFZmZlY3RzXG4gICAgICAgICAgICAgICAgICAgICAgIGJ1dCB0aGUgY2hlY2sgd2FzIGludmFsaWQgKGFsd2F5cyB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICBUbyBiZSBjb21wbGlhbnQgd2l0aCBmb3JtZXIgdmVyc2lvbiB3ZSBkb24ndCBjaGVjayB0aGUgU2lkZUVmZmVjdHMuLlxuXHRcdFx0XHRcdCAgIFxuXHRcdFx0XHRcdCAgIHRoaXMuc2lkZUVmZmVjdHMgJiZcblx0XHRcdFx0XHQgICBtZXNzYWdlc1BhdGggJiZcblx0XHRcdFx0XHQgICAodGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnMgPz8gW10pLnNvbWUoKGV4cCkgPT4gdHlwZW9mIGV4cCA9PT0gXCJzdHJpbmdcIiAmJiBbbWVzc2FnZXNQYXRoLCBcIipcIl0uaW5jbHVkZXMoZXhwKSkqL1xuXHRcdFx0XHRcdG1lc3NhZ2VzUGF0aCAmJlxuXHRcdFx0XHRcdCEhcmV0dXJuRW50aXR5VHlwZT8uZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PT0gbWVzc2FnZXNQYXRoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhZGRpdGlvbmFsU2VsZWN0UHJvcGVydGllcy5wdXNoKG1lc3NhZ2VzUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBzZWxlY3RQcm9wZXJ0aWVzID0gYWRkaXRpb25hbFNlbGVjdFByb3BlcnRpZXMuam9pbihcIixcIik7XG5cdFx0XHRcdHRoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCA9IHRoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdFxuXHRcdFx0XHRcdD8gYCR7dGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0fSwke3NlbGVjdFByb3BlcnRpZXN9YFxuXHRcdFx0XHRcdDogc2VsZWN0UHJvcGVydGllcztcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UgbmVlZCB0byBpbmhlcml0IHRoZSAkc2VsZWN0IGZvciB0aGUgYm91bmQgZW50aXR5IG9ubHkgaWZcblx0XHRcdC8vICAtIHRoZSBhY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBlbnRpdHlcblx0XHRcdC8vICAtIHRoZSAkc2VsZWN0IGhhcyBiZWVuIGN1c3RvbWl6ZWRcblx0XHRcdC8vIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGtlZXAgdGhlIHZhbHVlIG9mICQkaW5oZXJpdEV4cGFuZFNlbGVjdCB0byBmYWxzZVxuXHRcdFx0dGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kJGluaGVyaXRFeHBhbmRTZWxlY3QgPVxuXHRcdFx0XHR0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzLiQkaW5oZXJpdEV4cGFuZFNlbGVjdCB8fCAhIWFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzLmxlbmd0aCB8fCBpc1NhbWVFbnRpdHk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZGVmaW5lT3BlcmF0aW9uUGFyYW1ldGVycygpOiB2b2lkIHtcblx0XHRpZiAoIWlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSkge1xuXHRcdFx0dGhpcy5vcGVyYXRpb25QYXJhbWV0ZXJzID0gdGhpcy5vcGVyYXRpb24uYWN0aW9uLnBhcmFtZXRlcnM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vUmVtb3ZlIHRoZSBiaW5kaW5nIHBhcmFtZXRlcnMgZnJvbSB0aGUgcGFyYW1ldGVycyBsaXN0XG5cdFx0XHR0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMgPSBhY3Rpb25IZWxwZXIuZ2V0QWN0aW9uUGFyYW1ldGVycyh0aGlzLm9wZXJhdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGNsZWFyKCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3Qgb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcgb2YgdGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MpIHtcblx0XHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0dGhpcy5hcGlHcm91cElkc1RvU3VibWl0LmNsZWFyKCk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MgPSBbXTtcblx0XHR0aGlzLmZhaWxlZENvbnRleHRzID0gW107XG5cdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBvcGVyYXRpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25cblx0ICovXG5cdGFzeW5jIGV4ZWN1dGUoKTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W10+IHtcblx0XHRsZXQgcmVzdWx0OiBQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W107XG5cdFx0dHJ5IHtcblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGF3YWl0ICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0PyB0aGlzLmV4ZWN1dGVDaGFuZ2VzZXQoKVxuXHRcdFx0XHRcdDogdGhpcy5leGVjdXRlU2VxdWVudGlhbGx5KCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFt0aGlzLmV4ZWN1dGVJbXBvcnQoKV0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgb3BlcmF0aW9uIFwiICsgdGhpcy5hY3Rpb25OYW1lLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uT0RhdGFSZXNwb25zZT8uKCk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGltcG9ydCBvcGVyYXRpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZUltcG9ydCgpOiBQcm9taXNlPE9wZXJhdGlvblJlc3VsdD4ge1xuXHRcdGNvbnN0IG9wZXJhdGlvbkNvbnRleHQgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuYmluZENvbnRleHQoYC8ke3RoaXMuYWN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHRoaXMub3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzLnB1c2gob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0dGhpcy5zZXRQYXJhbWV0ZXJzVmFsdWUob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgZ3JvdXBJZCA9IHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkID8/IFwiYWN0aW9uSW1wb3J0XCI7XG5cdFx0Y29uc3QgcHJvbWlzZXMgPSBbdGhpcy5pbnZva2Uob3BlcmF0aW9uQ29udGV4dCwgZ3JvdXBJZCldO1xuXG5cdFx0dGhpcy5kZWZhdWx0U3VibWl0KGdyb3VwSWQpO1xuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLmZpcnN0SXRlcmF0aW9uT3BlcmF0aW9ucyk7XG5cdFx0YXdhaXQgdGhpcy5hZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk7XG5cdFx0Y29uc3QgY3VycmVudFByb21pc2VWYWx1ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0cmV0dXJuIGN1cnJlbnRQcm9taXNlVmFsdWVzWzBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBvcGVyYXRpb25zIG9uIG9uZSBjaGFuZ2VzZXQuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25zXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGV4ZWN1dGVDaGFuZ2VzZXQoKTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W10+IHtcblx0XHR0aGlzLm9wZXJhdGlvblByb21pc2VzID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLm1hcChhc3luYyAoY29udGV4dCkgPT5cblx0XHRcdHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGNvbnRleHQsIHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkKVxuXHRcdCk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHRhd2FpdCB0aGlzLmFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMub3BlcmF0aW9uUHJvbWlzZXMpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMub0RhdGFTdHJpY3RIYW5kbGluZz8ubWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscygpO1xuXHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbj8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbnMgc2VxdWVudGlhbGx5LlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uc1xuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlU2VxdWVudGlhbGx5KCk6IFByb21pc2U8UHJvbWlzZVNldHRsZWRSZXN1bHQ8T3BlcmF0aW9uUmVzdWx0PltdPiB7XG5cdFx0Ly8gc2VyaWFsaXphdGlvbjogZXhlY3V0ZUJvdW5kT3BlcmF0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbnRyeSBvbmx5IGFmdGVyIHRoZSBwcm9taXNlIHJldHVybmVkIGZyb20gdGhlIG9uZSBiZWZvcmUgaGFzIGJlZW4gcmVzb2x2ZWRcblx0XHRhd2FpdCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMucmVkdWNlKGFzeW5jIChwcm9taXNlOiBQcm9taXNlPHZvaWQ+LCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgaWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0YXdhaXQgcHJvbWlzZTtcblx0XHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMucHVzaCh0aGlzLmV4ZWN1dGVCb3VuZE9wZXJhdGlvbihjb250ZXh0LCB0aGlzLm9wZXJhdGlvblByb3BlcnRpZXMuZ3JvdXBJZCA/PyBgYXBpTW9kZSR7aWQgKyAxfWApKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLmZpcnN0SXRlcmF0aW9uT3BlcmF0aW9ucyk7XG5cdFx0fSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHRcdGF3YWl0IHRoaXMuYWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbigpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGJvdW5kIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGJvdW5kIGNvbnRleHRcblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBncm91cElkPzogc3RyaW5nKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRjb25zdCBvcGVyYXRpb25Db250ZXh0ID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmJpbmRDb250ZXh0KGAke3RoaXMuYWN0aW9uTmFtZX0oLi4uKWAsIGNvbnRleHQsIHRoaXMuYmluZGluZ1BhcmFtZXRlcnMpO1xuXHRcdHRoaXMub3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzLnB1c2gob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXHRcdHRoaXMuc2V0UGFyYW1ldGVyc1ZhbHVlKG9wZXJhdGlvbkNvbnRleHQpO1xuXHRcdGNvbnN0IGZpbmFsR3JvdXBJZCA9IGdyb3VwSWQgPz8gb3BlcmF0aW9uQ29udGV4dC5nZXRVcGRhdGVHcm91cElkKCk7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uUHJvbWlzZSA9IHRoaXMuaW52b2tlKG9wZXJhdGlvbkNvbnRleHQsIGZpbmFsR3JvdXBJZCk7XG5cdFx0cHJvbWlzZXMucHVzaChvcGVyYXRpb25Qcm9taXNlKTtcblx0XHR0aGlzLmRlZmF1bHRTdWJtaXQoZmluYWxHcm91cElkKTtcblx0XHRQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuXHRcdHJldHVybiBvcGVyYXRpb25Qcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuaGFuY2VzIHRoZSBzaWRlIGVmZmVjdHMgb2YgdGhlIG9wZXJhdGlvblxuXHQgKlxuXHQgKiBXaGVuIGEgbmV3IGVudGl0eSBpcyBjcmVhdGVkIHVzaW5nIGEgRGF0YUZpZWxkRm9yQWN0aW9uLCBhIG5ld1xuXHQgKiBvRGF0YUNvbnRleHRCaW5kaW5nIGlzIGNyZWF0ZWQgdG8gZXhlY3V0ZSB0aGUgYWN0aW9uLiBCeSBkZWZhdWx0LCB0aGlzXG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgcmVsYXRpdmUgdG8gdGhlIE9kYXRhTGlzdEJpbmRpbmcgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBCZWNhdXNlIG9mIHRoaXMgZGVwZW5kZW5jeSwgd2hlbiBhIFNpZGVFZmZlY3RzIGlzIGV4ZWN1dGVkIG9uIHRoZVxuXHQgKiBjb250ZXh0IGludG8gdGhlIE9kYXRhTGlzdEJpbmRpbmcgd2hlcmUgdGhlIG9EYXRhQ29udGV4dEJpbmRpbmcgd2FzIGJvdW5kLCB0aGlzIFNpZGVFZmZlY3RzIGlzIGFsc28gdHJpZ2dlcmVkIG9uIHRoaXNcblx0ICogb0RhdGFDb250ZXh0QmluZGluZy4gV2UgZG9uJ3QgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlXG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcuIEl0IG1lYW5zIGV2ZW4gaWYgdGhlIGRyYWZ0IHJlbGF0ZWQgdG8gdGhlIGFjdGlvblxuXHQgKiBpcyByZW1vdmVkLCB0aGUgb2RhdGFDb250ZXh0QmluZGluZyBpcyBzdGlsbCB0aGVyZSwgc28gaWYgYSBTaWRlRWZmZWN0c1xuXHQgKiBpcyBleGVjdXRlZCBvbiB0aGUgc291cmNlIHRhcmdldCBpbnRvIG9EYXRhQ29udGV4dEJpbmRpbmcsIGFuIGVycm9yIGZyb20gdGhlIGJhY2sgZW5kIHdpbGwgYmVcblx0ICogcmVjZWl2ZWQgYmVjYXVzZSB3ZSBhc2sgdG8gcmVmcmVzaCBhIHByb3BlcnR5IG9uIGFuIHVua25vd24gZW50aXR5LlxuXHQgKlxuXHQgKiBUaGUgU2lkZUVmZmVjdHMgYXJlIHJlcXVlc3RlZCBvbmx5IGlmIHRoZSBwYWdlIGlzIHN0aWxsIG9wZW4uXG5cdCAqIFRoaXMgYXZvaWRzIGdlbmVyYXRpbmcgaXNzdWVzIHdpdGggZ2hvc3Qgb0RhdGFDb250ZXh0QmluZGluZyBsaW5rZWQgdG8gZGVzdHJveWVkIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvcGVyYXRpb25Db250ZXh0QmluZGluZyBUaGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSByZXR1cm5lZENvbnRleHQgVGhlIHJldHVybmVkIGNvbnRleHQgb2YgdGhpcyBvcGVyYXRpb25cblx0ICovXG5cdHByaXZhdGUgZW5oYW5jZVNpZGVFZmZlY3RzKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nOiBPRGF0YUNvbnRleHRCaW5kaW5nLCByZXR1cm5lZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0aWYgKHJldHVybmVkQ29udGV4dCAmJiB0aGlzLnBhcmFtZXRlcnMuZ2hvc3RDb250ZXh0QmluZGluZ1Byb3RlY3Rpb24gPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQ7XG5cdFx0XHRjb25zdCBvcmlnaW4gPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5yZXF1ZXN0U2lkZUVmZmVjdHMuYmluZChvcGVyYXRpb25Db250ZXh0QmluZGluZyk7XG5cdFx0XHRvcGVyYXRpb25Db250ZXh0QmluZGluZy5yZXF1ZXN0U2lkZUVmZmVjdHMgPSBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0XHRcdC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKVxuXHRcdFx0XHRcdFx0LmdldEluc3RhbmNlZFZpZXdzKClcblx0XHRcdFx0XHRcdC5maW5kKChwYWdlVmlldzogVmlldykgPT4gcGFnZVZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gcmV0dXJuZWRDb250ZXh0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludm9rZXMgdGhlIG9wZXJhdGlvbiBvbiB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGludm9rZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRsZXQgcmV0dXJuZWRDb250ZXh0O1xuXHRcdGxldCBmaXJzdEl0ZXJhdGlvblJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRsZXQgZmlyc3RJdGVyYXRpb25SZWplY3QhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTx1bmtub3duPihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0dGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMucHVzaChzdHJpY3RIYW5kbGluZ1Byb21pc2UpO1xuXHRcdGlmIChncm91cElkICYmIHRoaXMuaXNBUElNb2RlKGdyb3VwSWQpKSB7XG5cdFx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuYWRkKGdyb3VwSWQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNDb250ZXh0ID1cblx0XHRcdFx0KG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkgPz8gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvcGVyYXRpb25JbnZva2UgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5pbnZva2UoXG5cdFx0XHRcdGdyb3VwSWQsXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5pZ25vcmVFVGFnLFxuXHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmc/LmhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmcuYmluZChcblx0XHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQ29udGV4dCwgZ3JvdXBJZCwgW10pO1xuXHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLnJlcGxhY2VXaXRoUlZDXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNDb250ZXh0LCBncm91cElkLCBbb3BlcmF0aW9uSW52b2tlXSk7XG5cdFx0XHRhd2FpdCBQcm9taXNlLnJhY2UoW29wZXJhdGlvbkludm9rZSwgc3RyaWN0SGFuZGxpbmdQcm9taXNlXSk7XG5cblx0XHRcdHJldHVybmVkQ29udGV4dCA9IGF3YWl0IG9wZXJhdGlvbkludm9rZTtcblx0XHRcdHRoaXMuZW5oYW5jZVNpZGVFZmZlY3RzKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLCByZXR1cm5lZENvbnRleHQpO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGZpcnN0SXRlcmF0aW9uUmVqZWN0KGVycm9yKTtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRDb250ZXh0KCk7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHR0aGlzLmZhaWxlZENvbnRleHRzLnB1c2goY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhSW52b2tlPy4ob3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsIGdyb3VwSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXR1cm5lZENvbnRleHQsXG5cdFx0XHRib3VuZENvbnRleHQ6IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgTWFuYWdlcyB0aGUgc3RyaWN0IGhhbmRsaW5nIHZhbGlkYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIG9uU3RyaWN0VmFsaWRhdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdFZhbGlkYXRpb24/LigpO1xuXHRcdHRoaXMucmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgVHJpZ2dlcnMgdGhlIGZhaWxlZCBvcGVyYXRpb25zIGluIGNhc2Ugb2Ygc3RyaWN0IGhhbmRsaW5nLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbmV3IG9wZXJhdGlvbnMgYXJlIHJlc29sdmVkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJldHJpZ2dlckZhaWxlZENvbnRleHRzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vUmV0cnkgdGhlIGFjdGlvbiBleGVjdXRpb24gaW4gY2FzZSBvZiBzdHJpY3QgaGFuZGxpbmcgYW5kIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmYWlsZWQgY29udGV4dCAoZ2l2ZSBpdCBhbm90aGVyIHRyeSB0byBzdWNjZWVkKVxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nICE9PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0Zm9yIChjb25zdCBmYWlsZWRDb250ZXh0IG9mIHRoaXMuZmFpbGVkQ29udGV4dHMpIHtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGZhaWxlZENvbnRleHQsIGBhcGlSZXRyaWdnZXIke2luZGV4ICsgMX1gKSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGJhdGNoIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm5ldmVyU3VibWl0dGVkIHx8IHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5zaXplID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgZ3JvdXBJZCBvZiBBcnJheS5mcm9tKHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC52YWx1ZXMoKSkpIHtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogIElzIHN0cmljdCBoYW5kbGluZyBjYW5jZWxlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCBpcyBjYW5jZWxlZCwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqL1xuXHRwdWJsaWMgaXNTdHJpY3RDYW5jZWxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5pc0NhbmNlbGVkKCkgPz8gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYmF0Y2ggYXQgdGhlIG1vZGVsIGxldmVsIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIHN1Ym1pdE9uTW9kZWwoZ3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5kZWxldGUoZ3JvdXBJZCk7XG5cdH1cblxuXHQvKipcblx0ICogSXMgdGhlIFN1Ym1pdE1vZGUgb2YgdGhlIGdyb3VwSWQgc2V0IHRvIEFQSS5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIFN1Ym1pdE1vZGUgaXMgc2V0IHRvIEFQSSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzQVBJTW9kZShncm91cElkPzogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFncm91cElkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChncm91cElkLnN0YXJ0c1dpdGgoXCIkYXV0b1wiKSB8fCBncm91cElkLnN0YXJ0c1dpdGgoXCIkZGlyZWN0XCIpIHx8IGdyb3VwSWQuc3RhcnRzV2l0aChcIiRzaW5nbGVcIikpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3VibWl0TW9kZSA9IChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIik/Lm1vZGVsc1tcIlwiXT8uc2V0dGluZ3MgYXNcblx0XHRcdFx0fCB7IGdyb3VwUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHsgc3VibWl0OiBTdWJtaXRNb2RlIH0+IH1cblx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpPy5ncm91cFByb3BlcnRpZXM/Lltncm91cElkXT8uc3VibWl0O1xuXG5cdFx0aWYgKHN1Ym1pdE1vZGUgPT09IHVuZGVmaW5lZCB8fCBbU3VibWl0TW9kZS5BdXRvLCBTdWJtaXRNb2RlLkRpcmVjdF0uaW5jbHVkZXMoc3VibWl0TW9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgc3VibWl0IG9mIHRoZSBvcGVyYXRpb24gaWYgdGhlIHN1Ym1pdE1vZGUgaXMgb24gQVBJIGFuZCBkZWZlcnJlZFN1Ym1pdCBpcyBub3Qgc2V0IHRvIHRydWVcblx0ICogVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbC5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIGRlZmF1bHRTdWJtaXQoZ3JvdXBJZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0U3VibWl0ID0gdGhpcy5uZXZlclN1Ym1pdHRlZDtcblx0XHRjb25zdCBpc0FQSU1vZGUgPSB0aGlzLmlzQVBJTW9kZShncm91cElkKTtcblx0XHRpZiAoIWlzQVBJTW9kZSkge1xuXHRcdFx0Ly8gVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbFxuXHRcdFx0dGhpcy5uZXZlclN1Ym1pdHRlZCA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmRlZmVycmVkU3VibWl0ICE9PSB0cnVlICYmIGdyb3VwSWQpIHtcblx0XHRcdHRoaXMubmV2ZXJTdWJtaXR0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0aWYgKGZpcnN0U3VibWl0ICYmICF0aGlzLm5ldmVyU3VibWl0dGVkKSB7XG5cdFx0XHQvL1RyaWdnZXIgdGhlIGNhbGxiYWNrIG9ubHkgb25jZVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqICBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqL1xuXHRwcml2YXRlIHNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXMgPz8ge307XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiB0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHRpZiAoIWRlZmF1bHRWYWx1ZXNbbmFtZV0pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKHBhcmFtZXRlci50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc1tuYW1lXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuc2V0UGFyYW1ldGVyKG5hbWUsIGRlZmF1bHRWYWx1ZXNbbmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3RzIGZvciB0aGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSBncm91cElkICBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHBhcmFtIGxvY2FsUHJvbWlzZSBUaGUgcHJvbWlzZSBvZiB0aGUgaW52b2tlZCBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIHNpZGUgZWZmZWN0XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0cyhjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgZ3JvdXBJZDogc3RyaW5nLCBsb2NhbFByb21pc2U/OiBQcm9taXNlPHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGxldCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gbG9jYWxQcm9taXNlID8/IFtdO1xuXHRcdC8vIHRyaWdnZXIgYWN0aW9ucyBmcm9tIHNpZGUgZWZmZWN0c1xuXHRcdGlmICh0aGlzLnNpZGVFZmZlY3RzICYmICF0aGlzLnBhcmFtZXRlcnMuZGlzYWJsZVNpZGVFZmZlY3RzID09PSB0cnVlKSB7XG5cdFx0XHRwcm9taXNlcyA9IHByb21pc2VzLmNvbmNhdChcblx0XHRcdFx0KHRoaXMuc2lkZUVmZmVjdHMudHJpZ2dlckFjdGlvbnMgPz8gW10pLm1hcChhc3luYyAoYWN0aW9uKSA9PiBzaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihhY3Rpb24sIGNvbnRleHQsIGdyb3VwSWQpKSxcblx0XHRcdFx0dGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnNcblx0XHRcdFx0XHQ/IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHModGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnMsIGNvbnRleHQsIGdyb3VwSWQpXG5cdFx0XHRcdFx0OiBbXVxuXHRcdFx0KTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdFx0aWYgKHRoaXMuc2lkZUVmZmVjdHMucGF0aEV4cHJlc3Npb25zKSB7XG5cdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25SZXF1ZXN0U2lkZUVmZmVjdHM/Lih0aGlzLnNpZGVFZmZlY3RzLCB0aGlzLm9wZXJhdGlvbiwgcHJvbWlzZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzIGZvciB0aGUgb3BlcmF0aW9uIFwiICsgdGhpcy5hY3Rpb25OYW1lLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBbUJBLE1BQU1BLGtCQUFrQixHQUFHQyxTQUFTLENBQUNELGtCQUFrQjtFQUFDLElBT25DRSxjQUFjO0lBdUJsQyxTQUFBQSxlQUNrQkMsU0FBbUMsRUFDbkNDLFVBb0JoQixFQVNBO01BQUEsSUFSZ0JDLG1CQU9oQixHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7TUFBQSxLQXBEQ0csd0JBQXdCLEdBQTBCLEVBQUU7TUFB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
|
|
@@ -17,7 +17,6 @@ import type { BindContextParameters } from "../draft";
|
|
|
17
17
|
import ODataStrictHandling from "./ODataStrictHandling";
|
|
18
18
|
import actionHelper from "./actionHelper";
|
|
19
19
|
|
|
20
|
-
const Constants = FELibrary.Constants;
|
|
21
20
|
const InvocationGrouping = FELibrary.InvocationGrouping;
|
|
22
21
|
|
|
23
22
|
export type OperationResult = {
|
|
@@ -36,8 +35,6 @@ export default class ODataOperation {
|
|
|
36
35
|
|
|
37
36
|
private readonly actionName: string;
|
|
38
37
|
|
|
39
|
-
private selectIsChanged = false;
|
|
40
|
-
|
|
41
38
|
private bindingParameters: Record<string, unknown> = {};
|
|
42
39
|
|
|
43
40
|
private operationParameters: ActionParameter[] = [];
|
|
@@ -58,6 +55,8 @@ export default class ODataOperation {
|
|
|
58
55
|
model: ODataModel;
|
|
59
56
|
invocationGrouping?: string;
|
|
60
57
|
disableStrictHandling?: boolean;
|
|
58
|
+
disableSideEffects?: boolean;
|
|
59
|
+
ghostContextBindingProtection?: boolean;
|
|
61
60
|
label?: string;
|
|
62
61
|
events?: {
|
|
63
62
|
onStrictValidation?: Function; //events triggered when the strict handling is validated by the end user
|
|
@@ -121,21 +120,34 @@ export default class ODataOperation {
|
|
|
121
120
|
if (ModelHelper.isDraftRoot(entitySet)) {
|
|
122
121
|
additionalSelectProperties.push("HasActiveEntity");
|
|
123
122
|
}
|
|
123
|
+
if (
|
|
124
|
+
/* The former logic checked if the messagesPath is contained into the SideEffects
|
|
125
|
+
but the check was invalid (always true)
|
|
126
|
+
To be compliant with former version we don't check the SideEffects..
|
|
127
|
+
|
|
128
|
+
this.sideEffects &&
|
|
129
|
+
messagesPath &&
|
|
130
|
+
(this.sideEffects.pathExpressions ?? []).some((exp) => typeof exp === "string" && [messagesPath, "*"].includes(exp))*/
|
|
131
|
+
messagesPath &&
|
|
132
|
+
!!returnEntityType?.entityProperties.find((property) => property.name === messagesPath)
|
|
133
|
+
) {
|
|
134
|
+
additionalSelectProperties.push(messagesPath);
|
|
135
|
+
}
|
|
124
136
|
}
|
|
125
|
-
|
|
126
|
-
this.sideEffects &&
|
|
127
|
-
messagesPath &&
|
|
128
|
-
(this.sideEffects.pathExpressions ?? []).some((exp) => typeof exp === "string" && [messagesPath, "*"].includes(exp))
|
|
129
|
-
) {
|
|
130
|
-
additionalSelectProperties.push(messagesPath);
|
|
131
|
-
}
|
|
137
|
+
|
|
132
138
|
if (additionalSelectProperties.length) {
|
|
133
139
|
const selectProperties = additionalSelectProperties.join(",");
|
|
134
140
|
this.bindingParameters.$select = this.bindingParameters.$select
|
|
135
141
|
? `${this.bindingParameters.$select},${selectProperties}`
|
|
136
142
|
: selectProperties;
|
|
137
|
-
this.selectIsChanged = true;
|
|
138
143
|
}
|
|
144
|
+
|
|
145
|
+
// We need to inherit the $select for the bound entity only if
|
|
146
|
+
// - the action returns the same entity
|
|
147
|
+
// - the $select has been customized
|
|
148
|
+
// otherwise we need to keep the value of $$inheritExpandSelect to false
|
|
149
|
+
this.bindingParameters.$$inheritExpandSelect =
|
|
150
|
+
this.bindingParameters.$$inheritExpandSelect || !!additionalSelectProperties.length || isSameEntity;
|
|
139
151
|
}
|
|
140
152
|
}
|
|
141
153
|
|
|
@@ -196,8 +208,9 @@ export default class ODataOperation {
|
|
|
196
208
|
const promises = [this.invoke(operationContext, groupId)];
|
|
197
209
|
|
|
198
210
|
this.defaultSubmit(groupId);
|
|
199
|
-
|
|
211
|
+
await Promise.allSettled(this.firstIterationOperations);
|
|
200
212
|
await this.afterODataOperationExecution();
|
|
213
|
+
const currentPromiseValues = await Promise.all(promises);
|
|
201
214
|
return currentPromiseValues[0];
|
|
202
215
|
}
|
|
203
216
|
|
|
@@ -274,7 +287,7 @@ export default class ODataOperation {
|
|
|
274
287
|
* @param returnedContext The returned context of this operation
|
|
275
288
|
*/
|
|
276
289
|
private enhanceSideEffects(operationContextBinding: ODataContextBinding, returnedContext: ODataV4Context | undefined): void {
|
|
277
|
-
if (returnedContext) {
|
|
290
|
+
if (returnedContext && this.parameters.ghostContextBindingProtection === true) {
|
|
278
291
|
const appComponent = this.parameters.appComponent;
|
|
279
292
|
const origin = operationContextBinding.requestSideEffects.bind(operationContextBinding);
|
|
280
293
|
operationContextBinding.requestSideEffects = async (...args: unknown[]): Promise<void> => {
|
|
@@ -338,8 +351,7 @@ export default class ODataOperation {
|
|
|
338
351
|
if (context) {
|
|
339
352
|
this.failedContexts.push(context as ODataV4Context);
|
|
340
353
|
}
|
|
341
|
-
|
|
342
|
-
throw Constants.ActionExecutionFailed;
|
|
354
|
+
throw error;
|
|
343
355
|
} finally {
|
|
344
356
|
await this.parameters.events?.onAfterODataInvoke?.(operationContextBinding, groupId);
|
|
345
357
|
}
|
|
@@ -492,19 +504,16 @@ export default class ODataOperation {
|
|
|
492
504
|
const sideEffectsService = this.parameters.appComponent.getSideEffectsService();
|
|
493
505
|
let promises: Promise<unknown>[] = localPromise ?? [];
|
|
494
506
|
// trigger actions from side effects
|
|
495
|
-
if (this.sideEffects) {
|
|
496
|
-
// We lost the returned properties since we set our own $select for the action
|
|
497
|
-
// so we have to set * to get the properties back in the response
|
|
498
|
-
const pathExpressions = this.selectIsChanged
|
|
499
|
-
? [...(this.sideEffects.pathExpressions ?? []), ...["*"]]
|
|
500
|
-
: this.sideEffects.pathExpressions;
|
|
507
|
+
if (this.sideEffects && !this.parameters.disableSideEffects === true) {
|
|
501
508
|
promises = promises.concat(
|
|
502
509
|
(this.sideEffects.triggerActions ?? []).map(async (action) => sideEffectsService.executeAction(action, context, groupId)),
|
|
503
|
-
|
|
510
|
+
this.sideEffects.pathExpressions
|
|
511
|
+
? sideEffectsService.requestSideEffects(this.sideEffects.pathExpressions, context, groupId)
|
|
512
|
+
: []
|
|
504
513
|
);
|
|
505
514
|
try {
|
|
506
515
|
await Promise.all(promises);
|
|
507
|
-
if (pathExpressions) {
|
|
516
|
+
if (this.sideEffects.pathExpressions) {
|
|
508
517
|
this.parameters.events?.onRequestSideEffects?.(this.sideEffects, this.operation, promises);
|
|
509
518
|
}
|
|
510
519
|
} catch (error) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/library", "sap/m/MessageBox", "sap/ui/core/ElementRegistry", "sap/ui/core/Messaging", "sap/ui/core/message/Message", "sap/ui/core/message/MessageType", "sap/ui/model/json/JSONModel", "../../dialog/ODataStrictDialog", "../../messageHandler/messageHandling"], function (Log, ResourceModelHelper, FELibrary, MessageBox, ElementRegistry, Messaging, Message, MessageType, JSONModel, StrictDialog, messageHandling) {
|
|
6
6
|
"use strict";
|
|
@@ -88,7 +88,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/f
|
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
90
|
const actionName = ResourceModelHelper.getLocalizedText(this.parameters.label, this.parameters.appComponent);
|
|
91
|
-
return messages.length === 1 ? this.displayMessageOnMessageBox(messages[0], actionName) : this.displayMessagesOnDialog(messages, actionName);
|
|
91
|
+
return messages.length === 1 && !(messages[0].getDescription()?.length || messages[0].getDescriptionUrl()?.length) ? this.displayMessageOnMessageBox(messages[0], actionName) : this.displayMessagesOnDialog(messages, actionName);
|
|
92
92
|
};
|
|
93
93
|
_proto.displayMessageOnMessageBox = async function displayMessageOnMessageBox(message, actionName) {
|
|
94
94
|
let messageResolve;
|
|
@@ -198,4 +198,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/f
|
|
|
198
198
|
_exports = ODataStrictHandling;
|
|
199
199
|
return _exports;
|
|
200
200
|
}, false);
|
|
201
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YVN0cmljdEhhbmRsaW5nIiwicGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nUmVzb2x2ZXMiLCJzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyIsImNhbmNlbGVkIiwiaXNDYW5jZWxlZCIsImNvbnRleHRzIiwibGVuZ3RoIiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0EiLCJ0YWJsZUFQSSIsIkVsZW1lbnRSZWdpc3RyeSIsImZpbHRlciIsImVsZW1lbnQiLCJnZXRDb250ZW50IiwiZ2V0Um93QmluZGluZyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUiLCJvbkNvbnRleHRWYWxpZGF0aW9uIiwibWVzc2FnZXM0MTIiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJoYW5kbGluZ1Jlc29sdmUiLCJzdHJpY3RIYW5kbGluZ1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInB1c2giLCJtZXNzYWdlIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJMb2ciLCJ3YXJuaW5nIiwiYWRkaXRpb25hbFRleHQiLCJjb2x1bW4iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiZ2V0Q29udGV4dCIsImdldE9iamVjdCIsInNldEFkZGl0aW9uYWxUZXh0IiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm9uVmFsaWRhdGlvbiIsImlzVmFsaWRhdGVkIiwibWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscyIsIm1lc3NhZ2VIYW5kbGluZyIsImhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0IiwiZGlzcGxheU1lc3NhZ2VzIiwibWVzc2FnZU1vZGVsIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwibWVzc2FnZXNJbk1vZGVsIiwiZ2V0RGF0YSIsInNldERhdGEiLCJjb25jYXQiLCJlcnJvciIsIm1lc3NhZ2VzIiwiYWN0aW9uTmFtZSIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRMb2NhbGl6ZWRUZXh0IiwibGFiZWwiLCJhcHBDb21wb25lbnQiLCJkaXNwbGF5TWVzc2FnZU9uTWVzc2FnZUJveCIsImRpc3BsYXlNZXNzYWdlc09uRGlhbG9nIiwibWVzc2FnZVJlc29sdmUiLCJwcm9taXNlIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJtZXNzYWdlVGV4dCIsImdldE1lc3NhZ2UiLCJpZGVudGlmaWVyVGV4dCIsImdldEFkZGl0aW9uYWxUZXh0IiwiaXNNdWx0aUNvbnRleHQ0MTIiLCJnZW5lcmljQ2hhbmdlc2V0TWVzc2FnZSIsImdldFRleHQiLCJ3YXJuaW5nTWVzc2FnZVRleHQiLCJjYW5jZWxCdXR0b25UeHQiLCJkaXNwbGF5ZWRNZXNzYWdlIiwiaGVhZGVySW5mb1R5cGVOYW1lIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwidG9TdHJpbmciLCJNZXNzYWdlQm94IiwidGl0bGUiLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJhY3Rpb24iLCJtZXNzYWdlRGlhbG9nTW9kZWwiLCJKU09OTW9kZWwiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdEZXNjIiwiZ2VuZXJpY01lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIkluZm9ybWF0aW9uIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImRlc2NyaXB0aW9uIiwiU3RyaWN0RGlhbG9nIiwibWVzc2FnZU9iamVjdCIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsIm9uQmVnaW5CdXR0b25QcmVzcyIsImhhbmRsZU1lc3NhZ2VPblZhbGlkYXRpb24iLCJiaW5kIiwib25FbmRCdXR0b25QcmVzcyIsImhhbmRsZU1lc3NhZ2VPbkNhbmNlbCIsIm9wZW4iLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJpbmZvcm1hdGlvbiIsImNvbnRlbnRXaWR0aCIsIm9uQ2FuY2VsIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPRGF0YVN0cmljdEhhbmRsaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IEVsZW1lbnRSZWdpc3RyeSBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFJlZ2lzdHJ5XCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBTdHJpY3REaWFsb2cgZnJvbSBcIi4uLy4uL2RpYWxvZy9PRGF0YVN0cmljdERpYWxvZ1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwiLi4vLi4vbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5jb25zdCBJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPRGF0YVN0cmljdEhhbmRsaW5nIHtcblx0cHJpdmF0ZSBzdHJpY3RIYW5kbGluZ1Jlc29sdmVzOiAoKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkKVtdID0gW107XG5cblx0cHJpdmF0ZSBzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cblx0cHJpdmF0ZSBjYW5jZWxlZCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgdGFibGVBUEk6IFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogQ29udGV4dFtdO1xuXHRcdFx0bGFiZWw6IHN0cmluZztcblx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25SZXNwb25zZT86IChtZXNzYWdlczogTWVzc2FnZVtdKSA9PiB2b2lkO1xuXHRcdFx0XHRvbkNhbmNlbD86IEZ1bmN0aW9uO1xuXHRcdFx0XHRvblZhbGlkYXRpb24/OiBGdW5jdGlvbjtcblx0XHRcdH07XG5cdFx0fVxuXHQpIHtcblx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYmluZGluZyA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRCaW5kaW5nKCk7XG5cdFx0XHRpZiAoYmluZGluZz8uaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0dGhpcy50YWJsZUFQSSA9IEVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoXG5cdFx0XHRcdFx0KGVsZW1lbnQpID0+IGVsZW1lbnQuaXNBPFRhYmxlQVBJPihcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikgJiYgZWxlbWVudC5nZXRDb250ZW50KCk/LmdldFJvd0JpbmRpbmcoKSA9PT0gYmluZGluZ1xuXHRcdFx0XHQpWzBdIGFzIFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmcoXG5cdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcsXG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdG9uQ29udGV4dFZhbGlkYXRpb246IEZ1bmN0aW9uLFxuXHRcdG1lc3NhZ2VzNDEyOiBNZXNzYWdlW10gPSBbXVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRsZXQgaGFuZGxpbmdSZXNvbHZlITogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuXHRcdGNvbnN0IHN0cmljdEhhbmRsaW5nUHJvbWlzZSA9IG5ldyBQcm9taXNlPGJvb2xlYW4+KGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRoYW5kbGluZ1Jlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdSZXNvbHZlcy5wdXNoKGhhbmRsaW5nUmVzb2x2ZSk7XG5cdFx0Ly8gRmluZCBlcnJvciBtZXNzYWdlIGluIHRoZSA0MTIgcmVzcG9uc2UgYW5kIHJhaXNlIHdhcm5pbmcuXG5cdFx0aWYgKG1lc3NhZ2VzNDEyLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkVycm9yKS5sZW5ndGgpIHtcblx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcIldhcm5pbmc6IDQxMiAoJ1ByZS1jb25kaXRpb24gQ2hlY2sgRmFpbGVkIGR1ZSB0byBzdHJpY3QtaGFuZGxpbmcnKSByZXR1cm5zIG1lc3NhZ2VzIG9mIHR5cGUgZXJyb3IgYnV0IG9ubHkgd2FybmluZyBtZXNzYWdlcyBhcmUgYXBwcm9wcmlhdGUhXCJcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGxldCBhZGRpdGlvbmFsVGV4dCA9IFwiXCI7XG5cdFx0Ly8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjb250ZXh0IHdlIG5lZWQgdGhlIGlkZW50aWZpZXIuIFRoaXMgd291bGQgZml4IGlmIHRoZSBhY3Rpb24gaXMgdHJpZ2dlcmVkIHZpYSB0YWJsZSBjaGV2cm9uXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnRhYmxlQVBJPy5nZXRJZGVudGlmaWVyQ29sdW1uKCk7XG5cdFx0XHRpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRhZGRpdGlvbmFsVGV4dCA9IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldENvbnRleHQoKT8uZ2V0T2JqZWN0KGNvbHVtbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIHNldCB0eXBlIGFuZCBzdWJ0aXRsZSBmb3IgYWxsIHdhcm5pbmcgbWVzc2FnZXNcblx0XHRmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXM0MTIpIHtcblx0XHRcdG1lc3NhZ2Uuc2V0QWRkaXRpb25hbFRleHQoYWRkaXRpb25hbFRleHQpO1xuXHRcdFx0dGhpcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuXHRcdH1cblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblJlc3BvbnNlPy4obWVzc2FnZXM0MTIpO1xuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlPy4oKTtcblx0XHR0aGlzLm9uQ29udGV4dFZhbGlkYXRpb24oc3RyaWN0SGFuZGxpbmdQcm9taXNlLCBvbkNvbnRleHRWYWxpZGF0aW9uKTtcblx0XHRyZXR1cm4gc3RyaWN0SGFuZGxpbmdQcm9taXNlO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBvbkNvbnRleHRWYWxpZGF0aW9uKHN0cmljdEhhbmRsaW5nUHJvbWlzZTogUHJvbWlzZTxib29sZWFuPiwgb25WYWxpZGF0aW9uOiBGdW5jdGlvbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGlzVmFsaWRhdGVkID0gYXdhaXQgc3RyaWN0SGFuZGxpbmdQcm9taXNlO1xuXHRcdGlmIChpc1ZhbGlkYXRlZCkge1xuXHRcdFx0b25WYWxpZGF0aW9uKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGlzQ2FuY2VsZWQgPSAoKTogYm9vbGVhbiA9PiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FuY2VsZWQ7XG5cdH07XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHN0cmljdCBoYW5kbGluZyBmYWlscy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIHN0cmljdCBoYW5kbGluZ1xuXHQgKi9cblx0cHVibGljIGFzeW5jIG1hbmFnZVN0cmljdEhhbmRsaW5nRmFpbHMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuc3RyaWN0SGFuZGxpbmdSZXNvbHZlcy5sZW5ndGgpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoIW1lc3NhZ2VIYW5kbGluZy5oYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpIHx8XG5cdFx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nICE9PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSAmJlxuXHRcdFx0XHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMubGVuZ3RoXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuZGlzcGxheU1lc3NhZ2VzKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlIG9mIHRoaXMuc3RyaWN0SGFuZGxpbmdSZXNvbHZlcykge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKTtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlc0luTW9kZWwgPSBtZXNzYWdlTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0XHRcdG1lc3NhZ2VNb2RlbC5zZXREYXRhKG1lc3NhZ2VzSW5Nb2RlbC5jb25jYXQodGhpcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcykpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiUmUtdHJpZ2dlcmluZyBvZiBzdHJpY3QgaGFuZGxpbmcgb3BlcmF0aW9ucyBmYWlsZWRcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBkaXNwbGF5TWVzc2FnZXMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSB0aGlzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzO1xuXHRcdGlmICghbWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldExvY2FsaXplZFRleHQodGhpcy5wYXJhbWV0ZXJzLmxhYmVsLCB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KTtcblx0XHRyZXR1cm4gbWVzc2FnZXMubGVuZ3RoID09PSAxXG5cdFx0XHQ/IHRoaXMuZGlzcGxheU1lc3NhZ2VPbk1lc3NhZ2VCb3gobWVzc2FnZXNbMF0sIGFjdGlvbk5hbWUpXG5cdFx0XHQ6IHRoaXMuZGlzcGxheU1lc3NhZ2VzT25EaWFsb2cobWVzc2FnZXMsIGFjdGlvbk5hbWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBkaXNwbGF5TWVzc2FnZU9uTWVzc2FnZUJveChtZXNzYWdlOiBNZXNzYWdlLCBhY3Rpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgbWVzc2FnZVJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdG1lc3NhZ2VSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZXh0ID0gbWVzc2FnZS5nZXRNZXNzYWdlKCk7XG5cdFx0Y29uc3QgaWRlbnRpZmllclRleHQgPSBtZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCk7XG5cdFx0Y29uc3QgaXNNdWx0aUNvbnRleHQ0MTIgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMTtcblx0XHRjb25zdCBnZW5lcmljQ2hhbmdlc2V0TWVzc2FnZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfU0lOR0xFX01FU1NBR0VfVEVYVFwiKTtcblx0XHRjb25zdCB3YXJuaW5nTWVzc2FnZVRleHQgPVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHQ/IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfTUVTU0FHRV9URVhUXCIsIFthY3Rpb25OYW1lXSlcblx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfU0tJUF9TSU5HTEVfTUVTU0FHRV9URVhUXCIpO1xuXHRcdGxldCBjYW5jZWxCdXR0b25UeHQ6IHN0cmluZyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIik7XG5cdFx0bGV0IGRpc3BsYXllZE1lc3NhZ2UgPSBcIlwiO1xuXHRcdGlmICghaXNNdWx0aUNvbnRleHQ0MTIpIHtcblx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHttZXNzYWdlVGV4dH1cXG4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlBST0NFRURcIil9YDtcblx0XHR9IGVsc2UgaWYgKGlkZW50aWZpZXJUZXh0ICE9PSB1bmRlZmluZWQgJiYgaWRlbnRpZmllclRleHQgIT09IFwiXCIpIHtcblx0XHRcdGNhbmNlbEJ1dHRvblR4dCA9XG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IGNhbmNlbEJ1dHRvblR4dFxuXHRcdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX1NLSVBcIik7XG5cdFx0XHRjb25zdCBoZWFkZXJJbmZvVHlwZU5hbWUgPSB0aGlzLnRhYmxlQVBJPy5nZXRUYWJsZURlZmluaXRpb24oKS5oZWFkZXJJbmZvVHlwZU5hbWU7XG5cdFx0XHRpZiAoaGVhZGVySW5mb1R5cGVOYW1lKSB7XG5cdFx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHtoZWFkZXJJbmZvVHlwZU5hbWUudG9TdHJpbmcoKX0gJHtpZGVudGlmaWVyVGV4dH06ICR7bWVzc2FnZVRleHR9XFxuXFxuJHt3YXJuaW5nTWVzc2FnZVRleHR9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHtpZGVudGlmaWVyVGV4dH06ICR7bWVzc2FnZVRleHR9XFxuXFxuJHt3YXJuaW5nTWVzc2FnZVRleHR9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FuY2VsQnV0dG9uVHh0ID1cblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHRcdD8gY2FuY2VsQnV0dG9uVHh0XG5cdFx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfU0tJUFwiKTtcblx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHttZXNzYWdlVGV4dH1cXG5cXG4ke3dhcm5pbmdNZXNzYWdlVGV4dH1gO1xuXHRcdH1cblx0XHRpZiAoaXNNdWx0aUNvbnRleHQ0MTIgJiYgdGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldCkge1xuXHRcdFx0ZGlzcGxheWVkTWVzc2FnZSA9IGAke2dlbmVyaWNDaGFuZ2VzZXRNZXNzYWdlfVxcblxcbiR7ZGlzcGxheWVkTWVzc2FnZX1gO1xuXHRcdH1cblx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZGlzcGxheWVkTWVzc2FnZSwge1xuXHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIldBUk5JTkdcIiksXG5cdFx0XHRhY3Rpb25zOiBbYWN0aW9uTmFtZSwgY2FuY2VsQnV0dG9uVHh0XSxcblx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IGFjdGlvbk5hbWUsXG5cdFx0XHRvbkNsb3NlOiAoYWN0aW9uOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0dGhpc1thY3Rpb24gPT09IGFjdGlvbk5hbWUgPyBcImhhbmRsZU1lc3NhZ2VPblZhbGlkYXRpb25cIiA6IFwiaGFuZGxlTWVzc2FnZU9uQ2FuY2VsXCJdKCk7XG5cdFx0XHRcdG1lc3NhZ2VSZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGRpc3BsYXlNZXNzYWdlc09uRGlhbG9nKG1lc3NhZ2VzOiBNZXNzYWdlW10sIGFjdGlvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBtZXNzYWdlUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRcdGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0bWVzc2FnZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG1lc3NhZ2VEaWFsb2dNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IGlzTXVsdGlDb250ZXh0NDEyID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDE7XG5cdFx0bGV0IHdhcm5pbmdNZXNzYWdlID0gXCJcIjtcblx0XHRsZXQgd2FybmluZ0Rlc2MgPSBcIlwiO1xuXHRcdGxldCBjYW5jZWxCdXR0b25UeHQ6IHN0cmluZyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIik7XG5cdFx0aWYgKGlzTXVsdGlDb250ZXh0NDEyKSB7XG5cdFx0XHRjYW5jZWxCdXR0b25UeHQgPVxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0PyBjYW5jZWxCdXR0b25UeHRcblx0XHRcdFx0XHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19TS0lQXCIpO1xuXHRcdFx0d2FybmluZ01lc3NhZ2UgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19XQVJOSU5HXCJcblx0XHRcdFx0XHQ6IFwiQ19DT01NT05fRElBTE9HX1NLSVBfTUVTU0FHRVNfV0FSTklOR1wiXG5cdFx0XHQpO1xuXHRcdFx0d2FybmluZ0Rlc2MgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19URVhUXCJcblx0XHRcdFx0XHQ6IFwiQ19DT01NT05fRElBTE9HX1NLSVBfTUVTU0FHRVNfVEVYVFwiLFxuXHRcdFx0XHRbYWN0aW9uTmFtZV1cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdhcm5pbmdNZXNzYWdlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19HRU5FUklDX0FDVElPTl9XQVJOSU5HXCIsIFthY3Rpb25OYW1lXSk7XG5cdFx0fVxuXHRcdGNvbnN0IGdlbmVyaWNNZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0bWVzc2FnZTogd2FybmluZ01lc3NhZ2UsXG5cdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbixcblx0XHRcdHRhcmdldDogdW5kZWZpbmVkLFxuXHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdGRlc2NyaXB0aW9uOiB3YXJuaW5nRGVzYy5sZW5ndGggPyB3YXJuaW5nRGVzYyA6IHVuZGVmaW5lZFxuXHRcdH0pO1xuXHRcdG1lc3NhZ2VzID0gW2dlbmVyaWNNZXNzYWdlXS5jb25jYXQobWVzc2FnZXMpO1xuXHRcdG1lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKG1lc3NhZ2VzKTtcblx0XHRuZXcgU3RyaWN0RGlhbG9nKHtcblx0XHRcdG1lc3NhZ2VPYmplY3Q6IG1lc3NhZ2VIYW5kbGluZy5wcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cobWVzc2FnZURpYWxvZ01vZGVsLCB0cnVlLCBpc011bHRpQ29udGV4dDQxMiksXG5cdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0bWVzc2FnZURpYWxvZ01vZGVsLFxuXHRcdFx0Y2FuY2VsQnV0dG9uVHh0LFxuXHRcdFx0b25CZWdpbkJ1dHRvblByZXNzOiB0aGlzLmhhbmRsZU1lc3NhZ2VPblZhbGlkYXRpb24uYmluZCh0aGlzKSxcblx0XHRcdG9uRW5kQnV0dG9uUHJlc3M6IHRoaXMuaGFuZGxlTWVzc2FnZU9uQ2FuY2VsLmJpbmQodGhpcyksXG5cdFx0XHRvbkNsb3NlOiBtZXNzYWdlUmVzb2x2ZVxuXHRcdH0pLm9wZW4oKTtcblx0XHRyZXR1cm4gcHJvbWlzZTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlTWVzc2FnZU9uVmFsaWRhdGlvbigpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHJlc29sdmUgb2YgdGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzKSB7XG5cdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdH1cblx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblZhbGlkYXRpb24/LigpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVNZXNzYWdlT25DYW5jZWwoKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KTtcblx0XHR0aGlzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzID0gW107XG5cdFx0dGhpcy5jYW5jZWxlZCA9IHRydWU7XG5cdFx0Zm9yIChjb25zdCByZXNvbHZlIG9mIHRoaXMuc3RyaWN0SGFuZGxpbmdSZXNvbHZlcykge1xuXHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0fVxuXHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdSZXNvbHZlcyA9IFtdO1xuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fQ0hBTkdFU0VUX0NBTkNFTF9NRVNTQUdFU1wiKSwge1xuXHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMTUwcHhcIlxuXHRcdFx0fSBhcyBvYmplY3QpO1xuXHRcdH1cblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vbkNhbmNlbD8uKCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUFlQSxNQUFNQSxrQkFBa0IsR0FBR0MsU0FBUyxDQUFDRCxrQkFBa0I7RUFBQyxJQUVuQ0UsbUJBQW1CO0lBU3ZDLFNBQUFBLG9CQUNrQkMsVUFVaEIsRUFDQTtNQUFBLEtBcEJNQyxzQkFBc0IsR0FBaUMsRUFBRTtNQUFBLEtBRXpEQyw2QkFBNkIsR0FBYyxFQUFFO01BQUEsS0FFN0NDLFFBQVEsR0FBRyxLQUFLO01BQUEsS0FzRWpCQyxVQUFVLEdBQUcsTUFBZTtRQUNsQyxPQUFPLElBQUksQ0FBQ0QsUUFBUTtNQUNyQixDQUFDO01BQUEsS0FuRWlCSCxVQVVoQixHQVZnQkEsVUFVaEI7TUFFRCxJQUFJLElBQUksQ0FBQ0EsVUFBVSxDQUFDSyxRQUFRLENBQUNDLE1BQU0sRUFBRTtRQUNwQyxNQUFNQyxPQUFPLEdBQUcsSUFBSSxDQUFDUCxVQUFVLENBQUNLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csVUFBVSxDQUFDLENBQUM7UUFDeEQsSUFBSUQsT0FBTyxFQUFFRSxHQUFHLENBQUMsd0NBQXdDLENBQUMsRUFBRTtVQUMzRCxJQUFJLENBQUNDLFFBQVEsR0FBR0MsZUFBZSxDQUFDQyxNQUFNLENBQ3BDQyxPQUFPLElBQUtBLE9BQU8sQ0FBQ0osR0FBRyxDQUFXLDhCQUE4QixDQUFDLElBQUlJLE9BQU8sQ0FBQ0MsVUFBVSxDQUFDLENBQUMsRUFBRUMsYUFBYSxDQUFDLENBQUMsS0FBS1IsT0FDakgsQ0FBQyxDQUFDLENBQUMsQ0FBeUI7UUFDN0I7TUFDRDtJQUNEO0lBQUNTLFFBQUEsR0FBQWpCLG1CQUFBO0lBQUEsSUFBQWtCLE1BQUEsR0FBQWxCLG1CQUFBLENBQUFtQixTQUFBO0lBQUFELE1BQUEsQ0FFS0UseUJBQXlCLEdBQS9CLGVBQU1BLHlCQUF5QkEsQ0FDOUJDLHVCQUE0QyxFQUM1Q0MsZ0NBQXNELEVBQ3REQyxtQkFBNkIsRUFFVjtNQUFBLElBRG5CQyxXQUFzQixHQUFBQyxTQUFBLENBQUFsQixNQUFBLFFBQUFrQixTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7TUFFM0IsSUFBSUUsZUFBMEM7TUFDOUMsTUFBTUMscUJBQXFCLEdBQUcsSUFBSUMsT0FBTyxDQUFVLFVBQVVDLE9BQU8sRUFBRTtRQUNyRUgsZUFBZSxHQUFHRyxPQUFPO01BQzFCLENBQUMsQ0FBQztNQUNGLElBQUksQ0FBQzVCLHNCQUFzQixDQUFDNkIsSUFBSSxDQUFDSixlQUFlLENBQUM7TUFDakQ7TUFDQSxJQUFJSCxXQUFXLENBQUNYLE1BQU0sQ0FBRW1CLE9BQU8sSUFBS0EsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxLQUFLQyxXQUFXLENBQUNDLEtBQUssQ0FBQyxDQUFDNUIsTUFBTSxFQUFFO1FBQ3BGNkIsR0FBRyxDQUFDQyxPQUFPLENBQ1YsOElBQ0QsQ0FBQztNQUNGO01BQ0EsSUFBSUMsY0FBYyxHQUFHLEVBQUU7TUFDdkI7TUFDQSxJQUFJLElBQUksQ0FBQ3JDLFVBQVUsQ0FBQ0ssUUFBUSxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3hDLE1BQU1nQyxNQUFNLEdBQUcsSUFBSSxDQUFDNUIsUUFBUSxFQUFFNkIsbUJBQW1CLENBQUMsQ0FBQztRQUNuRCxJQUFJLE9BQU9ELE1BQU0sS0FBSyxRQUFRLEVBQUU7VUFDL0JELGNBQWMsR0FBR2pCLHVCQUF1QixDQUFDb0IsVUFBVSxDQUFDLENBQUMsRUFBRUMsU0FBUyxDQUFDSCxNQUFNLENBQUM7UUFDekU7TUFDRDtNQUNBO01BQ0EsS0FBSyxNQUFNUCxPQUFPLElBQUlSLFdBQVcsRUFBRTtRQUNsQ1EsT0FBTyxDQUFDVyxpQkFBaUIsQ0FBQ0wsY0FBYyxDQUFDO1FBQ3pDLElBQUksQ0FBQ25DLDZCQUE2QixDQUFDNEIsSUFBSSxDQUFDQyxPQUFPLENBQUM7TUFDakQ7TUFDQSxJQUFJLENBQUMvQixVQUFVLENBQUMyQyxNQUFNLEVBQUVDLFVBQVUsR0FBR3JCLFdBQVcsQ0FBQztNQUNqREYsZ0NBQWdDLEdBQUcsQ0FBQztNQUNwQyxJQUFJLENBQUNDLG1CQUFtQixDQUFDSyxxQkFBcUIsRUFBRUwsbUJBQW1CLENBQUM7TUFDcEUsT0FBT0sscUJBQXFCO0lBQzdCLENBQUM7SUFBQVYsTUFBQSxDQUVhSyxtQkFBbUIsR0FBakMsZUFBY0EsbUJBQW1CQSxDQUFDSyxxQkFBdUMsRUFBRWtCLFlBQXNCLEVBQWlCO01BQ2pILE1BQU1DLFdBQVcsR0FBRyxNQUFNbkIscUJBQXFCO01BQy9DLElBQUltQixXQUFXLEVBQUU7UUFDaEJELFlBQVksQ0FBQyxDQUFDO01BQ2Y7SUFDRCxDQUFDO0lBTUQ7QUFDRDtBQUNBO0FBQ0E7SUFIQzVCLE1BQUEsQ0FJYThCLHlCQUF5QixHQUF0QyxlQUFhQSx5QkFBeUJBLENBQUEsRUFBa0I7TUFDdkQsSUFBSSxJQUFJLENBQUM5QyxzQkFBc0IsQ0FBQ0ssTUFBTSxFQUFFO1FBQ3ZDLElBQUk7VUFDSCxJQUNDLENBQUMsQ0FBQzBDLGVBQWUsQ0FBQ0MsNkJBQTZCLENBQUMsQ0FBQyxJQUNoRCxJQUFJLENBQUNqRCxVQUFVLENBQUNrRCxrQkFBa0IsS0FBS3JELGtCQUFrQixDQUFDc0QsU0FBUyxLQUNwRSxJQUFJLENBQUNqRCw2QkFBNkIsQ0FBQ0ksTUFBTSxFQUN4QztZQUNELE1BQU0sSUFBSSxDQUFDOEMsZUFBZSxDQUFDLENBQUM7VUFDN0IsQ0FBQyxNQUFNO1lBQ04sS0FBSyxNQUFNdkIsT0FBTyxJQUFJLElBQUksQ0FBQzVCLHNCQUFzQixFQUFFO2NBQ2xENEIsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNmO1lBQ0EsTUFBTXdCLFlBQVksR0FBR0MsU0FBUyxDQUFDQyxlQUFlLENBQUMsQ0FBQztZQUNoRCxNQUFNQyxlQUFlLEdBQUdILFlBQVksQ0FBQ0ksT0FBTyxDQUFDLENBQUM7WUFDOUNKLFlBQVksQ0FBQ0ssT0FBTyxDQUFDRixlQUFlLENBQUNHLE1BQU0sQ0FBQyxJQUFJLENBQUN6RCw2QkFBNkIsQ0FBQyxDQUFDO1VBQ2pGO1FBQ0QsQ0FBQyxDQUFDLE1BQU07VUFDUGlDLEdBQUcsQ0FBQ3lCLEtBQUssQ0FBQyxvREFBb0QsQ0FBQztRQUNoRTtNQUNEO0lBQ0QsQ0FBQztJQUFBM0MsTUFBQSxDQUVhbUMsZUFBZSxHQUE3QixlQUFjQSxlQUFlQSxDQUFBLEVBQWtCO01BQzlDLE1BQU1TLFFBQVEsR0FBRyxJQUFJLENBQUMzRCw2QkFBNkI7TUFDbkQsSUFBSSxDQUFDMkQsUUFBUSxDQUFDdkQsTUFBTSxFQUFFO1FBQ3JCO01BQ0Q7TUFDQSxNQUFNd0QsVUFBVSxHQUFHQyxtQkFBbUIsQ0FBQ0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDaEUsVUFBVSxDQUFDaUUsS0FBSyxFQUFFLElBQUksQ0FBQ2pFLFVBQVUsQ0FBQ2tFLFlBQVksQ0FBQztNQUM1RyxPQUFPTCxRQUFRLENBQUN2RCxNQUFNLEtBQUssQ0FBQyxHQUN6QixJQUFJLENBQUM2RCwwQkFBMEIsQ0FBQ04sUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxVQUFVLENBQUMsR0FDeEQsSUFBSSxDQUFDTSx1QkFBdUIsQ0FBQ1AsUUFBUSxFQUFFQyxVQUFVLENBQUM7SUFDdEQsQ0FBQztJQUFBN0MsTUFBQSxDQUVha0QsMEJBQTBCLEdBQXhDLGVBQWNBLDBCQUEwQkEsQ0FBQ3BDLE9BQWdCLEVBQUUrQixVQUFrQixFQUFpQjtNQUM3RixJQUFJTyxjQUF5QjtNQUM3QixNQUFNQyxPQUFPLEdBQUcsSUFBSTFDLE9BQU8sQ0FBUUMsT0FBTyxJQUFLO1FBQzlDd0MsY0FBYyxHQUFHeEMsT0FBTztNQUN6QixDQUFDLENBQUM7TUFDRixNQUFNMEMsYUFBYSxHQUFHUixtQkFBbUIsQ0FBQ1MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDeEUsVUFBVSxDQUFDa0UsWUFBWSxDQUFDO01BQ3hGLE1BQU1PLFdBQVcsR0FBRzFDLE9BQU8sQ0FBQzJDLFVBQVUsQ0FBQyxDQUFDO01BQ3hDLE1BQU1DLGNBQWMsR0FBRzVDLE9BQU8sQ0FBQzZDLGlCQUFpQixDQUFDLENBQUM7TUFDbEQsTUFBTUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDN0UsVUFBVSxDQUFDSyxRQUFRLENBQUNDLE1BQU0sR0FBRyxDQUFDO01BQzdELE1BQU13RSx1QkFBdUIsR0FBR1AsYUFBYSxDQUFDUSxPQUFPLENBQUMsNENBQTRDLENBQUM7TUFDbkcsTUFBTUMsa0JBQWtCLEdBQ3ZCLElBQUksQ0FBQ2hGLFVBQVUsQ0FBQ2tELGtCQUFrQixLQUFLckQsa0JBQWtCLENBQUNzRCxTQUFTLEdBQ2hFb0IsYUFBYSxDQUFDUSxPQUFPLENBQUMscUNBQXFDLEVBQUUsQ0FBQ2pCLFVBQVUsQ0FBQyxDQUFDLEdBQzFFUyxhQUFhLENBQUNRLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQztNQUNyRSxJQUFJRSxlQUF1QixHQUFHVixhQUFhLENBQUNRLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztNQUM3RSxJQUFJRyxnQkFBZ0IsR0FBRyxFQUFFO01BQ3pCLElBQUksQ0FBQ0wsaUJBQWlCLEVBQUU7UUFDdkJLLGdCQUFnQixHQUFHLEdBQUdULFdBQVcsS0FBS0YsYUFBYSxDQUFDUSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7TUFDekUsQ0FBQyxNQUFNLElBQUlKLGNBQWMsS0FBS2xELFNBQVMsSUFBSWtELGNBQWMsS0FBSyxFQUFFLEVBQUU7UUFDakVNLGVBQWUsR0FDZCxJQUFJLENBQUNqRixVQUFVLENBQUNrRCxrQkFBa0IsS0FBS3JELGtCQUFrQixDQUFDc0QsU0FBUyxHQUNoRThCLGVBQWUsR0FDZlYsYUFBYSxDQUFDUSxPQUFPLENBQUMsc0JBQXNCLENBQUM7UUFDakQsTUFBTUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDekUsUUFBUSxFQUFFMEUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDRCxrQkFBa0I7UUFDakYsSUFBSUEsa0JBQWtCLEVBQUU7VUFDdkJELGdCQUFnQixHQUFHLEdBQUdDLGtCQUFrQixDQUFDRSxRQUFRLENBQUMsQ0FBQyxJQUFJVixjQUFjLEtBQUtGLFdBQVcsT0FBT08sa0JBQWtCLEVBQUU7UUFDakgsQ0FBQyxNQUFNO1VBQ05FLGdCQUFnQixHQUFHLEdBQUdQLGNBQWMsS0FBS0YsV0FBVyxPQUFPTyxrQkFBa0IsRUFBRTtRQUNoRjtNQUNELENBQUMsTUFBTTtRQUNOQyxlQUFlLEdBQ2QsSUFBSSxDQUFDakYsVUFBVSxDQUFDa0Qsa0JBQWtCLEtBQUtyRCxrQkFBa0IsQ0FBQ3NELFNBQVMsR0FDaEU4QixlQUFlLEdBQ2ZWLGFBQWEsQ0FBQ1EsT0FBTyxDQUFDLHNCQUFzQixDQUFDO1FBQ2pERyxnQkFBZ0IsR0FBRyxHQUFHVCxXQUFXLE9BQU9PLGtCQUFrQixFQUFFO01BQzdEO01BQ0EsSUFBSUgsaUJBQWlCLElBQUksSUFBSSxDQUFDN0UsVUFBVSxDQUFDa0Qsa0JBQWtCLEtBQUtyRCxrQkFBa0IsQ0FBQ3NELFNBQVMsRUFBRTtRQUM3RitCLGdCQUFnQixHQUFHLEdBQUdKLHVCQUF1QixPQUFPSSxnQkFBZ0IsRUFBRTtNQUN2RTtNQUNBSSxVQUFVLENBQUNsRCxPQUFPLENBQUM4QyxnQkFBZ0IsRUFBRTtRQUNwQ0ssS0FBSyxFQUFFaEIsYUFBYSxDQUFDUSxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3ZDUyxPQUFPLEVBQUUsQ0FBQzFCLFVBQVUsRUFBRW1CLGVBQWUsQ0FBQztRQUN0Q1EsZ0JBQWdCLEVBQUUzQixVQUFVO1FBQzVCNEIsT0FBTyxFQUFHQyxNQUFjLElBQUs7VUFDNUIsSUFBSSxDQUFDQSxNQUFNLEtBQUs3QixVQUFVLEdBQUcsMkJBQTJCLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1VBQ3JGTyxjQUFjLENBQUMsQ0FBQztRQUNqQjtNQUNELENBQUMsQ0FBQztNQUNGLE9BQU9DLE9BQU87SUFDZixDQUFDO0lBQUFyRCxNQUFBLENBRWFtRCx1QkFBdUIsR0FBckMsZUFBY0EsdUJBQXVCQSxDQUFDUCxRQUFtQixFQUFFQyxVQUFrQixFQUFpQjtNQUM3RixJQUFJTyxjQUF5QjtNQUM3QixNQUFNQyxPQUFPLEdBQUcsSUFBSTFDLE9BQU8sQ0FBUUMsT0FBTyxJQUFLO1FBQzlDd0MsY0FBYyxHQUFHeEMsT0FBTztNQUN6QixDQUFDLENBQUM7TUFDRixNQUFNK0Qsa0JBQWtCLEdBQUcsSUFBSUMsU0FBUyxDQUFDLENBQUM7TUFDMUMsTUFBTXRCLGFBQWEsR0FBR1IsbUJBQW1CLENBQUNTLGdCQUFnQixDQUFDLElBQUksQ0FBQ3hFLFVBQVUsQ0FBQ2tFLFlBQVksQ0FBQztNQUN4RixNQUFNVyxpQkFBaUIsR0FBRyxJQUFJLENBQUM3RSxVQUFVLENBQUNLLFFBQVEsQ0FBQ0MsTUFBTSxHQUFHLENBQUM7TUFDN0QsSUFBSXdGLGNBQWMsR0FBRyxFQUFFO01BQ3ZCLElBQUlDLFdBQVcsR0FBRyxFQUFFO01BQ3BCLElBQUlkLGVBQXVCLEdBQUdWLGFBQWEsQ0FBQ1EsT0FBTyxDQUFDLHdCQUF3QixDQUFDO01BQzdFLElBQUlGLGlCQUFpQixFQUFFO1FBQ3RCSSxlQUFlLEdBQ2QsSUFBSSxDQUFDakYsVUFBVSxDQUFDa0Qsa0JBQWtCLEtBQUtyRCxrQkFBa0IsQ0FBQ3NELFNBQVMsR0FDaEU4QixlQUFlLEdBQ2ZWLGFBQWEsQ0FBQ1EsT0FBTyxDQUFDLHNCQUFzQixDQUFDO1FBQ2pEZSxjQUFjLEdBQUd2QixhQUFhLENBQUNRLE9BQU8sQ0FDckMsSUFBSSxDQUFDL0UsVUFBVSxDQUFDa0Qsa0JBQWtCLEtBQUtyRCxrQkFBa0IsQ0FBQ3NELFNBQVMsR0FDaEUseUNBQXlDLEdBQ3pDLHVDQUNKLENBQUM7UUFDRDRDLFdBQVcsR0FBR3hCLGFBQWEsQ0FBQ1EsT0FBTyxDQUNsQyxJQUFJLENBQUMvRSxVQUFVLENBQUNrRCxrQkFBa0IsS0FBS3JELGtCQUFrQixDQUFDc0QsU0FBUyxHQUNoRSxzQ0FBc0MsR0FDdEMsb0NBQW9DLEVBQ3ZDLENBQUNXLFVBQVUsQ0FDWixDQUFDO01BQ0YsQ0FBQyxNQUFNO1FBQ05nQyxjQUFjLEdBQUd2QixhQUFhLENBQUNRLE9BQU8sQ0FBQyx3REFBd0QsRUFBRSxDQUFDakIsVUFBVSxDQUFDLENBQUM7TUFDL0c7TUFDQSxNQUFNa0MsY0FBYyxHQUFHLElBQUlDLE9BQU8sQ0FBQztRQUNsQ2xFLE9BQU8sRUFBRStELGNBQWM7UUFDdkJJLElBQUksRUFBRWpFLFdBQVcsQ0FBQ2tFLFdBQVc7UUFDN0JDLE1BQU0sRUFBRTNFLFNBQVM7UUFDakI0RSxVQUFVLEVBQUUsSUFBSTtRQUNoQkMsV0FBVyxFQUFFUCxXQUFXLENBQUN6RixNQUFNLEdBQUd5RixXQUFXLEdBQUd0RTtNQUNqRCxDQUFDLENBQUM7TUFDRm9DLFFBQVEsR0FBRyxDQUFDbUMsY0FBYyxDQUFDLENBQUNyQyxNQUFNLENBQUNFLFFBQVEsQ0FBQztNQUM1QytCLGtCQUFrQixDQUFDbEMsT0FBTyxDQUFDRyxRQUFRLENBQUM7TUFDcEMsSUFBSTBDLFlBQVksQ0FBQztRQUNoQkMsYUFBYSxFQUFFeEQsZUFBZSxDQUFDeUQsMkJBQTJCLENBQUNiLGtCQUFrQixFQUFFLElBQUksRUFBRWYsaUJBQWlCLENBQUM7UUFDdkdmLFVBQVU7UUFDVjhCLGtCQUFrQjtRQUNsQlgsZUFBZTtRQUNmeUIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDQyx5QkFBeUIsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM3REMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDQyxxQkFBcUIsQ0FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2RGxCLE9BQU8sRUFBRXJCO01BQ1YsQ0FBQyxDQUFDLENBQUMwQyxJQUFJLENBQUMsQ0FBQztNQUNULE9BQU96QyxPQUFPO0lBQ2YsQ0FBQztJQUFBckQsTUFBQSxDQUVPMEYseUJBQXlCLEdBQWpDLFNBQVFBLHlCQUF5QkEsQ0FBQSxFQUFTO01BQ3pDLEtBQUssTUFBTTlFLE9BQU8sSUFBSSxJQUFJLENBQUM1QixzQkFBc0IsRUFBRTtRQUNsRDRCLE9BQU8sQ0FBQyxJQUFJLENBQUM7TUFDZDtNQUNBbUIsZUFBZSxDQUFDZ0UsNkJBQTZCLENBQUMsQ0FBQztNQUMvQ2hFLGVBQWUsQ0FBQ2lFLCtCQUErQixDQUFDLENBQUM7TUFDakQsSUFBSSxDQUFDL0csNkJBQTZCLEdBQUcsRUFBRTtNQUN2QyxJQUFJLENBQUNGLFVBQVUsQ0FBQzJDLE1BQU0sRUFBRUUsWUFBWSxHQUFHLENBQUM7SUFDekMsQ0FBQztJQUFBNUIsTUFBQSxDQUVPNkYscUJBQXFCLEdBQTdCLFNBQVFBLHFCQUFxQkEsQ0FBQSxFQUFTO01BQ3JDLE1BQU12QyxhQUFhLEdBQUdSLG1CQUFtQixDQUFDUyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUN4RSxVQUFVLENBQUNrRSxZQUFZLENBQUM7TUFDeEYsSUFBSSxDQUFDaEUsNkJBQTZCLEdBQUcsRUFBRTtNQUN2QyxJQUFJLENBQUNDLFFBQVEsR0FBRyxJQUFJO01BQ3BCLEtBQUssTUFBTTBCLE9BQU8sSUFBSSxJQUFJLENBQUM1QixzQkFBc0IsRUFBRTtRQUNsRDRCLE9BQU8sQ0FBQyxLQUFLLENBQUM7TUFDZjtNQUNBLElBQUksQ0FBQzVCLHNCQUFzQixHQUFHLEVBQUU7TUFDaEMsSUFBSSxJQUFJLENBQUNELFVBQVUsQ0FBQ2tELGtCQUFrQixLQUFLckQsa0JBQWtCLENBQUNzRCxTQUFTLEVBQUU7UUFDeEVtQyxVQUFVLENBQUM0QixXQUFXLENBQUMzQyxhQUFhLENBQUNRLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFO1VBQzVFb0MsWUFBWSxFQUFFO1FBQ2YsQ0FBVyxDQUFDO01BQ2I7TUFDQSxJQUFJLENBQUNuSCxVQUFVLENBQUMyQyxNQUFNLEVBQUV5RSxRQUFRLEdBQUcsQ0FBQztJQUNyQyxDQUFDO0lBQUEsT0FBQXJILG1CQUFBO0VBQUE7RUFBQWlCLFFBQUEsR0FBQWpCLG1CQUFBO0VBQUEsT0FBQWlCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
201
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YVN0cmljdEhhbmRsaW5nIiwicGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nUmVzb2x2ZXMiLCJzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyIsImNhbmNlbGVkIiwiaXNDYW5jZWxlZCIsImNvbnRleHRzIiwibGVuZ3RoIiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0EiLCJ0YWJsZUFQSSIsIkVsZW1lbnRSZWdpc3RyeSIsImZpbHRlciIsImVsZW1lbnQiLCJnZXRDb250ZW50IiwiZ2V0Um93QmluZGluZyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUiLCJvbkNvbnRleHRWYWxpZGF0aW9uIiwibWVzc2FnZXM0MTIiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJoYW5kbGluZ1Jlc29sdmUiLCJzdHJpY3RIYW5kbGluZ1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInB1c2giLCJtZXNzYWdlIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJMb2ciLCJ3YXJuaW5nIiwiYWRkaXRpb25hbFRleHQiLCJjb2x1bW4iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiZ2V0Q29udGV4dCIsImdldE9iamVjdCIsInNldEFkZGl0aW9uYWxUZXh0IiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm9uVmFsaWRhdGlvbiIsImlzVmFsaWRhdGVkIiwibWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscyIsIm1lc3NhZ2VIYW5kbGluZyIsImhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0IiwiZGlzcGxheU1lc3NhZ2VzIiwibWVzc2FnZU1vZGVsIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwibWVzc2FnZXNJbk1vZGVsIiwiZ2V0RGF0YSIsInNldERhdGEiLCJjb25jYXQiLCJlcnJvciIsIm1lc3NhZ2VzIiwiYWN0aW9uTmFtZSIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRMb2NhbGl6ZWRUZXh0IiwibGFiZWwiLCJhcHBDb21wb25lbnQiLCJnZXREZXNjcmlwdGlvbiIsImdldERlc2NyaXB0aW9uVXJsIiwiZGlzcGxheU1lc3NhZ2VPbk1lc3NhZ2VCb3giLCJkaXNwbGF5TWVzc2FnZXNPbkRpYWxvZyIsIm1lc3NhZ2VSZXNvbHZlIiwicHJvbWlzZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwibWVzc2FnZVRleHQiLCJnZXRNZXNzYWdlIiwiaWRlbnRpZmllclRleHQiLCJnZXRBZGRpdGlvbmFsVGV4dCIsImlzTXVsdGlDb250ZXh0NDEyIiwiZ2VuZXJpY0NoYW5nZXNldE1lc3NhZ2UiLCJnZXRUZXh0Iiwid2FybmluZ01lc3NhZ2VUZXh0IiwiY2FuY2VsQnV0dG9uVHh0IiwiZGlzcGxheWVkTWVzc2FnZSIsImhlYWRlckluZm9UeXBlTmFtZSIsImdldFRhYmxlRGVmaW5pdGlvbiIsInRvU3RyaW5nIiwiTWVzc2FnZUJveCIsInRpdGxlIiwiYWN0aW9ucyIsImVtcGhhc2l6ZWRBY3Rpb24iLCJvbkNsb3NlIiwiYWN0aW9uIiwibWVzc2FnZURpYWxvZ01vZGVsIiwiSlNPTk1vZGVsIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nRGVzYyIsImdlbmVyaWNNZXNzYWdlIiwiTWVzc2FnZSIsInR5cGUiLCJJbmZvcm1hdGlvbiIsInRhcmdldCIsInBlcnNpc3RlbnQiLCJkZXNjcmlwdGlvbiIsIlN0cmljdERpYWxvZyIsIm1lc3NhZ2VPYmplY3QiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJvbkJlZ2luQnV0dG9uUHJlc3MiLCJoYW5kbGVNZXNzYWdlT25WYWxpZGF0aW9uIiwiYmluZCIsIm9uRW5kQnV0dG9uUHJlc3MiLCJoYW5kbGVNZXNzYWdlT25DYW5jZWwiLCJvcGVuIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiaW5mb3JtYXRpb24iLCJjb250ZW50V2lkdGgiLCJvbkNhbmNlbCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT0RhdGFTdHJpY3RIYW5kbGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBFbGVtZW50UmVnaXN0cnkgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRSZWdpc3RyeVwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgU3RyaWN0RGlhbG9nIGZyb20gXCIuLi8uLi9kaWFsb2cvT0RhdGFTdHJpY3REaWFsb2dcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcIi4uLy4uL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuY29uc3QgSW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT0RhdGFTdHJpY3RIYW5kbGluZyB7XG5cdHByaXZhdGUgc3RyaWN0SGFuZGxpbmdSZXNvbHZlczogKCh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZClbXSA9IFtdO1xuXG5cdHByaXZhdGUgc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG5cdHByaXZhdGUgY2FuY2VsZWQgPSBmYWxzZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlcnM6IHtcblx0XHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRcdFx0Y29udGV4dHM6IENvbnRleHRbXTtcblx0XHRcdGxhYmVsOiBzdHJpbmc7XG5cdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRldmVudHM/OiB7XG5cdFx0XHRcdG9uUmVzcG9uc2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSkgPT4gdm9pZDtcblx0XHRcdFx0b25DYW5jZWw/OiBGdW5jdGlvbjtcblx0XHRcdFx0b25WYWxpZGF0aW9uPzogRnVuY3Rpb247XG5cdFx0XHR9O1xuXHRcdH1cblx0KSB7XG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0uZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKGJpbmRpbmc/LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkgPSBFbGVtZW50UmVnaXN0cnkuZmlsdGVyKFxuXHRcdFx0XHRcdChlbGVtZW50KSA9PiBlbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpICYmIGVsZW1lbnQuZ2V0Q29udGVudCgpPy5nZXRSb3dCaW5kaW5nKCkgPT09IGJpbmRpbmdcblx0XHRcdFx0KVswXSBhcyBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBoYW5kbGVPZGF0YVN0cmljdEhhbmRsaW5nKFxuXHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nOiBPRGF0YUNvbnRleHRCaW5kaW5nLFxuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlOiBGdW5jdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRvbkNvbnRleHRWYWxpZGF0aW9uOiBGdW5jdGlvbixcblx0XHRtZXNzYWdlczQxMjogTWVzc2FnZVtdID0gW11cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0bGV0IGhhbmRsaW5nUmVzb2x2ZSE6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTxib29sZWFuPihmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0aGFuZGxpbmdSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0XHR0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMucHVzaChoYW5kbGluZ1Jlc29sdmUpO1xuXHRcdC8vIEZpbmQgZXJyb3IgbWVzc2FnZSBpbiB0aGUgNDEyIHJlc3BvbnNlIGFuZCByYWlzZSB3YXJuaW5nLlxuXHRcdGlmIChtZXNzYWdlczQxMi5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5FcnJvcikubGVuZ3RoKSB7XG5cdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XCJXYXJuaW5nOiA0MTIgKCdQcmUtY29uZGl0aW9uIENoZWNrIEZhaWxlZCBkdWUgdG8gc3RyaWN0LWhhbmRsaW5nJykgcmV0dXJucyBtZXNzYWdlcyBvZiB0eXBlIGVycm9yIGJ1dCBvbmx5IHdhcm5pbmcgbWVzc2FnZXMgYXJlIGFwcHJvcHJpYXRlIVwiXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRsZXQgYWRkaXRpb25hbFRleHQgPSBcIlwiO1xuXHRcdC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY29udGV4dCB3ZSBuZWVkIHRoZSBpZGVudGlmaWVyLiBUaGlzIHdvdWxkIGZpeCBpZiB0aGUgYWN0aW9uIGlzIHRyaWdnZXJlZCB2aWEgdGFibGUgY2hldnJvblxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy50YWJsZUFQST8uZ2V0SWRlbnRpZmllckNvbHVtbigpO1xuXHRcdFx0aWYgKHR5cGVvZiBjb2x1bW4gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0YWRkaXRpb25hbFRleHQgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRDb250ZXh0KCk/LmdldE9iamVjdChjb2x1bW4pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBzZXQgdHlwZSBhbmQgc3VidGl0bGUgZm9yIGFsbCB3YXJuaW5nIG1lc3NhZ2VzXG5cdFx0Zm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzNDEyKSB7XG5cdFx0XHRtZXNzYWdlLnNldEFkZGl0aW9uYWxUZXh0KGFkZGl0aW9uYWxUZXh0KTtcblx0XHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25SZXNwb25zZT8uKG1lc3NhZ2VzNDEyKTtcblx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZT8uKCk7XG5cdFx0dGhpcy5vbkNvbnRleHRWYWxpZGF0aW9uKHN0cmljdEhhbmRsaW5nUHJvbWlzZSwgb25Db250ZXh0VmFsaWRhdGlvbik7XG5cdFx0cmV0dXJuIHN0cmljdEhhbmRsaW5nUHJvbWlzZTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgb25Db250ZXh0VmFsaWRhdGlvbihzdHJpY3RIYW5kbGluZ1Byb21pc2U6IFByb21pc2U8Ym9vbGVhbj4sIG9uVmFsaWRhdGlvbjogRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpc1ZhbGlkYXRlZCA9IGF3YWl0IHN0cmljdEhhbmRsaW5nUHJvbWlzZTtcblx0XHRpZiAoaXNWYWxpZGF0ZWQpIHtcblx0XHRcdG9uVmFsaWRhdGlvbigpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBpc0NhbmNlbGVkID0gKCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiB0aGlzLmNhbmNlbGVkO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBzdHJpY3QgaGFuZGxpbmcgZmFpbHMuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBzdHJpY3QgaGFuZGxpbmdcblx0ICovXG5cdHB1YmxpYyBhc3luYyBtYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMubGVuZ3RoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KCFtZXNzYWdlSGFuZGxpbmcuaGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MoKSB8fFxuXHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyAhPT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldCkgJiZcblx0XHRcdFx0XHR0aGlzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzLmxlbmd0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmRpc3BsYXlNZXNzYWdlcygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgcmVzb2x2ZSBvZiB0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCk7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gbWVzc2FnZU1vZGVsLmdldERhdGEoKTtcblx0XHRcdFx0XHRtZXNzYWdlTW9kZWwuc2V0RGF0YShtZXNzYWdlc0luTW9kZWwuY29uY2F0KHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdExvZy5lcnJvcihcIlJlLXRyaWdnZXJpbmcgb2Ygc3RyaWN0IGhhbmRsaW5nIG9wZXJhdGlvbnMgZmFpbGVkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcGxheU1lc3NhZ2VzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcztcblx0XHRpZiAoIW1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBhY3Rpb25OYW1lID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRMb2NhbGl6ZWRUZXh0KHRoaXMucGFyYW1ldGVycy5sYWJlbCwgdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCk7XG5cdFx0cmV0dXJuIG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiAhKG1lc3NhZ2VzWzBdLmdldERlc2NyaXB0aW9uKCk/Lmxlbmd0aCB8fCBtZXNzYWdlc1swXS5nZXREZXNjcmlwdGlvblVybCgpPy5sZW5ndGgpXG5cdFx0XHQ/IHRoaXMuZGlzcGxheU1lc3NhZ2VPbk1lc3NhZ2VCb3gobWVzc2FnZXNbMF0sIGFjdGlvbk5hbWUpXG5cdFx0XHQ6IHRoaXMuZGlzcGxheU1lc3NhZ2VzT25EaWFsb2cobWVzc2FnZXMsIGFjdGlvbk5hbWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBkaXNwbGF5TWVzc2FnZU9uTWVzc2FnZUJveChtZXNzYWdlOiBNZXNzYWdlLCBhY3Rpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgbWVzc2FnZVJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdG1lc3NhZ2VSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZXh0ID0gbWVzc2FnZS5nZXRNZXNzYWdlKCk7XG5cdFx0Y29uc3QgaWRlbnRpZmllclRleHQgPSBtZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCk7XG5cdFx0Y29uc3QgaXNNdWx0aUNvbnRleHQ0MTIgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMTtcblx0XHRjb25zdCBnZW5lcmljQ2hhbmdlc2V0TWVzc2FnZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfU0lOR0xFX01FU1NBR0VfVEVYVFwiKTtcblx0XHRjb25zdCB3YXJuaW5nTWVzc2FnZVRleHQgPVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHQ/IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfTUVTU0FHRV9URVhUXCIsIFthY3Rpb25OYW1lXSlcblx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfU0tJUF9TSU5HTEVfTUVTU0FHRV9URVhUXCIpO1xuXHRcdGxldCBjYW5jZWxCdXR0b25UeHQ6IHN0cmluZyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIik7XG5cdFx0bGV0IGRpc3BsYXllZE1lc3NhZ2UgPSBcIlwiO1xuXHRcdGlmICghaXNNdWx0aUNvbnRleHQ0MTIpIHtcblx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHttZXNzYWdlVGV4dH1cXG4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlBST0NFRURcIil9YDtcblx0XHR9IGVsc2UgaWYgKGlkZW50aWZpZXJUZXh0ICE9PSB1bmRlZmluZWQgJiYgaWRlbnRpZmllclRleHQgIT09IFwiXCIpIHtcblx0XHRcdGNhbmNlbEJ1dHRvblR4dCA9XG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IGNhbmNlbEJ1dHRvblR4dFxuXHRcdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX1NLSVBcIik7XG5cdFx0XHRjb25zdCBoZWFkZXJJbmZvVHlwZU5hbWUgPSB0aGlzLnRhYmxlQVBJPy5nZXRUYWJsZURlZmluaXRpb24oKS5oZWFkZXJJbmZvVHlwZU5hbWU7XG5cdFx0XHRpZiAoaGVhZGVySW5mb1R5cGVOYW1lKSB7XG5cdFx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHtoZWFkZXJJbmZvVHlwZU5hbWUudG9TdHJpbmcoKX0gJHtpZGVudGlmaWVyVGV4dH06ICR7bWVzc2FnZVRleHR9XFxuXFxuJHt3YXJuaW5nTWVzc2FnZVRleHR9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHtpZGVudGlmaWVyVGV4dH06ICR7bWVzc2FnZVRleHR9XFxuXFxuJHt3YXJuaW5nTWVzc2FnZVRleHR9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FuY2VsQnV0dG9uVHh0ID1cblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHRcdD8gY2FuY2VsQnV0dG9uVHh0XG5cdFx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfU0tJUFwiKTtcblx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHttZXNzYWdlVGV4dH1cXG5cXG4ke3dhcm5pbmdNZXNzYWdlVGV4dH1gO1xuXHRcdH1cblx0XHRpZiAoaXNNdWx0aUNvbnRleHQ0MTIgJiYgdGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldCkge1xuXHRcdFx0ZGlzcGxheWVkTWVzc2FnZSA9IGAke2dlbmVyaWNDaGFuZ2VzZXRNZXNzYWdlfVxcblxcbiR7ZGlzcGxheWVkTWVzc2FnZX1gO1xuXHRcdH1cblx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZGlzcGxheWVkTWVzc2FnZSwge1xuXHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIldBUk5JTkdcIiksXG5cdFx0XHRhY3Rpb25zOiBbYWN0aW9uTmFtZSwgY2FuY2VsQnV0dG9uVHh0XSxcblx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IGFjdGlvbk5hbWUsXG5cdFx0XHRvbkNsb3NlOiAoYWN0aW9uOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0dGhpc1thY3Rpb24gPT09IGFjdGlvbk5hbWUgPyBcImhhbmRsZU1lc3NhZ2VPblZhbGlkYXRpb25cIiA6IFwiaGFuZGxlTWVzc2FnZU9uQ2FuY2VsXCJdKCk7XG5cdFx0XHRcdG1lc3NhZ2VSZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGRpc3BsYXlNZXNzYWdlc09uRGlhbG9nKG1lc3NhZ2VzOiBNZXNzYWdlW10sIGFjdGlvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBtZXNzYWdlUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRcdGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0bWVzc2FnZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG1lc3NhZ2VEaWFsb2dNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IGlzTXVsdGlDb250ZXh0NDEyID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDE7XG5cdFx0bGV0IHdhcm5pbmdNZXNzYWdlID0gXCJcIjtcblx0XHRsZXQgd2FybmluZ0Rlc2MgPSBcIlwiO1xuXHRcdGxldCBjYW5jZWxCdXR0b25UeHQ6IHN0cmluZyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIik7XG5cdFx0aWYgKGlzTXVsdGlDb250ZXh0NDEyKSB7XG5cdFx0XHRjYW5jZWxCdXR0b25UeHQgPVxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0PyBjYW5jZWxCdXR0b25UeHRcblx0XHRcdFx0XHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19TS0lQXCIpO1xuXHRcdFx0d2FybmluZ01lc3NhZ2UgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19XQVJOSU5HXCJcblx0XHRcdFx0XHQ6IFwiQ19DT01NT05fRElBTE9HX1NLSVBfTUVTU0FHRVNfV0FSTklOR1wiXG5cdFx0XHQpO1xuXHRcdFx0d2FybmluZ0Rlc2MgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19URVhUXCJcblx0XHRcdFx0XHQ6IFwiQ19DT01NT05fRElBTE9HX1NLSVBfTUVTU0FHRVNfVEVYVFwiLFxuXHRcdFx0XHRbYWN0aW9uTmFtZV1cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdhcm5pbmdNZXNzYWdlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19HRU5FUklDX0FDVElPTl9XQVJOSU5HXCIsIFthY3Rpb25OYW1lXSk7XG5cdFx0fVxuXHRcdGNvbnN0IGdlbmVyaWNNZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0bWVzc2FnZTogd2FybmluZ01lc3NhZ2UsXG5cdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbixcblx0XHRcdHRhcmdldDogdW5kZWZpbmVkLFxuXHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdGRlc2NyaXB0aW9uOiB3YXJuaW5nRGVzYy5sZW5ndGggPyB3YXJuaW5nRGVzYyA6IHVuZGVmaW5lZFxuXHRcdH0pO1xuXHRcdG1lc3NhZ2VzID0gW2dlbmVyaWNNZXNzYWdlXS5jb25jYXQobWVzc2FnZXMpO1xuXHRcdG1lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKG1lc3NhZ2VzKTtcblx0XHRuZXcgU3RyaWN0RGlhbG9nKHtcblx0XHRcdG1lc3NhZ2VPYmplY3Q6IG1lc3NhZ2VIYW5kbGluZy5wcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cobWVzc2FnZURpYWxvZ01vZGVsLCB0cnVlLCBpc011bHRpQ29udGV4dDQxMiksXG5cdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0bWVzc2FnZURpYWxvZ01vZGVsLFxuXHRcdFx0Y2FuY2VsQnV0dG9uVHh0LFxuXHRcdFx0b25CZWdpbkJ1dHRvblByZXNzOiB0aGlzLmhhbmRsZU1lc3NhZ2VPblZhbGlkYXRpb24uYmluZCh0aGlzKSxcblx0XHRcdG9uRW5kQnV0dG9uUHJlc3M6IHRoaXMuaGFuZGxlTWVzc2FnZU9uQ2FuY2VsLmJpbmQodGhpcyksXG5cdFx0XHRvbkNsb3NlOiBtZXNzYWdlUmVzb2x2ZVxuXHRcdH0pLm9wZW4oKTtcblx0XHRyZXR1cm4gcHJvbWlzZTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlTWVzc2FnZU9uVmFsaWRhdGlvbigpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHJlc29sdmUgb2YgdGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzKSB7XG5cdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdH1cblx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblZhbGlkYXRpb24/LigpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVNZXNzYWdlT25DYW5jZWwoKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KTtcblx0XHR0aGlzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzID0gW107XG5cdFx0dGhpcy5jYW5jZWxlZCA9IHRydWU7XG5cdFx0Zm9yIChjb25zdCByZXNvbHZlIG9mIHRoaXMuc3RyaWN0SGFuZGxpbmdSZXNvbHZlcykge1xuXHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0fVxuXHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdSZXNvbHZlcyA9IFtdO1xuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fQ0hBTkdFU0VUX0NBTkNFTF9NRVNTQUdFU1wiKSwge1xuXHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMTUwcHhcIlxuXHRcdFx0fSBhcyBvYmplY3QpO1xuXHRcdH1cblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vbkNhbmNlbD8uKCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUFlQSxNQUFNQSxrQkFBa0IsR0FBR0MsU0FBUyxDQUFDRCxrQkFBa0I7RUFBQyxJQUVuQ0UsbUJBQW1CO0lBU3ZDLFNBQUFBLG9CQUNrQkMsVUFVaEIsRUFDQTtNQUFBLEtBcEJNQyxzQkFBc0IsR0FBaUMsRUFBRTtNQUFBLEtBRXpEQyw2QkFBNkIsR0FBYyxFQUFFO01BQUEsS0FFN0NDLFFBQVEsR0FBRyxLQUFLO01BQUEsS0FzRWpCQyxVQUFVLEdBQUcsTUFBZTtRQUNsQyxPQUFPLElBQUksQ0FBQ0QsUUFBUTtNQUNyQixDQUFDO01BQUEsS0FuRWlCSCxVQVVoQixHQVZnQkEsVUFVaEI7TUFFRCxJQUFJLElBQUksQ0FBQ0EsVUFBVSxDQUFDSyxRQUFRLENBQUNDLE1BQU0sRUFBRTtRQUNwQyxNQUFNQyxPQUFPLEdBQUcsSUFBSSxDQUFDUCxVQUFVLENBQUNLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csVUFBVSxDQUFDLENBQUM7UUFDeEQsSUFBSUQsT0FBTyxFQUFFRSxHQUFHLENBQUMsd0NBQXdDLENBQUMsRUFBRTtVQUMzRCxJQUFJLENBQUNDLFFBQVEsR0FBR0MsZUFBZSxDQUFDQyxNQUFNLENBQ3BDQyxPQUFPLElBQUtBLE9BQU8sQ0FBQ0osR0FBRyxDQUFXLDhCQUE4QixDQUFDLElBQUlJLE9BQU8sQ0FBQ0MsVUFBVSxDQUFDLENBQUMsRUFBRUMsYUFBYSxDQUFDLENBQUMsS0FBS1IsT0FDakgsQ0FBQyxDQUFDLENBQUMsQ0FBeUI7UUFDN0I7TUFDRDtJQUNEO0lBQUNTLFFBQUEsR0FBQWpCLG1CQUFBO0lBQUEsSUFBQWtCLE1BQUEsR0FBQWxCLG1CQUFBLENBQUFtQixTQUFBO0lBQUFELE1BQUEsQ0FFS0UseUJBQXlCLEdBQS9CLGVBQU1BLHlCQUF5QkEsQ0FDOUJDLHVCQUE0QyxFQUM1Q0MsZ0NBQXNELEVBQ3REQyxtQkFBNkIsRUFFVjtNQUFBLElBRG5CQyxXQUFzQixHQUFBQyxTQUFBLENBQUFsQixNQUFBLFFBQUFrQixTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7TUFFM0IsSUFBSUUsZUFBMEM7TUFDOUMsTUFBTUMscUJBQXFCLEdBQUcsSUFBSUMsT0FBTyxDQUFVLFVBQVVDLE9BQU8sRUFBRTtRQUNyRUgsZUFBZSxHQUFHRyxPQUFPO01BQzFCLENBQUMsQ0FBQztNQUNGLElBQUksQ0FBQzVCLHNCQUFzQixDQUFDNkIsSUFBSSxDQUFDSixlQUFlLENBQUM7TUFDakQ7TUFDQSxJQUFJSCxXQUFXLENBQUNYLE1BQU0sQ0FBRW1CLE9BQU8sSUFBS0EsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxLQUFLQyxXQUFXLENBQUNDLEtBQUssQ0FBQyxDQUFDNUIsTUFBTSxFQUFFO1FBQ3BGNkIsR0FBRyxDQUFDQyxPQUFPLENBQ1YsOElBQ0QsQ0FBQztNQUNGO01BQ0EsSUFBSUMsY0FBYyxHQUFHLEVBQUU7TUFDdkI7TUFDQSxJQUFJLElBQUksQ0FBQ3JDLFVBQVUsQ0FBQ0ssUUFBUSxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3hDLE1BQU1nQyxNQUFNLEdBQUcsSUFBSSxDQUFDNUIsUUFBUSxFQUFFNkIsbUJBQW1CLENBQUMsQ0FBQztRQUNuRCxJQUFJLE9BQU9ELE1BQU0sS0FBSyxRQUFRLEVBQUU7VUFDL0JELGNBQWMsR0FBR2pCLHVCQUF1QixDQUFDb0IsVUFBVSxDQUFDLENBQUMsRUFBRUMsU0FBUyxDQUFDSCxNQUFNLENBQUM7UUFDekU7TUFDRDtNQUNBO01BQ0EsS0FBSyxNQUFNUCxPQUFPLElBQUlSLFdBQVcsRUFBRTtRQUNsQ1EsT0FBTyxDQUFDVyxpQkFBaUIsQ0FBQ0wsY0FBYyxDQUFDO1FBQ3pDLElBQUksQ0FBQ25DLDZCQUE2QixDQUFDNEIsSUFBSSxDQUFDQyxPQUFPLENBQUM7TUFDakQ7TUFDQSxJQUFJLENBQUMvQixVQUFVLENBQUMyQyxNQUFNLEVBQUVDLFVBQVUsR0FBR3JCLFdBQVcsQ0FBQztNQUNqREYsZ0NBQWdDLEdBQUcsQ0FBQztNQUNwQyxJQUFJLENBQUNDLG1CQUFtQixDQUFDSyxxQkFBcUIsRUFBRUwsbUJBQW1CLENBQUM7TUFDcEUsT0FBT0sscUJBQXFCO0lBQzdCLENBQUM7SUFBQVYsTUFBQSxDQUVhSyxtQkFBbUIsR0FBakMsZUFBY0EsbUJBQW1CQSxDQUFDSyxxQkFBdUMsRUFBRWtCLFlBQXNCLEVBQWlCO01BQ2pILE1BQU1DLFdBQVcsR0FBRyxNQUFNbkIscUJBQXFCO01BQy9DLElBQUltQixXQUFXLEVBQUU7UUFDaEJELFlBQVksQ0FBQyxDQUFDO01BQ2Y7SUFDRCxDQUFDO0lBTUQ7QUFDRDtBQUNBO0FBQ0E7SUFIQzVCLE1BQUEsQ0FJYThCLHlCQUF5QixHQUF0QyxlQUFhQSx5QkFBeUJBLENBQUEsRUFBa0I7TUFDdkQsSUFBSSxJQUFJLENBQUM5QyxzQkFBc0IsQ0FBQ0ssTUFBTSxFQUFFO1FBQ3ZDLElBQUk7VUFDSCxJQUNDLENBQUMsQ0FBQzBDLGVBQWUsQ0FBQ0MsNkJBQTZCLENBQUMsQ0FBQyxJQUNoRCxJQUFJLENBQUNqRCxVQUFVLENBQUNrRCxrQkFBa0IsS0FBS3JELGtCQUFrQixDQUFDc0QsU0FBUyxLQUNwRSxJQUFJLENBQUNqRCw2QkFBNkIsQ0FBQ0ksTUFBTSxFQUN4QztZQUNELE1BQU0sSUFBSSxDQUFDOEMsZUFBZSxDQUFDLENBQUM7VUFDN0IsQ0FBQyxNQUFNO1lBQ04sS0FBSyxNQUFNdkIsT0FBTyxJQUFJLElBQUksQ0FBQzVCLHNCQUFzQixFQUFFO2NBQ2xENEIsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNmO1lBQ0EsTUFBTXdCLFlBQVksR0FBR0MsU0FBUyxDQUFDQyxlQUFlLENBQUMsQ0FBQztZQUNoRCxNQUFNQyxlQUFlLEdBQUdILFlBQVksQ0FBQ0ksT0FBTyxDQUFDLENBQUM7WUFDOUNKLFlBQVksQ0FBQ0ssT0FBTyxDQUFDRixlQUFlLENBQUNHLE1BQU0sQ0FBQyxJQUFJLENBQUN6RCw2QkFBNkIsQ0FBQyxDQUFDO1VBQ2pGO1FBQ0QsQ0FBQyxDQUFDLE1BQU07VUFDUGlDLEdBQUcsQ0FBQ3lCLEtBQUssQ0FBQyxvREFBb0QsQ0FBQztRQUNoRTtNQUNEO0lBQ0QsQ0FBQztJQUFBM0MsTUFBQSxDQUVhbUMsZUFBZSxHQUE3QixlQUFjQSxlQUFlQSxDQUFBLEVBQWtCO01BQzlDLE1BQU1TLFFBQVEsR0FBRyxJQUFJLENBQUMzRCw2QkFBNkI7TUFDbkQsSUFBSSxDQUFDMkQsUUFBUSxDQUFDdkQsTUFBTSxFQUFFO1FBQ3JCO01BQ0Q7TUFDQSxNQUFNd0QsVUFBVSxHQUFHQyxtQkFBbUIsQ0FBQ0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDaEUsVUFBVSxDQUFDaUUsS0FBSyxFQUFFLElBQUksQ0FBQ2pFLFVBQVUsQ0FBQ2tFLFlBQVksQ0FBQztNQUM1RyxPQUFPTCxRQUFRLENBQUN2RCxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUV1RCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNNLGNBQWMsQ0FBQyxDQUFDLEVBQUU3RCxNQUFNLElBQUl1RCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNPLGlCQUFpQixDQUFDLENBQUMsRUFBRTlELE1BQU0sQ0FBQyxHQUMvRyxJQUFJLENBQUMrRCwwQkFBMEIsQ0FBQ1IsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxVQUFVLENBQUMsR0FDeEQsSUFBSSxDQUFDUSx1QkFBdUIsQ0FBQ1QsUUFBUSxFQUFFQyxVQUFVLENBQUM7SUFDdEQsQ0FBQztJQUFBN0MsTUFBQSxDQUVhb0QsMEJBQTBCLEdBQXhDLGVBQWNBLDBCQUEwQkEsQ0FBQ3RDLE9BQWdCLEVBQUUrQixVQUFrQixFQUFpQjtNQUM3RixJQUFJUyxjQUF5QjtNQUM3QixNQUFNQyxPQUFPLEdBQUcsSUFBSTVDLE9BQU8sQ0FBUUMsT0FBTyxJQUFLO1FBQzlDMEMsY0FBYyxHQUFHMUMsT0FBTztNQUN6QixDQUFDLENBQUM7TUFDRixNQUFNNEMsYUFBYSxHQUFHVixtQkFBbUIsQ0FBQ1csZ0JBQWdCLENBQUMsSUFBSSxDQUFDMUUsVUFBVSxDQUFDa0UsWUFBWSxDQUFDO01BQ3hGLE1BQU1TLFdBQVcsR0FBRzVDLE9BQU8sQ0FBQzZDLFVBQVUsQ0FBQyxDQUFDO01BQ3hDLE1BQU1DLGNBQWMsR0FBRzlDLE9BQU8sQ0FBQytDLGlCQUFpQixDQUFDLENBQUM7TUFDbEQsTUFBTUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDL0UsVUFBVSxDQUFDSyxRQUFRLENBQUNDLE1BQU0sR0FBRyxDQUFDO01BQzdELE1BQU0wRSx1QkFBdUIsR0FBR1AsYUFBYSxDQUFDUSxPQUFPLENBQUMsNENBQTRDLENBQUM7TUFDbkcsTUFBTUMsa0JBQWtCLEdBQ3ZCLElBQUksQ0FBQ2xGLFVBQVUsQ0FBQ2tELGtCQUFrQixLQUFLckQsa0JBQWtCLENBQUNzRCxTQUFTLEdBQ2hFc0IsYUFBYSxDQUFDUSxPQUFPLENBQUMscUNBQXFDLEVBQUUsQ0FBQ25CLFVBQVUsQ0FBQyxDQUFDLEdBQzFFVyxhQUFhLENBQUNRLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQztNQUNyRSxJQUFJRSxlQUF1QixHQUFHVixhQUFhLENBQUNRLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztNQUM3RSxJQUFJRyxnQkFBZ0IsR0FBRyxFQUFFO01BQ3pCLElBQUksQ0FBQ0wsaUJBQWlCLEVBQUU7UUFDdkJLLGdCQUFnQixHQUFHLEdBQUdULFdBQVcsS0FBS0YsYUFBYSxDQUFDUSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7TUFDekUsQ0FBQyxNQUFNLElBQUlKLGNBQWMsS0FBS3BELFNBQVMsSUFBSW9ELGNBQWMsS0FBSyxFQUFFLEVBQUU7UUFDakVNLGVBQWUsR0FDZCxJQUFJLENBQUNuRixVQUFVLENBQUNrRCxrQkFBa0IsS0FBS3JELGtCQUFrQixDQUFDc0QsU0FBUyxHQUNoRWdDLGVBQWUsR0FDZlYsYUFBYSxDQUFDUSxPQUFPLENBQUMsc0JBQXNCLENBQUM7UUFDakQsTUFBTUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDM0UsUUFBUSxFQUFFNEUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDRCxrQkFBa0I7UUFDakYsSUFBSUEsa0JBQWtCLEVBQUU7VUFDdkJELGdCQUFnQixHQUFHLEdBQUdDLGtCQUFrQixDQUFDRSxRQUFRLENBQUMsQ0FBQyxJQUFJVixjQUFjLEtBQUtGLFdBQVcsT0FBT08sa0JBQWtCLEVBQUU7UUFDakgsQ0FBQyxNQUFNO1VBQ05FLGdCQUFnQixHQUFHLEdBQUdQLGNBQWMsS0FBS0YsV0FBVyxPQUFPTyxrQkFBa0IsRUFBRTtRQUNoRjtNQUNELENBQUMsTUFBTTtRQUNOQyxlQUFlLEdBQ2QsSUFBSSxDQUFDbkYsVUFBVSxDQUFDa0Qsa0JBQWtCLEtBQUtyRCxrQkFBa0IsQ0FBQ3NELFNBQVMsR0FDaEVnQyxlQUFlLEdBQ2ZWLGFBQWEsQ0FBQ1EsT0FBTyxDQUFDLHNCQUFzQixDQUFDO1FBQ2pERyxnQkFBZ0IsR0FBRyxHQUFHVCxXQUFXLE9BQU9PLGtCQUFrQixFQUFFO01BQzdEO01BQ0EsSUFBSUgsaUJBQWlCLElBQUksSUFBSSxDQUFDL0UsVUFBVSxDQUFDa0Qsa0JBQWtCLEtBQUtyRCxrQkFBa0IsQ0FBQ3NELFNBQVMsRUFBRTtRQUM3RmlDLGdCQUFnQixHQUFHLEdBQUdKLHVCQUF1QixPQUFPSSxnQkFBZ0IsRUFBRTtNQUN2RTtNQUNBSSxVQUFVLENBQUNwRCxPQUFPLENBQUNnRCxnQkFBZ0IsRUFBRTtRQUNwQ0ssS0FBSyxFQUFFaEIsYUFBYSxDQUFDUSxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3ZDUyxPQUFPLEVBQUUsQ0FBQzVCLFVBQVUsRUFBRXFCLGVBQWUsQ0FBQztRQUN0Q1EsZ0JBQWdCLEVBQUU3QixVQUFVO1FBQzVCOEIsT0FBTyxFQUFHQyxNQUFjLElBQUs7VUFDNUIsSUFBSSxDQUFDQSxNQUFNLEtBQUsvQixVQUFVLEdBQUcsMkJBQTJCLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1VBQ3JGUyxjQUFjLENBQUMsQ0FBQztRQUNqQjtNQUNELENBQUMsQ0FBQztNQUNGLE9BQU9DLE9BQU87SUFDZixDQUFDO0lBQUF2RCxNQUFBLENBRWFxRCx1QkFBdUIsR0FBckMsZUFBY0EsdUJBQXVCQSxDQUFDVCxRQUFtQixFQUFFQyxVQUFrQixFQUFpQjtNQUM3RixJQUFJUyxjQUF5QjtNQUM3QixNQUFNQyxPQUFPLEdBQUcsSUFBSTVDLE9BQU8sQ0FBUUMsT0FBTyxJQUFLO1FBQzlDMEMsY0FBYyxHQUFHMUMsT0FBTztNQUN6QixDQUFDLENBQUM7TUFDRixNQUFNaUUsa0JBQWtCLEdBQUcsSUFBSUMsU0FBUyxDQUFDLENBQUM7TUFDMUMsTUFBTXRCLGFBQWEsR0FBR1YsbUJBQW1CLENBQUNXLGdCQUFnQixDQUFDLElBQUksQ0FBQzFFLFVBQVUsQ0FBQ2tFLFlBQVksQ0FBQztNQUN4RixNQUFNYSxpQkFBaUIsR0FBRyxJQUFJLENBQUMvRSxVQUFVLENBQUNLLFFBQVEsQ0FBQ0MsTUFBTSxHQUFHLENBQUM7TUFDN0QsSUFBSTBGLGNBQWMsR0FBRyxFQUFFO01BQ3ZCLElBQUlDLFdBQVcsR0FBRyxFQUFFO01BQ3BCLElBQUlkLGVBQXVCLEdBQUdWLGFBQWEsQ0FBQ1EsT0FBTyxDQUFDLHdCQUF3QixDQUFDO01BQzdFLElBQUlGLGlCQUFpQixFQUFFO1FBQ3RCSSxlQUFlLEdBQ2QsSUFBSSxDQUFDbkYsVUFBVSxDQUFDa0Qsa0JBQWtCLEtBQUtyRCxrQkFBa0IsQ0FBQ3NELFNBQVMsR0FDaEVnQyxlQUFlLEdBQ2ZWLGFBQWEsQ0FBQ1EsT0FBTyxDQUFDLHNCQUFzQixDQUFDO1FBQ2pEZSxjQUFjLEdBQUd2QixhQUFhLENBQUNRLE9BQU8sQ0FDckMsSUFBSSxDQUFDakYsVUFBVSxDQUFDa0Qsa0JBQWtCLEtBQUtyRCxrQkFBa0IsQ0FBQ3NELFNBQVMsR0FDaEUseUNBQXlDLEdBQ3pDLHVDQUNKLENBQUM7UUFDRDhDLFdBQVcsR0FBR3hCLGFBQWEsQ0FBQ1EsT0FBTyxDQUNsQyxJQUFJLENBQUNqRixVQUFVLENBQUNrRCxrQkFBa0IsS0FBS3JELGtCQUFrQixDQUFDc0QsU0FBUyxHQUNoRSxzQ0FBc0MsR0FDdEMsb0NBQW9DLEVBQ3ZDLENBQUNXLFVBQVUsQ0FDWixDQUFDO01BQ0YsQ0FBQyxNQUFNO1FBQ05rQyxjQUFjLEdBQUd2QixhQUFhLENBQUNRLE9BQU8sQ0FBQyx3REFBd0QsRUFBRSxDQUFDbkIsVUFBVSxDQUFDLENBQUM7TUFDL0c7TUFDQSxNQUFNb0MsY0FBYyxHQUFHLElBQUlDLE9BQU8sQ0FBQztRQUNsQ3BFLE9BQU8sRUFBRWlFLGNBQWM7UUFDdkJJLElBQUksRUFBRW5FLFdBQVcsQ0FBQ29FLFdBQVc7UUFDN0JDLE1BQU0sRUFBRTdFLFNBQVM7UUFDakI4RSxVQUFVLEVBQUUsSUFBSTtRQUNoQkMsV0FBVyxFQUFFUCxXQUFXLENBQUMzRixNQUFNLEdBQUcyRixXQUFXLEdBQUd4RTtNQUNqRCxDQUFDLENBQUM7TUFDRm9DLFFBQVEsR0FBRyxDQUFDcUMsY0FBYyxDQUFDLENBQUN2QyxNQUFNLENBQUNFLFFBQVEsQ0FBQztNQUM1Q2lDLGtCQUFrQixDQUFDcEMsT0FBTyxDQUFDRyxRQUFRLENBQUM7TUFDcEMsSUFBSTRDLFlBQVksQ0FBQztRQUNoQkMsYUFBYSxFQUFFMUQsZUFBZSxDQUFDMkQsMkJBQTJCLENBQUNiLGtCQUFrQixFQUFFLElBQUksRUFBRWYsaUJBQWlCLENBQUM7UUFDdkdqQixVQUFVO1FBQ1ZnQyxrQkFBa0I7UUFDbEJYLGVBQWU7UUFDZnlCLGtCQUFrQixFQUFFLElBQUksQ0FBQ0MseUJBQXlCLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDN0RDLGdCQUFnQixFQUFFLElBQUksQ0FBQ0MscUJBQXFCLENBQUNGLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkRsQixPQUFPLEVBQUVyQjtNQUNWLENBQUMsQ0FBQyxDQUFDMEMsSUFBSSxDQUFDLENBQUM7TUFDVCxPQUFPekMsT0FBTztJQUNmLENBQUM7SUFBQXZELE1BQUEsQ0FFTzRGLHlCQUF5QixHQUFqQyxTQUFRQSx5QkFBeUJBLENBQUEsRUFBUztNQUN6QyxLQUFLLE1BQU1oRixPQUFPLElBQUksSUFBSSxDQUFDNUIsc0JBQXNCLEVBQUU7UUFDbEQ0QixPQUFPLENBQUMsSUFBSSxDQUFDO01BQ2Q7TUFDQW1CLGVBQWUsQ0FBQ2tFLDZCQUE2QixDQUFDLENBQUM7TUFDL0NsRSxlQUFlLENBQUNtRSwrQkFBK0IsQ0FBQyxDQUFDO01BQ2pELElBQUksQ0FBQ2pILDZCQUE2QixHQUFHLEVBQUU7TUFDdkMsSUFBSSxDQUFDRixVQUFVLENBQUMyQyxNQUFNLEVBQUVFLFlBQVksR0FBRyxDQUFDO0lBQ3pDLENBQUM7SUFBQTVCLE1BQUEsQ0FFTytGLHFCQUFxQixHQUE3QixTQUFRQSxxQkFBcUJBLENBQUEsRUFBUztNQUNyQyxNQUFNdkMsYUFBYSxHQUFHVixtQkFBbUIsQ0FBQ1csZ0JBQWdCLENBQUMsSUFBSSxDQUFDMUUsVUFBVSxDQUFDa0UsWUFBWSxDQUFDO01BQ3hGLElBQUksQ0FBQ2hFLDZCQUE2QixHQUFHLEVBQUU7TUFDdkMsSUFBSSxDQUFDQyxRQUFRLEdBQUcsSUFBSTtNQUNwQixLQUFLLE1BQU0wQixPQUFPLElBQUksSUFBSSxDQUFDNUIsc0JBQXNCLEVBQUU7UUFDbEQ0QixPQUFPLENBQUMsS0FBSyxDQUFDO01BQ2Y7TUFDQSxJQUFJLENBQUM1QixzQkFBc0IsR0FBRyxFQUFFO01BQ2hDLElBQUksSUFBSSxDQUFDRCxVQUFVLENBQUNrRCxrQkFBa0IsS0FBS3JELGtCQUFrQixDQUFDc0QsU0FBUyxFQUFFO1FBQ3hFcUMsVUFBVSxDQUFDNEIsV0FBVyxDQUFDM0MsYUFBYSxDQUFDUSxPQUFPLENBQUMsNkJBQTZCLENBQUMsRUFBRTtVQUM1RW9DLFlBQVksRUFBRTtRQUNmLENBQVcsQ0FBQztNQUNiO01BQ0EsSUFBSSxDQUFDckgsVUFBVSxDQUFDMkMsTUFBTSxFQUFFMkUsUUFBUSxHQUFHLENBQUM7SUFDckMsQ0FBQztJQUFBLE9BQUF2SCxtQkFBQTtFQUFBO0VBQUFpQixRQUFBLEdBQUFqQixtQkFBQTtFQUFBLE9BQUFpQixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|