@sapui5/sap.fe.core 1.108.2 → 1.110.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/README.md +5 -1
- package/package.json +11 -9
- package/src/.eslintrc +7 -0
- package/src/sap/fe/core/.library +39 -37
- package/src/sap/fe/core/.supportrc +3 -3
- package/src/sap/fe/core/ActionRuntime.js +72 -27
- package/src/sap/fe/core/ActionRuntime.ts +104 -21
- package/src/sap/fe/core/AppComponent.js +102 -120
- package/src/sap/fe/core/AppComponent.ts +148 -45
- package/src/sap/fe/core/AppStateHandler.js +105 -91
- package/src/sap/fe/core/AppStateHandler.ts +85 -23
- package/src/sap/fe/core/BaseController.js +5 -20
- package/src/sap/fe/core/BaseController.ts +11 -2
- package/src/sap/fe/core/CommonUtils.js +770 -1079
- package/src/sap/fe/core/CommonUtils.ts +750 -491
- package/src/sap/fe/core/ExtensionAPI.js +69 -96
- package/src/sap/fe/core/ExtensionAPI.ts +15 -17
- package/src/sap/fe/core/PageController.js +21 -46
- package/src/sap/fe/core/PageController.ts +11 -2
- package/src/sap/fe/core/TemplateComponent.js +6 -51
- package/src/sap/fe/core/TemplateComponent.ts +27 -16
- package/src/sap/fe/core/TemplateModel.js +18 -24
- package/src/sap/fe/core/TemplateModel.ts +25 -6
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +8 -23
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +5 -4
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +146 -180
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +144 -57
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +43 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +11 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +436 -556
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +288 -157
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +215 -202
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +93 -51
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +11 -26
- package/src/sap/fe/core/controllerextensions/EditFlow.js +407 -596
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +163 -56
- package/src/sap/fe/core/controllerextensions/Feedback.js +70 -0
- package/src/sap/fe/core/controllerextensions/Feedback.ts +64 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +12 -23
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +127 -182
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +65 -32
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +96 -198
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +4 -5
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +134 -291
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +21 -12
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +111 -214
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +44 -44
- package/src/sap/fe/core/controllerextensions/MassEdit.js +24 -44
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +3 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +39 -52
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +26 -7
- package/src/sap/fe/core/controllerextensions/PageReady.js +81 -119
- package/src/sap/fe/core/controllerextensions/PageReady.ts +36 -15
- package/src/sap/fe/core/controllerextensions/Paginator.js +16 -51
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -3
- package/src/sap/fe/core/controllerextensions/Placeholder.js +7 -33
- package/src/sap/fe/core/controllerextensions/Routing.js +24 -32
- package/src/sap/fe/core/controllerextensions/Routing.ts +6 -1
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +53 -98
- package/src/sap/fe/core/controllerextensions/Share.ts +6 -3
- package/src/sap/fe/core/controllerextensions/SideEffects.js +103 -174
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +37 -22
- package/src/sap/fe/core/controllerextensions/ViewState.js +341 -276
- package/src/sap/fe/core/controllerextensions/ViewState.ts +236 -84
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +6 -22
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +66 -88
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +64 -17
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +28 -34
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +22 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +69 -65
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +31 -12
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +15 -13
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +273 -906
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +142 -420
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +49 -115
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +12 -7
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +70 -89
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +313 -320
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +582 -683
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +507 -386
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +111 -102
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -79
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +689 -154
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +866 -31
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +24 -101
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +5 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +91 -217
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +3 -20
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +1 -0
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +46 -46
- 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 +4 -26
- package/src/sap/fe/core/controls/ConditionalWrapper.js +16 -33
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +16 -2
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +41 -94
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +1 -1
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +5 -34
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +5 -7
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +7 -7
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +56 -58
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +53 -33
- package/src/sap/fe/core/controls/FieldWrapper.js +6 -49
- package/src/sap/fe/core/controls/FileWrapper.js +51 -136
- package/src/sap/fe/core/controls/FileWrapper.ts +25 -29
- package/src/sap/fe/core/controls/FilterBar.js +19 -54
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -22
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -5
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +2 -2
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +24 -46
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +14 -41
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +4 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +26 -67
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -20
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +12 -48
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +17 -46
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +3 -3
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +1 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +6 -78
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +4 -4
- package/src/sap/fe/core/converters/ConverterContext.js +44 -98
- package/src/sap/fe/core/converters/ConverterContext.ts +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -20
- package/src/sap/fe/core/converters/ManifestSettings.ts +16 -9
- package/src/sap/fe/core/converters/ManifestWrapper.js +97 -158
- package/src/sap/fe/core/converters/ManifestWrapper.ts +4 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +28 -167
- package/src/sap/fe/core/converters/MetaModelConverter.ts +9 -3
- package/src/sap/fe/core/converters/TemplateConverter.js +10 -22
- package/src/sap/fe/core/converters/TemplateConverter.ts +10 -7
- package/src/sap/fe/core/converters/annotations/DataField.js +88 -132
- package/src/sap/fe/core/converters/annotations/DataField.ts +90 -38
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +57 -379
- package/src/sap/fe/core/converters/controls/Common/Action.js +45 -115
- package/src/sap/fe/core/converters/controls/Common/Action.ts +17 -5
- package/src/sap/fe/core/converters/controls/Common/Chart.js +20 -73
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +21 -14
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -9
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +40 -94
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +44 -31
- package/src/sap/fe/core/converters/controls/Common/Form.js +26 -63
- package/src/sap/fe/core/converters/controls/Common/Form.ts +24 -10
- package/src/sap/fe/core/converters/controls/Common/KPI.js +13 -63
- package/src/sap/fe/core/converters/controls/Common/Table.js +368 -707
- package/src/sap/fe/core/converters/controls/Common/Table.ts +308 -197
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +54 -109
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +15 -9
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +69 -210
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +23 -16
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -80
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +3 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -19
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +45 -136
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +10 -10
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +82 -173
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +48 -22
- package/src/sap/fe/core/converters/helpers/Aggregation.js +24 -66
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +3 -7
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +9 -19
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +0 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +20 -48
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +5 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +12 -51
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +13 -11
- package/src/sap/fe/core/converters/helpers/ID.js +3 -17
- package/src/sap/fe/core/converters/helpers/ID.ts +2 -3
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -6
- package/src/sap/fe/core/converters/helpers/Key.js +10 -19
- package/src/sap/fe/core/converters/helpers/Key.ts +3 -3
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -20
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +2 -37
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +126 -131
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +112 -31
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +67 -131
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +58 -27
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +106 -183
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +73 -104
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +74 -67
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +77 -69
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +20 -29
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +21 -0
- package/src/sap/fe/core/formatters/FPMFormatter.js +3 -7
- package/src/sap/fe/core/formatters/KPIFormatter.js +5 -13
- package/src/sap/fe/core/formatters/StandardFormatter.js +3 -18
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -2
- package/src/sap/fe/core/formatters/TableFormatter.js +87 -53
- package/src/sap/fe/core/formatters/TableFormatter.ts +96 -9
- package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -4
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -37
- package/src/sap/fe/core/fpm/Component.js +2 -17
- package/src/sap/fe/core/helpers/AnnotationEnum.js +10 -20
- package/src/sap/fe/core/helpers/AnnotationEnum.ts +6 -6
- package/src/sap/fe/core/helpers/AppStartupHelper.js +16 -52
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.js +106 -364
- package/src/sap/fe/core/helpers/BindingToolkit.ts +30 -7
- package/src/sap/fe/core/helpers/ClassSupport.js +16 -97
- package/src/sap/fe/core/helpers/ClassSupport.ts +7 -4
- package/src/sap/fe/core/helpers/DeleteHelper.js +621 -0
- package/src/sap/fe/core/helpers/DeleteHelper.ts +796 -0
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -12
- package/src/sap/fe/core/helpers/EditState.js +2 -5
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -10
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -8
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +8 -38
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -5
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -7
- package/src/sap/fe/core/helpers/MassEditHelper.js +177 -289
- package/src/sap/fe/core/helpers/MassEditHelper.ts +124 -91
- package/src/sap/fe/core/helpers/MessageStrip.js +12 -28
- package/src/sap/fe/core/helpers/MessageStrip.ts +7 -7
- package/src/sap/fe/core/helpers/ModelHelper.js +62 -103
- package/src/sap/fe/core/helpers/ModelHelper.ts +58 -20
- package/src/sap/fe/core/helpers/PasteHelper.js +28 -51
- package/src/sap/fe/core/helpers/PasteHelper.ts +10 -9
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +112 -136
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +111 -111
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +5 -11
- package/src/sap/fe/core/helpers/SideEffectsHelper.js +26 -32
- package/src/sap/fe/core/helpers/StableIdHelper.js +166 -218
- package/src/sap/fe/core/helpers/StableIdHelper.ts +175 -191
- package/src/sap/fe/core/helpers/Synchronization.js +1 -8
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -4
- package/src/sap/fe/core/helpers/TypeGuards.js +22 -0
- package/src/sap/fe/core/helpers/TypeGuards.ts +9 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +1 -3
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +3 -23
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +3 -23
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +2 -1
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +4 -16
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +2 -5
- package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +4 -27
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +1 -1
- package/src/sap/fe/core/library.js +9 -48
- package/src/sap/fe/core/library.support.js +3 -2
- package/src/sap/fe/core/library.support.ts +3 -1
- package/src/sap/fe/core/library.ts +3 -8
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +74 -39
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +71 -26
- package/src/sap/fe/core/messagebundle.properties +113 -67
- package/src/sap/fe/core/messagebundle_ar.properties +20 -3
- package/src/sap/fe/core/messagebundle_bg.properties +22 -5
- package/src/sap/fe/core/messagebundle_ca.properties +21 -4
- package/src/sap/fe/core/messagebundle_cs.properties +21 -4
- package/src/sap/fe/core/messagebundle_cy.properties +22 -5
- package/src/sap/fe/core/messagebundle_da.properties +20 -3
- package/src/sap/fe/core/messagebundle_de.properties +38 -21
- package/src/sap/fe/core/messagebundle_el.properties +20 -3
- package/src/sap/fe/core/messagebundle_en.properties +38 -21
- package/src/sap/fe/core/messagebundle_en_GB.properties +20 -3
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -28
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +41 -24
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +42 -29
- package/src/sap/fe/core/messagebundle_es.properties +40 -23
- package/src/sap/fe/core/messagebundle_es_MX.properties +20 -3
- package/src/sap/fe/core/messagebundle_et.properties +20 -3
- package/src/sap/fe/core/messagebundle_fi.properties +20 -3
- package/src/sap/fe/core/messagebundle_fr.properties +21 -4
- package/src/sap/fe/core/messagebundle_fr_CA.properties +22 -5
- package/src/sap/fe/core/messagebundle_hi.properties +20 -3
- package/src/sap/fe/core/messagebundle_hr.properties +22 -5
- package/src/sap/fe/core/messagebundle_hu.properties +20 -3
- package/src/sap/fe/core/messagebundle_id.properties +20 -3
- package/src/sap/fe/core/messagebundle_it.properties +23 -6
- package/src/sap/fe/core/messagebundle_iw.properties +20 -3
- package/src/sap/fe/core/messagebundle_ja.properties +22 -5
- package/src/sap/fe/core/messagebundle_kk.properties +21 -4
- package/src/sap/fe/core/messagebundle_ko.properties +20 -3
- package/src/sap/fe/core/messagebundle_lt.properties +20 -3
- package/src/sap/fe/core/messagebundle_lv.properties +20 -3
- package/src/sap/fe/core/messagebundle_ms.properties +20 -3
- package/src/sap/fe/core/messagebundle_nl.properties +20 -3
- package/src/sap/fe/core/messagebundle_no.properties +20 -3
- package/src/sap/fe/core/messagebundle_pl.properties +21 -4
- package/src/sap/fe/core/messagebundle_pt.properties +20 -3
- package/src/sap/fe/core/messagebundle_pt_PT.properties +20 -3
- package/src/sap/fe/core/messagebundle_ro.properties +20 -3
- package/src/sap/fe/core/messagebundle_ru.properties +20 -3
- package/src/sap/fe/core/messagebundle_sh.properties +20 -3
- package/src/sap/fe/core/messagebundle_sk.properties +20 -3
- package/src/sap/fe/core/messagebundle_sl.properties +26 -9
- package/src/sap/fe/core/messagebundle_sv.properties +20 -3
- package/src/sap/fe/core/messagebundle_th.properties +21 -4
- package/src/sap/fe/core/messagebundle_tr.properties +20 -3
- package/src/sap/fe/core/messagebundle_uk.properties +23 -6
- package/src/sap/fe/core/messagebundle_vi.properties +20 -3
- package/src/sap/fe/core/messagebundle_zh_CN.properties +20 -3
- package/src/sap/fe/core/messagebundle_zh_TW.properties +20 -3
- package/src/sap/fe/core/operationsHelper.js +74 -101
- package/src/sap/fe/core/operationsHelper.ts +113 -44
- package/src/sap/fe/core/rootView/Fcl.controller.js +151 -228
- package/src/sap/fe/core/rootView/Fcl.controller.ts +90 -15
- package/src/sap/fe/core/rootView/Fcl.view.xml +1 -8
- package/src/sap/fe/core/rootView/NavContainer.controller.js +41 -78
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +32 -38
- package/src/sap/fe/core/rootView/RootViewBaseController.js +110 -181
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +37 -17
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -18
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +13 -52
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -22
- package/src/sap/fe/core/services/NavigationServiceFactory.js +45 -87
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +17 -10
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -28
- package/src/sap/fe/core/services/RoutingServiceFactory.js +92 -250
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +8 -12
- package/src/sap/fe/core/services/ShellServicesFactory.js +122 -251
- package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +188 -273
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +143 -154
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +37 -135
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +59 -94
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -16
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
- package/src/sap/fe/core/support/AnnotationIssue.support.js +6 -9
- package/src/sap/fe/core/support/AnnotationIssue.support.ts +4 -4
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +6 -9
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.ts +3 -3
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +6 -9
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +3 -3
- package/src/sap/fe/core/support/CommonHelper.js +7 -16
- package/src/sap/fe/core/support/Diagnostics.js +1 -10
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +6 -9
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +3 -3
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -15
- package/src/sap/fe/core/templating/CriticalityFormatters.js +4 -20
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -20
- package/src/sap/fe/core/templating/DataModelPathHelper.js +49 -121
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +41 -31
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +8 -15
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.js +6 -31
- package/src/sap/fe/core/templating/FieldControlHelper.js +4 -21
- package/src/sap/fe/core/templating/FieldControlHelper.ts +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js +40 -111
- package/src/sap/fe/core/templating/FilterHelper.ts +20 -16
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -19
- package/src/sap/fe/core/templating/FilterTemplating.ts +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -34
- package/src/sap/fe/core/templating/PropertyHelper.js +120 -163
- package/src/sap/fe/core/templating/PropertyHelper.ts +69 -33
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +46 -0
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +34 -0
- package/src/sap/fe/core/templating/UIFormatters.js +40 -180
- package/src/sap/fe/core/templating/UIFormatters.ts +37 -43
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -14
- package/src/sap/fe/core/type/Email.js +1 -10
- package/src/sap/fe/core/type/TypeUtil.js +1 -11
- package/ui5.yaml +0 -1
- package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +0 -35
- package/src/sap/fe/core/helpers/LRMessageStrip.js +0 -234
- package/src/sap/fe/core/helpers/LRMessageStrip.ts +0 -216
|
@@ -2,18 +2,15 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/controllerextensions/routing/RouterProxy", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/library", "sap/fe/core/support/Diagnostics", "sap/fe/macros/internal/valuehelp/ValueListHelper", "sap/ui/core/Core", "sap/ui/core/UIComponent", "sap/ui/model/json/JSONModel", "./converters/MetaModelConverter", "./helpers/SemanticDateOperators"], function (Log, AppStateHandler, RouterProxy, ClassSupport, ModelHelper, library, Diagnostics, ValueListHelper, Core, UIComponent, JSONModel, MetaModelConverter, SemanticDateOperators) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/controllerextensions/routing/RouterProxy", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/library", "sap/fe/core/manifestMerger/ChangePageConfiguration", "sap/fe/core/support/Diagnostics", "sap/fe/macros/internal/valuehelp/ValueListHelper", "sap/ui/core/Core", "sap/ui/core/UIComponent", "sap/ui/model/json/JSONModel", "./converters/MetaModelConverter", "./helpers/SemanticDateOperators"], function (Log, AppStateHandler, RouterProxy, ClassSupport, ModelHelper, library, ChangePageConfiguration, Diagnostics, ValueListHelper, Core, UIComponent, JSONModel, MetaModelConverter, SemanticDateOperators) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _class, _class2;
|
|
9
|
-
|
|
10
9
|
var deleteModelCacheData = MetaModelConverter.deleteModelCacheData;
|
|
10
|
+
var changeConfiguration = ChangePageConfiguration.changeConfiguration;
|
|
11
11
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
12
|
-
|
|
13
12
|
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
14
|
-
|
|
15
13
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
16
|
-
|
|
17
14
|
var StartupMode = library.StartupMode;
|
|
18
15
|
var NAVCONF = {
|
|
19
16
|
FCL: {
|
|
@@ -41,7 +38,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
41
38
|
* @public
|
|
42
39
|
* @name sap.fe.core.AppComponent
|
|
43
40
|
*/
|
|
44
|
-
|
|
45
41
|
var AppComponent = (_dec = defineUI5Class("sap.fe.core.AppComponent", {
|
|
46
42
|
interfaces: ["sap.ui.core.IAsyncContentCreation"],
|
|
47
43
|
config: {
|
|
@@ -52,10 +48,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
52
48
|
services: {
|
|
53
49
|
resourceModel: {
|
|
54
50
|
factoryName: "sap.fe.core.services.ResourceModelService",
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
startup: "waitFor",
|
|
52
|
+
settings: {
|
|
53
|
+
bundles: ["sap.fe.core.messagebundle"],
|
|
54
|
+
modelName: "sap.fe.i18n"
|
|
59
55
|
}
|
|
60
56
|
},
|
|
61
57
|
routingService: {
|
|
@@ -110,32 +106,59 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
110
106
|
library: "sap.fe.core"
|
|
111
107
|
}), _dec(_class = (_class2 = /*#__PURE__*/function (_UIComponent) {
|
|
112
108
|
_inheritsLoose(AppComponent, _UIComponent);
|
|
113
|
-
|
|
114
109
|
function AppComponent() {
|
|
115
110
|
var _this;
|
|
116
|
-
|
|
117
111
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
118
112
|
args[_key] = arguments[_key];
|
|
119
113
|
}
|
|
120
|
-
|
|
121
114
|
_this = _UIComponent.call.apply(_UIComponent, [this].concat(args)) || this;
|
|
122
115
|
_this.startupMode = StartupMode.Normal;
|
|
123
116
|
return _this;
|
|
124
117
|
}
|
|
125
|
-
|
|
126
118
|
var _proto = AppComponent.prototype;
|
|
127
|
-
|
|
128
119
|
/**
|
|
129
120
|
* @private
|
|
130
121
|
* @name sap.fe.core.AppComponent.getMetadata
|
|
131
122
|
* @function
|
|
132
123
|
*/
|
|
133
124
|
_proto._isFclEnabled = function _isFclEnabled() {
|
|
134
|
-
var _oManifestUI5$
|
|
125
|
+
var _oManifestUI5$routing, _oManifestUI5$routing2;
|
|
126
|
+
var oManifestUI5 = this.getManifestEntry("sap.ui5");
|
|
127
|
+
return (oManifestUI5 === null || oManifestUI5 === void 0 ? void 0 : (_oManifestUI5$routing = oManifestUI5.routing) === null || _oManifestUI5$routing === void 0 ? void 0 : (_oManifestUI5$routing2 = _oManifestUI5$routing.config) === null || _oManifestUI5$routing2 === void 0 ? void 0 : _oManifestUI5$routing2.routerClass) === NAVCONF.FCL.ROUTERCLASS;
|
|
128
|
+
}
|
|
135
129
|
|
|
136
|
-
|
|
137
|
-
|
|
130
|
+
/**
|
|
131
|
+
* Provides a hook to initialize feature toggles.
|
|
132
|
+
*
|
|
133
|
+
* This hook is being called by the SAP Fiori elements AppComponent at the time feature toggles can be initialized.
|
|
134
|
+
* To change page configuration use the {@link sap.fe.core.AppComponent#changePageConfiguration} method.
|
|
135
|
+
*
|
|
136
|
+
* @function
|
|
137
|
+
* @name sap.fe.core.AppComponent#initializeFeatureToggles
|
|
138
|
+
* @memberof sap.fe.core.AppComponent
|
|
139
|
+
* @public
|
|
140
|
+
*/;
|
|
141
|
+
_proto.initializeFeatureToggles = function initializeFeatureToggles() {
|
|
142
|
+
// this method can be overridden by applications
|
|
138
143
|
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Changes the page configuration of SAP Fiori elements.
|
|
147
|
+
*
|
|
148
|
+
* This method enables you to change the page configuration of SAP Fiori elements.
|
|
149
|
+
*
|
|
150
|
+
* @function
|
|
151
|
+
* @name sap.fe.core.AppComponent#changePageConfiguration
|
|
152
|
+
* @memberof sap.fe.core.AppComponent
|
|
153
|
+
* @param pageId The ID of the page for which the configuration is to be changed.
|
|
154
|
+
* @param path The path in the page settings for which the configuration is to be changed.
|
|
155
|
+
* @param value The new value of the configuration. This could be a plain value like a string, or a Boolean, or a structured object.
|
|
156
|
+
* @public
|
|
157
|
+
*/;
|
|
158
|
+
_proto.changePageConfiguration = function changePageConfiguration(pageId, path, value) {
|
|
159
|
+
changeConfiguration(this.getManifest(), pageId, path, value);
|
|
160
|
+
}
|
|
161
|
+
|
|
139
162
|
/**
|
|
140
163
|
* Get a reference to the RouterProxy.
|
|
141
164
|
*
|
|
@@ -145,12 +168,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
145
168
|
* @returns A Reference to the RouterProxy
|
|
146
169
|
* @ui5-restricted
|
|
147
170
|
* @final
|
|
148
|
-
|
|
149
|
-
;
|
|
150
|
-
|
|
171
|
+
*/;
|
|
151
172
|
_proto.getRouterProxy = function getRouterProxy() {
|
|
152
173
|
return this._oRouterProxy;
|
|
153
174
|
}
|
|
175
|
+
|
|
154
176
|
/**
|
|
155
177
|
* Get a reference to the AppStateHandler.
|
|
156
178
|
*
|
|
@@ -160,12 +182,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
160
182
|
* @returns A reference to the AppStateHandler
|
|
161
183
|
* @ui5-restricted
|
|
162
184
|
* @final
|
|
163
|
-
|
|
164
|
-
;
|
|
165
|
-
|
|
185
|
+
*/;
|
|
166
186
|
_proto.getAppStateHandler = function getAppStateHandler() {
|
|
167
187
|
return this._oAppStateHandler;
|
|
168
188
|
}
|
|
189
|
+
|
|
169
190
|
/**
|
|
170
191
|
* Get a reference to the nav/FCL Controller.
|
|
171
192
|
*
|
|
@@ -175,12 +196,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
175
196
|
* @returns A reference to the FCL Controller
|
|
176
197
|
* @ui5-restricted
|
|
177
198
|
* @final
|
|
178
|
-
|
|
179
|
-
;
|
|
180
|
-
|
|
199
|
+
*/;
|
|
181
200
|
_proto.getRootViewController = function getRootViewController() {
|
|
182
201
|
return this.getRootControl().getController();
|
|
183
202
|
}
|
|
203
|
+
|
|
184
204
|
/**
|
|
185
205
|
* Get the NavContainer control or the FCL control.
|
|
186
206
|
*
|
|
@@ -190,57 +210,50 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
190
210
|
* @returns A reference to NavContainer control or the FCL control
|
|
191
211
|
* @ui5-restricted
|
|
192
212
|
* @final
|
|
193
|
-
|
|
194
|
-
;
|
|
195
|
-
|
|
213
|
+
*/;
|
|
196
214
|
_proto.getRootContainer = function getRootContainer() {
|
|
197
215
|
return this.getRootControl().getContent()[0];
|
|
198
216
|
}
|
|
217
|
+
|
|
199
218
|
/**
|
|
200
219
|
* Get the startup mode of the app.
|
|
201
220
|
*
|
|
202
221
|
* @returns The startup mode
|
|
203
222
|
* @private
|
|
204
|
-
|
|
205
|
-
;
|
|
206
|
-
|
|
223
|
+
*/;
|
|
207
224
|
_proto.getStartupMode = function getStartupMode() {
|
|
208
225
|
return this.startupMode;
|
|
209
226
|
}
|
|
227
|
+
|
|
210
228
|
/**
|
|
211
229
|
* Set the startup mode for the app to 'Create'.
|
|
212
230
|
*
|
|
213
231
|
* @private
|
|
214
|
-
|
|
215
|
-
;
|
|
216
|
-
|
|
232
|
+
*/;
|
|
217
233
|
_proto.setStartupModeCreate = function setStartupModeCreate() {
|
|
218
234
|
this.startupMode = StartupMode.Create;
|
|
219
235
|
}
|
|
236
|
+
|
|
220
237
|
/**
|
|
221
238
|
* Set the startup mode for the app to 'AutoCreate'.
|
|
222
239
|
*
|
|
223
240
|
* @private
|
|
224
|
-
|
|
225
|
-
;
|
|
226
|
-
|
|
241
|
+
*/;
|
|
227
242
|
_proto.setStartupModeAutoCreate = function setStartupModeAutoCreate() {
|
|
228
243
|
this.startupMode = StartupMode.AutoCreate;
|
|
229
244
|
}
|
|
245
|
+
|
|
230
246
|
/**
|
|
231
247
|
* Set the startup mode for the app to 'Deeplink'.
|
|
232
248
|
*
|
|
233
249
|
* @private
|
|
234
|
-
|
|
235
|
-
;
|
|
236
|
-
|
|
250
|
+
*/;
|
|
237
251
|
_proto.setStartupModeDeeplink = function setStartupModeDeeplink() {
|
|
238
252
|
this.startupMode = StartupMode.Deeplink;
|
|
239
253
|
};
|
|
240
|
-
|
|
241
254
|
_proto.init = function init() {
|
|
242
|
-
var _oModel$isA, _oManifestUI5$
|
|
243
|
-
|
|
255
|
+
var _oModel$isA, _oManifestUI5$rootVie;
|
|
256
|
+
this.initializeFeatureToggles();
|
|
244
257
|
var uiModel = new JSONModel({
|
|
245
258
|
editMode: library.EditMode.Display,
|
|
246
259
|
isEditable: false,
|
|
@@ -251,10 +264,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
251
264
|
});
|
|
252
265
|
var oInternalModel = new JSONModel({
|
|
253
266
|
pages: {}
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
uiModel.setDefaultBindingMode("OneWay");
|
|
257
|
-
|
|
267
|
+
});
|
|
268
|
+
// set the binding OneWay for uiModel to prevent changes if controller extensions modify a bound property of a control
|
|
269
|
+
uiModel.setDefaultBindingMode("OneWay");
|
|
270
|
+
// for internal model binding needs to be two way
|
|
258
271
|
ModelHelper.enhanceUiJSONModel(uiModel, library);
|
|
259
272
|
ModelHelper.enhanceInternalJSONModel(oInternalModel);
|
|
260
273
|
this.setModel(uiModel, "ui");
|
|
@@ -264,49 +277,47 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
264
277
|
this._oAppStateHandler = new AppStateHandler(this);
|
|
265
278
|
this._oDiagnostics = new Diagnostics();
|
|
266
279
|
var oModel = this.getModel();
|
|
267
|
-
|
|
268
280
|
if (oModel !== null && oModel !== void 0 && (_oModel$isA = oModel.isA) !== null && _oModel$isA !== void 0 && _oModel$isA.call(oModel, "sap.ui.model.odata.v4.ODataModel")) {
|
|
269
281
|
this.entityContainer = oModel.getMetaModel().requestObject("/$EntityContainer/");
|
|
270
282
|
} else {
|
|
271
283
|
// not an OData v4 service
|
|
272
284
|
this.entityContainer = Promise.resolve();
|
|
273
285
|
}
|
|
274
|
-
|
|
275
286
|
var oManifestUI5 = this.getManifest()["sap.ui5"];
|
|
276
|
-
|
|
277
|
-
|
|
287
|
+
if (oManifestUI5 !== null && oManifestUI5 !== void 0 && (_oManifestUI5$rootVie = oManifestUI5.rootView) !== null && _oManifestUI5$rootVie !== void 0 && _oManifestUI5$rootVie.viewName) {
|
|
288
|
+
var _oManifestUI5$routing3, _oManifestUI5$routing4, _oManifestUI5$routing5, _oManifestUI5$routing6, _oManifestUI5$rootVie2, _oManifestUI5$rootVie3;
|
|
278
289
|
// The application specified an own root view in the manifest
|
|
290
|
+
|
|
279
291
|
// Root View was moved from sap.fe.templates to sap.fe.core - keep it compatible
|
|
280
292
|
if (oManifestUI5.rootView.viewName === NAVCONF.FCL.VIEWNAME_COMPATIBILITY) {
|
|
281
293
|
oManifestUI5.rootView.viewName = NAVCONF.FCL.VIEWNAME;
|
|
282
|
-
} else if (
|
|
294
|
+
} else if (oManifestUI5.rootView.viewName === NAVCONF.NAVCONTAINER.VIEWNAME_COMPATIBILITY) {
|
|
283
295
|
oManifestUI5.rootView.viewName = NAVCONF.NAVCONTAINER.VIEWNAME;
|
|
284
296
|
}
|
|
285
|
-
|
|
286
|
-
if (oManifestUI5.rootView.viewName === NAVCONF.FCL.VIEWNAME && oManifestUI5.routing.config.routerClass === NAVCONF.FCL.ROUTERCLASS) {
|
|
297
|
+
if (oManifestUI5.rootView.viewName === NAVCONF.FCL.VIEWNAME && ((_oManifestUI5$routing3 = oManifestUI5.routing) === null || _oManifestUI5$routing3 === void 0 ? void 0 : (_oManifestUI5$routing4 = _oManifestUI5$routing3.config) === null || _oManifestUI5$routing4 === void 0 ? void 0 : _oManifestUI5$routing4.routerClass) === NAVCONF.FCL.ROUTERCLASS) {
|
|
287
298
|
Log.info("Rootcontainer: \"".concat(NAVCONF.FCL.VIEWNAME, "\" - Routerclass: \"").concat(NAVCONF.FCL.ROUTERCLASS, "\""));
|
|
288
|
-
} else if (oManifestUI5.rootView.viewName === NAVCONF.NAVCONTAINER.VIEWNAME && oManifestUI5.routing.config.routerClass === NAVCONF.NAVCONTAINER.ROUTERCLASS) {
|
|
299
|
+
} else if (oManifestUI5.rootView.viewName === NAVCONF.NAVCONTAINER.VIEWNAME && ((_oManifestUI5$routing5 = oManifestUI5.routing) === null || _oManifestUI5$routing5 === void 0 ? void 0 : (_oManifestUI5$routing6 = _oManifestUI5$routing5.config) === null || _oManifestUI5$routing6 === void 0 ? void 0 : _oManifestUI5$routing6.routerClass) === NAVCONF.NAVCONTAINER.ROUTERCLASS) {
|
|
289
300
|
Log.info("Rootcontainer: \"".concat(NAVCONF.NAVCONTAINER.VIEWNAME, "\" - Routerclass: \"").concat(NAVCONF.NAVCONTAINER.ROUTERCLASS, "\""));
|
|
290
|
-
} else if (oManifestUI5.rootView.viewName.indexOf("sap.fe.core.rootView") !== -1) {
|
|
291
|
-
|
|
301
|
+
} else if (((_oManifestUI5$rootVie2 = oManifestUI5.rootView) === null || _oManifestUI5$rootVie2 === void 0 ? void 0 : (_oManifestUI5$rootVie3 = _oManifestUI5$rootVie2.viewName) === null || _oManifestUI5$rootVie3 === void 0 ? void 0 : _oManifestUI5$rootVie3.indexOf("sap.fe.core.rootView")) !== -1) {
|
|
302
|
+
var _oManifestUI5$routing7, _oManifestUI5$routing8;
|
|
303
|
+
throw Error("\nWrong configuration for the couple (rootView/routerClass) in manifest file.\n" + "Current values are :(".concat(oManifestUI5.rootView.viewName, "/").concat((_oManifestUI5$routing7 = oManifestUI5.routing) === null || _oManifestUI5$routing7 === void 0 ? void 0 : (_oManifestUI5$routing8 = _oManifestUI5$routing7.config) === null || _oManifestUI5$routing8 === void 0 ? void 0 : _oManifestUI5$routing8.routerClass, ")\n") + "Expected values are \n" + "\t - (".concat(NAVCONF.NAVCONTAINER.VIEWNAME, "/").concat(NAVCONF.NAVCONTAINER.ROUTERCLASS, ")\n") + "\t - (".concat(NAVCONF.FCL.VIEWNAME, "/").concat(NAVCONF.FCL.ROUTERCLASS, ")"));
|
|
292
304
|
} else {
|
|
293
305
|
Log.info("Rootcontainer: \"".concat(oManifestUI5.rootView.viewName, "\" - Routerclass: \"").concat(NAVCONF.NAVCONTAINER.ROUTERCLASS, "\""));
|
|
294
306
|
}
|
|
295
|
-
}
|
|
296
|
-
// Commenting since it is not needed for SingleRange
|
|
307
|
+
}
|
|
297
308
|
|
|
309
|
+
// Adding Semantic Date Operators
|
|
310
|
+
// Commenting since it is not needed for SingleRange
|
|
311
|
+
SemanticDateOperators.addSemanticDateOperators();
|
|
298
312
|
|
|
299
|
-
|
|
313
|
+
// the init function configures the routing according to the settings above
|
|
300
314
|
// it will call the createContent function to instantiate the RootView and add it to the UIComponent aggregations
|
|
301
315
|
|
|
302
316
|
_UIComponent.prototype.init.call(this);
|
|
303
|
-
|
|
304
317
|
AppComponent.instanceMap[this.getId()] = this;
|
|
305
318
|
};
|
|
306
|
-
|
|
307
319
|
_proto.onServicesStarted = function onServicesStarted() {
|
|
308
320
|
var _this2 = this;
|
|
309
|
-
|
|
310
321
|
//router must be started once the rootcontainer is initialized
|
|
311
322
|
//starting of the router
|
|
312
323
|
var finalizedRoutingInitialization = function () {
|
|
@@ -314,21 +325,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
314
325
|
if (_this2.getRootViewController().attachRouteMatchers) {
|
|
315
326
|
_this2.getRootViewController().attachRouteMatchers();
|
|
316
327
|
}
|
|
317
|
-
|
|
318
328
|
_this2.getRouter().initialize();
|
|
319
|
-
|
|
320
329
|
_this2.getRouterProxy().init(_this2, _this2._isFclEnabled());
|
|
321
330
|
}).catch(function (error) {
|
|
322
331
|
var oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core");
|
|
323
|
-
|
|
324
|
-
_this2.getRootViewController().displayMessagePage(oResourceBundle.getText("C_APP_COMPONENT_SAPFE_APPSTART_TECHNICAL_ISSUES"), {
|
|
332
|
+
_this2.getRootViewController().displayErrorPage(oResourceBundle.getText("C_APP_COMPONENT_SAPFE_APPSTART_TECHNICAL_ISSUES"), {
|
|
325
333
|
title: oResourceBundle.getText("C_COMMON_SAPFE_ERROR"),
|
|
326
334
|
description: error.message,
|
|
327
335
|
FCLLevel: 0
|
|
328
336
|
});
|
|
329
337
|
});
|
|
330
338
|
};
|
|
331
|
-
|
|
332
339
|
if (this.bInitializeRouting) {
|
|
333
340
|
return this.getRoutingService().initializeRouting().then(function () {
|
|
334
341
|
if (_this2.getRootViewController()) {
|
|
@@ -343,118 +350,93 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
343
350
|
});
|
|
344
351
|
}
|
|
345
352
|
};
|
|
346
|
-
|
|
347
353
|
_proto.exit = function exit() {
|
|
348
354
|
this._oAppStateHandler.destroy();
|
|
349
|
-
|
|
350
|
-
|
|
355
|
+
this._oRouterProxy.destroy();
|
|
356
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
351
357
|
// @ts-ignore
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
delete this._oAppStateHandler; // eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
358
|
+
delete this._oAppStateHandler;
|
|
359
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
355
360
|
// @ts-ignore
|
|
356
|
-
|
|
357
361
|
delete this._oRouterProxy;
|
|
358
362
|
deleteModelCacheData(this.getMetaModel());
|
|
359
363
|
this.getModel("ui").destroy();
|
|
360
364
|
};
|
|
361
|
-
|
|
362
365
|
_proto.getMetaModel = function getMetaModel() {
|
|
363
366
|
return this.getModel().getMetaModel();
|
|
364
367
|
};
|
|
365
|
-
|
|
366
368
|
_proto.getDiagnostics = function getDiagnostics() {
|
|
367
369
|
return this._oDiagnostics;
|
|
368
370
|
};
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
var _this$getRoutingServi, _UIComponent$prototyp;
|
|
372
|
-
|
|
371
|
+
_proto.destroy = function destroy(bSuppressInvalidate) {
|
|
372
|
+
var _this$getRoutingServi;
|
|
373
373
|
// LEAKS, with workaround for some Flex / MDC issue
|
|
374
374
|
try {
|
|
375
375
|
// // This one is only a leak if you don't go back to the same component in the long run
|
|
376
376
|
//delete sap.ui.fl.FlexControllerFactory._componentInstantiationPromises[this.getId()];
|
|
377
|
+
|
|
377
378
|
ValueListHelper.initializeCachedValueHelp();
|
|
378
|
-
delete AppComponent.instanceMap[this.getId()];
|
|
379
|
-
// Object.keys(oRegistry).forEach(function(sKey) {
|
|
380
|
-
// Object.keys(oRegistry[sKey].controller).forEach(function(sControllerKey) {
|
|
381
|
-
// oRegistry[sKey].controller[sControllerKey].destroy();
|
|
382
|
-
// });
|
|
383
|
-
// });
|
|
384
|
-
// sap.ui.mdc.p13n.Engine.getInstance().destroy();
|
|
379
|
+
delete AppComponent.instanceMap[this.getId()];
|
|
385
380
|
|
|
381
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
382
|
+
// @ts-ignore
|
|
386
383
|
delete window._routing;
|
|
387
384
|
} catch (e) {
|
|
388
385
|
Log.info(e);
|
|
389
|
-
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
//WORKAROUND for sticky discard request : due to async callback, request triggered by the exitApplication will be send after the UIComponent.prototype.destroy
|
|
390
389
|
//so we need to copy the Requestor headers as it will be destroy
|
|
390
|
+
|
|
391
391
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
392
392
|
// @ts-ignore
|
|
393
|
-
|
|
394
|
-
|
|
395
393
|
var oMainModel = this.oModels[undefined];
|
|
396
394
|
var oHeaders;
|
|
397
|
-
|
|
398
395
|
if (oMainModel.oRequestor) {
|
|
399
396
|
oHeaders = jQuery.extend({}, oMainModel.oRequestor.mHeaders);
|
|
400
|
-
} // As we need to cleanup the application / handle the dirty object we need to call our cleanup before the models are destroyed
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
(_this$getRoutingServi = this.getRoutingService()) === null || _this$getRoutingServi === void 0 ? void 0 : _this$getRoutingServi.beforeExit();
|
|
404
|
-
|
|
405
|
-
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
406
|
-
args[_key2] = arguments[_key2];
|
|
407
397
|
}
|
|
408
398
|
|
|
409
|
-
|
|
410
|
-
|
|
399
|
+
// As we need to cleanup the application / handle the dirty object we need to call our cleanup before the models are destroyed
|
|
400
|
+
(_this$getRoutingServi = this.getRoutingService()) === null || _this$getRoutingServi === void 0 ? void 0 : _this$getRoutingServi.beforeExit();
|
|
401
|
+
_UIComponent.prototype.destroy.call(this, bSuppressInvalidate);
|
|
411
402
|
if (oHeaders && oMainModel.oRequestor) {
|
|
412
403
|
oMainModel.oRequestor.mHeaders = oHeaders;
|
|
413
404
|
}
|
|
414
405
|
};
|
|
415
|
-
|
|
416
|
-
_proto.getComponentData = function getComponentData() {
|
|
417
|
-
return _UIComponent.prototype.getComponentData.call(this);
|
|
418
|
-
};
|
|
419
|
-
|
|
420
406
|
_proto.getRoutingService = function getRoutingService() {
|
|
421
407
|
return {}; // overriden at runtime
|
|
422
408
|
};
|
|
423
|
-
|
|
424
409
|
_proto.getShellServices = function getShellServices() {
|
|
425
410
|
return {}; // overriden at runtime
|
|
426
411
|
};
|
|
427
|
-
|
|
428
412
|
_proto.getNavigationService = function getNavigationService() {
|
|
429
413
|
return {}; // overriden at runtime
|
|
430
414
|
};
|
|
431
|
-
|
|
432
415
|
_proto.getSideEffectsService = function getSideEffectsService() {
|
|
433
416
|
return {};
|
|
434
417
|
};
|
|
435
|
-
|
|
436
418
|
_proto.getEnvironmentCapabilities = function getEnvironmentCapabilities() {
|
|
437
419
|
return {};
|
|
438
420
|
};
|
|
439
|
-
|
|
440
421
|
_proto.getStartupParameters = function getStartupParameters() {
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
422
|
+
try {
|
|
423
|
+
var _this4 = this;
|
|
424
|
+
var oComponentData = _this4.getComponentData();
|
|
425
|
+
return Promise.resolve(oComponentData && oComponentData.startupParameters || {});
|
|
426
|
+
} catch (e) {
|
|
427
|
+
return Promise.reject(e);
|
|
428
|
+
}
|
|
444
429
|
};
|
|
445
|
-
|
|
446
430
|
_proto.restore = function restore() {
|
|
447
431
|
// called by FLP when app sap-keep-alive is enabled and app is restored
|
|
448
432
|
this.getRootViewController().viewState.onRestore();
|
|
449
433
|
};
|
|
450
|
-
|
|
451
434
|
_proto.suspend = function suspend() {
|
|
452
435
|
// called by FLP when app sap-keep-alive is enabled and app is suspended
|
|
453
436
|
this.getRootViewController().viewState.onSuspend();
|
|
454
437
|
};
|
|
455
|
-
|
|
456
438
|
return AppComponent;
|
|
457
439
|
}(UIComponent), _class2.instanceMap = {}, _class2)) || _class);
|
|
458
440
|
return AppComponent;
|
|
459
441
|
}, false);
|
|
460
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJBcHBDb21wb25lbnQiLCJkZWZpbmVVSTVDbGFzcyIsImludGVyZmFjZXMiLCJjb25maWciLCJmdWxsV2lkdGgiLCJtYW5pZmVzdCIsInNlcnZpY2VzIiwicmVzb3VyY2VNb2RlbCIsImZhY3RvcnlOYW1lIiwicm91dGluZ1NlcnZpY2UiLCJzdGFydHVwIiwic2hlbGxTZXJ2aWNlcyIsIlNoZWxsVUlTZXJ2aWNlIiwibmF2aWdhdGlvblNlcnZpY2UiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsInNpZGVFZmZlY3RzU2VydmljZSIsImFzeW5jQ29tcG9uZW50U2VydmljZSIsInJvb3RWaWV3Iiwidmlld05hbWUiLCJ0eXBlIiwiYXN5bmMiLCJpZCIsInJvdXRpbmciLCJjb250cm9sSWQiLCJyb3V0ZXJDbGFzcyIsInZpZXdUeXBlIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwiY29udGFpbmVyT3B0aW9ucyIsInByb3BhZ2F0ZU1vZGVsIiwiZGVzaWdudGltZSIsInN0YXJ0dXBNb2RlIiwiTm9ybWFsIiwiX2lzRmNsRW5hYmxlZCIsIm9NYW5pZmVzdFVJNSIsImdldE1hbmlmZXN0RW50cnkiLCJnZXRSb3V0ZXJQcm94eSIsIl9vUm91dGVyUHJveHkiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJfb0FwcFN0YXRlSGFuZGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RDb250cm9sIiwiZ2V0Q29udHJvbGxlciIsImdldFJvb3RDb250YWluZXIiLCJnZXRDb250ZW50IiwiZ2V0U3RhcnR1cE1vZGUiLCJzZXRTdGFydHVwTW9kZUNyZWF0ZSIsIkNyZWF0ZSIsInNldFN0YXJ0dXBNb2RlQXV0b0NyZWF0ZSIsIkF1dG9DcmVhdGUiLCJzZXRTdGFydHVwTW9kZURlZXBsaW5rIiwiRGVlcGxpbmsiLCJpbml0IiwidWlNb2RlbCIsIkpTT05Nb2RlbCIsImVkaXRNb2RlIiwiRWRpdE1vZGUiLCJEaXNwbGF5IiwiaXNFZGl0YWJsZSIsImRyYWZ0U3RhdHVzIiwiRHJhZnRTdGF0dXMiLCJDbGVhciIsImJ1c3kiLCJidXN5TG9jYWwiLCJwYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwic2V0RGVmYXVsdEJpbmRpbmdNb2RlIiwiTW9kZWxIZWxwZXIiLCJlbmhhbmNlVWlKU09OTW9kZWwiLCJlbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwiLCJzZXRNb2RlbCIsImJJbml0aWFsaXplUm91dGluZyIsInVuZGVmaW5lZCIsIlJvdXRlclByb3h5IiwiQXBwU3RhdGVIYW5kbGVyIiwiX29EaWFnbm9zdGljcyIsIkRpYWdub3N0aWNzIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJpc0EiLCJlbnRpdHlDb250YWluZXIiLCJnZXRNZXRhTW9kZWwiLCJyZXF1ZXN0T2JqZWN0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXRNYW5pZmVzdCIsIkxvZyIsImluZm8iLCJpbmRleE9mIiwiRXJyb3IiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJhZGRTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJpbnN0YW5jZU1hcCIsImdldElkIiwib25TZXJ2aWNlc1N0YXJ0ZWQiLCJmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24iLCJ0aGVuIiwiYXR0YWNoUm91dGVNYXRjaGVycyIsImdldFJvdXRlciIsImluaXRpYWxpemUiLCJjYXRjaCIsImVycm9yIiwib1Jlc291cmNlQnVuZGxlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImRpc3BsYXlNZXNzYWdlUGFnZSIsImdldFRleHQiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibWVzc2FnZSIsIkZDTExldmVsIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJpbml0aWFsaXplUm91dGluZyIsImF0dGFjaEFmdGVySW5pdCIsImVyciIsImV4aXQiLCJkZXN0cm95IiwiZGVsZXRlTW9kZWxDYWNoZURhdGEiLCJnZXREaWFnbm9zdGljcyIsIlZhbHVlTGlzdEhlbHBlciIsImluaXRpYWxpemVDYWNoZWRWYWx1ZUhlbHAiLCJ3aW5kb3ciLCJfcm91dGluZyIsImUiLCJvTWFpbk1vZGVsIiwib01vZGVscyIsIm9IZWFkZXJzIiwib1JlcXVlc3RvciIsImpRdWVyeSIsImV4dGVuZCIsIm1IZWFkZXJzIiwiYmVmb3JlRXhpdCIsImFyZ3MiLCJnZXRDb21wb25lbnREYXRhIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsIm9Db21wb25lbnREYXRhIiwib1N0YXJ0VXBQYXJhbWV0ZXJzIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJyZXN0b3JlIiwidmlld1N0YXRlIiwib25SZXN0b3JlIiwic3VzcGVuZCIsIm9uU3VzcGVuZCIsIlVJQ29tcG9uZW50Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBDb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQXBwU3RhdGVIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9BcHBTdGF0ZUhhbmRsZXJcIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IGxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvTmF2aWdhdGlvblNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1JvdXRpbmdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBJU2hlbGxTZXJ2aWNlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaGVsbFNlcnZpY2VzRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgVmFsdWVMaXN0SGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFVJQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9VSUNvbXBvbmVudFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4vQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGRlbGV0ZU1vZGVsQ2FjaGVEYXRhIH0gZnJvbSBcIi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcIi4vaGVscGVycy9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcblxuY29uc3QgU3RhcnR1cE1vZGUgPSBsaWJyYXJ5LlN0YXJ0dXBNb2RlO1xuXG5jb25zdCBOQVZDT05GID0ge1xuXHRGQ0w6IHtcblx0XHRWSUVXTkFNRTogXCJzYXAuZmUuY29yZS5yb290Vmlldy5GY2xcIixcblx0XHRWSUVXTkFNRV9DT01QQVRJQklMSVRZOiBcInNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3LkZjbFwiLFxuXHRcdFJPVVRFUkNMQVNTOiBcInNhcC5mLnJvdXRpbmcuUm91dGVyXCJcblx0fSxcblx0TkFWQ09OVEFJTkVSOiB7XG5cdFx0VklFV05BTUU6IFwic2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyXCIsXG5cdFx0VklFV05BTUVfQ09NUEFUSUJJTElUWTogXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5OYXZDb250YWluZXJcIixcblx0XHRST1VURVJDTEFTUzogXCJzYXAubS5yb3V0aW5nLlJvdXRlclwiXG5cdH1cbn07XG5cbi8qKlxuICogTWFpbiBjbGFzcyBmb3IgY29tcG9uZW50cyB1c2VkIGZvciBhbiBhcHBsaWNhdGlvbiBpbiBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKlxuICogQXBwbGljYXRpb24gZGV2ZWxvcGVycyB1c2luZyB0aGUgdGVtcGxhdGVzIGFuZCBidWlsZGluZyBibG9ja3MgcHJvdmlkZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzIHNob3VsZCBjcmVhdGUgdGhlaXIgYXBwcyBieSBleHRlbmRpbmcgdGhpcyBjb21wb25lbnQuXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBzZXJ2aWNlcyB0aGF0IHlvdSBuZWVkIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0ZW1wbGF0ZXMgdG8gd29yayBwcm9wZXJseSBhcmUgc3RhcnRlZC5cbiAqXG4gKiBXaGVuIHlvdSB1c2Ugc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFzIHRoZSBiYXNlIGNvbXBvbmVudCwgeW91IGFsc28gbmVlZCB0byB1c2UgYSByb290Vmlldy4gU0FQIEZpb3JpIGVsZW1lbnRzIHByb3ZpZGVzIHR3byBvcHRpb25zOiA8YnIvPlxuICogIC0gc2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyIHdoZW4gdXNpbmcgc2FwLm0ucm91dGluZy5Sb3V0ZXIgPGJyLz5cbiAqICAtIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbCB3aGVuIHVzaW5nIHNhcC5mLnJvdXRpbmcuUm91dGVyIChGQ0wgdXNlIGNhc2UpIDxici8+XG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiLCB7XG5cdGludGVyZmFjZXM6IFtcInNhcC51aS5jb3JlLklBc3luY0NvbnRlbnRDcmVhdGlvblwiXSxcblx0Y29uZmlnOiB7XG5cdFx0ZnVsbFdpZHRoOiB0cnVlXG5cdH0sXG5cdG1hbmlmZXN0OiB7XG5cdFx0XCJzYXAudWk1XCI6IHtcblx0XHRcdHNlcnZpY2VzOiB7XG5cdFx0XHRcdHJlc291cmNlTW9kZWw6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5SZXNvdXJjZU1vZGVsU2VydmljZVwiLFxuXHRcdFx0XHRcdFwic3RhcnR1cFwiOiBcIndhaXRGb3JcIixcblx0XHRcdFx0XHRcInNldHRpbmdzXCI6IHtcblx0XHRcdFx0XHRcdFwiYnVuZGxlc1wiOiBbXCJzYXAuZmUuY29yZS5tZXNzYWdlYnVuZGxlXCJdLFxuXHRcdFx0XHRcdFx0XCJtb2RlbE5hbWVcIjogXCJzYXAuZmUuaTE4blwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyb3V0aW5nU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJvdXRpbmdTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0c2hlbGxTZXJ2aWNlczoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNoZWxsU2VydmljZXNcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTaGVsbFVJU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC51c2hlbGwudWk1c2VydmljZS5TaGVsbFVJU2VydmljZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuTmF2aWdhdGlvblNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRlbnZpcm9ubWVudENhcGFiaWxpdGllczoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkVudmlyb25tZW50U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNpZGVFZmZlY3RzU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNpZGVFZmZlY3RzU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFzeW5jQ29tcG9uZW50U2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkFzeW5jQ29tcG9uZW50U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyb290Vmlldzoge1xuXHRcdFx0XHR2aWV3TmFtZTogTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUsXG5cdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRpZDogXCJhcHBSb290Vmlld1wiXG5cdFx0XHR9LFxuXHRcdFx0cm91dGluZzoge1xuXHRcdFx0XHRjb25maWc6IHtcblx0XHRcdFx0XHRjb250cm9sSWQ6IFwiYXBwQ29udGVudFwiLFxuXHRcdFx0XHRcdHJvdXRlckNsYXNzOiBOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTUyxcblx0XHRcdFx0XHR2aWV3VHlwZTogXCJYTUxcIixcblx0XHRcdFx0XHRjb250cm9sQWdncmVnYXRpb246IFwicGFnZXNcIixcblx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRjb250YWluZXJPcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRwcm9wYWdhdGVNb2RlbDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0ZGVzaWdudGltZTogXCJzYXAvZmUvY29yZS9kZXNpZ250aW1lL0FwcENvbXBvbmVudC5kZXNpZ250aW1lXCIsXG5cblx0bGlicmFyeTogXCJzYXAuZmUuY29yZVwiXG59KVxuY2xhc3MgQXBwQ29tcG9uZW50IGV4dGVuZHMgVUlDb21wb25lbnQge1xuXHRzdGF0aWMgaW5zdGFuY2VNYXA6IFJlY29yZDxzdHJpbmcsIEFwcENvbXBvbmVudD4gPSB7fTtcblx0cHJpdmF0ZSBfb1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cdHByaXZhdGUgX29BcHBTdGF0ZUhhbmRsZXIhOiBBcHBTdGF0ZUhhbmRsZXI7XG5cdHByaXZhdGUgYkluaXRpYWxpemVSb3V0aW5nPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBfb0RpYWdub3N0aWNzITogRGlhZ25vc3RpY3M7XG5cdHByaXZhdGUgZW50aXR5Q29udGFpbmVyOiBhbnk7XG5cdHByaXZhdGUgc3RhcnR1cE1vZGU6IHN0cmluZyA9IFN0YXJ0dXBNb2RlLk5vcm1hbDtcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhXG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblxuXHRfaXNGY2xFbmFibGVkKCkge1xuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAudWk1XCIpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRvTWFuaWZlc3RVSTU/LnJvb3RWaWV3Py52aWV3TmFtZSA9PT0gTkFWQ09ORi5GQ0wuVklFV05BTUUgfHxcblx0XHRcdG9NYW5pZmVzdFVJNT8ucm9vdFZpZXc/LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRV9DT01QQVRJQklMSVRZXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldFJvdXRlclByb3h5XG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcblx0ICogQHJldHVybnMgQSBSZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5XG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldFJvdXRlclByb3h5KCk6IFJvdXRlclByb3h5IHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlclByb3h5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgQXBwU3RhdGVIYW5kbGVyLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBBcHBTdGF0ZUhhbmRsZXJcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0QXBwU3RhdGVIYW5kbGVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbmF2L0ZDTCBDb250cm9sbGVyLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldFJvb3RWaWV3Q29udHJvbGxlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgRkNMIENvbnRyb2xsZXJcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdFZpZXdDb250cm9sbGVyKCk6IEJhc2VDb250cm9sbGVyIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0Um9vdENvbnRyb2woKSBhcyBWaWV3KS5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBOYXZDb250YWluZXIgY29udHJvbCBvciB0aGUgRkNMIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjZ2V0Um9vdENvbnRhaW5lclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byBOYXZDb250YWluZXIgY29udHJvbCBvciB0aGUgRkNMIGNvbnRyb2xcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdENvbnRhaW5lcigpIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0Um9vdENvbnRyb2woKSBhcyBWaWV3KS5nZXRDb250ZW50KClbMF07XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGFydHVwIG1vZGUgb2YgdGhlIGFwcC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgbW9kZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0U3RhcnR1cE1vZGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydHVwTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQ3JlYXRlJy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQ3JlYXRlKCkge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0F1dG9DcmVhdGUnLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlKCkge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5BdXRvQ3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdEZWVwbGluaycuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZURlZXBsaW5rKCkge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5EZWVwbGluaztcblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0ZWRpdE1vZGU6IGxpYnJhcnkuRWRpdE1vZGUuRGlzcGxheSxcblx0XHRcdGlzRWRpdGFibGU6IGZhbHNlLFxuXHRcdFx0ZHJhZnRTdGF0dXM6IGxpYnJhcnkuRHJhZnRTdGF0dXMuQ2xlYXIsXG5cdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdGJ1c3lMb2NhbDoge30sXG5cdFx0XHRwYWdlczoge31cblx0XHR9KTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Ly8gc2V0IHRoZSBiaW5kaW5nIE9uZVdheSBmb3IgdWlNb2RlbCB0byBwcmV2ZW50IGNoYW5nZXMgaWYgY29udHJvbGxlciBleHRlbnNpb25zIG1vZGlmeSBhIGJvdW5kIHByb3BlcnR5IG9mIGEgY29udHJvbFxuXHRcdHVpTW9kZWwuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdC8vIGZvciBpbnRlcm5hbCBtb2RlbCBiaW5kaW5nIG5lZWRzIHRvIGJlIHR3byB3YXlcblx0XHRNb2RlbEhlbHBlci5lbmhhbmNlVWlKU09OTW9kZWwodWlNb2RlbCwgbGlicmFyeSk7XG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZUludGVybmFsSlNPTk1vZGVsKG9JbnRlcm5hbE1vZGVsKTtcblxuXHRcdHRoaXMuc2V0TW9kZWwodWlNb2RlbCwgXCJ1aVwiKTtcblx0XHR0aGlzLnNldE1vZGVsKG9JbnRlcm5hbE1vZGVsLCBcImludGVybmFsXCIpO1xuXG5cdFx0dGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgPSB0aGlzLmJJbml0aWFsaXplUm91dGluZyAhPT0gdW5kZWZpbmVkID8gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgOiB0cnVlO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9IG5ldyBSb3V0ZXJQcm94eSgpO1xuXHRcdHRoaXMuX29BcHBTdGF0ZUhhbmRsZXIgPSBuZXcgQXBwU3RhdGVIYW5kbGVyKHRoaXMpO1xuXHRcdHRoaXMuX29EaWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljcygpO1xuXG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWw7XG5cdFx0aWYgKG9Nb2RlbD8uaXNBPy4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiKSkge1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXIgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkucmVxdWVzdE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyL1wiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbm90IGFuIE9EYXRhIHY0IHNlcnZpY2Vcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb01hbmlmZXN0VUk1ID0gKHRoaXMuZ2V0TWFuaWZlc3QoKSBhcyBhbnkpW1wic2FwLnVpNVwiXTtcblx0XHRpZiAob01hbmlmZXN0VUk1Py5yb290Vmlldz8udmlld05hbWUpIHtcblx0XHRcdC8vIFRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpZWQgYW4gb3duIHJvb3QgdmlldyBpbiB0aGUgbWFuaWZlc3RcblxuXHRcdFx0Ly8gUm9vdCBWaWV3IHdhcyBtb3ZlZCBmcm9tIHNhcC5mZS50ZW1wbGF0ZXMgdG8gc2FwLmZlLmNvcmUgLSBrZWVwIGl0IGNvbXBhdGlibGVcblx0XHRcdGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuRkNMLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5GQ0wuVklFV05BTUU7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNT8ucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRSAmJlxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZy5jb25maWcucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuRkNMLlJPVVRFUkNMQVNTXG5cdFx0XHQpIHtcblx0XHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtOQVZDT05GLkZDTC5WSUVXTkFNRX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUgJiZcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvdXRpbmcuY29uZmlnLnJvdXRlckNsYXNzID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU1xuXHRcdFx0KSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZS5pbmRleE9mKFwic2FwLmZlLmNvcmUucm9vdFZpZXdcIikgIT09IC0xKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKFxuXHRcdFx0XHRcdGBcXG5Xcm9uZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY291cGxlIChyb290Vmlldy9yb3V0ZXJDbGFzcykgaW4gbWFuaWZlc3QgZmlsZS5cXG5gICtcblx0XHRcdFx0XHRcdGBDdXJyZW50IHZhbHVlcyBhcmUgOigke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX0vJHtvTWFuaWZlc3RVSTUucm91dGluZy5jb25maWcucm91dGVyQ2xhc3N9KVxcbmAgK1xuXHRcdFx0XHRcdFx0YEV4cGVjdGVkIHZhbHVlcyBhcmUgXFxuYCArXG5cdFx0XHRcdFx0XHRgXFx0IC0gKCR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9LyR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9KVxcbmAgK1xuXHRcdFx0XHRcdFx0YFxcdCAtICgke05BVkNPTkYuRkNMLlZJRVdOQU1FfS8ke05BVkNPTkYuRkNMLlJPVVRFUkNMQVNTfSlgXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGRpbmcgU2VtYW50aWMgRGF0ZSBPcGVyYXRvcnNcblx0XHQvLyBDb21tZW50aW5nIHNpbmNlIGl0IGlzIG5vdCBuZWVkZWQgZm9yIFNpbmdsZVJhbmdlXG5cdFx0U2VtYW50aWNEYXRlT3BlcmF0b3JzLmFkZFNlbWFudGljRGF0ZU9wZXJhdG9ycygpO1xuXG5cdFx0Ly8gdGhlIGluaXQgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgcm91dGluZyBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGFib3ZlXG5cdFx0Ly8gaXQgd2lsbCBjYWxsIHRoZSBjcmVhdGVDb250ZW50IGZ1bmN0aW9uIHRvIGluc3RhbnRpYXRlIHRoZSBSb290VmlldyBhbmQgYWRkIGl0IHRvIHRoZSBVSUNvbXBvbmVudCBhZ2dyZWdhdGlvbnNcblxuXHRcdHN1cGVyLmluaXQoKTtcblx0XHRBcHBDb21wb25lbnQuaW5zdGFuY2VNYXBbdGhpcy5nZXRJZCgpXSA9IHRoaXM7XG5cdH1cblx0b25TZXJ2aWNlc1N0YXJ0ZWQoKSB7XG5cdFx0Ly9yb3V0ZXIgbXVzdCBiZSBzdGFydGVkIG9uY2UgdGhlIHJvb3Rjb250YWluZXIgaXMgaW5pdGlhbGl6ZWRcblx0XHQvL3N0YXJ0aW5nIG9mIHRoZSByb3V0ZXJcblx0XHRjb25zdCBmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24gPSAoKSA9PiB7XG5cdFx0XHR0aGlzLmVudGl0eUNvbnRhaW5lclxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkuYXR0YWNoUm91dGVNYXRjaGVycykge1xuXHRcdFx0XHRcdFx0KHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55KS5hdHRhY2hSb3V0ZU1hdGNoZXJzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuZ2V0Um91dGVyKCkuaW5pdGlhbGl6ZSgpO1xuXHRcdFx0XHRcdHRoaXMuZ2V0Um91dGVyUHJveHkoKS5pbml0KHRoaXMsIHRoaXMuX2lzRmNsRW5hYmxlZCgpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblxuXHRcdFx0XHRcdCh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkuZGlzcGxheU1lc3NhZ2VQYWdlKFxuXHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfQVBQU1RBUlRfVEVDSE5JQ0FMX0lTU1VFU1wiKSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIiksXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRGQ0xMZXZlbDogMFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRpZiAodGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKClcblx0XHRcdFx0LmluaXRpYWxpemVSb3V0aW5nKClcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCh0aGlzLmdldFJvb3RDb250cm9sKCkgYXMgYW55KS5hdHRhY2hBZnRlckluaXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnI6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgY2Fubm90IGNhbm5vdCBpbml0aWFsaXplIHJvdXRpbmc6ICR7ZXJyfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0ZXhpdCgpIHtcblx0XHR0aGlzLl9vQXBwU3RhdGVIYW5kbGVyLmRlc3Ryb3koKTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkuZGVzdHJveSgpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29BcHBTdGF0ZUhhbmRsZXI7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRkZWxldGUgdGhpcy5fb1JvdXRlclByb3h5O1xuXHRcdGRlbGV0ZU1vZGVsQ2FjaGVEYXRhKHRoaXMuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKS5kZXN0cm95KCk7XG5cdH1cblx0Z2V0TWV0YU1vZGVsKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHR9XG5cdGdldERpYWdub3N0aWNzKCkge1xuXHRcdHJldHVybiB0aGlzLl9vRGlhZ25vc3RpY3M7XG5cdH1cblx0ZGVzdHJveSguLi5hcmdzOiBhbnlbXSkge1xuXHRcdC8vIExFQUtTLCB3aXRoIHdvcmthcm91bmQgZm9yIHNvbWUgRmxleCAvIE1EQyBpc3N1ZVxuXHRcdHRyeSB7XG5cdFx0XHQvLyBcdC8vIFRoaXMgb25lIGlzIG9ubHkgYSBsZWFrIGlmIHlvdSBkb24ndCBnbyBiYWNrIHRvIHRoZSBzYW1lIGNvbXBvbmVudCBpbiB0aGUgbG9uZyBydW5cblx0XHRcdC8vZGVsZXRlIHNhcC51aS5mbC5GbGV4Q29udHJvbGxlckZhY3RvcnkuX2NvbXBvbmVudEluc3RhbnRpYXRpb25Qcm9taXNlc1t0aGlzLmdldElkKCldO1xuXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuaW5pdGlhbGl6ZUNhY2hlZFZhbHVlSGVscCgpO1xuXG5cdFx0XHRkZWxldGUgQXBwQ29tcG9uZW50Lmluc3RhbmNlTWFwW3RoaXMuZ2V0SWQoKV07XG5cblx0XHRcdC8vIFx0dmFyIG9SZWdpc3RyeSA9IHNhcC51aS5tZGMucDEzbi5FbmdpbmUuZ2V0SW5zdGFuY2UoKS5fZ2V0UmVnaXN0cnkoKTtcblx0XHRcdC8vIFx0T2JqZWN0LmtleXMob1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKHNLZXkpIHtcblx0XHRcdC8vIFx0XHRPYmplY3Qua2V5cyhvUmVnaXN0cnlbc0tleV0uY29udHJvbGxlcikuZm9yRWFjaChmdW5jdGlvbihzQ29udHJvbGxlcktleSkge1xuXHRcdFx0Ly8gXHRcdFx0b1JlZ2lzdHJ5W3NLZXldLmNvbnRyb2xsZXJbc0NvbnRyb2xsZXJLZXldLmRlc3Ryb3koKTtcblx0XHRcdC8vIFx0XHR9KTtcblx0XHRcdC8vIFx0fSk7XG5cdFx0XHQvLyBcdHNhcC51aS5tZGMucDEzbi5FbmdpbmUuZ2V0SW5zdGFuY2UoKS5kZXN0cm95KCk7XG5cdFx0XHRkZWxldGUgKHdpbmRvdyBhcyBhbnkpLl9yb3V0aW5nO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5pbmZvKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cblx0XHQvL1dPUktBUk9VTkQgZm9yIHN0aWNreSBkaXNjYXJkIHJlcXVlc3QgOiBkdWUgdG8gYXN5bmMgY2FsbGJhY2ssIHJlcXVlc3QgdHJpZ2dlcmVkIGJ5IHRoZSBleGl0QXBwbGljYXRpb24gd2lsbCBiZSBzZW5kIGFmdGVyIHRoZSBVSUNvbXBvbmVudC5wcm90b3R5cGUuZGVzdHJveVxuXHRcdC8vc28gd2UgbmVlZCB0byBjb3B5IHRoZSBSZXF1ZXN0b3IgaGVhZGVycyBhcyBpdCB3aWxsIGJlIGRlc3Ryb3lcblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Y29uc3Qgb01haW5Nb2RlbCA9ICh0aGlzIGFzIGFueSkub01vZGVsc1t1bmRlZmluZWRdO1xuXHRcdGxldCBvSGVhZGVycztcblx0XHRpZiAob01haW5Nb2RlbC5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvSGVhZGVycyA9IGpRdWVyeS5leHRlbmQoe30sIG9NYWluTW9kZWwub1JlcXVlc3Rvci5tSGVhZGVycyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbmVlZCB0byBjbGVhbnVwIHRoZSBhcHBsaWNhdGlvbiAvIGhhbmRsZSB0aGUgZGlydHkgb2JqZWN0IHdlIG5lZWQgdG8gY2FsbCBvdXIgY2xlYW51cCBiZWZvcmUgdGhlIG1vZGVscyBhcmUgZGVzdHJveWVkXG5cdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpPy5iZWZvcmVFeGl0KCk7XG5cdFx0c3VwZXIuZGVzdHJveSguLi5hcmdzKTtcblx0XHRpZiAob0hlYWRlcnMgJiYgb01haW5Nb2RlbC5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMgPSBvSGVhZGVycztcblx0XHR9XG5cdH1cblx0Z2V0Q29tcG9uZW50RGF0YSgpOiBhbnkge1xuXHRcdHJldHVybiBzdXBlci5nZXRDb21wb25lbnREYXRhKCk7XG5cdH1cblx0Z2V0Um91dGluZ1NlcnZpY2UoKTogUm91dGluZ1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBSb3V0aW5nU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXHRnZXRTaGVsbFNlcnZpY2VzKCk6IElTaGVsbFNlcnZpY2VzIHtcblx0XHRyZXR1cm4ge30gYXMgSVNoZWxsU2VydmljZXM7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblx0Z2V0TmF2aWdhdGlvblNlcnZpY2UoKTogTmF2aWdhdGlvblNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBOYXZpZ2F0aW9uU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXHRnZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTogU2lkZUVmZmVjdHNTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgU2lkZUVmZmVjdHNTZXJ2aWNlO1xuXHR9XG5cdGdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZTtcblx0fVxuXG5cdGdldFN0YXJ0dXBQYXJhbWV0ZXJzKCkge1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gdGhpcy5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgb1N0YXJ0VXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9TdGFydFVwUGFyYW1ldGVycyk7XG5cdH1cblx0cmVzdG9yZSgpIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyByZXN0b3JlZFxuXHRcdCh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkudmlld1N0YXRlLm9uUmVzdG9yZSgpO1xuXHR9XG5cdHN1c3BlbmQoKSB7XG5cdFx0Ly8gY2FsbGVkIGJ5IEZMUCB3aGVuIGFwcCBzYXAta2VlcC1hbGl2ZSBpcyBlbmFibGVkIGFuZCBhcHAgaXMgc3VzcGVuZGVkXG5cdFx0KHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55KS52aWV3U3RhdGUub25TdXNwZW5kKCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwQ29tcG9uZW50O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0VBdUJBLElBQU1BLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUE1QjtFQUVBLElBQU1FLE9BQU8sR0FBRztJQUNmQyxHQUFHLEVBQUU7TUFDSkMsUUFBUSxFQUFFLDBCQUROO01BRUpDLHNCQUFzQixFQUFFLHlDQUZwQjtNQUdKQyxXQUFXLEVBQUU7SUFIVCxDQURVO0lBTWZDLFlBQVksRUFBRTtNQUNiSCxRQUFRLEVBQUUsbUNBREc7TUFFYkMsc0JBQXNCLEVBQUUsa0RBRlg7TUFHYkMsV0FBVyxFQUFFO0lBSEE7RUFOQyxDQUFoQjtFQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O01BcUVNRSxZLFdBcEVMQyxjQUFjLENBQUMsMEJBQUQsRUFBNkI7SUFDM0NDLFVBQVUsRUFBRSxDQUFDLG1DQUFELENBRCtCO0lBRTNDQyxNQUFNLEVBQUU7TUFDUEMsU0FBUyxFQUFFO0lBREosQ0FGbUM7SUFLM0NDLFFBQVEsRUFBRTtNQUNULFdBQVc7UUFDVkMsUUFBUSxFQUFFO1VBQ1RDLGFBQWEsRUFBRTtZQUNkQyxXQUFXLEVBQUUsMkNBREM7WUFFZCxXQUFXLFNBRkc7WUFHZCxZQUFZO2NBQ1gsV0FBVyxDQUFDLDJCQUFELENBREE7Y0FFWCxhQUFhO1lBRkY7VUFIRSxDQUROO1VBU1RDLGNBQWMsRUFBRTtZQUNmRCxXQUFXLEVBQUUscUNBREU7WUFFZkUsT0FBTyxFQUFFO1VBRk0sQ0FUUDtVQWFUQyxhQUFhLEVBQUU7WUFDZEgsV0FBVyxFQUFFLG9DQURDO1lBRWRFLE9BQU8sRUFBRTtVQUZLLENBYk47VUFpQlRFLGNBQWMsRUFBRTtZQUNmSixXQUFXLEVBQUU7VUFERSxDQWpCUDtVQW9CVEssaUJBQWlCLEVBQUU7WUFDbEJMLFdBQVcsRUFBRSx3Q0FESztZQUVsQkUsT0FBTyxFQUFFO1VBRlMsQ0FwQlY7VUF3QlRJLHVCQUF1QixFQUFFO1lBQ3hCTixXQUFXLEVBQUUseUNBRFc7WUFFeEJFLE9BQU8sRUFBRTtVQUZlLENBeEJoQjtVQTRCVEssa0JBQWtCLEVBQUU7WUFDbkJQLFdBQVcsRUFBRSx5Q0FETTtZQUVuQkUsT0FBTyxFQUFFO1VBRlUsQ0E1Qlg7VUFnQ1RNLHFCQUFxQixFQUFFO1lBQ3RCUixXQUFXLEVBQUUsNENBRFM7WUFFdEJFLE9BQU8sRUFBRTtVQUZhO1FBaENkLENBREE7UUFzQ1ZPLFFBQVEsRUFBRTtVQUNUQyxRQUFRLEVBQUV4QixPQUFPLENBQUNLLFlBQVIsQ0FBcUJILFFBRHRCO1VBRVR1QixJQUFJLEVBQUUsS0FGRztVQUdUQyxLQUFLLEVBQUUsSUFIRTtVQUlUQyxFQUFFLEVBQUU7UUFKSyxDQXRDQTtRQTRDVkMsT0FBTyxFQUFFO1VBQ1JuQixNQUFNLEVBQUU7WUFDUG9CLFNBQVMsRUFBRSxZQURKO1lBRVBDLFdBQVcsRUFBRTlCLE9BQU8sQ0FBQ0ssWUFBUixDQUFxQkQsV0FGM0I7WUFHUDJCLFFBQVEsRUFBRSxLQUhIO1lBSVBDLGtCQUFrQixFQUFFLE9BSmI7WUFLUE4sS0FBSyxFQUFFLElBTEE7WUFNUE8sZ0JBQWdCLEVBQUU7Y0FDakJDLGNBQWMsRUFBRTtZQURDO1VBTlg7UUFEQTtNQTVDQztJQURGLENBTGlDO0lBZ0UzQ0MsVUFBVSxFQUFFLGdEQWhFK0I7SUFrRTNDcEMsT0FBTyxFQUFFO0VBbEVrQyxDQUE3QixDOzs7Ozs7Ozs7OztZQTJFTnFDLFcsR0FBc0J0QyxXQUFXLENBQUN1QyxNOzs7Ozs7SUFFMUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtXQUVDQyxhLEdBQUEseUJBQWdCO01BQUE7O01BQ2YsSUFBTUMsWUFBWSxHQUFHLEtBQUtDLGdCQUFMLENBQXNCLFVBQXRCLENBQXJCO01BQ0EsT0FDQyxDQUFBRCxZQUFZLFNBQVosSUFBQUEsWUFBWSxXQUFaLHFDQUFBQSxZQUFZLENBQUVoQixRQUFkLGdGQUF3QkMsUUFBeEIsTUFBcUN4QixPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBakQsSUFDQSxDQUFBcUMsWUFBWSxTQUFaLElBQUFBLFlBQVksV0FBWixzQ0FBQUEsWUFBWSxDQUFFaEIsUUFBZCxrRkFBd0JDLFFBQXhCLE1BQXFDeEIsT0FBTyxDQUFDQyxHQUFSLENBQVlFLHNCQUZsRDtJQUlBO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNDc0MsYyxHQUFBLDBCQUE4QjtNQUM3QixPQUFPLEtBQUtDLGFBQVo7SUFDQTtJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ0Msa0IsR0FBQSw4QkFBcUI7TUFDcEIsT0FBTyxLQUFLQyxpQkFBWjtJQUNBO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNDQyxxQixHQUFBLGlDQUF3QztNQUN2QyxPQUFRLEtBQUtDLGNBQUwsRUFBRCxDQUFnQ0MsYUFBaEMsRUFBUDtJQUNBO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNDQyxnQixHQUFBLDRCQUFtQjtNQUNsQixPQUFRLEtBQUtGLGNBQUwsRUFBRCxDQUFnQ0csVUFBaEMsR0FBNkMsQ0FBN0MsQ0FBUDtJQUNBO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ0MsYyxHQUFBLDBCQUF5QjtNQUN4QixPQUFPLEtBQUtkLFdBQVo7SUFDQTtJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7OztXQUNDZSxvQixHQUFBLGdDQUF1QjtNQUN0QixLQUFLZixXQUFMLEdBQW1CdEMsV0FBVyxDQUFDc0QsTUFBL0I7SUFDQTtJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7OztXQUNDQyx3QixHQUFBLG9DQUEyQjtNQUMxQixLQUFLakIsV0FBTCxHQUFtQnRDLFdBQVcsQ0FBQ3dELFVBQS9CO0lBQ0E7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ0Msc0IsR0FBQSxrQ0FBeUI7TUFDeEIsS0FBS25CLFdBQUwsR0FBbUJ0QyxXQUFXLENBQUMwRCxRQUEvQjtJQUNBLEM7O1dBRURDLEksR0FBQSxnQkFBTztNQUFBOztNQUNOLElBQU1DLE9BQU8sR0FBRyxJQUFJQyxTQUFKLENBQWM7UUFDN0JDLFFBQVEsRUFBRTdELE9BQU8sQ0FBQzhELFFBQVIsQ0FBaUJDLE9BREU7UUFFN0JDLFVBQVUsRUFBRSxLQUZpQjtRQUc3QkMsV0FBVyxFQUFFakUsT0FBTyxDQUFDa0UsV0FBUixDQUFvQkMsS0FISjtRQUk3QkMsSUFBSSxFQUFFLEtBSnVCO1FBSzdCQyxTQUFTLEVBQUUsRUFMa0I7UUFNN0JDLEtBQUssRUFBRTtNQU5zQixDQUFkLENBQWhCO01BUUEsSUFBTUMsY0FBYyxHQUFHLElBQUlYLFNBQUosQ0FBYztRQUNwQ1UsS0FBSyxFQUFFO01BRDZCLENBQWQsQ0FBdkIsQ0FUTSxDQVlOOztNQUNBWCxPQUFPLENBQUNhLHFCQUFSLENBQThCLFFBQTlCLEVBYk0sQ0FjTjs7TUFDQUMsV0FBVyxDQUFDQyxrQkFBWixDQUErQmYsT0FBL0IsRUFBd0MzRCxPQUF4QztNQUNBeUUsV0FBVyxDQUFDRSx3QkFBWixDQUFxQ0osY0FBckM7TUFFQSxLQUFLSyxRQUFMLENBQWNqQixPQUFkLEVBQXVCLElBQXZCO01BQ0EsS0FBS2lCLFFBQUwsQ0FBY0wsY0FBZCxFQUE4QixVQUE5QjtNQUVBLEtBQUtNLGtCQUFMLEdBQTBCLEtBQUtBLGtCQUFMLEtBQTRCQyxTQUE1QixHQUF3QyxLQUFLRCxrQkFBN0MsR0FBa0UsSUFBNUY7TUFDQSxLQUFLbEMsYUFBTCxHQUFxQixJQUFJb0MsV0FBSixFQUFyQjtNQUNBLEtBQUtsQyxpQkFBTCxHQUF5QixJQUFJbUMsZUFBSixDQUFvQixJQUFwQixDQUF6QjtNQUNBLEtBQUtDLGFBQUwsR0FBcUIsSUFBSUMsV0FBSixFQUFyQjtNQUVBLElBQU1DLE1BQU0sR0FBRyxLQUFLQyxRQUFMLEVBQWY7O01BQ0EsSUFBSUQsTUFBSixhQUFJQSxNQUFKLDhCQUFJQSxNQUFNLENBQUVFLEdBQVosd0NBQUksaUJBQUFGLE1BQU0sRUFBUSxrQ0FBUixDQUFWLEVBQXVEO1FBQ3RELEtBQUtHLGVBQUwsR0FBdUJILE1BQU0sQ0FBQ0ksWUFBUCxHQUFzQkMsYUFBdEIsQ0FBb0Msb0JBQXBDLENBQXZCO01BQ0EsQ0FGRCxNQUVPO1FBQ047UUFDQSxLQUFLRixlQUFMLEdBQXVCRyxPQUFPLENBQUNDLE9BQVIsRUFBdkI7TUFDQTs7TUFFRCxJQUFNbEQsWUFBWSxHQUFJLEtBQUttRCxXQUFMLEVBQUQsQ0FBNEIsU0FBNUIsQ0FBckI7O01BQ0EsSUFBSW5ELFlBQUosYUFBSUEsWUFBSix5Q0FBSUEsWUFBWSxDQUFFaEIsUUFBbEIsbURBQUksdUJBQXdCQyxRQUE1QixFQUFzQztRQUNyQztRQUVBO1FBQ0EsSUFBSWUsWUFBWSxDQUFDaEIsUUFBYixDQUFzQkMsUUFBdEIsS0FBbUN4QixPQUFPLENBQUNDLEdBQVIsQ0FBWUUsc0JBQW5ELEVBQTJFO1VBQzFFb0MsWUFBWSxDQUFDaEIsUUFBYixDQUFzQkMsUUFBdEIsR0FBaUN4QixPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBN0M7UUFDQSxDQUZELE1BRU8sSUFBSSxDQUFBcUMsWUFBWSxTQUFaLElBQUFBLFlBQVksV0FBWixZQUFBQSxZQUFZLENBQUVoQixRQUFkLENBQXVCQyxRQUF2QixNQUFvQ3hCLE9BQU8sQ0FBQ0ssWUFBUixDQUFxQkYsc0JBQTdELEVBQXFGO1VBQzNGb0MsWUFBWSxDQUFDaEIsUUFBYixDQUFzQkMsUUFBdEIsR0FBaUN4QixPQUFPLENBQUNLLFlBQVIsQ0FBcUJILFFBQXREO1FBQ0E7O1FBRUQsSUFDQ3FDLFlBQVksQ0FBQ2hCLFFBQWIsQ0FBc0JDLFFBQXRCLEtBQW1DeEIsT0FBTyxDQUFDQyxHQUFSLENBQVlDLFFBQS9DLElBQ0FxQyxZQUFZLENBQUNYLE9BQWIsQ0FBcUJuQixNQUFyQixDQUE0QnFCLFdBQTVCLEtBQTRDOUIsT0FBTyxDQUFDQyxHQUFSLENBQVlHLFdBRnpELEVBR0U7VUFDRHVGLEdBQUcsQ0FBQ0MsSUFBSiw0QkFBNEI1RixPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBeEMsaUNBQXFFRixPQUFPLENBQUNDLEdBQVIsQ0FBWUcsV0FBakY7UUFDQSxDQUxELE1BS08sSUFDTm1DLFlBQVksQ0FBQ2hCLFFBQWIsQ0FBc0JDLFFBQXRCLEtBQW1DeEIsT0FBTyxDQUFDSyxZQUFSLENBQXFCSCxRQUF4RCxJQUNBcUMsWUFBWSxDQUFDWCxPQUFiLENBQXFCbkIsTUFBckIsQ0FBNEJxQixXQUE1QixLQUE0QzlCLE9BQU8sQ0FBQ0ssWUFBUixDQUFxQkQsV0FGM0QsRUFHTDtVQUNEdUYsR0FBRyxDQUFDQyxJQUFKLDRCQUE0QjVGLE9BQU8sQ0FBQ0ssWUFBUixDQUFxQkgsUUFBakQsaUNBQThFRixPQUFPLENBQUNLLFlBQVIsQ0FBcUJELFdBQW5HO1FBQ0EsQ0FMTSxNQUtBLElBQUltQyxZQUFZLENBQUNoQixRQUFiLENBQXNCQyxRQUF0QixDQUErQnFFLE9BQS9CLENBQXVDLHNCQUF2QyxNQUFtRSxDQUFDLENBQXhFLEVBQTJFO1VBQ2pGLE1BQU1DLEtBQUssQ0FDVixtSEFDeUJ2RCxZQUFZLENBQUNoQixRQUFiLENBQXNCQyxRQUQvQyxjQUMyRGUsWUFBWSxDQUFDWCxPQUFiLENBQXFCbkIsTUFBckIsQ0FBNEJxQixXQUR2RixzREFHVTlCLE9BQU8sQ0FBQ0ssWUFBUixDQUFxQkgsUUFIL0IsY0FHMkNGLE9BQU8sQ0FBQ0ssWUFBUixDQUFxQkQsV0FIaEUsMkJBSVVKLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxRQUp0QixjQUlrQ0YsT0FBTyxDQUFDQyxHQUFSLENBQVlHLFdBSjlDLE1BRFUsQ0FBWDtRQU9BLENBUk0sTUFRQTtVQUNOdUYsR0FBRyxDQUFDQyxJQUFKLDRCQUE0QnJELFlBQVksQ0FBQ2hCLFFBQWIsQ0FBc0JDLFFBQWxELGlDQUErRXhCLE9BQU8sQ0FBQ0ssWUFBUixDQUFxQkQsV0FBcEc7UUFDQTtNQUNELENBbEVLLENBb0VOO01BQ0E7OztNQUNBMkYscUJBQXFCLENBQUNDLHdCQUF0QixHQXRFTSxDQXdFTjtNQUNBOztNQUVBLHVCQUFNdkMsSUFBTjs7TUFDQW5ELFlBQVksQ0FBQzJGLFdBQWIsQ0FBeUIsS0FBS0MsS0FBTCxFQUF6QixJQUF5QyxJQUF6QztJQUNBLEM7O1dBQ0RDLGlCLEdBQUEsNkJBQW9CO01BQUE7O01BQ25CO01BQ0E7TUFDQSxJQUFNQyw4QkFBOEIsR0FBRyxZQUFNO1FBQzVDLE1BQUksQ0FBQ2YsZUFBTCxDQUNFZ0IsSUFERixDQUNPLFlBQU07VUFDWCxJQUFLLE1BQUksQ0FBQ3hELHFCQUFMLEVBQUQsQ0FBc0N5RCxtQkFBMUMsRUFBK0Q7WUFDN0QsTUFBSSxDQUFDekQscUJBQUwsRUFBRCxDQUFzQ3lELG1CQUF0QztVQUNBOztVQUNELE1BQUksQ0FBQ0MsU0FBTCxHQUFpQkMsVUFBakI7O1VBQ0EsTUFBSSxDQUFDL0QsY0FBTCxHQUFzQmdCLElBQXRCLENBQTJCLE1BQTNCLEVBQWlDLE1BQUksQ0FBQ25CLGFBQUwsRUFBakM7UUFDQSxDQVBGLEVBUUVtRSxLQVJGLENBUVEsVUFBQ0MsS0FBRCxFQUFnQjtVQUN0QixJQUFNQyxlQUFlLEdBQUdDLElBQUksQ0FBQ0Msd0JBQUwsQ0FBOEIsYUFBOUIsQ0FBeEI7O1VBRUMsTUFBSSxDQUFDaEUscUJBQUwsRUFBRCxDQUFzQ2lFLGtCQUF0QyxDQUNDSCxlQUFlLENBQUNJLE9BQWhCLENBQXdCLGlEQUF4QixDQURELEVBRUM7WUFDQ0MsS0FBSyxFQUFFTCxlQUFlLENBQUNJLE9BQWhCLENBQXdCLHNCQUF4QixDQURSO1lBRUNFLFdBQVcsRUFBRVAsS0FBSyxDQUFDUSxPQUZwQjtZQUdDQyxRQUFRLEVBQUU7VUFIWCxDQUZEO1FBUUEsQ0FuQkY7TUFvQkEsQ0FyQkQ7O01BdUJBLElBQUksS0FBS3ZDLGtCQUFULEVBQTZCO1FBQzVCLE9BQU8sS0FBS3dDLGlCQUFMLEdBQ0xDLGlCQURLLEdBRUxoQixJQUZLLENBRUEsWUFBTTtVQUNYLElBQUksTUFBSSxDQUFDeEQscUJBQUwsRUFBSixFQUFrQztZQUNqQyxPQUFPdUQsOEJBQThCLEVBQXJDO1VBQ0EsQ0FGRCxNQUVPO1lBQ0wsTUFBSSxDQUFDdEQsY0FBTCxFQUFELENBQStCd0UsZUFBL0IsQ0FBK0MsWUFBWTtjQUMxRGxCLDhCQUE4QjtZQUM5QixDQUZEO1VBR0E7UUFDRCxDQVZLLEVBV0xLLEtBWEssQ0FXQyxVQUFVYyxHQUFWLEVBQW9CO1VBQzFCNUIsR0FBRyxDQUFDZSxLQUFKLDZDQUErQ2EsR0FBL0M7UUFDQSxDQWJLLENBQVA7TUFjQTtJQUNELEM7O1dBQ0RDLEksR0FBQSxnQkFBTztNQUNOLEtBQUs1RSxpQkFBTCxDQUF1QjZFLE9BQXZCOztNQUNBLEtBQUsvRSxhQUFMLENBQW1CK0UsT0FBbkIsR0FGTSxDQUdOO01BQ0E7OztNQUNBLE9BQU8sS0FBSzdFLGlCQUFaLENBTE0sQ0FNTjtNQUNBOztNQUNBLE9BQU8sS0FBS0YsYUFBWjtNQUNBZ0Ysb0JBQW9CLENBQUMsS0FBS3BDLFlBQUwsRUFBRCxDQUFwQjtNQUNBLEtBQUtILFFBQUwsQ0FBYyxJQUFkLEVBQW9Cc0MsT0FBcEI7SUFDQSxDOztXQUNEbkMsWSxHQUFBLHdCQUErQjtNQUM5QixPQUFPLEtBQUtILFFBQUwsR0FBZ0JHLFlBQWhCLEVBQVA7SUFDQSxDOztXQUNEcUMsYyxHQUFBLDBCQUFpQjtNQUNoQixPQUFPLEtBQUszQyxhQUFaO0lBQ0EsQzs7V0FDRHlDLE8sR0FBQSxtQkFBd0I7TUFBQTs7TUFDdkI7TUFDQSxJQUFJO1FBQ0g7UUFDQTtRQUVBRyxlQUFlLENBQUNDLHlCQUFoQjtRQUVBLE9BQU92SCxZQUFZLENBQUMyRixXQUFiLENBQXlCLEtBQUtDLEtBQUwsRUFBekIsQ0FBUCxDQU5HLENBUUg7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBQ0EsT0FBUTRCLE1BQUQsQ0FBZ0JDLFFBQXZCO01BQ0EsQ0FoQkQsQ0FnQkUsT0FBT0MsQ0FBUCxFQUFVO1FBQ1hyQyxHQUFHLENBQUNDLElBQUosQ0FBU29DLENBQVQ7TUFDQSxDQXBCc0IsQ0FzQnZCO01BQ0E7TUFFQTtNQUNBOzs7TUFDQSxJQUFNQyxVQUFVLEdBQUksSUFBRCxDQUFjQyxPQUFkLENBQXNCckQsU0FBdEIsQ0FBbkI7TUFDQSxJQUFJc0QsUUFBSjs7TUFDQSxJQUFJRixVQUFVLENBQUNHLFVBQWYsRUFBMkI7UUFDMUJELFFBQVEsR0FBR0UsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQkwsVUFBVSxDQUFDRyxVQUFYLENBQXNCRyxRQUF4QyxDQUFYO01BQ0EsQ0EvQnNCLENBaUN2Qjs7O01BQ0EsOEJBQUtuQixpQkFBTCxrRkFBMEJvQixVQUExQjs7TUFsQ3VCLG1DQUFiQyxJQUFhO1FBQWJBLElBQWE7TUFBQTs7TUFtQ3ZCLGdEQUFNaEIsT0FBTixrREFBaUJnQixJQUFqQjs7TUFDQSxJQUFJTixRQUFRLElBQUlGLFVBQVUsQ0FBQ0csVUFBM0IsRUFBdUM7UUFDdENILFVBQVUsQ0FBQ0csVUFBWCxDQUFzQkcsUUFBdEIsR0FBaUNKLFFBQWpDO01BQ0E7SUFDRCxDOztXQUNETyxnQixHQUFBLDRCQUF3QjtNQUN2Qiw4QkFBYUEsZ0JBQWI7SUFDQSxDOztXQUNEdEIsaUIsR0FBQSw2QkFBb0M7TUFDbkMsT0FBTyxFQUFQLENBRG1DLENBQ047SUFDN0IsQzs7V0FDRHVCLGdCLEdBQUEsNEJBQW1DO01BQ2xDLE9BQU8sRUFBUCxDQURrQyxDQUNMO0lBQzdCLEM7O1dBQ0RDLG9CLEdBQUEsZ0NBQTBDO01BQ3pDLE9BQU8sRUFBUCxDQUR5QyxDQUNUO0lBQ2hDLEM7O1dBQ0RDLHFCLEdBQUEsaUNBQTRDO01BQzNDLE9BQU8sRUFBUDtJQUNBLEM7O1dBQ0RDLDBCLEdBQUEsc0NBQTZEO01BQzVELE9BQU8sRUFBUDtJQUNBLEM7O1dBRURDLG9CLEdBQUEsZ0NBQXVCO01BQ3RCLElBQU1DLGNBQWMsR0FBRyxLQUFLTixnQkFBTCxFQUF2QjtNQUNBLElBQU1PLGtCQUFrQixHQUFJRCxjQUFjLElBQUlBLGNBQWMsQ0FBQ0UsaUJBQWxDLElBQXdELEVBQW5GO01BQ0EsT0FBTzFELE9BQU8sQ0FBQ0MsT0FBUixDQUFnQndELGtCQUFoQixDQUFQO0lBQ0EsQzs7V0FDREUsTyxHQUFBLG1CQUFVO01BQ1Q7TUFDQyxLQUFLdEcscUJBQUwsRUFBRCxDQUFzQ3VHLFNBQXRDLENBQWdEQyxTQUFoRDtJQUNBLEM7O1dBQ0RDLE8sR0FBQSxtQkFBVTtNQUNUO01BQ0MsS0FBS3pHLHFCQUFMLEVBQUQsQ0FBc0N1RyxTQUF0QyxDQUFnREcsU0FBaEQ7SUFDQSxDOzs7SUF0VXlCQyxXLFdBQ25CdkQsVyxHQUE0QyxFO1NBd1VyQzNGLFkifQ==
|
|
442
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJBcHBDb21wb25lbnQiLCJkZWZpbmVVSTVDbGFzcyIsImludGVyZmFjZXMiLCJjb25maWciLCJmdWxsV2lkdGgiLCJtYW5pZmVzdCIsInNlcnZpY2VzIiwicmVzb3VyY2VNb2RlbCIsImZhY3RvcnlOYW1lIiwic3RhcnR1cCIsInNldHRpbmdzIiwiYnVuZGxlcyIsIm1vZGVsTmFtZSIsInJvdXRpbmdTZXJ2aWNlIiwic2hlbGxTZXJ2aWNlcyIsIlNoZWxsVUlTZXJ2aWNlIiwibmF2aWdhdGlvblNlcnZpY2UiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsInNpZGVFZmZlY3RzU2VydmljZSIsImFzeW5jQ29tcG9uZW50U2VydmljZSIsInJvb3RWaWV3Iiwidmlld05hbWUiLCJ0eXBlIiwiYXN5bmMiLCJpZCIsInJvdXRpbmciLCJjb250cm9sSWQiLCJyb3V0ZXJDbGFzcyIsInZpZXdUeXBlIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwiY29udGFpbmVyT3B0aW9ucyIsInByb3BhZ2F0ZU1vZGVsIiwiZGVzaWdudGltZSIsInN0YXJ0dXBNb2RlIiwiTm9ybWFsIiwiX2lzRmNsRW5hYmxlZCIsIm9NYW5pZmVzdFVJNSIsImdldE1hbmlmZXN0RW50cnkiLCJpbml0aWFsaXplRmVhdHVyZVRvZ2dsZXMiLCJjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbiIsInBhZ2VJZCIsInBhdGgiLCJ2YWx1ZSIsImNoYW5nZUNvbmZpZ3VyYXRpb24iLCJnZXRNYW5pZmVzdCIsImdldFJvdXRlclByb3h5IiwiX29Sb3V0ZXJQcm94eSIsImdldEFwcFN0YXRlSGFuZGxlciIsIl9vQXBwU3RhdGVIYW5kbGVyIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRhaW5lciIsImdldENvbnRlbnQiLCJnZXRTdGFydHVwTW9kZSIsInNldFN0YXJ0dXBNb2RlQ3JlYXRlIiwiQ3JlYXRlIiwic2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlIiwiQXV0b0NyZWF0ZSIsInNldFN0YXJ0dXBNb2RlRGVlcGxpbmsiLCJEZWVwbGluayIsImluaXQiLCJ1aU1vZGVsIiwiSlNPTk1vZGVsIiwiZWRpdE1vZGUiLCJFZGl0TW9kZSIsIkRpc3BsYXkiLCJpc0VkaXRhYmxlIiwiZHJhZnRTdGF0dXMiLCJEcmFmdFN0YXR1cyIsIkNsZWFyIiwiYnVzeSIsImJ1c3lMb2NhbCIsInBhZ2VzIiwib0ludGVybmFsTW9kZWwiLCJzZXREZWZhdWx0QmluZGluZ01vZGUiLCJNb2RlbEhlbHBlciIsImVuaGFuY2VVaUpTT05Nb2RlbCIsImVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbCIsInNldE1vZGVsIiwiYkluaXRpYWxpemVSb3V0aW5nIiwidW5kZWZpbmVkIiwiUm91dGVyUHJveHkiLCJBcHBTdGF0ZUhhbmRsZXIiLCJfb0RpYWdub3N0aWNzIiwiRGlhZ25vc3RpY3MiLCJvTW9kZWwiLCJnZXRNb2RlbCIsImlzQSIsImVudGl0eUNvbnRhaW5lciIsImdldE1ldGFNb2RlbCIsInJlcXVlc3RPYmplY3QiLCJQcm9taXNlIiwicmVzb2x2ZSIsIkxvZyIsImluZm8iLCJpbmRleE9mIiwiRXJyb3IiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJhZGRTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJpbnN0YW5jZU1hcCIsImdldElkIiwib25TZXJ2aWNlc1N0YXJ0ZWQiLCJmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24iLCJ0aGVuIiwiYXR0YWNoUm91dGVNYXRjaGVycyIsImdldFJvdXRlciIsImluaXRpYWxpemUiLCJjYXRjaCIsImVycm9yIiwib1Jlc291cmNlQnVuZGxlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImRpc3BsYXlFcnJvclBhZ2UiLCJnZXRUZXh0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm1lc3NhZ2UiLCJGQ0xMZXZlbCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiaW5pdGlhbGl6ZVJvdXRpbmciLCJhdHRhY2hBZnRlckluaXQiLCJlcnIiLCJleGl0IiwiZGVzdHJveSIsImRlbGV0ZU1vZGVsQ2FjaGVEYXRhIiwiZ2V0RGlhZ25vc3RpY3MiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwiVmFsdWVMaXN0SGVscGVyIiwiaW5pdGlhbGl6ZUNhY2hlZFZhbHVlSGVscCIsIndpbmRvdyIsIl9yb3V0aW5nIiwiZSIsIm9NYWluTW9kZWwiLCJvTW9kZWxzIiwib0hlYWRlcnMiLCJvUmVxdWVzdG9yIiwialF1ZXJ5IiwiZXh0ZW5kIiwibUhlYWRlcnMiLCJiZWZvcmVFeGl0IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwicmVzdG9yZSIsInZpZXdTdGF0ZSIsIm9uUmVzdG9yZSIsInN1c3BlbmQiLCJvblN1c3BlbmQiLCJVSUNvbXBvbmVudCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQXBwQ29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgQXBwU3RhdGVIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9BcHBTdGF0ZUhhbmRsZXJcIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IHR5cGUgeyBDb250ZW50RGVuc2l0aWVzVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBjaGFuZ2VDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL21hbmlmZXN0TWVyZ2VyL0NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgdHlwZSBSb290Vmlld0Jhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL05hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgVUlDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL1VJQ29tcG9uZW50XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgeyBkZWxldGVNb2RlbENhY2hlRGF0YSB9IGZyb20gXCIuL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCIuL2hlbHBlcnMvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5cbmNvbnN0IFN0YXJ0dXBNb2RlID0gbGlicmFyeS5TdGFydHVwTW9kZTtcblxuY29uc3QgTkFWQ09ORiA9IHtcblx0RkNMOiB7XG5cdFx0VklFV05BTUU6IFwic2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsXCIsXG5cdFx0VklFV05BTUVfQ09NUEFUSUJJTElUWTogXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5GY2xcIixcblx0XHRST1VURVJDTEFTUzogXCJzYXAuZi5yb3V0aW5nLlJvdXRlclwiXG5cdH0sXG5cdE5BVkNPTlRBSU5FUjoge1xuXHRcdFZJRVdOQU1FOiBcInNhcC5mZS5jb3JlLnJvb3RWaWV3Lk5hdkNvbnRhaW5lclwiLFxuXHRcdFZJRVdOQU1FX0NPTVBBVElCSUxJVFk6IFwic2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuTmF2Q29udGFpbmVyXCIsXG5cdFx0Uk9VVEVSQ0xBU1M6IFwic2FwLm0ucm91dGluZy5Sb3V0ZXJcIlxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBNYW5pZmVzdENvbnRlbnRBcHAgPSB7XG5cdGNyb3NzTmF2aWdhdGlvbj86IHtcblx0XHRvdXRib3VuZHM/OiBSZWNvcmQ8XG5cdFx0XHRzdHJpbmcsXG5cdFx0XHR7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRwYXJhbWV0ZXJzOiBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0Pjtcblx0fTtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdHN1YlRpdGxlPzogc3RyaW5nO1xuXHRpY29uPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RDb250ZW50VUk1ID0ge1xuXHRjb250ZW50RGVuc2l0aWVzPzogQ29udGVudERlbnNpdGllc1R5cGU7XG5cdHBhZ2VSZWFkeVRpbWVvdXQ/OiBudW1iZXI7XG5cdHJvb3RWaWV3Pzoge1xuXHRcdHZpZXdOYW1lOiBzdHJpbmc7XG5cdH07XG5cdHJvdXRpbmc/OiB7XG5cdFx0Y29uZmlnPzoge1xuXHRcdFx0cm91dGVyQ2xhc3M6IHN0cmluZztcblx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHR9O1xuXHRcdHJvdXRlczoge1xuXHRcdFx0cGF0dGVybjogc3RyaW5nO1xuXHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0dGFyZ2V0OiBzdHJpbmc7XG5cdFx0fVtdO1xuXHRcdHRhcmdldHM/OiBSZWNvcmQ8XG5cdFx0XHRzdHJpbmcsXG5cdFx0XHR7XG5cdFx0XHRcdGlkOiBzdHJpbmc7XG5cdFx0XHRcdG5hbWU6IHN0cmluZztcblx0XHRcdFx0b3B0aW9ucz86IHtcblx0XHRcdFx0XHRzZXR0aW5ncz86IG9iamVjdDtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHQ+O1xuXHR9O1xuXHRtb2RlbHM6IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0dHlwZT86IHN0cmluZztcblx0XHRcdGRhdGFTb3VyY2U/OiBzdHJpbmc7XG5cdFx0XHRzZXR0aW5ncz86IG9iamVjdDtcblx0XHR9XG5cdD47XG59O1xuXG5leHBvcnQgdHlwZSBNYW5pZmVzdENvbnRlbnQgPSB7XG5cdFwic2FwLmFwcFwiPzogTWFuaWZlc3RDb250ZW50QXBwO1xuXHRcInNhcC51aTVcIj86IE1hbmlmZXN0Q29udGVudFVJNTtcblx0XCJzYXAuZmVcIj86IHtcblx0XHRmb3JtPzoge1xuXHRcdFx0cmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdD86IGJvb2xlYW47XG5cdFx0fTtcblx0fTtcbn07XG5leHBvcnQgdHlwZSBDb21wb25lbnREYXRhID0ge1xuXHRzdGFydHVwUGFyYW1ldGVycz86IHtcblx0XHRwcmVmZXJyZWRNb2RlPzogc3RyaW5nW107XG5cdH0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duW10+O1xufTtcbi8qKlxuICogTWFpbiBjbGFzcyBmb3IgY29tcG9uZW50cyB1c2VkIGZvciBhbiBhcHBsaWNhdGlvbiBpbiBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKlxuICogQXBwbGljYXRpb24gZGV2ZWxvcGVycyB1c2luZyB0aGUgdGVtcGxhdGVzIGFuZCBidWlsZGluZyBibG9ja3MgcHJvdmlkZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzIHNob3VsZCBjcmVhdGUgdGhlaXIgYXBwcyBieSBleHRlbmRpbmcgdGhpcyBjb21wb25lbnQuXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBzZXJ2aWNlcyB0aGF0IHlvdSBuZWVkIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0ZW1wbGF0ZXMgdG8gd29yayBwcm9wZXJseSBhcmUgc3RhcnRlZC5cbiAqXG4gKiBXaGVuIHlvdSB1c2Ugc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFzIHRoZSBiYXNlIGNvbXBvbmVudCwgeW91IGFsc28gbmVlZCB0byB1c2UgYSByb290Vmlldy4gU0FQIEZpb3JpIGVsZW1lbnRzIHByb3ZpZGVzIHR3byBvcHRpb25zOiA8YnIvPlxuICogIC0gc2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyIHdoZW4gdXNpbmcgc2FwLm0ucm91dGluZy5Sb3V0ZXIgPGJyLz5cbiAqICAtIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbCB3aGVuIHVzaW5nIHNhcC5mLnJvdXRpbmcuUm91dGVyIChGQ0wgdXNlIGNhc2UpIDxici8+XG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiLCB7XG5cdGludGVyZmFjZXM6IFtcInNhcC51aS5jb3JlLklBc3luY0NvbnRlbnRDcmVhdGlvblwiXSxcblx0Y29uZmlnOiB7XG5cdFx0ZnVsbFdpZHRoOiB0cnVlXG5cdH0sXG5cdG1hbmlmZXN0OiB7XG5cdFx0XCJzYXAudWk1XCI6IHtcblx0XHRcdHNlcnZpY2VzOiB7XG5cdFx0XHRcdHJlc291cmNlTW9kZWw6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5SZXNvdXJjZU1vZGVsU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiLFxuXHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRidW5kbGVzOiBbXCJzYXAuZmUuY29yZS5tZXNzYWdlYnVuZGxlXCJdLFxuXHRcdFx0XHRcdFx0bW9kZWxOYW1lOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJvdXRpbmdTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuUm91dGluZ1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGVsbFNlcnZpY2VzOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuU2hlbGxTZXJ2aWNlc1wiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFNoZWxsVUlTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLnVzaGVsbC51aTVzZXJ2aWNlLlNoZWxsVUlTZXJ2aWNlXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0bmF2aWdhdGlvblNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVudmlyb25tZW50Q2FwYWJpbGl0aWVzOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuRW52aXJvbm1lbnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0c2lkZUVmZmVjdHNTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuU2lkZUVmZmVjdHNTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXN5bmNDb21wb25lbnRTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQXN5bmNDb21wb25lbnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHJvb3RWaWV3OiB7XG5cdFx0XHRcdHZpZXdOYW1lOiBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRSxcblx0XHRcdFx0dHlwZTogXCJYTUxcIixcblx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdGlkOiBcImFwcFJvb3RWaWV3XCJcblx0XHRcdH0sXG5cdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdGNvbnRyb2xJZDogXCJhcHBDb250ZW50XCIsXG5cdFx0XHRcdFx0cm91dGVyQ2xhc3M6IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTLFxuXHRcdFx0XHRcdHZpZXdUeXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xBZ2dyZWdhdGlvbjogXCJwYWdlc1wiLFxuXHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdGNvbnRhaW5lck9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdHByb3BhZ2F0ZU1vZGVsOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRkZXNpZ250aW1lOiBcInNhcC9mZS9jb3JlL2Rlc2lnbnRpbWUvQXBwQ29tcG9uZW50LmRlc2lnbnRpbWVcIixcblxuXHRsaWJyYXJ5OiBcInNhcC5mZS5jb3JlXCJcbn0pXG5jbGFzcyBBcHBDb21wb25lbnQgZXh0ZW5kcyBVSUNvbXBvbmVudCB7XG5cdHN0YXRpYyBpbnN0YW5jZU1hcDogUmVjb3JkPHN0cmluZywgQXBwQ29tcG9uZW50PiA9IHt9O1xuXHRwcml2YXRlIF9vUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblx0cHJpdmF0ZSBfb0FwcFN0YXRlSGFuZGxlciE6IEFwcFN0YXRlSGFuZGxlcjtcblx0cHJpdmF0ZSBiSW5pdGlhbGl6ZVJvdXRpbmc/OiBib29sZWFuO1xuXHRwcml2YXRlIF9vRGlhZ25vc3RpY3MhOiBEaWFnbm9zdGljcztcblx0cHJpdmF0ZSBlbnRpdHlDb250YWluZXIhOiBQcm9taXNlPHZvaWQ+O1xuXHRwcml2YXRlIHN0YXJ0dXBNb2RlOiBzdHJpbmcgPSBTdGFydHVwTW9kZS5Ob3JtYWw7XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudC5nZXRNZXRhZGF0YVxuXHQgKiBAZnVuY3Rpb25cblx0ICovXG5cblx0X2lzRmNsRW5hYmxlZCgpIHtcblx0XHRjb25zdCBvTWFuaWZlc3RVSTUgPSB0aGlzLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpO1xuXHRcdHJldHVybiBvTWFuaWZlc3RVSTU/LnJvdXRpbmc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuRkNMLlJPVVRFUkNMQVNTO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIGEgaG9vayB0byBpbml0aWFsaXplIGZlYXR1cmUgdG9nZ2xlcy5cblx0ICpcblx0ICogVGhpcyBob29rIGlzIGJlaW5nIGNhbGxlZCBieSB0aGUgU0FQIEZpb3JpIGVsZW1lbnRzIEFwcENvbXBvbmVudCBhdCB0aGUgdGltZSBmZWF0dXJlIHRvZ2dsZXMgY2FuIGJlIGluaXRpYWxpemVkLlxuXHQgKiBUbyBjaGFuZ2UgcGFnZSBjb25maWd1cmF0aW9uIHVzZSB0aGUge0BsaW5rIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCNjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbn0gbWV0aG9kLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2luaXRpYWxpemVGZWF0dXJlVG9nZ2xlc1xuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGluaXRpYWxpemVGZWF0dXJlVG9nZ2xlcygpOiB2b2lkIHtcblx0XHQvLyB0aGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhcHBsaWNhdGlvbnNcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2VzIHRoZSBwYWdlIGNvbmZpZ3VyYXRpb24gb2YgU0FQIEZpb3JpIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBUaGlzIG1ldGhvZCBlbmFibGVzIHlvdSB0byBjaGFuZ2UgdGhlIHBhZ2UgY29uZmlndXJhdGlvbiBvZiBTQVAgRmlvcmkgZWxlbWVudHMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gcGFnZUlkIFRoZSBJRCBvZiB0aGUgcGFnZSBmb3Igd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXMgdG8gYmUgY2hhbmdlZC5cblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggaW4gdGhlIHBhZ2Ugc2V0dGluZ3MgZm9yIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGlzIHRvIGJlIGNoYW5nZWQuXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIGEgcGxhaW4gdmFsdWUgbGlrZSBhIHN0cmluZywgb3IgYSBCb29sZWFuLCBvciBhIHN0cnVjdHVyZWQgb2JqZWN0LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbihwYWdlSWQ6IHN0cmluZywgcGF0aDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuXHRcdGNoYW5nZUNvbmZpZ3VyYXRpb24odGhpcy5nZXRNYW5pZmVzdCgpLCBwYWdlSWQsIHBhdGgsIHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldFJvdXRlclByb3h5XG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcblx0ICogQHJldHVybnMgQSBSZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5XG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldFJvdXRlclByb3h5KCk6IFJvdXRlclByb3h5IHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlclByb3h5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgQXBwU3RhdGVIYW5kbGVyLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBBcHBTdGF0ZUhhbmRsZXJcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0QXBwU3RhdGVIYW5kbGVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbmF2L0ZDTCBDb250cm9sbGVyLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldFJvb3RWaWV3Q29udHJvbGxlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgRkNMIENvbnRyb2xsZXJcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdFZpZXdDb250cm9sbGVyKCk6IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIge1xuXHRcdHJldHVybiB0aGlzLmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldFJvb3RDb250YWluZXJcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldFJvb3RDb250YWluZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250ZW50KClbMF0gYXMgTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGFydHVwIG1vZGUgb2YgdGhlIGFwcC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgbW9kZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0U3RhcnR1cE1vZGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydHVwTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQ3JlYXRlJy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQ3JlYXRlKCkge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0F1dG9DcmVhdGUnLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlKCkge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5BdXRvQ3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdEZWVwbGluaycuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZURlZXBsaW5rKCkge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5EZWVwbGluaztcblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0dGhpcy5pbml0aWFsaXplRmVhdHVyZVRvZ2dsZXMoKTtcblxuXHRcdGNvbnN0IHVpTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGVkaXRNb2RlOiBsaWJyYXJ5LkVkaXRNb2RlLkRpc3BsYXksXG5cdFx0XHRpc0VkaXRhYmxlOiBmYWxzZSxcblx0XHRcdGRyYWZ0U3RhdHVzOiBsaWJyYXJ5LkRyYWZ0U3RhdHVzLkNsZWFyLFxuXHRcdFx0YnVzeTogZmFsc2UsXG5cdFx0XHRidXN5TG9jYWw6IHt9LFxuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdHBhZ2VzOiB7fVxuXHRcdH0pO1xuXHRcdC8vIHNldCB0aGUgYmluZGluZyBPbmVXYXkgZm9yIHVpTW9kZWwgdG8gcHJldmVudCBjaGFuZ2VzIGlmIGNvbnRyb2xsZXIgZXh0ZW5zaW9ucyBtb2RpZnkgYSBib3VuZCBwcm9wZXJ0eSBvZiBhIGNvbnRyb2xcblx0XHR1aU1vZGVsLnNldERlZmF1bHRCaW5kaW5nTW9kZShcIk9uZVdheVwiKTtcblx0XHQvLyBmb3IgaW50ZXJuYWwgbW9kZWwgYmluZGluZyBuZWVkcyB0byBiZSB0d28gd2F5XG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZVVpSlNPTk1vZGVsKHVpTW9kZWwsIGxpYnJhcnkpO1xuXHRcdE1vZGVsSGVscGVyLmVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbChvSW50ZXJuYWxNb2RlbCk7XG5cblx0XHR0aGlzLnNldE1vZGVsKHVpTW9kZWwsIFwidWlcIik7XG5cdFx0dGhpcy5zZXRNb2RlbChvSW50ZXJuYWxNb2RlbCwgXCJpbnRlcm5hbFwiKTtcblxuXHRcdHRoaXMuYkluaXRpYWxpemVSb3V0aW5nID0gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgIT09IHVuZGVmaW5lZCA/IHRoaXMuYkluaXRpYWxpemVSb3V0aW5nIDogdHJ1ZTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkgPSBuZXcgUm91dGVyUHJveHkoKTtcblx0XHR0aGlzLl9vQXBwU3RhdGVIYW5kbGVyID0gbmV3IEFwcFN0YXRlSGFuZGxlcih0aGlzKTtcblx0XHR0aGlzLl9vRGlhZ25vc3RpY3MgPSBuZXcgRGlhZ25vc3RpY3MoKTtcblxuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXHRcdGlmIChvTW9kZWw/LmlzQT8uKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIikpIHtcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLnJlcXVlc3RPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lci9cIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5vdCBhbiBPRGF0YSB2NCBzZXJ2aWNlXG5cdFx0XHR0aGlzLmVudGl0eUNvbnRhaW5lciA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWFuaWZlc3QoKVtcInNhcC51aTVcIl07XG5cdFx0aWYgKG9NYW5pZmVzdFVJNT8ucm9vdFZpZXc/LnZpZXdOYW1lKSB7XG5cdFx0XHQvLyBUaGUgYXBwbGljYXRpb24gc3BlY2lmaWVkIGFuIG93biByb290IHZpZXcgaW4gdGhlIG1hbmlmZXN0XG5cblx0XHRcdC8vIFJvb3QgVmlldyB3YXMgbW92ZWQgZnJvbSBzYXAuZmUudGVtcGxhdGVzIHRvIHNhcC5mZS5jb3JlIC0ga2VlcCBpdCBjb21wYXRpYmxlXG5cdFx0XHRpZiAob01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRV9DT01QQVRJQklMSVRZKSB7XG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9IE5BVkNPTkYuRkNMLlZJRVdOQU1FO1xuXHRcdFx0fSBlbHNlIGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRSAmJlxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1Ncblx0XHRcdCkge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke05BVkNPTkYuRkNMLlZJRVdOQU1FfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLkZDTC5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRSAmJlxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1Ncblx0XHRcdCkge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fSBlbHNlIGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXc/LnZpZXdOYW1lPy5pbmRleE9mKFwic2FwLmZlLmNvcmUucm9vdFZpZXdcIikgIT09IC0xKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKFxuXHRcdFx0XHRcdGBcXG5Xcm9uZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY291cGxlIChyb290Vmlldy9yb3V0ZXJDbGFzcykgaW4gbWFuaWZlc3QgZmlsZS5cXG5gICtcblx0XHRcdFx0XHRcdGBDdXJyZW50IHZhbHVlcyBhcmUgOigke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX0vJHtvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzc30pXFxuYCArXG5cdFx0XHRcdFx0XHRgRXhwZWN0ZWQgdmFsdWVzIGFyZSBcXG5gICtcblx0XHRcdFx0XHRcdGBcXHQgLSAoJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRX0vJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU30pXFxuYCArXG5cdFx0XHRcdFx0XHRgXFx0IC0gKCR7TkFWQ09ORi5GQ0wuVklFV05BTUV9LyR7TkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1N9KWBcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZGluZyBTZW1hbnRpYyBEYXRlIE9wZXJhdG9yc1xuXHRcdC8vIENvbW1lbnRpbmcgc2luY2UgaXQgaXMgbm90IG5lZWRlZCBmb3IgU2luZ2xlUmFuZ2Vcblx0XHRTZW1hbnRpY0RhdGVPcGVyYXRvcnMuYWRkU2VtYW50aWNEYXRlT3BlcmF0b3JzKCk7XG5cblx0XHQvLyB0aGUgaW5pdCBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSByb3V0aW5nIGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgYWJvdmVcblx0XHQvLyBpdCB3aWxsIGNhbGwgdGhlIGNyZWF0ZUNvbnRlbnQgZnVuY3Rpb24gdG8gaW5zdGFudGlhdGUgdGhlIFJvb3RWaWV3IGFuZCBhZGQgaXQgdG8gdGhlIFVJQ29tcG9uZW50IGFnZ3JlZ2F0aW9uc1xuXG5cdFx0c3VwZXIuaW5pdCgpO1xuXHRcdEFwcENvbXBvbmVudC5pbnN0YW5jZU1hcFt0aGlzLmdldElkKCldID0gdGhpcztcblx0fVxuXHRvblNlcnZpY2VzU3RhcnRlZCgpIHtcblx0XHQvL3JvdXRlciBtdXN0IGJlIHN0YXJ0ZWQgb25jZSB0aGUgcm9vdGNvbnRhaW5lciBpcyBpbml0aWFsaXplZFxuXHRcdC8vc3RhcnRpbmcgb2YgdGhlIHJvdXRlclxuXHRcdGNvbnN0IGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiA9ICgpID0+IHtcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5hdHRhY2hSb3V0ZU1hdGNoZXJzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmF0dGFjaFJvdXRlTWF0Y2hlcnMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXIoKS5pbml0aWFsaXplKCk7XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXJQcm94eSgpLmluaXQodGhpcywgdGhpcy5faXNGY2xFbmFibGVkKCkpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cblx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmRpc3BsYXlFcnJvclBhZ2UoXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9BUFBTVEFSVF9URUNITklDQUxfSVNTVUVTXCIpLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdEZDTExldmVsOiAwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLmJJbml0aWFsaXplUm91dGluZykge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKVxuXHRcdFx0XHQuaW5pdGlhbGl6ZVJvdXRpbmcoKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRSb290Q29udHJvbCgpLmF0dGFjaEFmdGVySW5pdChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbigpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogRXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYGNhbm5vdCBjYW5ub3QgaW5pdGlhbGl6ZSByb3V0aW5nOiAke2Vycn1gKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGV4aXQoKSB7XG5cdFx0dGhpcy5fb0FwcFN0YXRlSGFuZGxlci5kZXN0cm95KCk7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5LmRlc3Ryb3koKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGRlbGV0ZSB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0XHRkZWxldGVNb2RlbENhY2hlRGF0YSh0aGlzLmdldE1ldGFNb2RlbCgpKTtcblx0XHR0aGlzLmdldE1vZGVsKFwidWlcIikuZGVzdHJveSgpO1xuXHR9XG5cdGdldE1ldGFNb2RlbCgpOiBPRGF0YU1ldGFNb2RlbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0fVxuXHRnZXREaWFnbm9zdGljcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fb0RpYWdub3N0aWNzO1xuXHR9XG5cdGRlc3Ryb3koYlN1cHByZXNzSW52YWxpZGF0ZT86IGJvb2xlYW4pIHtcblx0XHQvLyBMRUFLUywgd2l0aCB3b3JrYXJvdW5kIGZvciBzb21lIEZsZXggLyBNREMgaXNzdWVcblx0XHR0cnkge1xuXHRcdFx0Ly8gXHQvLyBUaGlzIG9uZSBpcyBvbmx5IGEgbGVhayBpZiB5b3UgZG9uJ3QgZ28gYmFjayB0byB0aGUgc2FtZSBjb21wb25lbnQgaW4gdGhlIGxvbmcgcnVuXG5cdFx0XHQvL2RlbGV0ZSBzYXAudWkuZmwuRmxleENvbnRyb2xsZXJGYWN0b3J5Ll9jb21wb25lbnRJbnN0YW50aWF0aW9uUHJvbWlzZXNbdGhpcy5nZXRJZCgpXTtcblxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLmluaXRpYWxpemVDYWNoZWRWYWx1ZUhlbHAoKTtcblxuXHRcdFx0ZGVsZXRlIEFwcENvbXBvbmVudC5pbnN0YW5jZU1hcFt0aGlzLmdldElkKCldO1xuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRkZWxldGUgKHdpbmRvdyBhcyB1bmtub3duKS5fcm91dGluZztcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuaW5mbyhlIGFzIHN0cmluZyk7XG5cdFx0fVxuXG5cdFx0Ly9XT1JLQVJPVU5EIGZvciBzdGlja3kgZGlzY2FyZCByZXF1ZXN0IDogZHVlIHRvIGFzeW5jIGNhbGxiYWNrLCByZXF1ZXN0IHRyaWdnZXJlZCBieSB0aGUgZXhpdEFwcGxpY2F0aW9uIHdpbGwgYmUgc2VuZCBhZnRlciB0aGUgVUlDb21wb25lbnQucHJvdG90eXBlLmRlc3Ryb3lcblx0XHQvL3NvIHdlIG5lZWQgdG8gY29weSB0aGUgUmVxdWVzdG9yIGhlYWRlcnMgYXMgaXQgd2lsbCBiZSBkZXN0cm95XG5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IG9NYWluTW9kZWwgPSB0aGlzLm9Nb2RlbHNbdW5kZWZpbmVkXTtcblx0XHRsZXQgb0hlYWRlcnM7XG5cdFx0aWYgKG9NYWluTW9kZWwub1JlcXVlc3Rvcikge1xuXHRcdFx0b0hlYWRlcnMgPSBqUXVlcnkuZXh0ZW5kKHt9LCBvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIEFzIHdlIG5lZWQgdG8gY2xlYW51cCB0aGUgYXBwbGljYXRpb24gLyBoYW5kbGUgdGhlIGRpcnR5IG9iamVjdCB3ZSBuZWVkIHRvIGNhbGwgb3VyIGNsZWFudXAgYmVmb3JlIHRoZSBtb2RlbHMgYXJlIGRlc3Ryb3llZFxuXHRcdHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKT8uYmVmb3JlRXhpdCgpO1xuXHRcdHN1cGVyLmRlc3Ryb3koYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0aWYgKG9IZWFkZXJzICYmIG9NYWluTW9kZWwub1JlcXVlc3Rvcikge1xuXHRcdFx0b01haW5Nb2RlbC5vUmVxdWVzdG9yLm1IZWFkZXJzID0gb0hlYWRlcnM7XG5cdFx0fVxuXHR9XG5cdGdldFJvdXRpbmdTZXJ2aWNlKCk6IFJvdXRpbmdTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgUm91dGluZ1NlcnZpY2U7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblx0Z2V0U2hlbGxTZXJ2aWNlcygpOiBJU2hlbGxTZXJ2aWNlcyB7XG5cdFx0cmV0dXJuIHt9IGFzIElTaGVsbFNlcnZpY2VzOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cdGdldE5hdmlnYXRpb25TZXJ2aWNlKCk6IE5hdmlnYXRpb25TZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgTmF2aWdhdGlvblNlcnZpY2U7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblx0Z2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk6IFNpZGVFZmZlY3RzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFNpZGVFZmZlY3RzU2VydmljZTtcblx0fVxuXHRnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2U7XG5cdH1cblxuXHRhc3luYyBnZXRTdGFydHVwUGFyYW1ldGVycygpIHtcblx0XHRjb25zdCBvQ29tcG9uZW50RGF0YSA9IHRoaXMuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fSk7XG5cdH1cblx0cmVzdG9yZSgpIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyByZXN0b3JlZFxuXHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkudmlld1N0YXRlLm9uUmVzdG9yZSgpO1xuXHR9XG5cdHN1c3BlbmQoKSB7XG5cdFx0Ly8gY2FsbGVkIGJ5IEZMUCB3aGVuIGFwcCBzYXAta2VlcC1hbGl2ZSBpcyBlbmFibGVkIGFuZCBhcHAgaXMgc3VzcGVuZGVkXG5cdFx0dGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS52aWV3U3RhdGUub25TdXNwZW5kKCk7XG5cdH1cbn1cblxuaW50ZXJmYWNlIEFwcENvbXBvbmVudCBleHRlbmRzIFVJQ29tcG9uZW50IHtcblx0Z2V0TWFuaWZlc3QoKTogTWFuaWZlc3RDb250ZW50O1xuXHRnZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC5hcHBcIik6IE1hbmlmZXN0Q29udGVudEFwcDtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWk1XCIpOiBNYW5pZmVzdENvbnRlbnRVSTU7XG5cdGdldENvbXBvbmVudERhdGEoKTogQ29tcG9uZW50RGF0YTtcblx0Z2V0Um9vdENvbnRyb2woKToge1xuXHRcdGdldENvbnRyb2xsZXIoKTogUm9vdFZpZXdCYXNlQ29udHJvbGxlcjtcblx0fSAmIFZpZXc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcENvbXBvbmVudDtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztFQTJCQSxJQUFNQSxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0QsV0FBVztFQUV2QyxJQUFNRSxPQUFPLEdBQUc7SUFDZkMsR0FBRyxFQUFFO01BQ0pDLFFBQVEsRUFBRSwwQkFBMEI7TUFDcENDLHNCQUFzQixFQUFFLHlDQUF5QztNQUNqRUMsV0FBVyxFQUFFO0lBQ2QsQ0FBQztJQUNEQyxZQUFZLEVBQUU7TUFDYkgsUUFBUSxFQUFFLG1DQUFtQztNQUM3Q0Msc0JBQXNCLEVBQUUsa0RBQWtEO01BQzFFQyxXQUFXLEVBQUU7SUFDZDtFQUNELENBQUM7RUFxRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQWJBLElBa0ZNRSxZQUFZLFdBcEVqQkMsY0FBYyxDQUFDLDBCQUEwQixFQUFFO0lBQzNDQyxVQUFVLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztJQUNqREMsTUFBTSxFQUFFO01BQ1BDLFNBQVMsRUFBRTtJQUNaLENBQUM7SUFDREMsUUFBUSxFQUFFO01BQ1QsU0FBUyxFQUFFO1FBQ1ZDLFFBQVEsRUFBRTtVQUNUQyxhQUFhLEVBQUU7WUFDZEMsV0FBVyxFQUFFLDJDQUEyQztZQUN4REMsT0FBTyxFQUFFLFNBQVM7WUFDbEJDLFFBQVEsRUFBRTtjQUNUQyxPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztjQUN0Q0MsU0FBUyxFQUFFO1lBQ1o7VUFDRCxDQUFDO1VBQ0RDLGNBQWMsRUFBRTtZQUNmTCxXQUFXLEVBQUUscUNBQXFDO1lBQ2xEQyxPQUFPLEVBQUU7VUFDVixDQUFDO1VBQ0RLLGFBQWEsRUFBRTtZQUNkTixXQUFXLEVBQUUsb0NBQW9DO1lBQ2pEQyxPQUFPLEVBQUU7VUFDVixDQUFDO1VBQ0RNLGNBQWMsRUFBRTtZQUNmUCxXQUFXLEVBQUU7VUFDZCxDQUFDO1VBQ0RRLGlCQUFpQixFQUFFO1lBQ2xCUixXQUFXLEVBQUUsd0NBQXdDO1lBQ3JEQyxPQUFPLEVBQUU7VUFDVixDQUFDO1VBQ0RRLHVCQUF1QixFQUFFO1lBQ3hCVCxXQUFXLEVBQUUseUNBQXlDO1lBQ3REQyxPQUFPLEVBQUU7VUFDVixDQUFDO1VBQ0RTLGtCQUFrQixFQUFFO1lBQ25CVixXQUFXLEVBQUUseUNBQXlDO1lBQ3REQyxPQUFPLEVBQUU7VUFDVixDQUFDO1VBQ0RVLHFCQUFxQixFQUFFO1lBQ3RCWCxXQUFXLEVBQUUsNENBQTRDO1lBQ3pEQyxPQUFPLEVBQUU7VUFDVjtRQUNELENBQUM7UUFDRFcsUUFBUSxFQUFFO1VBQ1RDLFFBQVEsRUFBRTNCLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDSCxRQUFRO1VBQ3ZDMEIsSUFBSSxFQUFFLEtBQUs7VUFDWEMsS0FBSyxFQUFFLElBQUk7VUFDWEMsRUFBRSxFQUFFO1FBQ0wsQ0FBQztRQUNEQyxPQUFPLEVBQUU7VUFDUnRCLE1BQU0sRUFBRTtZQUNQdUIsU0FBUyxFQUFFLFlBQVk7WUFDdkJDLFdBQVcsRUFBRWpDLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDRCxXQUFXO1lBQzdDOEIsUUFBUSxFQUFFLEtBQUs7WUFDZkMsa0JBQWtCLEVBQUUsT0FBTztZQUMzQk4sS0FBSyxFQUFFLElBQUk7WUFDWE8sZ0JBQWdCLEVBQUU7Y0FDakJDLGNBQWMsRUFBRTtZQUNqQjtVQUNEO1FBQ0Q7TUFDRDtJQUNELENBQUM7SUFDREMsVUFBVSxFQUFFLGdEQUFnRDtJQUU1RHZDLE9BQU8sRUFBRTtFQUNWLENBQUMsQ0FBQztJQUFBO0lBQUE7TUFBQTtNQUFBO1FBQUE7TUFBQTtNQUFBO01BQUEsTUFRT3dDLFdBQVcsR0FBV3pDLFdBQVcsQ0FBQzBDLE1BQU07TUFBQTtJQUFBO0lBQUE7SUFFaEQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUpDLE9BTUFDLGFBQWEsR0FBYix5QkFBZ0I7TUFBQTtNQUNmLElBQU1DLFlBQVksR0FBRyxJQUFJLENBQUNDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztNQUNyRCxPQUFPLENBQUFELFlBQVksYUFBWkEsWUFBWSxnREFBWkEsWUFBWSxDQUFFWCxPQUFPLG9GQUFyQixzQkFBdUJ0QixNQUFNLDJEQUE3Qix1QkFBK0J3QixXQUFXLE1BQUtqQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0csV0FBVztJQUM5RTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVkM7SUFBQSxPQVdBd0Msd0JBQXdCLEdBQXhCLG9DQUFpQztNQUNoQztJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BWkM7SUFBQSxPQWFBQyx1QkFBdUIsR0FBdkIsaUNBQXdCQyxNQUFjLEVBQUVDLElBQVksRUFBRUMsS0FBYyxFQUFRO01BQzNFQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUNDLFdBQVcsRUFBRSxFQUFFSixNQUFNLEVBQUVDLElBQUksRUFBRUMsS0FBSyxDQUFDO0lBQzdEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQSxPQVVBRyxjQUFjLEdBQWQsMEJBQThCO01BQzdCLE9BQU8sSUFBSSxDQUFDQyxhQUFhO0lBQzFCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQSxPQVVBQyxrQkFBa0IsR0FBbEIsOEJBQXFCO01BQ3BCLE9BQU8sSUFBSSxDQUFDQyxpQkFBaUI7SUFDOUI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FUQztJQUFBLE9BVUFDLHFCQUFxQixHQUFyQixpQ0FBZ0Q7TUFDL0MsT0FBTyxJQUFJLENBQUNDLGNBQWMsRUFBRSxDQUFDQyxhQUFhLEVBQUU7SUFDN0M7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FUQztJQUFBLE9BVUFDLGdCQUFnQixHQUFoQiw0QkFBbUI7TUFDbEIsT0FBTyxJQUFJLENBQUNGLGNBQWMsRUFBRSxDQUFDRyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0M7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQSxPQU1BQyxjQUFjLEdBQWQsMEJBQXlCO01BQ3hCLE9BQU8sSUFBSSxDQUFDckIsV0FBVztJQUN4Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQSxPQUtBc0Isb0JBQW9CLEdBQXBCLGdDQUF1QjtNQUN0QixJQUFJLENBQUN0QixXQUFXLEdBQUd6QyxXQUFXLENBQUNnRSxNQUFNO0lBQ3RDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLE9BS0FDLHdCQUF3QixHQUF4QixvQ0FBMkI7TUFDMUIsSUFBSSxDQUFDeEIsV0FBVyxHQUFHekMsV0FBVyxDQUFDa0UsVUFBVTtJQUMxQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQSxPQUtBQyxzQkFBc0IsR0FBdEIsa0NBQXlCO01BQ3hCLElBQUksQ0FBQzFCLFdBQVcsR0FBR3pDLFdBQVcsQ0FBQ29FLFFBQVE7SUFDeEMsQ0FBQztJQUFBLE9BRURDLElBQUksR0FBSixnQkFBTztNQUFBO01BQ04sSUFBSSxDQUFDdkIsd0JBQXdCLEVBQUU7TUFFL0IsSUFBTXdCLE9BQU8sR0FBRyxJQUFJQyxTQUFTLENBQUM7UUFDN0JDLFFBQVEsRUFBRXZFLE9BQU8sQ0FBQ3dFLFFBQVEsQ0FBQ0MsT0FBTztRQUNsQ0MsVUFBVSxFQUFFLEtBQUs7UUFDakJDLFdBQVcsRUFBRTNFLE9BQU8sQ0FBQzRFLFdBQVcsQ0FBQ0MsS0FBSztRQUN0Q0MsSUFBSSxFQUFFLEtBQUs7UUFDWEMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNiQyxLQUFLLEVBQUUsQ0FBQztNQUNULENBQUMsQ0FBQztNQUNGLElBQU1DLGNBQWMsR0FBRyxJQUFJWCxTQUFTLENBQUM7UUFDcENVLEtBQUssRUFBRSxDQUFDO01BQ1QsQ0FBQyxDQUFDO01BQ0Y7TUFDQVgsT0FBTyxDQUFDYSxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7TUFDdkM7TUFDQUMsV0FBVyxDQUFDQyxrQkFBa0IsQ0FBQ2YsT0FBTyxFQUFFckUsT0FBTyxDQUFDO01BQ2hEbUYsV0FBVyxDQUFDRSx3QkFBd0IsQ0FBQ0osY0FBYyxDQUFDO01BRXBELElBQUksQ0FBQ0ssUUFBUSxDQUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQztNQUM1QixJQUFJLENBQUNpQixRQUFRLENBQUNMLGNBQWMsRUFBRSxVQUFVLENBQUM7TUFFekMsSUFBSSxDQUFDTSxrQkFBa0IsR0FBRyxJQUFJLENBQUNBLGtCQUFrQixLQUFLQyxTQUFTLEdBQUcsSUFBSSxDQUFDRCxrQkFBa0IsR0FBRyxJQUFJO01BQ2hHLElBQUksQ0FBQ2xDLGFBQWEsR0FBRyxJQUFJb0MsV0FBVyxFQUFFO01BQ3RDLElBQUksQ0FBQ2xDLGlCQUFpQixHQUFHLElBQUltQyxlQUFlLENBQUMsSUFBSSxDQUFDO01BQ2xELElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUlDLFdBQVcsRUFBRTtNQUV0QyxJQUFNQyxNQUFNLEdBQUcsSUFBSSxDQUFDQyxRQUFRLEVBQWdCO01BQzVDLElBQUlELE1BQU0sYUFBTkEsTUFBTSw4QkFBTkEsTUFBTSxDQUFFRSxHQUFHLHdDQUFYLGlCQUFBRixNQUFNLEVBQVEsa0NBQWtDLENBQUMsRUFBRTtRQUN0RCxJQUFJLENBQUNHLGVBQWUsR0FBR0gsTUFBTSxDQUFDSSxZQUFZLEVBQUUsQ0FBQ0MsYUFBYSxDQUFDLG9CQUFvQixDQUFDO01BQ2pGLENBQUMsTUFBTTtRQUNOO1FBQ0EsSUFBSSxDQUFDRixlQUFlLEdBQUdHLE9BQU8sQ0FBQ0MsT0FBTyxFQUFFO01BQ3pDO01BRUEsSUFBTXpELFlBQVksR0FBRyxJQUFJLENBQUNRLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQztNQUNsRCxJQUFJUixZQUFZLGFBQVpBLFlBQVksd0NBQVpBLFlBQVksQ0FBRWhCLFFBQVEsa0RBQXRCLHNCQUF3QkMsUUFBUSxFQUFFO1FBQUE7UUFDckM7O1FBRUE7UUFDQSxJQUFJZSxZQUFZLENBQUNoQixRQUFRLENBQUNDLFFBQVEsS0FBSzNCLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDRSxzQkFBc0IsRUFBRTtVQUMxRXVDLFlBQVksQ0FBQ2hCLFFBQVEsQ0FBQ0MsUUFBUSxHQUFHM0IsT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVE7UUFDdEQsQ0FBQyxNQUFNLElBQUl3QyxZQUFZLENBQUNoQixRQUFRLENBQUNDLFFBQVEsS0FBSzNCLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDRixzQkFBc0IsRUFBRTtVQUMxRnVDLFlBQVksQ0FBQ2hCLFFBQVEsQ0FBQ0MsUUFBUSxHQUFHM0IsT0FBTyxDQUFDSyxZQUFZLENBQUNILFFBQVE7UUFDL0Q7UUFFQSxJQUNDd0MsWUFBWSxDQUFDaEIsUUFBUSxDQUFDQyxRQUFRLEtBQUszQixPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsUUFBUSxJQUN2RCwyQkFBQXdDLFlBQVksQ0FBQ1gsT0FBTyxxRkFBcEIsdUJBQXNCdEIsTUFBTSwyREFBNUIsdUJBQThCd0IsV0FBVyxNQUFLakMsT0FBTyxDQUFDQyxHQUFHLENBQUNHLFdBQVcsRUFDcEU7VUFDRGdHLEdBQUcsQ0FBQ0MsSUFBSSw0QkFBb0JyRyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsUUFBUSxpQ0FBcUJGLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDRyxXQUFXLFFBQUk7UUFDakcsQ0FBQyxNQUFNLElBQ05zQyxZQUFZLENBQUNoQixRQUFRLENBQUNDLFFBQVEsS0FBSzNCLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDSCxRQUFRLElBQ2hFLDJCQUFBd0MsWUFBWSxDQUFDWCxPQUFPLHFGQUFwQix1QkFBc0J0QixNQUFNLDJEQUE1Qix1QkFBOEJ3QixXQUFXLE1BQUtqQyxPQUFPLENBQUNLLFlBQVksQ0FBQ0QsV0FBVyxFQUM3RTtVQUNEZ0csR0FBRyxDQUFDQyxJQUFJLDRCQUFvQnJHLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDSCxRQUFRLGlDQUFxQkYsT0FBTyxDQUFDSyxZQUFZLENBQUNELFdBQVcsUUFBSTtRQUNuSCxDQUFDLE1BQU0sSUFBSSwyQkFBQXNDLFlBQVksQ0FBQ2hCLFFBQVEscUZBQXJCLHVCQUF1QkMsUUFBUSwyREFBL0IsdUJBQWlDMkUsT0FBTyxDQUFDLHNCQUFzQixDQUFDLE1BQUssQ0FBQyxDQUFDLEVBQUU7VUFBQTtVQUNuRixNQUFNQyxLQUFLLENBQ1YsbUhBQ3lCN0QsWUFBWSxDQUFDaEIsUUFBUSxDQUFDQyxRQUFRLHdDQUFJZSxZQUFZLENBQUNYLE9BQU8scUZBQXBCLHVCQUFzQnRCLE1BQU0sMkRBQTVCLHVCQUE4QndCLFdBQVcsUUFBSywyQkFDaEYsbUJBQ2ZqQyxPQUFPLENBQUNLLFlBQVksQ0FBQ0gsUUFBUSxjQUFJRixPQUFPLENBQUNLLFlBQVksQ0FBQ0QsV0FBVyxRQUFLLG1CQUN0RUosT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsY0FBSUYsT0FBTyxDQUFDQyxHQUFHLENBQUNHLFdBQVcsTUFBRyxDQUM1RDtRQUNGLENBQUMsTUFBTTtVQUNOZ0csR0FBRyxDQUFDQyxJQUFJLDRCQUFvQjNELFlBQVksQ0FBQ2hCLFFBQVEsQ0FBQ0MsUUFBUSxpQ0FBcUIzQixPQUFPLENBQUNLLFlBQVksQ0FBQ0QsV0FBVyxRQUFJO1FBQ3BIO01BQ0Q7O01BRUE7TUFDQTtNQUNBb0cscUJBQXFCLENBQUNDLHdCQUF3QixFQUFFOztNQUVoRDtNQUNBOztNQUVBLHVCQUFNdEMsSUFBSTtNQUNWN0QsWUFBWSxDQUFDb0csV0FBVyxDQUFDLElBQUksQ0FBQ0MsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJO0lBQzlDLENBQUM7SUFBQSxPQUNEQyxpQkFBaUIsR0FBakIsNkJBQW9CO01BQUE7TUFDbkI7TUFDQTtNQUNBLElBQU1DLDhCQUE4QixHQUFHLFlBQU07UUFDNUMsTUFBSSxDQUFDZCxlQUFlLENBQ2xCZSxJQUFJLENBQUMsWUFBTTtVQUNYLElBQUksTUFBSSxDQUFDdkQscUJBQXFCLEVBQUUsQ0FBQ3dELG1CQUFtQixFQUFFO1lBQ3JELE1BQUksQ0FBQ3hELHFCQUFxQixFQUFFLENBQUN3RCxtQkFBbUIsRUFBRTtVQUNuRDtVQUNBLE1BQUksQ0FBQ0MsU0FBUyxFQUFFLENBQUNDLFVBQVUsRUFBRTtVQUM3QixNQUFJLENBQUM5RCxjQUFjLEVBQUUsQ0FBQ2dCLElBQUksQ0FBQyxNQUFJLEVBQUUsTUFBSSxDQUFDMUIsYUFBYSxFQUFFLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQ0R5RSxLQUFLLENBQUMsVUFBQ0MsS0FBWSxFQUFLO1VBQ3hCLElBQU1DLGVBQWUsR0FBR0MsSUFBSSxDQUFDQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUM7VUFFcEUsTUFBSSxDQUFDL0QscUJBQXFCLEVBQUUsQ0FBQ2dFLGdCQUFnQixDQUM1Q0gsZUFBZSxDQUFDSSxPQUFPLENBQUMsaURBQWlELENBQUMsRUFDMUU7WUFDQ0MsS0FBSyxFQUFFTCxlQUFlLENBQUNJLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztZQUN0REUsV0FBVyxFQUFFUCxLQUFLLENBQUNRLE9BQU87WUFDMUJDLFFBQVEsRUFBRTtVQUNYLENBQUMsQ0FDRDtRQUNGLENBQUMsQ0FBQztNQUNKLENBQUM7TUFFRCxJQUFJLElBQUksQ0FBQ3RDLGtCQUFrQixFQUFFO1FBQzVCLE9BQU8sSUFBSSxDQUFDdUMsaUJBQWlCLEVBQUUsQ0FDN0JDLGlCQUFpQixFQUFFLENBQ25CaEIsSUFBSSxDQUFDLFlBQU07VUFDWCxJQUFJLE1BQUksQ0FBQ3ZELHFCQUFxQixFQUFFLEVBQUU7WUFDakMsT0FBT3NELDhCQUE4QixFQUFFO1VBQ3hDLENBQUMsTUFBTTtZQUNOLE1BQUksQ0FBQ3JELGNBQWMsRUFBRSxDQUFDdUUsZUFBZSxDQUFDLFlBQVk7Y0FDakRsQiw4QkFBOEIsRUFBRTtZQUNqQyxDQUFDLENBQUM7VUFDSDtRQUNELENBQUMsQ0FBQyxDQUNESyxLQUFLLENBQUMsVUFBVWMsR0FBVSxFQUFFO1VBQzVCNUIsR0FBRyxDQUFDZSxLQUFLLDZDQUFzQ2EsR0FBRyxFQUFHO1FBQ3RELENBQUMsQ0FBQztNQUNKO0lBQ0QsQ0FBQztJQUFBLE9BQ0RDLElBQUksR0FBSixnQkFBTztNQUNOLElBQUksQ0FBQzNFLGlCQUFpQixDQUFDNEUsT0FBTyxFQUFFO01BQ2hDLElBQUksQ0FBQzlFLGFBQWEsQ0FBQzhFLE9BQU8sRUFBRTtNQUM1QjtNQUNBO01BQ0EsT0FBTyxJQUFJLENBQUM1RSxpQkFBaUI7TUFDN0I7TUFDQTtNQUNBLE9BQU8sSUFBSSxDQUFDRixhQUFhO01BQ3pCK0Usb0JBQW9CLENBQUMsSUFBSSxDQUFDbkMsWUFBWSxFQUFFLENBQUM7TUFDekMsSUFBSSxDQUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUNxQyxPQUFPLEVBQUU7SUFDOUIsQ0FBQztJQUFBLE9BQ0RsQyxZQUFZLEdBQVosd0JBQStCO01BQzlCLE9BQU8sSUFBSSxDQUFDSCxRQUFRLEVBQUUsQ0FBQ0csWUFBWSxFQUFFO0lBQ3RDLENBQUM7SUFBQSxPQUNEb0MsY0FBYyxHQUFkLDBCQUFpQjtNQUNoQixPQUFPLElBQUksQ0FBQzFDLGFBQWE7SUFDMUIsQ0FBQztJQUFBLE9BQ0R3QyxPQUFPLEdBQVAsaUJBQVFHLG1CQUE2QixFQUFFO01BQUE7TUFDdEM7TUFDQSxJQUFJO1FBQ0g7UUFDQTs7UUFFQUMsZUFBZSxDQUFDQyx5QkFBeUIsRUFBRTtRQUUzQyxPQUFPakksWUFBWSxDQUFDb0csV0FBVyxDQUFDLElBQUksQ0FBQ0MsS0FBSyxFQUFFLENBQUM7O1FBRTdDO1FBQ0E7UUFDQSxPQUFRNkIsTUFBTSxDQUFhQyxRQUFRO01BQ3BDLENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7UUFDWHRDLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDcUMsQ0FBQyxDQUFXO01BQ3RCOztNQUVBO01BQ0E7O01BRUE7TUFDQTtNQUNBLElBQU1DLFVBQVUsR0FBRyxJQUFJLENBQUNDLE9BQU8sQ0FBQ3JELFNBQVMsQ0FBQztNQUMxQyxJQUFJc0QsUUFBUTtNQUNaLElBQUlGLFVBQVUsQ0FBQ0csVUFBVSxFQUFFO1FBQzFCRCxRQUFRLEdBQUdFLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFTCxVQUFVLENBQUNHLFVBQVUsQ0FBQ0csUUFBUSxDQUFDO01BQzdEOztNQUVBO01BQ0EsNkJBQUksQ0FBQ3BCLGlCQUFpQixFQUFFLDBEQUF4QixzQkFBMEJxQixVQUFVLEVBQUU7TUFDdEMsdUJBQU1oQixPQUFPLFlBQUNHLG1CQUFtQjtNQUNqQyxJQUFJUSxRQUFRLElBQUlGLFVBQVUsQ0FBQ0csVUFBVSxFQUFFO1FBQ3RDSCxVQUFVLENBQUNHLFVBQVUsQ0FBQ0csUUFBUSxHQUFHSixRQUFRO01BQzFDO0lBQ0QsQ0FBQztJQUFBLE9BQ0RoQixpQkFBaUIsR0FBakIsNkJBQW9DO01BQ25DLE9BQU8sQ0FBQyxDQUFDLENBQW1CLENBQUM7SUFDOUIsQ0FBQztJQUFBLE9BQ0RzQixnQkFBZ0IsR0FBaEIsNEJBQW1DO01BQ2xDLE9BQU8sQ0FBQyxDQUFDLENBQW1CLENBQUM7SUFDOUIsQ0FBQztJQUFBLE9BQ0RDLG9CQUFvQixHQUFwQixnQ0FBMEM7TUFDekMsT0FBTyxDQUFDLENBQUMsQ0FBc0IsQ0FBQztJQUNqQyxDQUFDO0lBQUEsT0FDREMscUJBQXFCLEdBQXJCLGlDQUE0QztNQUMzQyxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQSxPQUNEQywwQkFBMEIsR0FBMUIsc0NBQTZEO01BQzVELE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBLE9BRUtDLG9CQUFvQjtNQUFBLElBQUc7UUFBQSxhQUNMLElBQUk7UUFBM0IsSUFBTUMsY0FBYyxHQUFHLE9BQUtDLGdCQUFnQixFQUFFO1FBQzlDLE9BQU92RCxPQUFPLENBQUNDLE9BQU8sQ0FBRXFELGNBQWMsSUFBSUEsY0FBYyxDQUFDRSxpQkFBaUIsSUFBSyxDQUFDLENBQUMsQ0FBQztNQUNuRixDQUFDO1FBQUE7TUFBQTtJQUFBO0lBQUEsT0FDREMsT0FBTyxHQUFQLG1CQUFVO01BQ1Q7TUFDQSxJQUFJLENBQUNwRyxxQkFBcUIsRUFBRSxDQUFDcUcsU0FBUyxDQUFDQyxTQUFTLEVBQUU7SUFDbkQsQ0FBQztJQUFBLE9BQ0RDLE9BQU8sR0FBUCxtQkFBVTtNQUNUO01BQ0EsSUFBSSxDQUFDdkcscUJBQXFCLEVBQUUsQ0FBQ3FHLFNBQVMsQ0FBQ0csU0FBUyxFQUFFO0lBQ25ELENBQUM7SUFBQTtFQUFBLEVBNVZ5QkMsV0FBVyxXQUM5QnRELFdBQVcsR0FBaUMsQ0FBQyxDQUFDO0VBQUEsT0F3V3ZDcEcsWUFBWTtBQUFBIn0=
|