@sapui5/sap.fe.core 1.102.2 → 1.104.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +73 -30
- package/src/sap/fe/core/AppComponent.ts +65 -43
- package/src/sap/fe/core/AppStateHandler.js +82 -70
- package/src/sap/fe/core/AppStateHandler.ts +32 -37
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +227 -126
- package/src/sap/fe/core/CommonUtils.ts +240 -163
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
- package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +170 -139
- package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
- package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +7 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
- package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
- package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
- package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
- package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
- package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
- package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +48 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
- package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
- package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
- package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +39 -63
- package/src/sap/fe/core/messagebundle_ar.properties +25 -39
- package/src/sap/fe/core/messagebundle_bg.properties +25 -39
- package/src/sap/fe/core/messagebundle_ca.properties +25 -39
- package/src/sap/fe/core/messagebundle_cs.properties +25 -39
- package/src/sap/fe/core/messagebundle_cy.properties +25 -39
- package/src/sap/fe/core/messagebundle_da.properties +25 -39
- package/src/sap/fe/core/messagebundle_de.properties +25 -39
- package/src/sap/fe/core/messagebundle_el.properties +26 -40
- package/src/sap/fe/core/messagebundle_en.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
- package/src/sap/fe/core/messagebundle_es.properties +27 -41
- package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
- package/src/sap/fe/core/messagebundle_et.properties +25 -39
- package/src/sap/fe/core/messagebundle_fi.properties +25 -39
- package/src/sap/fe/core/messagebundle_fr.properties +26 -40
- package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
- package/src/sap/fe/core/messagebundle_hi.properties +25 -39
- package/src/sap/fe/core/messagebundle_hr.properties +25 -39
- package/src/sap/fe/core/messagebundle_hu.properties +25 -39
- package/src/sap/fe/core/messagebundle_id.properties +25 -39
- package/src/sap/fe/core/messagebundle_it.properties +41 -55
- package/src/sap/fe/core/messagebundle_iw.properties +25 -39
- package/src/sap/fe/core/messagebundle_ja.properties +25 -39
- package/src/sap/fe/core/messagebundle_kk.properties +25 -39
- package/src/sap/fe/core/messagebundle_ko.properties +30 -44
- package/src/sap/fe/core/messagebundle_lt.properties +25 -39
- package/src/sap/fe/core/messagebundle_lv.properties +25 -39
- package/src/sap/fe/core/messagebundle_ms.properties +25 -39
- package/src/sap/fe/core/messagebundle_nl.properties +27 -41
- package/src/sap/fe/core/messagebundle_no.properties +25 -39
- package/src/sap/fe/core/messagebundle_pl.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
- package/src/sap/fe/core/messagebundle_ro.properties +25 -39
- package/src/sap/fe/core/messagebundle_ru.properties +25 -39
- package/src/sap/fe/core/messagebundle_sh.properties +25 -39
- package/src/sap/fe/core/messagebundle_sk.properties +25 -39
- package/src/sap/fe/core/messagebundle_sl.properties +25 -39
- package/src/sap/fe/core/messagebundle_sv.properties +25 -39
- package/src/sap/fe/core/messagebundle_th.properties +25 -39
- package/src/sap/fe/core/messagebundle_tr.properties +25 -39
- package/src/sap/fe/core/messagebundle_uk.properties +25 -39
- package/src/sap/fe/core/messagebundle_vi.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +16 -15
- package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +152 -95
- package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -2,1730 +2,2146 @@
|
|
|
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([], function
|
|
6
|
-
|
|
5
|
+
sap.ui.define([], function() {
|
|
6
|
+
/*!
|
|
7
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
8
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
9
|
+
*/
|
|
10
|
+
"use strict";
|
|
7
11
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
11
|
-
|
|
12
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
13
|
-
|
|
14
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
15
|
-
|
|
16
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
17
|
-
|
|
18
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
19
|
-
|
|
20
|
-
function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
|
|
21
|
-
|
|
22
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
23
|
-
|
|
24
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
25
|
-
|
|
26
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
27
|
-
|
|
28
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
29
|
-
|
|
30
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
31
|
-
|
|
32
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
33
|
-
|
|
34
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
35
|
-
|
|
36
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
37
|
-
|
|
38
|
-
var Path = /*#__PURE__*/_createClass(function Path(pathExpression, targetName, annotationsTerm, annotationType, term) {
|
|
39
|
-
_classCallCheck(this, Path);
|
|
40
|
-
|
|
41
|
-
this.path = pathExpression.Path;
|
|
42
|
-
this.type = "Path";
|
|
43
|
-
this.$target = targetName;
|
|
44
|
-
this.term = term, this.annotationType = annotationType, this.annotationsTerm = annotationsTerm;
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
var TermToTypes;
|
|
48
|
-
|
|
49
|
-
(function (TermToTypes) {
|
|
50
|
-
TermToTypes["Org.OData.Authorization.V1.SecuritySchemes"] = "Org.OData.Authorization.V1.SecurityScheme";
|
|
51
|
-
TermToTypes["Org.OData.Authorization.V1.Authorizations"] = "Org.OData.Authorization.V1.Authorization";
|
|
52
|
-
TermToTypes["Org.OData.Core.V1.Revisions"] = "Org.OData.Core.V1.RevisionType";
|
|
53
|
-
TermToTypes["Org.OData.Core.V1.Links"] = "Org.OData.Core.V1.Link";
|
|
54
|
-
TermToTypes["Org.OData.Core.V1.Example"] = "Org.OData.Core.V1.ExampleValue";
|
|
55
|
-
TermToTypes["Org.OData.Core.V1.Messages"] = "Org.OData.Core.V1.MessageType";
|
|
56
|
-
TermToTypes["Org.OData.Core.V1.ValueException"] = "Org.OData.Core.V1.ValueExceptionType";
|
|
57
|
-
TermToTypes["Org.OData.Core.V1.ResourceException"] = "Org.OData.Core.V1.ResourceExceptionType";
|
|
58
|
-
TermToTypes["Org.OData.Core.V1.DataModificationException"] = "Org.OData.Core.V1.DataModificationExceptionType";
|
|
59
|
-
TermToTypes["Org.OData.Core.V1.IsLanguageDependent"] = "Org.OData.Core.V1.Tag";
|
|
60
|
-
TermToTypes["Org.OData.Core.V1.DereferenceableIDs"] = "Org.OData.Core.V1.Tag";
|
|
61
|
-
TermToTypes["Org.OData.Core.V1.ConventionalIDs"] = "Org.OData.Core.V1.Tag";
|
|
62
|
-
TermToTypes["Org.OData.Core.V1.Permissions"] = "Org.OData.Core.V1.Permission";
|
|
63
|
-
TermToTypes["Org.OData.Core.V1.DefaultNamespace"] = "Org.OData.Core.V1.Tag";
|
|
64
|
-
TermToTypes["Org.OData.Core.V1.Immutable"] = "Org.OData.Core.V1.Tag";
|
|
65
|
-
TermToTypes["Org.OData.Core.V1.Computed"] = "Org.OData.Core.V1.Tag";
|
|
66
|
-
TermToTypes["Org.OData.Core.V1.ComputedDefaultValue"] = "Org.OData.Core.V1.Tag";
|
|
67
|
-
TermToTypes["Org.OData.Core.V1.IsURL"] = "Org.OData.Core.V1.Tag";
|
|
68
|
-
TermToTypes["Org.OData.Core.V1.IsMediaType"] = "Org.OData.Core.V1.Tag";
|
|
69
|
-
TermToTypes["Org.OData.Core.V1.ContentDisposition"] = "Org.OData.Core.V1.ContentDispositionType";
|
|
70
|
-
TermToTypes["Org.OData.Core.V1.OptimisticConcurrency"] = "Edm.PropertyPath";
|
|
71
|
-
TermToTypes["Org.OData.Core.V1.AdditionalProperties"] = "Org.OData.Core.V1.Tag";
|
|
72
|
-
TermToTypes["Org.OData.Core.V1.AutoExpand"] = "Org.OData.Core.V1.Tag";
|
|
73
|
-
TermToTypes["Org.OData.Core.V1.AutoExpandReferences"] = "Org.OData.Core.V1.Tag";
|
|
74
|
-
TermToTypes["Org.OData.Core.V1.MayImplement"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
75
|
-
TermToTypes["Org.OData.Core.V1.Ordered"] = "Org.OData.Core.V1.Tag";
|
|
76
|
-
TermToTypes["Org.OData.Core.V1.PositionalInsert"] = "Org.OData.Core.V1.Tag";
|
|
77
|
-
TermToTypes["Org.OData.Core.V1.AlternateKeys"] = "Org.OData.Core.V1.AlternateKey";
|
|
78
|
-
TermToTypes["Org.OData.Core.V1.OptionalParameter"] = "Org.OData.Core.V1.OptionalParameterType";
|
|
79
|
-
TermToTypes["Org.OData.Core.V1.OperationAvailable"] = "Edm.Boolean";
|
|
80
|
-
TermToTypes["Org.OData.Core.V1.SymbolicName"] = "Org.OData.Core.V1.SimpleIdentifier";
|
|
81
|
-
TermToTypes["Org.OData.Capabilities.V1.ConformanceLevel"] = "Org.OData.Capabilities.V1.ConformanceLevelType";
|
|
82
|
-
TermToTypes["Org.OData.Capabilities.V1.AsynchronousRequestsSupported"] = "Org.OData.Core.V1.Tag";
|
|
83
|
-
TermToTypes["Org.OData.Capabilities.V1.BatchContinueOnErrorSupported"] = "Org.OData.Core.V1.Tag";
|
|
84
|
-
TermToTypes["Org.OData.Capabilities.V1.IsolationSupported"] = "Org.OData.Capabilities.V1.IsolationLevel";
|
|
85
|
-
TermToTypes["Org.OData.Capabilities.V1.CrossJoinSupported"] = "Org.OData.Core.V1.Tag";
|
|
86
|
-
TermToTypes["Org.OData.Capabilities.V1.CallbackSupported"] = "Org.OData.Capabilities.V1.CallbackType";
|
|
87
|
-
TermToTypes["Org.OData.Capabilities.V1.ChangeTracking"] = "Org.OData.Capabilities.V1.ChangeTrackingType";
|
|
88
|
-
TermToTypes["Org.OData.Capabilities.V1.CountRestrictions"] = "Org.OData.Capabilities.V1.CountRestrictionsType";
|
|
89
|
-
TermToTypes["Org.OData.Capabilities.V1.NavigationRestrictions"] = "Org.OData.Capabilities.V1.NavigationRestrictionsType";
|
|
90
|
-
TermToTypes["Org.OData.Capabilities.V1.IndexableByKey"] = "Org.OData.Core.V1.Tag";
|
|
91
|
-
TermToTypes["Org.OData.Capabilities.V1.TopSupported"] = "Org.OData.Core.V1.Tag";
|
|
92
|
-
TermToTypes["Org.OData.Capabilities.V1.SkipSupported"] = "Org.OData.Core.V1.Tag";
|
|
93
|
-
TermToTypes["Org.OData.Capabilities.V1.ComputeSupported"] = "Org.OData.Core.V1.Tag";
|
|
94
|
-
TermToTypes["Org.OData.Capabilities.V1.SelectSupport"] = "Org.OData.Capabilities.V1.SelectSupportType";
|
|
95
|
-
TermToTypes["Org.OData.Capabilities.V1.BatchSupported"] = "Org.OData.Core.V1.Tag";
|
|
96
|
-
TermToTypes["Org.OData.Capabilities.V1.BatchSupport"] = "Org.OData.Capabilities.V1.BatchSupportType";
|
|
97
|
-
TermToTypes["Org.OData.Capabilities.V1.FilterRestrictions"] = "Org.OData.Capabilities.V1.FilterRestrictionsType";
|
|
98
|
-
TermToTypes["Org.OData.Capabilities.V1.SortRestrictions"] = "Org.OData.Capabilities.V1.SortRestrictionsType";
|
|
99
|
-
TermToTypes["Org.OData.Capabilities.V1.ExpandRestrictions"] = "Org.OData.Capabilities.V1.ExpandRestrictionsType";
|
|
100
|
-
TermToTypes["Org.OData.Capabilities.V1.SearchRestrictions"] = "Org.OData.Capabilities.V1.SearchRestrictionsType";
|
|
101
|
-
TermToTypes["Org.OData.Capabilities.V1.KeyAsSegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
102
|
-
TermToTypes["Org.OData.Capabilities.V1.QuerySegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
103
|
-
TermToTypes["Org.OData.Capabilities.V1.InsertRestrictions"] = "Org.OData.Capabilities.V1.InsertRestrictionsType";
|
|
104
|
-
TermToTypes["Org.OData.Capabilities.V1.DeepInsertSupport"] = "Org.OData.Capabilities.V1.DeepInsertSupportType";
|
|
105
|
-
TermToTypes["Org.OData.Capabilities.V1.UpdateRestrictions"] = "Org.OData.Capabilities.V1.UpdateRestrictionsType";
|
|
106
|
-
TermToTypes["Org.OData.Capabilities.V1.DeepUpdateSupport"] = "Org.OData.Capabilities.V1.DeepUpdateSupportType";
|
|
107
|
-
TermToTypes["Org.OData.Capabilities.V1.DeleteRestrictions"] = "Org.OData.Capabilities.V1.DeleteRestrictionsType";
|
|
108
|
-
TermToTypes["Org.OData.Capabilities.V1.CollectionPropertyRestrictions"] = "Org.OData.Capabilities.V1.CollectionPropertyRestrictionsType";
|
|
109
|
-
TermToTypes["Org.OData.Capabilities.V1.OperationRestrictions"] = "Org.OData.Capabilities.V1.OperationRestrictionsType";
|
|
110
|
-
TermToTypes["Org.OData.Capabilities.V1.AnnotationValuesInQuerySupported"] = "Org.OData.Core.V1.Tag";
|
|
111
|
-
TermToTypes["Org.OData.Capabilities.V1.ModificationQueryOptions"] = "Org.OData.Capabilities.V1.ModificationQueryOptionsType";
|
|
112
|
-
TermToTypes["Org.OData.Capabilities.V1.ReadRestrictions"] = "Org.OData.Capabilities.V1.ReadRestrictionsType";
|
|
113
|
-
TermToTypes["Org.OData.Capabilities.V1.CustomHeaders"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
114
|
-
TermToTypes["Org.OData.Capabilities.V1.CustomQueryOptions"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
115
|
-
TermToTypes["Org.OData.Capabilities.V1.MediaLocationUpdateSupported"] = "Org.OData.Core.V1.Tag";
|
|
116
|
-
TermToTypes["Org.OData.Aggregation.V1.ApplySupported"] = "Org.OData.Aggregation.V1.ApplySupportedType";
|
|
117
|
-
TermToTypes["Org.OData.Aggregation.V1.Groupable"] = "Org.OData.Core.V1.Tag";
|
|
118
|
-
TermToTypes["Org.OData.Aggregation.V1.Aggregatable"] = "Org.OData.Core.V1.Tag";
|
|
119
|
-
TermToTypes["Org.OData.Aggregation.V1.ContextDefiningProperties"] = "Edm.PropertyPath";
|
|
120
|
-
TermToTypes["Org.OData.Aggregation.V1.LeveledHierarchy"] = "Edm.PropertyPath";
|
|
121
|
-
TermToTypes["Org.OData.Aggregation.V1.RecursiveHierarchy"] = "Org.OData.Aggregation.V1.RecursiveHierarchyType";
|
|
122
|
-
TermToTypes["Org.OData.Aggregation.V1.AvailableOnAggregates"] = "Org.OData.Aggregation.V1.AvailableOnAggregatesType";
|
|
123
|
-
TermToTypes["Org.OData.Validation.V1.Minimum"] = "Edm.PrimitiveType";
|
|
124
|
-
TermToTypes["Org.OData.Validation.V1.Maximum"] = "Edm.PrimitiveType";
|
|
125
|
-
TermToTypes["Org.OData.Validation.V1.Exclusive"] = "Org.OData.Core.V1.Tag";
|
|
126
|
-
TermToTypes["Org.OData.Validation.V1.AllowedValues"] = "Org.OData.Validation.V1.AllowedValue";
|
|
127
|
-
TermToTypes["Org.OData.Validation.V1.MultipleOf"] = "Edm.Decimal";
|
|
128
|
-
TermToTypes["Org.OData.Validation.V1.Constraint"] = "Org.OData.Validation.V1.ConstraintType";
|
|
129
|
-
TermToTypes["Org.OData.Validation.V1.ItemsOf"] = "Org.OData.Validation.V1.ItemsOfType";
|
|
130
|
-
TermToTypes["Org.OData.Validation.V1.OpenPropertyTypeConstraint"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
131
|
-
TermToTypes["Org.OData.Validation.V1.DerivedTypeConstraint"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
132
|
-
TermToTypes["Org.OData.Validation.V1.AllowedTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
133
|
-
TermToTypes["Org.OData.Validation.V1.ApplicableTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
134
|
-
TermToTypes["Org.OData.Validation.V1.MaxItems"] = "Edm.Int64";
|
|
135
|
-
TermToTypes["Org.OData.Validation.V1.MinItems"] = "Edm.Int64";
|
|
136
|
-
TermToTypes["Org.OData.Measures.V1.Scale"] = "Edm.Byte";
|
|
137
|
-
TermToTypes["Org.OData.Measures.V1.DurationGranularity"] = "Org.OData.Measures.V1.DurationGranularityType";
|
|
138
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.Dimension"] = "Org.OData.Core.V1.Tag";
|
|
139
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.Measure"] = "Org.OData.Core.V1.Tag";
|
|
140
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.AccumulativeMeasure"] = "Org.OData.Core.V1.Tag";
|
|
141
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.RolledUpPropertyCount"] = "Edm.Int16";
|
|
142
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.PlanningAction"] = "Org.OData.Core.V1.Tag";
|
|
143
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.AggregatedProperties"] = "com.sap.vocabularies.Analytics.v1.AggregatedPropertyType";
|
|
144
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ServiceVersion"] = "Edm.Int32";
|
|
145
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ServiceSchemaVersion"] = "Edm.Int32";
|
|
146
|
-
TermToTypes["com.sap.vocabularies.Common.v1.TextFor"] = "Edm.PropertyPath";
|
|
147
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsLanguageIdentifier"] = "Org.OData.Core.V1.Tag";
|
|
148
|
-
TermToTypes["com.sap.vocabularies.Common.v1.TextFormat"] = "com.sap.vocabularies.Common.v1.TextFormatType";
|
|
149
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDigitSequence"] = "Org.OData.Core.V1.Tag";
|
|
150
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsUpperCase"] = "Org.OData.Core.V1.Tag";
|
|
151
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCurrency"] = "Org.OData.Core.V1.Tag";
|
|
152
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsUnit"] = "Org.OData.Core.V1.Tag";
|
|
153
|
-
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificScale"] = "Edm.PrimitiveType";
|
|
154
|
-
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificPrecision"] = "Edm.PrimitiveType";
|
|
155
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SecondaryKey"] = "Edm.PropertyPath";
|
|
156
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MinOccurs"] = "Edm.Int64";
|
|
157
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MaxOccurs"] = "Edm.Int64";
|
|
158
|
-
TermToTypes["com.sap.vocabularies.Common.v1.AssociationEntity"] = "Edm.NavigationPropertyPath";
|
|
159
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DerivedNavigation"] = "Edm.NavigationPropertyPath";
|
|
160
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Masked"] = "Org.OData.Core.V1.Tag";
|
|
161
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MaskedAlways"] = "Org.OData.Core.V1.Tag";
|
|
162
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SemanticObjectMapping"] = "com.sap.vocabularies.Common.v1.SemanticObjectMappingType";
|
|
163
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsInstanceAnnotation"] = "Org.OData.Core.V1.Tag";
|
|
164
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FilterExpressionRestrictions"] = "com.sap.vocabularies.Common.v1.FilterExpressionRestrictionType";
|
|
165
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FieldControl"] = "com.sap.vocabularies.Common.v1.FieldControlType";
|
|
166
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Application"] = "com.sap.vocabularies.Common.v1.ApplicationType";
|
|
167
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Timestamp"] = "Edm.DateTimeOffset";
|
|
168
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ErrorResolution"] = "com.sap.vocabularies.Common.v1.ErrorResolutionType";
|
|
169
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Messages"] = "Edm.ComplexType";
|
|
170
|
-
TermToTypes["com.sap.vocabularies.Common.v1.numericSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
171
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MaximumNumericMessageSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
172
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsActionCritical"] = "Edm.Boolean";
|
|
173
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Attributes"] = "Edm.PropertyPath";
|
|
174
|
-
TermToTypes["com.sap.vocabularies.Common.v1.RelatedRecursiveHierarchy"] = "Edm.AnnotationPath";
|
|
175
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Interval"] = "com.sap.vocabularies.Common.v1.IntervalType";
|
|
176
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ResultContext"] = "Org.OData.Core.V1.Tag";
|
|
177
|
-
TermToTypes["com.sap.vocabularies.Common.v1.WeakReferentialConstraint"] = "com.sap.vocabularies.Common.v1.WeakReferentialConstraintType";
|
|
178
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsNaturalPerson"] = "Org.OData.Core.V1.Tag";
|
|
179
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueList"] = "com.sap.vocabularies.Common.v1.ValueListType";
|
|
180
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueListRelevantQualifiers"] = "com.sap.vocabularies.Common.v1.SimpleIdentifier";
|
|
181
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueListWithFixedValues"] = "Org.OData.Core.V1.Tag";
|
|
182
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueListMapping"] = "com.sap.vocabularies.Common.v1.ValueListMappingType";
|
|
183
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
184
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
185
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarQuarter"] = "Org.OData.Core.V1.Tag";
|
|
186
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
187
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarWeek"] = "Org.OData.Core.V1.Tag";
|
|
188
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
189
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
190
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
191
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
192
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearMonth"] = "Org.OData.Core.V1.Tag";
|
|
193
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
194
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarDate"] = "Org.OData.Core.V1.Tag";
|
|
195
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
196
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalPeriod"] = "Org.OData.Core.V1.Tag";
|
|
197
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearPeriod"] = "Org.OData.Core.V1.Tag";
|
|
198
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalQuarter"] = "Org.OData.Core.V1.Tag";
|
|
199
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
200
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalWeek"] = "Org.OData.Core.V1.Tag";
|
|
201
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
202
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
203
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearVariant"] = "Org.OData.Core.V1.Tag";
|
|
204
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MutuallyExclusiveTerm"] = "Org.OData.Core.V1.Tag";
|
|
205
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DraftRoot"] = "com.sap.vocabularies.Common.v1.DraftRootType";
|
|
206
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DraftNode"] = "com.sap.vocabularies.Common.v1.DraftNodeType";
|
|
207
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DraftActivationVia"] = "com.sap.vocabularies.Common.v1.SimpleIdentifier";
|
|
208
|
-
TermToTypes["com.sap.vocabularies.Common.v1.EditableFieldFor"] = "Edm.PropertyPath";
|
|
209
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SemanticKey"] = "Edm.PropertyPath";
|
|
210
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SideEffects"] = "com.sap.vocabularies.Common.v1.SideEffectsType";
|
|
211
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DefaultValuesFunction"] = "com.sap.vocabularies.Common.v1.QualifiedName";
|
|
212
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValue"] = "Edm.PrimitiveType";
|
|
213
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValueHigh"] = "Edm.PrimitiveType";
|
|
214
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SortOrder"] = "com.sap.vocabularies.Common.v1.SortOrderType";
|
|
215
|
-
TermToTypes["com.sap.vocabularies.Common.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Common.v1.RecursiveHierarchyType";
|
|
216
|
-
TermToTypes["com.sap.vocabularies.Common.v1.CreatedAt"] = "Edm.DateTimeOffset";
|
|
217
|
-
TermToTypes["com.sap.vocabularies.Common.v1.CreatedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
218
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ChangedAt"] = "Edm.DateTimeOffset";
|
|
219
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ChangedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
220
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ApplyMultiUnitBehaviorForSortingAndFiltering"] = "Org.OData.Core.V1.Tag";
|
|
221
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.CurrencyCodes"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
222
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.UnitsOfMeasure"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
223
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.StandardCode"] = "Edm.PropertyPath";
|
|
224
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.ExternalCode"] = "Edm.PropertyPath";
|
|
225
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.IsConfigurationDeprecationCode"] = "Edm.Boolean";
|
|
226
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Contact"] = "com.sap.vocabularies.Communication.v1.ContactType";
|
|
227
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Address"] = "com.sap.vocabularies.Communication.v1.AddressType";
|
|
228
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.IsEmailAddress"] = "Org.OData.Core.V1.Tag";
|
|
229
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.IsPhoneNumber"] = "Org.OData.Core.V1.Tag";
|
|
230
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Event"] = "com.sap.vocabularies.Communication.v1.EventData";
|
|
231
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Task"] = "com.sap.vocabularies.Communication.v1.TaskData";
|
|
232
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Message"] = "com.sap.vocabularies.Communication.v1.MessageData";
|
|
233
|
-
TermToTypes["com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchyType";
|
|
234
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.EntitySemantics"] = "com.sap.vocabularies.PersonalData.v1.EntitySemanticsType";
|
|
235
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.FieldSemantics"] = "com.sap.vocabularies.PersonalData.v1.FieldSemanticsType";
|
|
236
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallyPersonal"] = "Org.OData.Core.V1.Tag";
|
|
237
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallySensitive"] = "Org.OData.Core.V1.Tag";
|
|
238
|
-
TermToTypes["com.sap.vocabularies.Session.v1.StickySessionSupported"] = "com.sap.vocabularies.Session.v1.StickySessionSupportedType";
|
|
239
|
-
TermToTypes["com.sap.vocabularies.UI.v1.HeaderInfo"] = "com.sap.vocabularies.UI.v1.HeaderInfoType";
|
|
240
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Identification"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
241
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Badge"] = "com.sap.vocabularies.UI.v1.BadgeType";
|
|
242
|
-
TermToTypes["com.sap.vocabularies.UI.v1.LineItem"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
243
|
-
TermToTypes["com.sap.vocabularies.UI.v1.StatusInfo"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
244
|
-
TermToTypes["com.sap.vocabularies.UI.v1.FieldGroup"] = "com.sap.vocabularies.UI.v1.FieldGroupType";
|
|
245
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ConnectedFields"] = "com.sap.vocabularies.UI.v1.ConnectedFieldsType";
|
|
246
|
-
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocations"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
247
|
-
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocation"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
248
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Contacts"] = "Edm.AnnotationPath";
|
|
249
|
-
TermToTypes["com.sap.vocabularies.UI.v1.MediaResource"] = "com.sap.vocabularies.UI.v1.MediaResourceType";
|
|
250
|
-
TermToTypes["com.sap.vocabularies.UI.v1.DataPoint"] = "com.sap.vocabularies.UI.v1.DataPointType";
|
|
251
|
-
TermToTypes["com.sap.vocabularies.UI.v1.KPI"] = "com.sap.vocabularies.UI.v1.KPIType";
|
|
252
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Chart"] = "com.sap.vocabularies.UI.v1.ChartDefinitionType";
|
|
253
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ValueCriticality"] = "com.sap.vocabularies.UI.v1.ValueCriticalityType";
|
|
254
|
-
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityLabels"] = "com.sap.vocabularies.UI.v1.CriticalityLabelType";
|
|
255
|
-
TermToTypes["com.sap.vocabularies.UI.v1.SelectionFields"] = "Edm.PropertyPath";
|
|
256
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Facets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
257
|
-
TermToTypes["com.sap.vocabularies.UI.v1.HeaderFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
258
|
-
TermToTypes["com.sap.vocabularies.UI.v1.QuickViewFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
259
|
-
TermToTypes["com.sap.vocabularies.UI.v1.QuickCreateFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
260
|
-
TermToTypes["com.sap.vocabularies.UI.v1.FilterFacets"] = "com.sap.vocabularies.UI.v1.ReferenceFacet";
|
|
261
|
-
TermToTypes["com.sap.vocabularies.UI.v1.SelectionPresentationVariant"] = "com.sap.vocabularies.UI.v1.SelectionPresentationVariantType";
|
|
262
|
-
TermToTypes["com.sap.vocabularies.UI.v1.PresentationVariant"] = "com.sap.vocabularies.UI.v1.PresentationVariantType";
|
|
263
|
-
TermToTypes["com.sap.vocabularies.UI.v1.SelectionVariant"] = "com.sap.vocabularies.UI.v1.SelectionVariantType";
|
|
264
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ThingPerspective"] = "Org.OData.Core.V1.Tag";
|
|
265
|
-
TermToTypes["com.sap.vocabularies.UI.v1.IsSummary"] = "Org.OData.Core.V1.Tag";
|
|
266
|
-
TermToTypes["com.sap.vocabularies.UI.v1.PartOfPreview"] = "Org.OData.Core.V1.Tag";
|
|
267
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Map"] = "Org.OData.Core.V1.Tag";
|
|
268
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Gallery"] = "Org.OData.Core.V1.Tag";
|
|
269
|
-
TermToTypes["com.sap.vocabularies.UI.v1.IsImageURL"] = "Org.OData.Core.V1.Tag";
|
|
270
|
-
TermToTypes["com.sap.vocabularies.UI.v1.IsImage"] = "Org.OData.Core.V1.Tag";
|
|
271
|
-
TermToTypes["com.sap.vocabularies.UI.v1.MultiLineText"] = "Org.OData.Core.V1.Tag";
|
|
272
|
-
TermToTypes["com.sap.vocabularies.UI.v1.TextArrangement"] = "com.sap.vocabularies.UI.v1.TextArrangementType";
|
|
273
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Importance"] = "com.sap.vocabularies.UI.v1.ImportanceType";
|
|
274
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Hidden"] = "Org.OData.Core.V1.Tag";
|
|
275
|
-
TermToTypes["com.sap.vocabularies.UI.v1.CreateHidden"] = "Org.OData.Core.V1.Tag";
|
|
276
|
-
TermToTypes["com.sap.vocabularies.UI.v1.UpdateHidden"] = "Org.OData.Core.V1.Tag";
|
|
277
|
-
TermToTypes["com.sap.vocabularies.UI.v1.DeleteHidden"] = "Org.OData.Core.V1.Tag";
|
|
278
|
-
TermToTypes["com.sap.vocabularies.UI.v1.HiddenFilter"] = "Org.OData.Core.V1.Tag";
|
|
279
|
-
TermToTypes["com.sap.vocabularies.UI.v1.DataFieldDefault"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
280
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Criticality"] = "com.sap.vocabularies.UI.v1.CriticalityType";
|
|
281
|
-
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityCalculation"] = "com.sap.vocabularies.UI.v1.CriticalityCalculationType";
|
|
282
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Emphasized"] = "Org.OData.Core.V1.Tag";
|
|
283
|
-
TermToTypes["com.sap.vocabularies.UI.v1.OrderBy"] = "Edm.PropertyPath";
|
|
284
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ParameterDefaultValue"] = "Edm.PrimitiveType";
|
|
285
|
-
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationState"] = "com.sap.vocabularies.UI.v1.RecommendationStateType";
|
|
286
|
-
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationList"] = "com.sap.vocabularies.UI.v1.RecommendationListType";
|
|
287
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext"] = "Org.OData.Core.V1.Tag";
|
|
288
|
-
TermToTypes["com.sap.vocabularies.HTML5.v1.CssDefaults"] = "com.sap.vocabularies.HTML5.v1.CssDefaultsType";
|
|
289
|
-
})(TermToTypes || (TermToTypes = {}));
|
|
290
|
-
|
|
291
|
-
var defaultReferences = [{
|
|
292
|
-
alias: "Capabilities",
|
|
293
|
-
namespace: "Org.OData.Capabilities.V1",
|
|
294
|
-
uri: ""
|
|
295
|
-
}, {
|
|
296
|
-
alias: "Aggregation",
|
|
297
|
-
namespace: "Org.OData.Aggregation.V1",
|
|
298
|
-
uri: ""
|
|
299
|
-
}, {
|
|
300
|
-
alias: "Validation",
|
|
301
|
-
namespace: "Org.OData.Validation.V1",
|
|
302
|
-
uri: ""
|
|
303
|
-
}, {
|
|
304
|
-
namespace: "Org.OData.Core.V1",
|
|
305
|
-
alias: "Core",
|
|
306
|
-
uri: ""
|
|
307
|
-
}, {
|
|
308
|
-
namespace: "Org.OData.Measures.V1",
|
|
309
|
-
alias: "Measures",
|
|
310
|
-
uri: ""
|
|
311
|
-
}, {
|
|
312
|
-
namespace: "com.sap.vocabularies.Common.v1",
|
|
313
|
-
alias: "Common",
|
|
314
|
-
uri: ""
|
|
315
|
-
}, {
|
|
316
|
-
namespace: "com.sap.vocabularies.UI.v1",
|
|
317
|
-
alias: "UI",
|
|
318
|
-
uri: ""
|
|
319
|
-
}, {
|
|
320
|
-
namespace: "com.sap.vocabularies.Session.v1",
|
|
321
|
-
alias: "Session",
|
|
322
|
-
uri: ""
|
|
323
|
-
}, {
|
|
324
|
-
namespace: "com.sap.vocabularies.Analytics.v1",
|
|
325
|
-
alias: "Analytics",
|
|
326
|
-
uri: ""
|
|
327
|
-
}, {
|
|
328
|
-
namespace: "com.sap.vocabularies.CodeList.v1",
|
|
329
|
-
alias: "CodeList",
|
|
330
|
-
uri: ""
|
|
331
|
-
}, {
|
|
332
|
-
namespace: "com.sap.vocabularies.PersonalData.v1",
|
|
333
|
-
alias: "PersonalData",
|
|
334
|
-
uri: ""
|
|
335
|
-
}, {
|
|
336
|
-
namespace: "com.sap.vocabularies.Communication.v1",
|
|
337
|
-
alias: "Communication",
|
|
338
|
-
uri: ""
|
|
339
|
-
}, {
|
|
340
|
-
namespace: "com.sap.vocabularies.HTML5.v1",
|
|
341
|
-
alias: "HTML5",
|
|
342
|
-
uri: ""
|
|
343
|
-
}];
|
|
344
|
-
_exports.defaultReferences = defaultReferences;
|
|
345
|
-
|
|
346
|
-
function alias(references, unaliasedValue) {
|
|
347
|
-
if (!references.reverseReferenceMap) {
|
|
348
|
-
references.reverseReferenceMap = references.reduce(function (map, reference) {
|
|
349
|
-
map[reference.namespace] = reference;
|
|
350
|
-
return map;
|
|
351
|
-
}, {});
|
|
352
|
-
}
|
|
12
|
+
function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
|
|
353
13
|
|
|
354
|
-
|
|
355
|
-
return unaliasedValue;
|
|
356
|
-
}
|
|
14
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
357
15
|
|
|
358
|
-
|
|
359
|
-
var namespace = unaliasedValue.substr(0, lastDotIndex);
|
|
360
|
-
var value = unaliasedValue.substr(lastDotIndex + 1);
|
|
361
|
-
var reference = references.reverseReferenceMap[namespace];
|
|
362
|
-
|
|
363
|
-
if (reference) {
|
|
364
|
-
return "".concat(reference.alias, ".").concat(value);
|
|
365
|
-
} else {
|
|
366
|
-
// Try to see if it's an annotation Path like to_SalesOrder/@UI.LineItem
|
|
367
|
-
if (unaliasedValue.indexOf("@") !== -1) {
|
|
368
|
-
var _unaliasedValue$split = unaliasedValue.split("@"),
|
|
369
|
-
_unaliasedValue$split2 = _toArray(_unaliasedValue$split),
|
|
370
|
-
preAlias = _unaliasedValue$split2[0],
|
|
371
|
-
postAlias = _unaliasedValue$split2.slice(1);
|
|
372
|
-
|
|
373
|
-
return "".concat(preAlias, "@").concat(alias(references, postAlias.join("@")));
|
|
374
|
-
} else {
|
|
375
|
-
return unaliasedValue;
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
}
|
|
16
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
379
17
|
|
|
380
|
-
|
|
381
|
-
if (!references.referenceMap) {
|
|
382
|
-
references.referenceMap = references.reduce(function (map, reference) {
|
|
383
|
-
map[reference.alias] = reference;
|
|
384
|
-
return map;
|
|
385
|
-
}, {});
|
|
386
|
-
}
|
|
18
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
387
19
|
|
|
388
|
-
|
|
389
|
-
return aliasedValue;
|
|
390
|
-
}
|
|
20
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
391
21
|
|
|
392
|
-
|
|
393
|
-
_aliasedValue$split2 = _toArray(_aliasedValue$split),
|
|
394
|
-
alias = _aliasedValue$split2[0],
|
|
395
|
-
value = _aliasedValue$split2.slice(1);
|
|
396
|
-
|
|
397
|
-
var reference = references.referenceMap[alias];
|
|
398
|
-
|
|
399
|
-
if (reference) {
|
|
400
|
-
return "".concat(reference.namespace, ".").concat(value.join("."));
|
|
401
|
-
} else {
|
|
402
|
-
// Try to see if it's an annotation Path like to_SalesOrder/@UI.LineItem
|
|
403
|
-
if (aliasedValue.indexOf("@") !== -1) {
|
|
404
|
-
var _aliasedValue$split3 = aliasedValue.split("@"),
|
|
405
|
-
_aliasedValue$split4 = _toArray(_aliasedValue$split3),
|
|
406
|
-
preAlias = _aliasedValue$split4[0],
|
|
407
|
-
postAlias = _aliasedValue$split4.slice(1);
|
|
408
|
-
|
|
409
|
-
return "".concat(preAlias, "@").concat(unalias(references, postAlias.join("@")));
|
|
410
|
-
} else {
|
|
411
|
-
return aliasedValue;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
}
|
|
22
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
415
23
|
|
|
416
|
-
|
|
417
|
-
var objectMap = {};
|
|
24
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
418
25
|
|
|
419
|
-
|
|
420
|
-
objectMap[parserOutput.schema.entityContainer.fullyQualifiedName] = parserOutput.schema.entityContainer;
|
|
421
|
-
}
|
|
26
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
422
27
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
});
|
|
426
|
-
parserOutput.schema.actions.forEach(function (action) {
|
|
427
|
-
objectMap[action.fullyQualifiedName] = action;
|
|
28
|
+
var AnnotationConverter;
|
|
29
|
+
/******/
|
|
428
30
|
|
|
429
|
-
|
|
430
|
-
|
|
31
|
+
(function () {
|
|
32
|
+
// webpackBootstrap
|
|
431
33
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
34
|
+
/******/
|
|
35
|
+
"use strict";
|
|
36
|
+
/******/
|
|
37
|
+
|
|
38
|
+
var __webpack_modules__ = {
|
|
39
|
+
/***/
|
|
40
|
+
582:
|
|
41
|
+
/***/
|
|
42
|
+
function (__unused_webpack_module, exports, __webpack_require__) {
|
|
43
|
+
Object.defineProperty(exports, "__esModule", {
|
|
44
|
+
value: true
|
|
45
|
+
});
|
|
46
|
+
exports.convert = void 0;
|
|
47
|
+
|
|
48
|
+
var utils_1 = __webpack_require__(800);
|
|
49
|
+
/**
|
|
50
|
+
*
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
var Path =
|
|
55
|
+
/**
|
|
56
|
+
* @param pathExpression
|
|
57
|
+
* @param targetName
|
|
58
|
+
* @param annotationsTerm
|
|
59
|
+
* @param term
|
|
60
|
+
*/
|
|
61
|
+
function Path(pathExpression, targetName, annotationsTerm, term) {
|
|
62
|
+
this.path = pathExpression.Path;
|
|
63
|
+
this.type = 'Path';
|
|
64
|
+
this.$target = targetName;
|
|
65
|
+
this.term = term;
|
|
66
|
+
this.annotationsTerm = annotationsTerm;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Creates a Map based on the fullyQualifiedName of each object part of the metadata.
|
|
70
|
+
*
|
|
71
|
+
* @param rawMetadata the rawMetadata we're working against
|
|
72
|
+
* @returns the objectmap for easy access to the different object of the metadata
|
|
73
|
+
*/
|
|
438
74
|
|
|
439
|
-
objectMap[unBoundActionName].actions.push(action);
|
|
440
|
-
}
|
|
441
75
|
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
});
|
|
445
|
-
});
|
|
446
|
-
parserOutput.schema.complexTypes.forEach(function (complexType) {
|
|
447
|
-
objectMap[complexType.fullyQualifiedName] = complexType;
|
|
448
|
-
complexType.properties.forEach(function (property) {
|
|
449
|
-
objectMap[property.fullyQualifiedName] = property;
|
|
450
|
-
});
|
|
451
|
-
});
|
|
452
|
-
parserOutput.schema.typeDefinitions.forEach(function (typeDefinition) {
|
|
453
|
-
objectMap[typeDefinition.fullyQualifiedName] = typeDefinition;
|
|
454
|
-
});
|
|
455
|
-
parserOutput.schema.entityTypes.forEach(function (entityType) {
|
|
456
|
-
objectMap[entityType.fullyQualifiedName] = entityType;
|
|
457
|
-
entityType.entityProperties.forEach(function (property) {
|
|
458
|
-
objectMap[property.fullyQualifiedName] = property;
|
|
459
|
-
|
|
460
|
-
if (property.type.indexOf("Edm") !== 0) {
|
|
461
|
-
// Handle complex types
|
|
462
|
-
var complexTypeDefinition = objectMap[property.type];
|
|
463
|
-
|
|
464
|
-
if (complexTypeDefinition && complexTypeDefinition._type === "ComplexType" && complexTypeDefinition.properties) {
|
|
465
|
-
complexTypeDefinition.properties.forEach(function (complexTypeProp) {
|
|
466
|
-
var complexTypePropTarget = Object.assign(complexTypeProp, {
|
|
467
|
-
_type: "Property",
|
|
468
|
-
fullyQualifiedName: property.fullyQualifiedName + "/" + complexTypeProp.name
|
|
469
|
-
});
|
|
470
|
-
objectMap[complexTypePropTarget.fullyQualifiedName] = complexTypePropTarget;
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
});
|
|
475
|
-
entityType.navigationProperties.forEach(function (navProperty) {
|
|
476
|
-
objectMap[navProperty.fullyQualifiedName] = navProperty;
|
|
477
|
-
});
|
|
478
|
-
});
|
|
479
|
-
Object.keys(parserOutput.schema.annotations).forEach(function (annotationSource) {
|
|
480
|
-
parserOutput.schema.annotations[annotationSource].forEach(function (annotationList) {
|
|
481
|
-
var currentTargetName = unalias(parserOutput.references, annotationList.target);
|
|
482
|
-
annotationList.annotations.forEach(function (annotation) {
|
|
483
|
-
var annotationFQN = "".concat(currentTargetName, "@").concat(unalias(parserOutput.references, annotation.term));
|
|
76
|
+
function buildObjectMap(rawMetadata) {
|
|
77
|
+
var _a;
|
|
484
78
|
|
|
485
|
-
|
|
486
|
-
annotationFQN += "#".concat(annotation.qualifier);
|
|
487
|
-
}
|
|
79
|
+
var objectMap = {};
|
|
488
80
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
81
|
+
if ((_a = rawMetadata.schema.entityContainer) === null || _a === void 0 ? void 0 : _a.fullyQualifiedName) {
|
|
82
|
+
objectMap[rawMetadata.schema.entityContainer.fullyQualifiedName] = rawMetadata.schema.entityContainer;
|
|
83
|
+
}
|
|
492
84
|
|
|
493
|
-
|
|
494
|
-
|
|
85
|
+
rawMetadata.schema.entitySets.forEach(function (entitySet) {
|
|
86
|
+
objectMap[entitySet.fullyQualifiedName] = entitySet;
|
|
495
87
|
});
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
return objectMap;
|
|
499
|
-
}
|
|
88
|
+
rawMetadata.schema.actions.forEach(function (action) {
|
|
89
|
+
objectMap[action.fullyQualifiedName] = action;
|
|
500
90
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
return currentTarget + unalias(defaultReferences, path);
|
|
504
|
-
} else {
|
|
505
|
-
return currentTarget + "/" + path;
|
|
506
|
-
}
|
|
507
|
-
}
|
|
91
|
+
if (action.isBound) {
|
|
92
|
+
var unBoundActionName = action.fullyQualifiedName.split('(')[0];
|
|
508
93
|
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
}
|
|
94
|
+
if (!objectMap[unBoundActionName]) {
|
|
95
|
+
objectMap[unBoundActionName] = {
|
|
96
|
+
_type: 'UnboundGenericAction',
|
|
97
|
+
actions: []
|
|
98
|
+
};
|
|
99
|
+
}
|
|
516
100
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
var annotationsTerm = arguments.length > 6 ? arguments[6] : undefined;
|
|
101
|
+
objectMap[unBoundActionName].actions.push(action);
|
|
102
|
+
var actionSplit = action.fullyQualifiedName.split('(');
|
|
103
|
+
objectMap["".concat(actionSplit[1].split(')')[0], "/").concat(actionSplit[0])] = action;
|
|
104
|
+
}
|
|
522
105
|
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
106
|
+
action.parameters.forEach(function (parameter) {
|
|
107
|
+
objectMap[parameter.fullyQualifiedName] = parameter;
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
rawMetadata.schema.complexTypes.forEach(function (complexType) {
|
|
111
|
+
objectMap[complexType.fullyQualifiedName] = complexType;
|
|
112
|
+
complexType.properties.forEach(function (property) {
|
|
113
|
+
objectMap[property.fullyQualifiedName] = property;
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
rawMetadata.schema.typeDefinitions.forEach(function (typeDefinition) {
|
|
117
|
+
objectMap[typeDefinition.fullyQualifiedName] = typeDefinition;
|
|
118
|
+
});
|
|
119
|
+
rawMetadata.schema.entityTypes.forEach(function (entityType) {
|
|
120
|
+
entityType.annotations = {}; // 'annotations' property is mandatory
|
|
121
|
+
|
|
122
|
+
objectMap[entityType.fullyQualifiedName] = entityType;
|
|
123
|
+
entityType.entityProperties.forEach(function (property) {
|
|
124
|
+
objectMap[property.fullyQualifiedName] = property; // Handle complex types
|
|
125
|
+
|
|
126
|
+
var complexTypeDefinition = objectMap[property.type];
|
|
127
|
+
|
|
128
|
+
if ((0, utils_1.isComplexTypeDefinition)(complexTypeDefinition)) {
|
|
129
|
+
complexTypeDefinition.properties.forEach(function (complexTypeProp) {
|
|
130
|
+
var complexTypePropTarget = Object.assign(complexTypeProp, {
|
|
131
|
+
_type: 'Property',
|
|
132
|
+
fullyQualifiedName: property.fullyQualifiedName + '/' + complexTypeProp.name
|
|
133
|
+
});
|
|
134
|
+
objectMap[complexTypePropTarget.fullyQualifiedName] = complexTypePropTarget;
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
entityType.navigationProperties.forEach(function (navProperty) {
|
|
139
|
+
objectMap[navProperty.fullyQualifiedName] = navProperty;
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
Object.keys(rawMetadata.schema.annotations).forEach(function (annotationSource) {
|
|
143
|
+
rawMetadata.schema.annotations[annotationSource].forEach(function (annotationList) {
|
|
144
|
+
var currentTargetName = (0, utils_1.unalias)(rawMetadata.references, annotationList.target);
|
|
145
|
+
annotationList.annotations.forEach(function (annotation) {
|
|
146
|
+
var annotationFQN = "".concat(currentTargetName, "@").concat((0, utils_1.unalias)(rawMetadata.references, annotation.term));
|
|
526
147
|
|
|
148
|
+
if (annotation.qualifier) {
|
|
149
|
+
annotationFQN += "#".concat(annotation.qualifier);
|
|
150
|
+
}
|
|
527
151
|
|
|
528
|
-
|
|
152
|
+
objectMap[annotationFQN] = annotation;
|
|
153
|
+
annotation.fullyQualifiedName = annotationFQN;
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
return objectMap;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Combine two strings representing path in the metamodel while ensuring their specificities (annotation...) are respected.
|
|
161
|
+
*
|
|
162
|
+
* @param currentTarget the current path
|
|
163
|
+
* @param path the part we want to append
|
|
164
|
+
* @returns the complete path including the extension.
|
|
165
|
+
*/
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
function combinePath(currentTarget, path) {
|
|
169
|
+
if (path.startsWith('@')) {
|
|
170
|
+
return currentTarget + (0, utils_1.unalias)(utils_1.defaultReferences, path);
|
|
171
|
+
} else {
|
|
172
|
+
return currentTarget + '/' + path;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
529
175
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
176
|
+
var ALL_ANNOTATION_ERRORS = {};
|
|
177
|
+
var ANNOTATION_ERRORS = [];
|
|
178
|
+
/**
|
|
179
|
+
* @param path
|
|
180
|
+
* @param oErrorMsg
|
|
181
|
+
*/
|
|
533
182
|
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
var _pathPart$split = pathPart.split("@"),
|
|
541
|
-
_pathPart$split2 = _slicedToArray(_pathPart$split, 2),
|
|
542
|
-
_path = _pathPart$split2[0],
|
|
543
|
-
annotationPath = _pathPart$split2[1];
|
|
544
|
-
|
|
545
|
-
targetPathSplit.push(_path);
|
|
546
|
-
targetPathSplit.push("@".concat(annotationPath));
|
|
547
|
-
} else {
|
|
548
|
-
targetPathSplit.push(pathPart);
|
|
549
|
-
}
|
|
550
|
-
});
|
|
551
|
-
var currentPath = path;
|
|
552
|
-
var currentContext = currentTarget;
|
|
553
|
-
var target = targetPathSplit.reduce(function (currentValue, pathPart) {
|
|
554
|
-
if (pathPart === "$Type" && currentValue._type === "EntityType") {
|
|
555
|
-
return currentValue;
|
|
183
|
+
function addAnnotationErrorMessage(path, oErrorMsg) {
|
|
184
|
+
if (!ALL_ANNOTATION_ERRORS[path]) {
|
|
185
|
+
ALL_ANNOTATION_ERRORS[path] = [oErrorMsg];
|
|
186
|
+
} else {
|
|
187
|
+
ALL_ANNOTATION_ERRORS[path].push(oErrorMsg);
|
|
188
|
+
}
|
|
556
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Resolves a specific path based on the objectMap.
|
|
192
|
+
*
|
|
193
|
+
* @param objectMap
|
|
194
|
+
* @param currentTarget
|
|
195
|
+
* @param path
|
|
196
|
+
* @param pathOnly
|
|
197
|
+
* @param includeVisitedObjects
|
|
198
|
+
* @param annotationsTerm
|
|
199
|
+
* @returns the resolved object
|
|
200
|
+
*/
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
function _resolveTarget(objectMap, currentTarget, path) {
|
|
204
|
+
var pathOnly = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
205
|
+
var includeVisitedObjects = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
206
|
+
var annotationsTerm = arguments.length > 5 ? arguments[5] : undefined;
|
|
207
|
+
var oErrorMsg;
|
|
208
|
+
|
|
209
|
+
if (!path) {
|
|
210
|
+
return undefined;
|
|
211
|
+
}
|
|
557
212
|
|
|
558
|
-
|
|
559
|
-
// Empty Path after an entitySet means entityType
|
|
560
|
-
if (currentValue && currentValue._type === "EntitySet" && currentValue.entityType) {
|
|
561
|
-
if (includeVisitedObjects) {
|
|
562
|
-
aVisitedObjects.push(currentValue);
|
|
563
|
-
}
|
|
213
|
+
var aVisitedObjects = [];
|
|
564
214
|
|
|
565
|
-
|
|
215
|
+
if (currentTarget && currentTarget._type === 'Property') {
|
|
216
|
+
currentTarget = objectMap[currentTarget.fullyQualifiedName.split('/')[0]];
|
|
566
217
|
}
|
|
567
218
|
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
219
|
+
path = combinePath(currentTarget.fullyQualifiedName, path);
|
|
220
|
+
var pathSplit = path.split('/');
|
|
221
|
+
var targetPathSplit = [];
|
|
222
|
+
pathSplit.forEach(function (pathPart) {
|
|
223
|
+
// Separate out the annotation
|
|
224
|
+
if (pathPart.indexOf('@') !== -1) {
|
|
225
|
+
var _pathPart$split = pathPart.split('@'),
|
|
226
|
+
_pathPart$split2 = _slicedToArray(_pathPart$split, 2),
|
|
227
|
+
splittedPath = _pathPart$split2[0],
|
|
228
|
+
annotationPath = _pathPart$split2[1];
|
|
229
|
+
|
|
230
|
+
targetPathSplit.push(splittedPath);
|
|
231
|
+
targetPathSplit.push("@".concat(annotationPath));
|
|
232
|
+
} else {
|
|
233
|
+
targetPathSplit.push(pathPart);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
var currentPath = path;
|
|
237
|
+
var currentContext = currentTarget;
|
|
238
|
+
var target = targetPathSplit.reduce(function (currentValue, pathPart) {
|
|
239
|
+
if (pathPart === '$Type' && currentValue._type === 'EntityType') {
|
|
240
|
+
return currentValue;
|
|
571
241
|
}
|
|
572
242
|
|
|
573
|
-
|
|
574
|
-
|
|
243
|
+
if ((pathPart === '@$ui5.overload' || pathPart === '0') && currentValue._type === 'Action') {
|
|
244
|
+
return currentValue;
|
|
245
|
+
}
|
|
575
246
|
|
|
576
|
-
|
|
577
|
-
|
|
247
|
+
if (pathPart.length === 0) {
|
|
248
|
+
// Empty Path after an entitySet means entityType
|
|
249
|
+
if (currentValue && currentValue._type === 'EntitySet' && currentValue.entityType) {
|
|
250
|
+
if (includeVisitedObjects) {
|
|
251
|
+
aVisitedObjects.push(currentValue);
|
|
252
|
+
}
|
|
578
253
|
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
}
|
|
254
|
+
currentValue = currentValue.entityType;
|
|
255
|
+
}
|
|
582
256
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
return currentValue;
|
|
588
|
-
} else if (currentValue._type === "EntitySet" && currentValue.entityType) {
|
|
589
|
-
currentPath = combinePath(currentValue.entityTypeName, pathPart);
|
|
590
|
-
} else if (currentValue._type === "NavigationProperty" && currentValue.targetTypeName) {
|
|
591
|
-
currentPath = combinePath(currentValue.targetTypeName, pathPart);
|
|
592
|
-
} else if (currentValue._type === "NavigationProperty" && currentValue.targetType) {
|
|
593
|
-
currentPath = combinePath(currentValue.targetType.fullyQualifiedName, pathPart);
|
|
594
|
-
} else if (currentValue._type === "Property") {
|
|
595
|
-
// ComplexType or Property
|
|
596
|
-
if (currentValue.targetType) {
|
|
597
|
-
currentPath = combinePath(currentValue.targetType.fullyQualifiedName, pathPart);
|
|
598
|
-
} else {
|
|
599
|
-
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
600
|
-
}
|
|
601
|
-
} else if (currentValue._type === "Action" && currentValue.isBound) {
|
|
602
|
-
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
257
|
+
if (currentValue && currentValue._type === 'NavigationProperty' && currentValue.targetType) {
|
|
258
|
+
if (includeVisitedObjects) {
|
|
259
|
+
aVisitedObjects.push(currentValue);
|
|
260
|
+
}
|
|
603
261
|
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
}
|
|
607
|
-
} else if (currentValue._type === "ActionParameter" && currentValue.isEntitySet) {
|
|
608
|
-
currentPath = combinePath(currentValue.type, pathPart);
|
|
609
|
-
} else if (currentValue._type === "ActionParameter" && !currentValue.isEntitySet) {
|
|
610
|
-
currentPath = combinePath(currentTarget.fullyQualifiedName.substr(0, currentTarget.fullyQualifiedName.lastIndexOf("/")), pathPart);
|
|
262
|
+
currentValue = currentValue.targetType;
|
|
263
|
+
}
|
|
611
264
|
|
|
612
|
-
|
|
613
|
-
|
|
265
|
+
return currentValue;
|
|
266
|
+
}
|
|
614
267
|
|
|
615
|
-
if (
|
|
616
|
-
|
|
268
|
+
if (includeVisitedObjects && currentValue !== null && currentValue !== undefined) {
|
|
269
|
+
aVisitedObjects.push(currentValue);
|
|
617
270
|
}
|
|
618
271
|
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
272
|
+
if (!currentValue) {
|
|
273
|
+
currentPath = pathPart;
|
|
274
|
+
} else if (currentValue._type === 'EntitySet' && pathPart === '$Type') {
|
|
275
|
+
currentValue = currentValue.targetType;
|
|
276
|
+
return currentValue;
|
|
277
|
+
} else if (currentValue._type === 'EntitySet' && currentValue.entityType) {
|
|
278
|
+
currentPath = combinePath(currentValue.entityTypeName, pathPart);
|
|
279
|
+
} else if (currentValue._type === 'NavigationProperty') {
|
|
280
|
+
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
281
|
+
|
|
282
|
+
if (!objectMap[currentPath]) {
|
|
283
|
+
// Fallback log error
|
|
284
|
+
currentPath = combinePath(currentValue.targetTypeName, pathPart);
|
|
632
285
|
}
|
|
633
|
-
})
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
286
|
+
} else if (currentValue._type === 'Property') {
|
|
287
|
+
// ComplexType or Property
|
|
288
|
+
if (currentValue.targetType) {
|
|
289
|
+
currentPath = combinePath(currentValue.targetType.fullyQualifiedName, pathPart);
|
|
290
|
+
} else {
|
|
291
|
+
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
292
|
+
}
|
|
293
|
+
} else if (currentValue._type === 'Action' && currentValue.isBound) {
|
|
294
|
+
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
639
295
|
|
|
640
|
-
|
|
641
|
-
|
|
296
|
+
if (pathPart === '$Parameter') {
|
|
297
|
+
return currentValue.parameters;
|
|
298
|
+
}
|
|
642
299
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
300
|
+
if (!objectMap[currentPath]) {
|
|
301
|
+
currentPath = combinePath(currentValue.sourceType, pathPart);
|
|
302
|
+
}
|
|
303
|
+
} else if (currentValue._type === 'ActionParameter' && currentValue.isEntitySet) {
|
|
304
|
+
currentPath = combinePath(currentValue.type, pathPart);
|
|
305
|
+
} else if (currentValue._type === 'ActionParameter' && !currentValue.isEntitySet) {
|
|
306
|
+
currentPath = combinePath(currentTarget.fullyQualifiedName.substring(0, currentTarget.fullyQualifiedName.lastIndexOf('/')), pathPart);
|
|
307
|
+
|
|
308
|
+
if (!objectMap[currentPath]) {
|
|
309
|
+
var lastIdx = currentTarget.fullyQualifiedName.lastIndexOf('/');
|
|
310
|
+
|
|
311
|
+
if (lastIdx === -1) {
|
|
312
|
+
lastIdx = currentTarget.fullyQualifiedName.length;
|
|
646
313
|
}
|
|
647
|
-
});
|
|
648
314
|
|
|
649
|
-
|
|
650
|
-
|
|
315
|
+
currentPath = combinePath(objectMap[currentTarget.fullyQualifiedName.substring(0, lastIdx)].sourceType, pathPart);
|
|
316
|
+
}
|
|
317
|
+
} else {
|
|
318
|
+
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
651
319
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
} else if (currentValue.hasOwnProperty("$Type") && !objectMap[currentPath]) {
|
|
657
|
-
// This is now an annotation value
|
|
658
|
-
var entityType = objectMap[currentValue.fullyQualifiedName.split("@")[0]];
|
|
320
|
+
if (pathPart !== 'name' && currentValue[pathPart] !== undefined) {
|
|
321
|
+
return currentValue[pathPart];
|
|
322
|
+
} else if (pathPart === '$AnnotationPath' && currentValue.$target) {
|
|
323
|
+
var contextToResolve = objectMap[currentValue.fullyQualifiedName.split('@')[0]];
|
|
659
324
|
|
|
660
|
-
|
|
661
|
-
currentPath = combinePath(entityType.fullyQualifiedName, pathPart);
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
}
|
|
325
|
+
var subTarget = _resolveTarget(objectMap, contextToResolve, currentValue.value, false, true);
|
|
665
326
|
|
|
666
|
-
|
|
667
|
-
|
|
327
|
+
subTarget.visitedObjects.forEach(function (visitedSubObject) {
|
|
328
|
+
if (aVisitedObjects.indexOf(visitedSubObject) === -1) {
|
|
329
|
+
aVisitedObjects.push(visitedSubObject);
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
return subTarget.target;
|
|
333
|
+
} else if (pathPart === '$Path' && currentValue.$target) {
|
|
334
|
+
currentContext = aVisitedObjects.concat().reverse().find(function (obj) {
|
|
335
|
+
return obj._type === 'EntityType' || obj._type === 'EntitySet' || obj._type === 'NavigationProperty';
|
|
336
|
+
});
|
|
668
337
|
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
var oErrorMsg = {
|
|
672
|
-
message: "Unable to resolve the path expression: " + "\n" + path + "\n" + "\n" + "Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n" + "<Annotation Term = " + annotationsTerm + ">" + "\n" + "<Record Type = " + annotationType + ">" + "\n" + "<AnnotationPath = " + path + ">"
|
|
673
|
-
};
|
|
674
|
-
addAnnotationErrorMessage(path, oErrorMsg);
|
|
675
|
-
} else {
|
|
676
|
-
var oErrorMsg = {
|
|
677
|
-
message: "Unable to resolve the path expression: " + path + "\n" + "\n" + "Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n" + "<Annotation Term = " + pathSplit[0] + ">" + "\n" + "<PropertyValue Path= " + pathSplit[1] + ">"
|
|
678
|
-
};
|
|
679
|
-
addAnnotationErrorMessage(path, oErrorMsg);
|
|
680
|
-
} // console.log("Missing target " + path);
|
|
338
|
+
if (currentContext) {
|
|
339
|
+
var _subTarget = _resolveTarget(objectMap, currentContext, currentValue.path, false, true);
|
|
681
340
|
|
|
682
|
-
|
|
341
|
+
_subTarget.visitedObjects.forEach(function (visitedSubObject) {
|
|
342
|
+
if (aVisitedObjects.indexOf(visitedSubObject) === -1) {
|
|
343
|
+
aVisitedObjects.push(visitedSubObject);
|
|
344
|
+
}
|
|
345
|
+
});
|
|
683
346
|
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
}
|
|
347
|
+
return _subTarget.target;
|
|
348
|
+
}
|
|
687
349
|
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
350
|
+
return currentValue.$target;
|
|
351
|
+
} else if (pathPart.startsWith('$Path') && currentValue.$target) {
|
|
352
|
+
var intermediateTarget = currentValue.$target;
|
|
353
|
+
currentPath = combinePath(intermediateTarget.fullyQualifiedName, pathPart.substring(5));
|
|
354
|
+
} else if (currentValue.hasOwnProperty('$Type') && !objectMap[currentPath]) {
|
|
355
|
+
// This is now an annotation value
|
|
356
|
+
var entityType = objectMap[currentValue.fullyQualifiedName.split('@')[0]];
|
|
694
357
|
|
|
695
|
-
|
|
696
|
-
|
|
358
|
+
if (entityType) {
|
|
359
|
+
currentPath = combinePath(entityType.fullyQualifiedName, pathPart);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
697
363
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
}
|
|
364
|
+
return objectMap[currentPath];
|
|
365
|
+
}, null);
|
|
701
366
|
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
367
|
+
if (!target) {
|
|
368
|
+
if (annotationsTerm) {
|
|
369
|
+
var annotationType = inferTypeFromTerm(annotationsTerm, currentTarget);
|
|
370
|
+
oErrorMsg = {
|
|
371
|
+
message: 'Unable to resolve the path expression: ' + '\n' + path + '\n' + '\n' + 'Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n' + '<Annotation Term = ' + annotationsTerm + '>' + '\n' + '<Record Type = ' + annotationType + '>' + '\n' + '<AnnotationPath = ' + path + '>'
|
|
372
|
+
};
|
|
373
|
+
addAnnotationErrorMessage(path, oErrorMsg);
|
|
374
|
+
} else {
|
|
375
|
+
oErrorMsg = {
|
|
376
|
+
message: 'Unable to resolve the path expression: ' + path + '\n' + '\n' + 'Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n' + '<Annotation Term = ' + pathSplit[0] + '>' + '\n' + '<PropertyValue Path= ' + pathSplit[1] + '>'
|
|
377
|
+
};
|
|
378
|
+
addAnnotationErrorMessage(path, oErrorMsg);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
if (pathOnly) {
|
|
383
|
+
return currentPath;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
if (includeVisitedObjects) {
|
|
387
|
+
return {
|
|
388
|
+
visitedObjects: aVisitedObjects,
|
|
389
|
+
target: target
|
|
390
|
+
};
|
|
391
|
+
}
|
|
706
392
|
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
393
|
+
return target;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Typeguard to check if the path contains an annotation.
|
|
397
|
+
*
|
|
398
|
+
* @param pathStr the path to evaluate
|
|
399
|
+
* @returns true if there is an annotation in the path.
|
|
400
|
+
*/
|
|
710
401
|
|
|
711
|
-
case "Int":
|
|
712
|
-
return propertyValue.Int;
|
|
713
402
|
|
|
714
|
-
|
|
715
|
-
return
|
|
403
|
+
function isAnnotationPath(pathStr) {
|
|
404
|
+
return pathStr.indexOf('@') !== -1;
|
|
405
|
+
}
|
|
716
406
|
|
|
717
|
-
|
|
718
|
-
|
|
407
|
+
function parseValue(propertyValue, valueFQN, objectMap, context) {
|
|
408
|
+
if (propertyValue === undefined) {
|
|
409
|
+
return undefined;
|
|
410
|
+
}
|
|
719
411
|
|
|
720
|
-
|
|
721
|
-
|
|
412
|
+
switch (propertyValue.type) {
|
|
413
|
+
case 'String':
|
|
414
|
+
return propertyValue.String;
|
|
415
|
+
|
|
416
|
+
case 'Int':
|
|
417
|
+
return propertyValue.Int;
|
|
418
|
+
|
|
419
|
+
case 'Bool':
|
|
420
|
+
return propertyValue.Bool;
|
|
421
|
+
|
|
422
|
+
case 'Decimal':
|
|
423
|
+
return (0, utils_1.Decimal)(propertyValue.Decimal);
|
|
424
|
+
|
|
425
|
+
case 'Date':
|
|
426
|
+
return propertyValue.Date;
|
|
427
|
+
|
|
428
|
+
case 'EnumMember':
|
|
429
|
+
return (0, utils_1.alias)(context.rawMetadata.references, propertyValue.EnumMember);
|
|
430
|
+
|
|
431
|
+
case 'PropertyPath':
|
|
432
|
+
return {
|
|
433
|
+
type: 'PropertyPath',
|
|
434
|
+
value: propertyValue.PropertyPath,
|
|
435
|
+
fullyQualifiedName: valueFQN,
|
|
436
|
+
$target: _resolveTarget(objectMap, context.currentTarget, propertyValue.PropertyPath, false, false, context.currentTerm)
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
case 'NavigationPropertyPath':
|
|
440
|
+
return {
|
|
441
|
+
type: 'NavigationPropertyPath',
|
|
442
|
+
value: propertyValue.NavigationPropertyPath,
|
|
443
|
+
fullyQualifiedName: valueFQN,
|
|
444
|
+
$target: _resolveTarget(objectMap, context.currentTarget, propertyValue.NavigationPropertyPath, false, false, context.currentTerm)
|
|
445
|
+
};
|
|
446
|
+
|
|
447
|
+
case 'AnnotationPath':
|
|
448
|
+
var annotationTarget = _resolveTarget(objectMap, context.currentTarget, (0, utils_1.unalias)(context.rawMetadata.references, propertyValue.AnnotationPath), true, false, context.currentTerm);
|
|
449
|
+
|
|
450
|
+
var annotationPath = {
|
|
451
|
+
type: 'AnnotationPath',
|
|
452
|
+
value: propertyValue.AnnotationPath,
|
|
453
|
+
fullyQualifiedName: valueFQN,
|
|
454
|
+
$target: annotationTarget,
|
|
455
|
+
annotationsTerm: context.currentTerm,
|
|
456
|
+
term: '',
|
|
457
|
+
path: ''
|
|
458
|
+
};
|
|
459
|
+
context.unresolvedAnnotations.push({
|
|
460
|
+
inline: false,
|
|
461
|
+
toResolve: annotationPath
|
|
462
|
+
});
|
|
463
|
+
return annotationPath;
|
|
722
464
|
|
|
723
|
-
|
|
724
|
-
|
|
465
|
+
case 'Path':
|
|
466
|
+
var $target = _resolveTarget(objectMap, context.currentTarget, propertyValue.Path, true, false, context.currentTerm);
|
|
725
467
|
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
468
|
+
var path = new Path(propertyValue, $target, context.currentTerm, '');
|
|
469
|
+
context.unresolvedAnnotations.push({
|
|
470
|
+
inline: isAnnotationPath(propertyValue.Path),
|
|
471
|
+
toResolve: path
|
|
472
|
+
});
|
|
473
|
+
return path;
|
|
474
|
+
|
|
475
|
+
case 'Record':
|
|
476
|
+
return parseRecord(propertyValue.Record, valueFQN, objectMap, context);
|
|
477
|
+
|
|
478
|
+
case 'Collection':
|
|
479
|
+
return parseCollection(propertyValue.Collection, valueFQN, objectMap, context);
|
|
480
|
+
|
|
481
|
+
case 'Apply':
|
|
482
|
+
case 'Null':
|
|
483
|
+
case 'Not':
|
|
484
|
+
case 'Eq':
|
|
485
|
+
case 'Ne':
|
|
486
|
+
case 'Gt':
|
|
487
|
+
case 'Ge':
|
|
488
|
+
case 'Lt':
|
|
489
|
+
case 'Le':
|
|
490
|
+
case 'If':
|
|
491
|
+
case 'And':
|
|
492
|
+
case 'Or':
|
|
493
|
+
default:
|
|
494
|
+
return propertyValue;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Infer the type of a term based on its type.
|
|
499
|
+
*
|
|
500
|
+
* @param annotationsTerm The annotation term
|
|
501
|
+
* @param annotationTarget the annotation target
|
|
502
|
+
* @returns the inferred type.
|
|
503
|
+
*/
|
|
733
504
|
|
|
734
|
-
case "NavigationPropertyPath":
|
|
735
|
-
return {
|
|
736
|
-
type: "NavigationPropertyPath",
|
|
737
|
-
value: propertyValue.NavigationPropertyPath,
|
|
738
|
-
fullyQualifiedName: valueFQN,
|
|
739
|
-
$target: resolveTarget(objectMap, currentTarget, propertyValue.NavigationPropertyPath, false, false, annotationType, annotationsTerm)
|
|
740
|
-
};
|
|
741
505
|
|
|
742
|
-
|
|
743
|
-
var
|
|
744
|
-
var
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
fullyQualifiedName: valueFQN,
|
|
748
|
-
$target: annotationTarget,
|
|
749
|
-
annotationType: annotationType,
|
|
750
|
-
annotationsTerm: annotationsTerm,
|
|
751
|
-
term: "",
|
|
752
|
-
path: ""
|
|
506
|
+
function inferTypeFromTerm(annotationsTerm, annotationTarget) {
|
|
507
|
+
var targetType = utils_1.TermToTypes[annotationsTerm];
|
|
508
|
+
var oErrorMsg = {
|
|
509
|
+
isError: false,
|
|
510
|
+
message: "The type of the record used within the term ".concat(annotationsTerm, " was not defined and was inferred as ").concat(targetType, ".\nHint: If possible, try to maintain the Type property for each Record.\n<Annotations Target=\"").concat(annotationTarget, "\">\n\t<Annotation Term=\"").concat(annotationsTerm, "\">\n\t\t<Record>...</Record>\n\t</Annotation>\n</Annotations>")
|
|
753
511
|
};
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
});
|
|
758
|
-
return annotationPath;
|
|
759
|
-
|
|
760
|
-
case "Path":
|
|
761
|
-
var $target = resolveTarget(objectMap, currentTarget, propertyValue.Path, true, false, annotationType, annotationsTerm);
|
|
762
|
-
var path = new Path(propertyValue, $target, annotationsTerm, annotationType, "");
|
|
763
|
-
toResolve.push({
|
|
764
|
-
inline: isAnnotationPath(propertyValue.Path),
|
|
765
|
-
toResolve: path
|
|
766
|
-
});
|
|
767
|
-
return path;
|
|
768
|
-
|
|
769
|
-
case "Record":
|
|
770
|
-
return parseRecord(propertyValue.Record, valueFQN, parserOutput, currentTarget, objectMap, toResolve, annotationSource, unresolvedAnnotations, annotationType, annotationsTerm);
|
|
771
|
-
|
|
772
|
-
case "Collection":
|
|
773
|
-
return parseCollection(propertyValue.Collection, valueFQN, parserOutput, currentTarget, objectMap, toResolve, annotationSource, unresolvedAnnotations, annotationType, annotationsTerm);
|
|
774
|
-
|
|
775
|
-
case "Apply":
|
|
776
|
-
case "Null":
|
|
777
|
-
case "Not":
|
|
778
|
-
case "Eq":
|
|
779
|
-
case "Ne":
|
|
780
|
-
case "Gt":
|
|
781
|
-
case "Ge":
|
|
782
|
-
case "Lt":
|
|
783
|
-
case "Le":
|
|
784
|
-
case "If":
|
|
785
|
-
case "And":
|
|
786
|
-
case "Or":
|
|
787
|
-
return propertyValue;
|
|
788
|
-
}
|
|
789
|
-
}
|
|
512
|
+
addAnnotationErrorMessage(annotationTarget + '/' + annotationsTerm, oErrorMsg);
|
|
513
|
+
return targetType;
|
|
514
|
+
}
|
|
790
515
|
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
isError: false,
|
|
795
|
-
message: "The type of the record used within the term ".concat(annotationsTerm, " was not defined and was inferred as ").concat(targetType, ".\nHint: If possible, try to maintain the Type property for each Record.\n<Annotations Target=\"").concat(annotationTarget, "\">\n\t<Annotation Term=\"").concat(annotationsTerm, "\">\n\t\t<Record>...</Record>\n\t</Annotation>\n</Annotations>")
|
|
796
|
-
};
|
|
797
|
-
addAnnotationErrorMessage(annotationTarget + "/" + annotationsTerm, oErrorMsg);
|
|
798
|
-
return targetType;
|
|
799
|
-
}
|
|
516
|
+
function isDataFieldWithForAction(annotationContent, annotationTerm) {
|
|
517
|
+
return annotationContent.hasOwnProperty('Action') && (annotationTerm.$Type === 'com.sap.vocabularies.UI.v1.DataFieldForAction' || annotationTerm.$Type === 'com.sap.vocabularies.UI.v1.DataFieldWithAction');
|
|
518
|
+
}
|
|
800
519
|
|
|
801
|
-
|
|
802
|
-
|
|
520
|
+
function parseRecordType(recordDefinition, context) {
|
|
521
|
+
var targetType;
|
|
803
522
|
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
var annotationTerm = {
|
|
811
|
-
$Type: targetType,
|
|
812
|
-
fullyQualifiedName: currentFQN
|
|
813
|
-
};
|
|
814
|
-
var annotationContent = {};
|
|
523
|
+
if (!recordDefinition.type && context.currentTerm) {
|
|
524
|
+
targetType = inferTypeFromTerm(context.currentTerm, context.currentTarget.fullyQualifiedName);
|
|
525
|
+
} else {
|
|
526
|
+
targetType = (0, utils_1.unalias)(context.rawMetadata.references, recordDefinition.type);
|
|
527
|
+
}
|
|
815
528
|
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
target: currentFQN,
|
|
819
|
-
annotations: recordDefinition.annotations,
|
|
820
|
-
__source: annotationSource
|
|
821
|
-
};
|
|
822
|
-
unresolvedAnnotations.push(subAnnotationList);
|
|
823
|
-
}
|
|
529
|
+
return targetType;
|
|
530
|
+
}
|
|
824
531
|
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
532
|
+
function parseRecord(recordDefinition, currentFQN, objectMap, context) {
|
|
533
|
+
var targetType = parseRecordType(recordDefinition, context);
|
|
534
|
+
var annotationTerm = {
|
|
535
|
+
$Type: targetType,
|
|
536
|
+
fullyQualifiedName: currentFQN
|
|
537
|
+
};
|
|
538
|
+
var annotationContent = {};
|
|
828
539
|
|
|
829
|
-
if (
|
|
830
|
-
var
|
|
831
|
-
target:
|
|
832
|
-
annotations:
|
|
833
|
-
__source:
|
|
540
|
+
if (Array.isArray(recordDefinition.annotations)) {
|
|
541
|
+
var subAnnotationList = {
|
|
542
|
+
target: currentFQN,
|
|
543
|
+
annotations: recordDefinition.annotations,
|
|
544
|
+
__source: context.currentSource
|
|
834
545
|
};
|
|
835
|
-
|
|
546
|
+
context.additionalAnnotations.push(subAnnotationList);
|
|
836
547
|
}
|
|
837
548
|
|
|
838
|
-
if (
|
|
839
|
-
|
|
549
|
+
if (recordDefinition.propertyValues) {
|
|
550
|
+
recordDefinition.propertyValues.forEach(function (propertyValue) {
|
|
551
|
+
annotationContent[propertyValue.name] = parseValue(propertyValue.value, "".concat(currentFQN, "/").concat(propertyValue.name), objectMap, context);
|
|
552
|
+
|
|
553
|
+
if (Array.isArray(propertyValue.annotations)) {
|
|
554
|
+
var _subAnnotationList = {
|
|
555
|
+
target: "".concat(currentFQN, "/").concat(propertyValue.name),
|
|
556
|
+
annotations: propertyValue.annotations,
|
|
557
|
+
__source: context.currentSource
|
|
558
|
+
};
|
|
559
|
+
context.additionalAnnotations.push(_subAnnotationList);
|
|
560
|
+
}
|
|
840
561
|
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
562
|
+
if (isDataFieldWithForAction(annotationContent, annotationTerm)) {
|
|
563
|
+
annotationContent.ActionTarget = context.currentTarget.actions && context.currentTarget.actions[annotationContent.Action] || objectMap[annotationContent.Action];
|
|
564
|
+
|
|
565
|
+
if (!annotationContent.ActionTarget) {
|
|
566
|
+
// Add to diagnostics debugger;
|
|
567
|
+
ANNOTATION_ERRORS.push({
|
|
568
|
+
message: 'Unable to resolve the action ' + annotationContent.Action + ' defined for ' + annotationTerm.fullyQualifiedName
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
});
|
|
847
573
|
}
|
|
848
|
-
});
|
|
849
|
-
}
|
|
850
574
|
|
|
851
|
-
|
|
852
|
-
|
|
575
|
+
return Object.assign(annotationTerm, annotationContent);
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Retrieve or infer the collection type based on its content.
|
|
579
|
+
*
|
|
580
|
+
* @param collectionDefinition
|
|
581
|
+
* @returns the type of the collection
|
|
582
|
+
*/
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
function getOrInferCollectionType(collectionDefinition) {
|
|
586
|
+
var type = collectionDefinition.type;
|
|
587
|
+
|
|
588
|
+
if (type === undefined && collectionDefinition.length > 0) {
|
|
589
|
+
var firstColItem = collectionDefinition[0];
|
|
590
|
+
|
|
591
|
+
if (firstColItem.hasOwnProperty('PropertyPath')) {
|
|
592
|
+
type = 'PropertyPath';
|
|
593
|
+
} else if (firstColItem.hasOwnProperty('Path')) {
|
|
594
|
+
type = 'Path';
|
|
595
|
+
} else if (firstColItem.hasOwnProperty('AnnotationPath')) {
|
|
596
|
+
type = 'AnnotationPath';
|
|
597
|
+
} else if (firstColItem.hasOwnProperty('NavigationPropertyPath')) {
|
|
598
|
+
type = 'NavigationPropertyPath';
|
|
599
|
+
} else if (typeof firstColItem === 'object' && (firstColItem.hasOwnProperty('type') || firstColItem.hasOwnProperty('propertyValues'))) {
|
|
600
|
+
type = 'Record';
|
|
601
|
+
} else if (typeof firstColItem === 'string') {
|
|
602
|
+
type = 'String';
|
|
603
|
+
}
|
|
604
|
+
} else if (type === undefined) {
|
|
605
|
+
type = 'EmptyCollection';
|
|
606
|
+
}
|
|
853
607
|
|
|
854
|
-
|
|
855
|
-
var type = collectionDefinition.type;
|
|
856
|
-
|
|
857
|
-
if (type === undefined && collectionDefinition.length > 0) {
|
|
858
|
-
var firstColItem = collectionDefinition[0];
|
|
859
|
-
|
|
860
|
-
if (firstColItem.hasOwnProperty("PropertyPath")) {
|
|
861
|
-
type = "PropertyPath";
|
|
862
|
-
} else if (firstColItem.hasOwnProperty("Path")) {
|
|
863
|
-
type = "Path";
|
|
864
|
-
} else if (firstColItem.hasOwnProperty("AnnotationPath")) {
|
|
865
|
-
type = "AnnotationPath";
|
|
866
|
-
} else if (firstColItem.hasOwnProperty("NavigationPropertyPath")) {
|
|
867
|
-
type = "NavigationPropertyPath";
|
|
868
|
-
} else if (typeof firstColItem === "object" && (firstColItem.hasOwnProperty("type") || firstColItem.hasOwnProperty("propertyValues"))) {
|
|
869
|
-
type = "Record";
|
|
870
|
-
} else if (typeof firstColItem === "string") {
|
|
871
|
-
type = "String";
|
|
608
|
+
return type;
|
|
872
609
|
}
|
|
873
|
-
} else if (type === undefined) {
|
|
874
|
-
type = "EmptyCollection";
|
|
875
|
-
}
|
|
876
610
|
|
|
877
|
-
|
|
878
|
-
|
|
611
|
+
function parseCollection(collectionDefinition, parentFQN, objectMap, context) {
|
|
612
|
+
var collectionDefinitionType = getOrInferCollectionType(collectionDefinition);
|
|
613
|
+
|
|
614
|
+
switch (collectionDefinitionType) {
|
|
615
|
+
case 'PropertyPath':
|
|
616
|
+
return collectionDefinition.map(function (propertyPath, propertyIdx) {
|
|
617
|
+
return {
|
|
618
|
+
type: 'PropertyPath',
|
|
619
|
+
value: propertyPath.PropertyPath,
|
|
620
|
+
fullyQualifiedName: "".concat(parentFQN, "/").concat(propertyIdx),
|
|
621
|
+
$target: _resolveTarget(objectMap, context.currentTarget, propertyPath.PropertyPath, false, false, context.currentTerm)
|
|
622
|
+
};
|
|
623
|
+
});
|
|
879
624
|
|
|
880
|
-
|
|
881
|
-
|
|
625
|
+
case 'Path':
|
|
626
|
+
return collectionDefinition.map(function (pathValue) {
|
|
627
|
+
var $target = _resolveTarget(objectMap, context.currentTarget, pathValue.Path, true, false, context.currentTerm);
|
|
882
628
|
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
$target: resolveTarget(objectMap, currentTarget, propertyPath.PropertyPath, false, false, annotationType, annotationsTerm)
|
|
891
|
-
};
|
|
892
|
-
});
|
|
629
|
+
var path = new Path(pathValue, $target, context.currentTerm, '');
|
|
630
|
+
context.unresolvedAnnotations.push({
|
|
631
|
+
inline: isAnnotationPath(pathValue.Path),
|
|
632
|
+
toResolve: path
|
|
633
|
+
});
|
|
634
|
+
return path;
|
|
635
|
+
});
|
|
893
636
|
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
637
|
+
case 'AnnotationPath':
|
|
638
|
+
return collectionDefinition.map(function (annotationPath, annotationIdx) {
|
|
639
|
+
var annotationTarget = _resolveTarget(objectMap, context.currentTarget, annotationPath.AnnotationPath, true, false, context.currentTerm);
|
|
640
|
+
|
|
641
|
+
var annotationCollectionElement = {
|
|
642
|
+
type: 'AnnotationPath',
|
|
643
|
+
value: annotationPath.AnnotationPath,
|
|
644
|
+
fullyQualifiedName: "".concat(parentFQN, "/").concat(annotationIdx),
|
|
645
|
+
$target: annotationTarget,
|
|
646
|
+
annotationsTerm: context.currentTerm,
|
|
647
|
+
term: '',
|
|
648
|
+
path: ''
|
|
649
|
+
};
|
|
650
|
+
context.unresolvedAnnotations.push({
|
|
651
|
+
inline: false,
|
|
652
|
+
toResolve: annotationCollectionElement
|
|
653
|
+
});
|
|
654
|
+
return annotationCollectionElement;
|
|
655
|
+
});
|
|
904
656
|
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
annotationsTerm: annotationsTerm,
|
|
915
|
-
term: "",
|
|
916
|
-
path: ""
|
|
917
|
-
};
|
|
918
|
-
toResolve.push({
|
|
919
|
-
inline: false,
|
|
920
|
-
toResolve: annotationCollectionElement
|
|
921
|
-
});
|
|
922
|
-
return annotationCollectionElement;
|
|
923
|
-
});
|
|
657
|
+
case 'NavigationPropertyPath':
|
|
658
|
+
return collectionDefinition.map(function (navPropertyPath, navPropIdx) {
|
|
659
|
+
return {
|
|
660
|
+
type: 'NavigationPropertyPath',
|
|
661
|
+
value: navPropertyPath.NavigationPropertyPath,
|
|
662
|
+
fullyQualifiedName: "".concat(parentFQN, "/").concat(navPropIdx),
|
|
663
|
+
$target: _resolveTarget(objectMap, context.currentTarget, navPropertyPath.NavigationPropertyPath, false, false, context.currentTerm)
|
|
664
|
+
};
|
|
665
|
+
});
|
|
924
666
|
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
value: navPropertyPath.NavigationPropertyPath,
|
|
930
|
-
fullyQualifiedName: "".concat(parentFQN, "/").concat(navPropIdx),
|
|
931
|
-
$target: resolveTarget(objectMap, currentTarget, navPropertyPath.NavigationPropertyPath, false, false, annotationType, annotationsTerm)
|
|
932
|
-
};
|
|
933
|
-
});
|
|
667
|
+
case 'Record':
|
|
668
|
+
return collectionDefinition.map(function (recordDefinition, recordIdx) {
|
|
669
|
+
return parseRecord(recordDefinition, "".concat(parentFQN, "/").concat(recordIdx), objectMap, context);
|
|
670
|
+
});
|
|
934
671
|
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
672
|
+
case 'Apply':
|
|
673
|
+
case 'Null':
|
|
674
|
+
case 'If':
|
|
675
|
+
case 'Eq':
|
|
676
|
+
case 'Ne':
|
|
677
|
+
case 'Lt':
|
|
678
|
+
case 'Gt':
|
|
679
|
+
case 'Le':
|
|
680
|
+
case 'Ge':
|
|
681
|
+
case 'Not':
|
|
682
|
+
case 'And':
|
|
683
|
+
case 'Or':
|
|
684
|
+
return collectionDefinition.map(function (ifValue) {
|
|
685
|
+
return ifValue;
|
|
686
|
+
});
|
|
939
687
|
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
case "And":
|
|
951
|
-
case "Or":
|
|
952
|
-
return collectionDefinition.map(function (ifValue) {
|
|
953
|
-
return ifValue;
|
|
954
|
-
});
|
|
688
|
+
case 'String':
|
|
689
|
+
return collectionDefinition.map(function (stringValue) {
|
|
690
|
+
if (typeof stringValue === 'string') {
|
|
691
|
+
return stringValue;
|
|
692
|
+
} else if (stringValue === undefined) {
|
|
693
|
+
return stringValue;
|
|
694
|
+
} else {
|
|
695
|
+
return stringValue.String;
|
|
696
|
+
}
|
|
697
|
+
});
|
|
955
698
|
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
} else if (stringValue === undefined) {
|
|
961
|
-
return stringValue;
|
|
962
|
-
} else {
|
|
963
|
-
return stringValue.String;
|
|
964
|
-
}
|
|
965
|
-
});
|
|
699
|
+
default:
|
|
700
|
+
if (collectionDefinition.length === 0) {
|
|
701
|
+
return [];
|
|
702
|
+
}
|
|
966
703
|
|
|
967
|
-
|
|
968
|
-
if (collectionDefinition.length === 0) {
|
|
969
|
-
return [];
|
|
704
|
+
throw new Error('Unsupported case');
|
|
970
705
|
}
|
|
706
|
+
}
|
|
971
707
|
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
708
|
+
function convertAnnotation(annotation, objectMap, context) {
|
|
709
|
+
if (annotation.record) {
|
|
710
|
+
return parseRecord(annotation.record, annotation.fullyQualifiedName, objectMap, context);
|
|
711
|
+
} else if (annotation.collection === undefined) {
|
|
712
|
+
if (annotation.value) {
|
|
713
|
+
return parseValue(annotation.value, annotation.fullyQualifiedName, objectMap, context);
|
|
714
|
+
} else {
|
|
715
|
+
return true;
|
|
716
|
+
}
|
|
717
|
+
} else if (annotation.collection) {
|
|
718
|
+
var collection = parseCollection(annotation.collection, annotation.fullyQualifiedName, objectMap, context);
|
|
719
|
+
collection.fullyQualifiedName = annotation.fullyQualifiedName;
|
|
720
|
+
return collection;
|
|
721
|
+
} else {
|
|
722
|
+
throw new Error('Unsupported case');
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
/**
|
|
726
|
+
* Creates a resolvePath function for a given entityType.
|
|
727
|
+
*
|
|
728
|
+
* @param entityType The entityType for which the function should be created
|
|
729
|
+
* @param objectMap The current objectMap
|
|
730
|
+
* @returns the resolvePath function that starts at the entityType
|
|
731
|
+
*/
|
|
732
|
+
|
|
733
|
+
|
|
734
|
+
function createResolvePathFn(entityType, objectMap) {
|
|
735
|
+
return function (relativePath, includeVisitedObjects) {
|
|
736
|
+
var annotationTerm = '';
|
|
737
|
+
return _resolveTarget(objectMap, entityType, relativePath, false, includeVisitedObjects, annotationTerm);
|
|
738
|
+
};
|
|
739
|
+
}
|
|
975
740
|
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
$Type: annotationType,
|
|
981
|
-
fullyQualifiedName: annotation.fullyQualifiedName,
|
|
982
|
-
qualifier: annotation.qualifier
|
|
983
|
-
};
|
|
984
|
-
var annotationContent = {};
|
|
985
|
-
annotation.record.propertyValues.forEach(function (propertyValue) {
|
|
986
|
-
annotationContent[propertyValue.name] = parseValue(propertyValue.value, "".concat(annotation.fullyQualifiedName, "/").concat(propertyValue.name), parserOutput, currentTarget, objectMap, toResolve, annotationSource, unresolvedAnnotations, annotationType, annotation.term);
|
|
741
|
+
function resolveV2NavigationProperty(navProp, associations, objectMap, outNavProp) {
|
|
742
|
+
var targetAssociation = associations.find(function (association) {
|
|
743
|
+
return association.fullyQualifiedName === navProp.relationship;
|
|
744
|
+
});
|
|
987
745
|
|
|
988
|
-
if (
|
|
989
|
-
|
|
746
|
+
if (targetAssociation) {
|
|
747
|
+
var associationEnd = targetAssociation.associationEnd.find(function (end) {
|
|
748
|
+
return end.role === navProp.toRole;
|
|
749
|
+
});
|
|
990
750
|
|
|
991
|
-
if (
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
}); // Add to diagnostics
|
|
995
|
-
// debugger;
|
|
751
|
+
if (associationEnd) {
|
|
752
|
+
outNavProp.targetType = objectMap[associationEnd.type];
|
|
753
|
+
outNavProp.isCollection = associationEnd.multiplicity === '*';
|
|
996
754
|
}
|
|
997
755
|
}
|
|
998
|
-
});
|
|
999
|
-
return Object.assign(annotationTerm, annotationContent);
|
|
1000
|
-
} else if (annotation.collection === undefined) {
|
|
1001
|
-
if (annotation.value) {
|
|
1002
|
-
return parseValue(annotation.value, annotation.fullyQualifiedName, parserOutput, currentTarget, objectMap, toResolve, annotationSource, unresolvedAnnotations, "", annotation.term);
|
|
1003
|
-
} else {
|
|
1004
|
-
return true;
|
|
1005
756
|
}
|
|
1006
|
-
} else if (annotation.collection) {
|
|
1007
|
-
var collection = parseCollection(annotation.collection, annotation.fullyQualifiedName, parserOutput, currentTarget, objectMap, toResolve, annotationSource, unresolvedAnnotations, "", annotation.term);
|
|
1008
|
-
collection.fullyQualifiedName = annotation.fullyQualifiedName;
|
|
1009
|
-
return collection;
|
|
1010
|
-
} else {
|
|
1011
|
-
throw new Error("Unsupported case");
|
|
1012
|
-
}
|
|
1013
|
-
}
|
|
1014
757
|
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
758
|
+
function resolveV4NavigationProperty(navProp, objectMap, outNavProp) {
|
|
759
|
+
outNavProp.targetType = objectMap[navProp.targetTypeName];
|
|
760
|
+
outNavProp.partner = navProp.partner;
|
|
761
|
+
outNavProp.isCollection = navProp.isCollection;
|
|
762
|
+
outNavProp.containsTarget = navProp.containsTarget;
|
|
763
|
+
outNavProp.referentialConstraint = navProp.referentialConstraint;
|
|
764
|
+
}
|
|
1022
765
|
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
var outNavProp = {
|
|
1027
|
-
_type: "NavigationProperty",
|
|
1028
|
-
name: navProp.name,
|
|
1029
|
-
fullyQualifiedName: navProp.fullyQualifiedName,
|
|
1030
|
-
partner: navProp.hasOwnProperty("partner") ? navProp.partner : undefined,
|
|
1031
|
-
// targetTypeName: FullyQualifiedName;
|
|
1032
|
-
// targetType: EntityType;
|
|
1033
|
-
isCollection: navProp.hasOwnProperty("isCollection") ? navProp.isCollection : false,
|
|
1034
|
-
containsTarget: navProp.hasOwnProperty("containsTarget") ? navProp.containsTarget : false,
|
|
1035
|
-
referentialConstraint: navProp.referentialConstraint ? navProp.referentialConstraint : [],
|
|
1036
|
-
annotations: {}
|
|
1037
|
-
};
|
|
766
|
+
function isV4NavigationProperty(navProp) {
|
|
767
|
+
return !!navProp.targetTypeName;
|
|
768
|
+
}
|
|
1038
769
|
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
770
|
+
function prepareNavigationProperties(navigationProperties, associations, objectMap) {
|
|
771
|
+
return navigationProperties.map(function (navProp) {
|
|
772
|
+
var outNavProp = {
|
|
773
|
+
_type: 'NavigationProperty',
|
|
774
|
+
name: navProp.name,
|
|
775
|
+
fullyQualifiedName: navProp.fullyQualifiedName,
|
|
776
|
+
isCollection: false,
|
|
777
|
+
containsTarget: false,
|
|
778
|
+
referentialConstraint: [],
|
|
779
|
+
annotations: {},
|
|
780
|
+
partner: '',
|
|
781
|
+
targetType: undefined,
|
|
782
|
+
targetTypeName: ''
|
|
783
|
+
};
|
|
1045
784
|
|
|
1046
|
-
if (
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
785
|
+
if (isV4NavigationProperty(navProp)) {
|
|
786
|
+
resolveV4NavigationProperty(navProp, objectMap, outNavProp);
|
|
787
|
+
} else {
|
|
788
|
+
resolveV2NavigationProperty(navProp, associations, objectMap, outNavProp);
|
|
789
|
+
}
|
|
1050
790
|
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
outNavProp.isCollection = associationEnd.multiplicity === "*";
|
|
1054
|
-
}
|
|
791
|
+
if (outNavProp.targetType) {
|
|
792
|
+
outNavProp.targetTypeName = outNavProp.targetType.fullyQualifiedName;
|
|
1055
793
|
}
|
|
1056
|
-
}
|
|
1057
794
|
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
}
|
|
795
|
+
objectMap[outNavProp.fullyQualifiedName] = outNavProp;
|
|
796
|
+
return outNavProp;
|
|
797
|
+
});
|
|
798
|
+
}
|
|
799
|
+
/**
|
|
800
|
+
* @param entityTypes
|
|
801
|
+
* @param associations
|
|
802
|
+
* @param objectMap
|
|
803
|
+
*/
|
|
1061
804
|
|
|
1062
|
-
var outNavPropReq = outNavProp;
|
|
1063
|
-
objectMap[outNavPropReq.fullyQualifiedName] = outNavPropReq;
|
|
1064
|
-
return outNavPropReq;
|
|
1065
|
-
});
|
|
1066
|
-
entityType.resolvePath = createResolvePathFn(entityType, objectMap);
|
|
1067
|
-
});
|
|
1068
|
-
}
|
|
1069
805
|
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
806
|
+
function resolveNavigationProperties(entityTypes, associations, objectMap) {
|
|
807
|
+
entityTypes.forEach(function (entityType) {
|
|
808
|
+
entityType.navigationProperties = prepareNavigationProperties(entityType.navigationProperties, associations, objectMap);
|
|
809
|
+
entityType.resolvePath = createResolvePathFn(entityType, objectMap);
|
|
810
|
+
});
|
|
1074
811
|
}
|
|
812
|
+
/**
|
|
813
|
+
* @param namespace
|
|
814
|
+
* @param actions
|
|
815
|
+
* @param objectMap
|
|
816
|
+
*/
|
|
1075
817
|
|
|
1076
|
-
if (action.isBound) {
|
|
1077
|
-
var sourceEntityType = objectMap[action.sourceType];
|
|
1078
|
-
action.sourceEntityType = sourceEntityType;
|
|
1079
818
|
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
819
|
+
function linkActionsToEntityType(namespace, actions, objectMap) {
|
|
820
|
+
actions.forEach(function (action) {
|
|
821
|
+
if (!action.annotations) {
|
|
822
|
+
action.annotations = {};
|
|
1083
823
|
}
|
|
1084
824
|
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
825
|
+
if (action.isBound) {
|
|
826
|
+
var sourceEntityType = objectMap[action.sourceType];
|
|
827
|
+
action.sourceEntityType = sourceEntityType;
|
|
1088
828
|
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
829
|
+
if (sourceEntityType) {
|
|
830
|
+
if (!sourceEntityType.actions) {
|
|
831
|
+
sourceEntityType.actions = {};
|
|
832
|
+
}
|
|
1093
833
|
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
834
|
+
sourceEntityType.actions[action.name] = action;
|
|
835
|
+
sourceEntityType.actions["".concat(namespace, ".").concat(action.name)] = action;
|
|
836
|
+
}
|
|
1097
837
|
|
|
1098
|
-
|
|
1099
|
-
|
|
838
|
+
action.returnEntityType = objectMap[action.returnType];
|
|
839
|
+
}
|
|
840
|
+
});
|
|
1100
841
|
}
|
|
842
|
+
/**
|
|
843
|
+
* @param entitySets
|
|
844
|
+
* @param objectMap
|
|
845
|
+
* @param references
|
|
846
|
+
*/
|
|
1101
847
|
|
|
1102
|
-
if (!entitySet.annotations) {
|
|
1103
|
-
entitySet.annotations = {};
|
|
1104
|
-
}
|
|
1105
848
|
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
849
|
+
function linkEntityTypeToEntitySet(entitySets, objectMap, references) {
|
|
850
|
+
entitySets.forEach(function (entitySet) {
|
|
851
|
+
entitySet.entityType = objectMap[entitySet.entityTypeName];
|
|
1109
852
|
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
});
|
|
1114
|
-
}
|
|
853
|
+
if (!entitySet.entityType) {
|
|
854
|
+
entitySet.entityType = objectMap[(0, utils_1.unalias)(references, entitySet.entityTypeName)];
|
|
855
|
+
}
|
|
1115
856
|
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
var references = arguments.length > 2 ? arguments[2] : undefined;
|
|
1120
|
-
singletons.forEach(function (singleton) {
|
|
1121
|
-
singleton.type = objectMap[singleton.typeName];
|
|
857
|
+
if (!entitySet.annotations) {
|
|
858
|
+
entitySet.annotations = {};
|
|
859
|
+
}
|
|
1122
860
|
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
861
|
+
if (!entitySet.entityType.annotations) {
|
|
862
|
+
entitySet.entityType.annotations = {};
|
|
863
|
+
}
|
|
1126
864
|
|
|
1127
|
-
|
|
1128
|
-
|
|
865
|
+
entitySet.entityType.keys.forEach(function (keyProp) {
|
|
866
|
+
keyProp.isKey = true;
|
|
867
|
+
});
|
|
868
|
+
});
|
|
1129
869
|
}
|
|
870
|
+
/**
|
|
871
|
+
* @param singletons
|
|
872
|
+
* @param objectMap
|
|
873
|
+
* @param references
|
|
874
|
+
*/
|
|
1130
875
|
|
|
1131
|
-
if (!singleton.type.annotations) {
|
|
1132
|
-
singleton.type.annotations = {};
|
|
1133
|
-
}
|
|
1134
876
|
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
singleton.entityType = singleton.type;
|
|
1139
|
-
});
|
|
1140
|
-
}
|
|
877
|
+
function linkEntityTypeToSingleton(singletons, objectMap, references) {
|
|
878
|
+
singletons.forEach(function (singleton) {
|
|
879
|
+
singleton.entityType = objectMap[singleton.entityTypeName];
|
|
1141
880
|
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
property.annotations = {};
|
|
1146
|
-
}
|
|
881
|
+
if (!singleton.entityType) {
|
|
882
|
+
singleton.entityType = objectMap[(0, utils_1.unalias)(references, singleton.entityTypeName)];
|
|
883
|
+
}
|
|
1147
884
|
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
885
|
+
if (!singleton.annotations) {
|
|
886
|
+
singleton.annotations = {};
|
|
887
|
+
}
|
|
1151
888
|
|
|
1152
|
-
if (
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
889
|
+
if (!singleton.entityType.annotations) {
|
|
890
|
+
singleton.entityType.annotations = {};
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
singleton.entityType.keys.forEach(function (keyProp) {
|
|
894
|
+
keyProp.isKey = true;
|
|
895
|
+
});
|
|
896
|
+
});
|
|
897
|
+
}
|
|
898
|
+
/**
|
|
899
|
+
* @param entityTypes
|
|
900
|
+
* @param objectMap
|
|
901
|
+
*/
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
function linkPropertiesToComplexTypes(entityTypes, objectMap) {
|
|
905
|
+
/**
|
|
906
|
+
* @param property
|
|
907
|
+
*/
|
|
908
|
+
function link(property) {
|
|
909
|
+
if (!property.annotations) {
|
|
910
|
+
property.annotations = {};
|
|
1157
911
|
}
|
|
1158
912
|
|
|
1159
|
-
|
|
1160
|
-
property.
|
|
913
|
+
try {
|
|
914
|
+
if (property.type.indexOf('Edm') !== 0) {
|
|
915
|
+
var complexType;
|
|
1161
916
|
|
|
1162
|
-
|
|
1163
|
-
|
|
917
|
+
if (property.type.startsWith('Collection')) {
|
|
918
|
+
var complexTypeName = property.type.substring(11, property.type.length - 1);
|
|
919
|
+
complexType = objectMap[complexTypeName];
|
|
920
|
+
} else {
|
|
921
|
+
complexType = objectMap[property.type];
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
if (complexType) {
|
|
925
|
+
property.targetType = complexType;
|
|
926
|
+
|
|
927
|
+
if (complexType.properties) {
|
|
928
|
+
complexType.properties.forEach(link);
|
|
929
|
+
}
|
|
930
|
+
}
|
|
1164
931
|
}
|
|
932
|
+
} catch (sError) {
|
|
933
|
+
throw new Error('Property Type is not defined');
|
|
1165
934
|
}
|
|
1166
935
|
}
|
|
1167
|
-
|
|
1168
|
-
|
|
936
|
+
|
|
937
|
+
entityTypes.forEach(function (entityType) {
|
|
938
|
+
entityType.entityProperties.forEach(link);
|
|
939
|
+
});
|
|
1169
940
|
}
|
|
1170
|
-
|
|
941
|
+
/**
|
|
942
|
+
* @param complexTypes
|
|
943
|
+
* @param associations
|
|
944
|
+
* @param objectMap
|
|
945
|
+
*/
|
|
946
|
+
|
|
947
|
+
|
|
948
|
+
function prepareComplexTypes(complexTypes, associations, objectMap) {
|
|
949
|
+
complexTypes.forEach(function (complexType) {
|
|
950
|
+
complexType.annotations = {};
|
|
951
|
+
complexType.properties.forEach(function (property) {
|
|
952
|
+
if (!property.annotations) {
|
|
953
|
+
property.annotations = {};
|
|
954
|
+
}
|
|
955
|
+
});
|
|
956
|
+
complexType.navigationProperties = prepareNavigationProperties(complexType.navigationProperties, associations, objectMap);
|
|
957
|
+
});
|
|
958
|
+
}
|
|
959
|
+
/**
|
|
960
|
+
* Split the alias from the term value.
|
|
961
|
+
*
|
|
962
|
+
* @param references the current set of references
|
|
963
|
+
* @param termValue the value of the term
|
|
964
|
+
* @returns the term alias and the actual term value
|
|
965
|
+
*/
|
|
966
|
+
|
|
967
|
+
|
|
968
|
+
function splitTerm(references, termValue) {
|
|
969
|
+
var aliasedTerm = (0, utils_1.alias)(references, termValue);
|
|
970
|
+
var lastDot = aliasedTerm.lastIndexOf('.');
|
|
971
|
+
var termAlias = aliasedTerm.substring(0, lastDot);
|
|
972
|
+
var term = aliasedTerm.substring(lastDot + 1);
|
|
973
|
+
return [termAlias, term];
|
|
974
|
+
}
|
|
975
|
+
/**
|
|
976
|
+
* Creates the function that will resolve a specific path.
|
|
977
|
+
*
|
|
978
|
+
* @param convertedOutput
|
|
979
|
+
* @param objectMap
|
|
980
|
+
* @returns the function that will allow to resolve element globally.
|
|
981
|
+
*/
|
|
1171
982
|
|
|
1172
|
-
entityTypes.forEach(function (entityType) {
|
|
1173
|
-
entityType.entityProperties.forEach(link);
|
|
1174
|
-
});
|
|
1175
|
-
}
|
|
1176
983
|
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
complexType.properties.forEach(function (property) {
|
|
1181
|
-
if (!property.annotations) {
|
|
1182
|
-
property.annotations = {};
|
|
1183
|
-
}
|
|
1184
|
-
});
|
|
1185
|
-
complexType.navigationProperties = complexType.navigationProperties.map(function (navProp) {
|
|
1186
|
-
if (!navProp.annotations) {
|
|
1187
|
-
navProp.annotations = {};
|
|
1188
|
-
}
|
|
984
|
+
function createGlobalResolve(convertedOutput, objectMap) {
|
|
985
|
+
return function resolvePath(sPath) {
|
|
986
|
+
var aPathSplit = sPath.split('/');
|
|
1189
987
|
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
fullyQualifiedName: navProp.fullyQualifiedName,
|
|
1194
|
-
partner: navProp.hasOwnProperty("partner") ? navProp.partner : undefined,
|
|
1195
|
-
// targetTypeName: FullyQualifiedName;
|
|
1196
|
-
// targetType: EntityType;
|
|
1197
|
-
isCollection: navProp.hasOwnProperty("isCollection") ? navProp.isCollection : false,
|
|
1198
|
-
containsTarget: navProp.hasOwnProperty("containsTarget") ? navProp.containsTarget : false,
|
|
1199
|
-
referentialConstraint: navProp.referentialConstraint ? navProp.referentialConstraint : []
|
|
1200
|
-
};
|
|
988
|
+
if (aPathSplit.shift() !== '') {
|
|
989
|
+
throw new Error('Cannot deal with relative path');
|
|
990
|
+
}
|
|
1201
991
|
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
var targetAssociation = associations.find(function (association) {
|
|
1206
|
-
return association.fullyQualifiedName === navProp.relationship;
|
|
992
|
+
var entitySetName = aPathSplit.shift();
|
|
993
|
+
var entitySet = convertedOutput.entitySets.find(function (et) {
|
|
994
|
+
return et.name === entitySetName;
|
|
1207
995
|
});
|
|
1208
996
|
|
|
1209
|
-
if (
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
997
|
+
if (!entitySet) {
|
|
998
|
+
return {
|
|
999
|
+
target: convertedOutput.entityContainer,
|
|
1000
|
+
objectPath: [convertedOutput.entityContainer]
|
|
1001
|
+
};
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
if (aPathSplit.length === 0) {
|
|
1005
|
+
return {
|
|
1006
|
+
target: entitySet,
|
|
1007
|
+
objectPath: [convertedOutput.entityContainer, entitySet]
|
|
1008
|
+
};
|
|
1009
|
+
} else {
|
|
1010
|
+
var targetResolution = _resolveTarget(objectMap, entitySet, '/' + aPathSplit.join('/'), false, true);
|
|
1213
1011
|
|
|
1214
|
-
if (
|
|
1215
|
-
|
|
1216
|
-
outNavProp.isCollection = associationEnd.multiplicity === "*";
|
|
1012
|
+
if (targetResolution.target) {
|
|
1013
|
+
targetResolution.visitedObjects.push(targetResolution.target);
|
|
1217
1014
|
}
|
|
1015
|
+
|
|
1016
|
+
return {
|
|
1017
|
+
target: targetResolution.target,
|
|
1018
|
+
objectPath: targetResolution.visitedObjects
|
|
1019
|
+
};
|
|
1218
1020
|
}
|
|
1021
|
+
};
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
function ensureAnnotations(currentTarget, vocAlias) {
|
|
1025
|
+
if (!currentTarget.annotations) {
|
|
1026
|
+
currentTarget.annotations = {};
|
|
1219
1027
|
}
|
|
1220
1028
|
|
|
1221
|
-
if (
|
|
1222
|
-
|
|
1029
|
+
if (!currentTarget.annotations[vocAlias]) {
|
|
1030
|
+
currentTarget.annotations[vocAlias] = {};
|
|
1223
1031
|
}
|
|
1224
1032
|
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
}
|
|
1229
|
-
});
|
|
1230
|
-
}
|
|
1033
|
+
if (!currentTarget.annotations._annotations) {
|
|
1034
|
+
currentTarget.annotations._annotations = {};
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1231
1037
|
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
return [termAlias, term];
|
|
1238
|
-
}
|
|
1239
|
-
/**
|
|
1240
|
-
* Resolve a specific path
|
|
1241
|
-
* @param sPath
|
|
1242
|
-
*/
|
|
1038
|
+
function processAnnotations(currentContext, annotationList, objectMap, bOverrideExisting) {
|
|
1039
|
+
var currentTarget = currentContext.currentTarget;
|
|
1040
|
+
var currentTargetName = currentTarget.fullyQualifiedName;
|
|
1041
|
+
annotationList.annotations.forEach(function (annotation) {
|
|
1042
|
+
var _a, _b;
|
|
1243
1043
|
|
|
1044
|
+
currentContext.currentSource = annotation.__source || annotationList.__source;
|
|
1244
1045
|
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1046
|
+
var _splitTerm = splitTerm(utils_1.defaultReferences, annotation.term),
|
|
1047
|
+
_splitTerm2 = _slicedToArray(_splitTerm, 2),
|
|
1048
|
+
vocAlias = _splitTerm2[0],
|
|
1049
|
+
vocTerm = _splitTerm2[1];
|
|
1248
1050
|
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
}
|
|
1051
|
+
ensureAnnotations(currentTarget, vocAlias);
|
|
1052
|
+
var vocTermWithQualifier = "".concat(vocTerm).concat(annotation.qualifier ? '#' + annotation.qualifier : '');
|
|
1252
1053
|
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
});
|
|
1054
|
+
if (!bOverrideExisting && ((_b = (_a = currentTarget.annotations) === null || _a === void 0 ? void 0 : _a[vocAlias]) === null || _b === void 0 ? void 0 : _b[vocTermWithQualifier]) !== undefined) {
|
|
1055
|
+
return;
|
|
1056
|
+
}
|
|
1257
1057
|
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
target: convertedOutput.entityContainer,
|
|
1261
|
-
objectPath: [convertedOutput.entityContainer]
|
|
1262
|
-
};
|
|
1263
|
-
}
|
|
1058
|
+
currentContext.currentTerm = annotation.term;
|
|
1059
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier] = convertAnnotation(annotation, objectMap, currentContext);
|
|
1264
1060
|
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
} else {
|
|
1271
|
-
var targetResolution = resolveTarget(objectMap, entitySet, "/" + aPathSplit.join("/"), false, true);
|
|
1061
|
+
switch (typeof currentTarget.annotations[vocAlias][vocTermWithQualifier]) {
|
|
1062
|
+
case 'string':
|
|
1063
|
+
// eslint-disable-next-line no-new-wrappers
|
|
1064
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier] = new String(currentTarget.annotations[vocAlias][vocTermWithQualifier]);
|
|
1065
|
+
break;
|
|
1272
1066
|
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1067
|
+
case 'boolean':
|
|
1068
|
+
// eslint-disable-next-line no-new-wrappers
|
|
1069
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier] = new Boolean(currentTarget.annotations[vocAlias][vocTermWithQualifier]);
|
|
1070
|
+
break;
|
|
1276
1071
|
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
}
|
|
1282
|
-
};
|
|
1283
|
-
}
|
|
1072
|
+
default:
|
|
1073
|
+
// do nothing
|
|
1074
|
+
break;
|
|
1075
|
+
}
|
|
1284
1076
|
|
|
1285
|
-
|
|
1286
|
-
|
|
1077
|
+
if (currentTarget.annotations[vocAlias][vocTermWithQualifier] !== null && typeof currentTarget.annotations[vocAlias][vocTermWithQualifier] === 'object') {
|
|
1078
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier].term = (0, utils_1.unalias)(utils_1.defaultReferences, "".concat(vocAlias, ".").concat(vocTerm));
|
|
1079
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier].qualifier = annotation.qualifier;
|
|
1080
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier].__source = currentContext.currentSource;
|
|
1081
|
+
}
|
|
1287
1082
|
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1083
|
+
var annotationTarget = "".concat(currentTargetName, "@").concat((0, utils_1.unalias)(utils_1.defaultReferences, vocAlias + '.' + vocTermWithQualifier));
|
|
1084
|
+
|
|
1085
|
+
if (Array.isArray(annotation.annotations)) {
|
|
1086
|
+
var subAnnotationList = {
|
|
1087
|
+
target: annotationTarget,
|
|
1088
|
+
annotations: annotation.annotations,
|
|
1089
|
+
__source: currentContext.currentSource
|
|
1090
|
+
};
|
|
1091
|
+
currentContext.additionalAnnotations.push(subAnnotationList);
|
|
1092
|
+
} else if (annotation.annotations && !currentTarget.annotations[vocAlias][vocTermWithQualifier].annotations) {
|
|
1093
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier].annotations = annotation.annotations;
|
|
1094
|
+
}
|
|
1292
1095
|
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1096
|
+
currentTarget.annotations._annotations["".concat(vocAlias, ".").concat(vocTermWithQualifier)] = currentTarget.annotations[vocAlias][vocTermWithQualifier];
|
|
1097
|
+
objectMap[annotationTarget] = currentTarget.annotations[vocAlias][vocTermWithQualifier];
|
|
1098
|
+
});
|
|
1099
|
+
}
|
|
1100
|
+
/**
|
|
1101
|
+
* Process all the unresolved targets so far to try and see if they are resolveable in the end.
|
|
1102
|
+
*
|
|
1103
|
+
* @param unresolvedTargets
|
|
1104
|
+
* @param objectMap
|
|
1105
|
+
*/
|
|
1106
|
+
|
|
1107
|
+
|
|
1108
|
+
function processUnresolvedTargets(unresolvedTargets, objectMap) {
|
|
1109
|
+
unresolvedTargets.forEach(function (resolvable) {
|
|
1110
|
+
var targetToResolve = resolvable.toResolve;
|
|
1111
|
+
var targetStr = targetToResolve.$target;
|
|
1112
|
+
var resolvedTarget = objectMap[targetStr];
|
|
1113
|
+
var annotationsTerm = targetToResolve.annotationsTerm,
|
|
1114
|
+
annotationType = targetToResolve.annotationType;
|
|
1115
|
+
delete targetToResolve.annotationType;
|
|
1116
|
+
delete targetToResolve.annotationsTerm;
|
|
1117
|
+
|
|
1118
|
+
if (resolvable.inline && !(resolvedTarget instanceof String)) {
|
|
1119
|
+
// inline the resolved target
|
|
1120
|
+
var keys;
|
|
1121
|
+
|
|
1122
|
+
for (keys in targetToResolve) {
|
|
1123
|
+
delete targetToResolve[keys];
|
|
1124
|
+
}
|
|
1296
1125
|
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
prepareComplexTypes(parserOutput.schema.complexTypes, parserOutput.schema.associations, objectMap);
|
|
1302
|
-
var toResolve = [];
|
|
1303
|
-
var unresolvedAnnotations = [];
|
|
1304
|
-
Object.keys(parserOutput.schema.annotations).forEach(function (annotationSource) {
|
|
1305
|
-
parserOutput.schema.annotations[annotationSource].forEach(function (annotationList) {
|
|
1306
|
-
var currentTargetName = unalias(parserOutput.references, annotationList.target);
|
|
1307
|
-
var objectMapElement = objectMap[currentTargetName];
|
|
1308
|
-
|
|
1309
|
-
if (!objectMapElement) {
|
|
1310
|
-
if (currentTargetName && currentTargetName.indexOf("@") !== -1) {
|
|
1311
|
-
annotationList.__source = annotationSource;
|
|
1312
|
-
unresolvedAnnotations.push(annotationList);
|
|
1126
|
+
Object.assign(targetToResolve, resolvedTarget);
|
|
1127
|
+
} else {
|
|
1128
|
+
// assign the resolved target
|
|
1129
|
+
targetToResolve.$target = resolvedTarget;
|
|
1313
1130
|
}
|
|
1314
|
-
} else if (typeof objectMapElement === "object") {
|
|
1315
|
-
var allTargets = [objectMapElement];
|
|
1316
|
-
var bOverrideExisting = true;
|
|
1317
1131
|
|
|
1318
|
-
if (
|
|
1319
|
-
|
|
1320
|
-
|
|
1132
|
+
if (!resolvedTarget) {
|
|
1133
|
+
targetToResolve.targetString = targetStr;
|
|
1134
|
+
|
|
1135
|
+
if (annotationsTerm && annotationType) {
|
|
1136
|
+
var oErrorMsg = {
|
|
1137
|
+
message: 'Unable to resolve the path expression: ' + targetStr + '\n' + '\n' + 'Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n' + '<Annotation Term = ' + annotationsTerm + '>' + '\n' + '<Record Type = ' + annotationType + '>' + '\n' + '<AnnotationPath = ' + targetStr + '>'
|
|
1138
|
+
};
|
|
1139
|
+
addAnnotationErrorMessage(targetStr, oErrorMsg);
|
|
1140
|
+
} else {
|
|
1141
|
+
var property = targetToResolve.term;
|
|
1142
|
+
var path = targetToResolve.path;
|
|
1143
|
+
var termInfo = targetStr ? targetStr.split('/')[0] : targetStr;
|
|
1144
|
+
var _oErrorMsg = {
|
|
1145
|
+
message: 'Unable to resolve the path expression: ' + targetStr + '\n' + '\n' + 'Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n' + '<Annotation Term = ' + termInfo + '>' + '\n' + '<PropertyValue Property = ' + property + ' Path= ' + path + '>'
|
|
1146
|
+
};
|
|
1147
|
+
addAnnotationErrorMessage(targetStr, _oErrorMsg);
|
|
1148
|
+
}
|
|
1321
1149
|
}
|
|
1150
|
+
});
|
|
1151
|
+
}
|
|
1152
|
+
/**
|
|
1153
|
+
* Merge annotation from different source together by overwriting at the term level.
|
|
1154
|
+
*
|
|
1155
|
+
* @param rawMetadata
|
|
1156
|
+
* @returns the resulting merged annotations
|
|
1157
|
+
*/
|
|
1158
|
+
|
|
1159
|
+
|
|
1160
|
+
function mergeAnnotations(rawMetadata) {
|
|
1161
|
+
var annotationListPerTarget = {};
|
|
1162
|
+
Object.keys(rawMetadata.schema.annotations).forEach(function (annotationSource) {
|
|
1163
|
+
rawMetadata.schema.annotations[annotationSource].forEach(function (annotationList) {
|
|
1164
|
+
var currentTargetName = (0, utils_1.unalias)(rawMetadata.references, annotationList.target);
|
|
1165
|
+
annotationList.__source = annotationSource;
|
|
1322
1166
|
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1167
|
+
if (!annotationListPerTarget[currentTargetName]) {
|
|
1168
|
+
annotationListPerTarget[currentTargetName] = {
|
|
1169
|
+
annotations: annotationList.annotations.concat(),
|
|
1170
|
+
target: currentTargetName
|
|
1171
|
+
};
|
|
1172
|
+
annotationListPerTarget[currentTargetName].__source = annotationSource;
|
|
1173
|
+
} else {
|
|
1174
|
+
annotationList.annotations.forEach(function (annotation) {
|
|
1175
|
+
var findIndex = annotationListPerTarget[currentTargetName].annotations.findIndex(function (referenceAnnotation) {
|
|
1176
|
+
return referenceAnnotation.term === annotation.term && referenceAnnotation.qualifier === annotation.qualifier;
|
|
1177
|
+
});
|
|
1178
|
+
annotation.__source = annotationSource;
|
|
1179
|
+
|
|
1180
|
+
if (findIndex !== -1) {
|
|
1181
|
+
annotationListPerTarget[currentTargetName].annotations.splice(findIndex, 1, annotation);
|
|
1182
|
+
} else {
|
|
1183
|
+
annotationListPerTarget[currentTargetName].annotations.push(annotation);
|
|
1184
|
+
}
|
|
1185
|
+
});
|
|
1326
1186
|
}
|
|
1187
|
+
});
|
|
1188
|
+
});
|
|
1189
|
+
return annotationListPerTarget;
|
|
1190
|
+
}
|
|
1191
|
+
/**
|
|
1192
|
+
* Convert a RawMetadata into an object representation to be used to easily navigate a metadata object and its annotation.
|
|
1193
|
+
*
|
|
1194
|
+
* @param rawMetadata
|
|
1195
|
+
* @returns the converted representation of the metadata.
|
|
1196
|
+
*/
|
|
1197
|
+
|
|
1198
|
+
|
|
1199
|
+
function convert(rawMetadata) {
|
|
1200
|
+
ANNOTATION_ERRORS = [];
|
|
1201
|
+
var objectMap = buildObjectMap(rawMetadata);
|
|
1202
|
+
resolveNavigationProperties(rawMetadata.schema.entityTypes, rawMetadata.schema.associations, objectMap);
|
|
1203
|
+
rawMetadata.schema.entityContainer.annotations = {};
|
|
1204
|
+
linkActionsToEntityType(rawMetadata.schema.namespace, rawMetadata.schema.actions, objectMap);
|
|
1205
|
+
linkEntityTypeToEntitySet(rawMetadata.schema.entitySets, objectMap, rawMetadata.references);
|
|
1206
|
+
linkEntityTypeToSingleton(rawMetadata.schema.singletons, objectMap, rawMetadata.references);
|
|
1207
|
+
linkPropertiesToComplexTypes(rawMetadata.schema.entityTypes, objectMap);
|
|
1208
|
+
prepareComplexTypes(rawMetadata.schema.complexTypes, rawMetadata.schema.associations, objectMap);
|
|
1209
|
+
var unresolvedTargets = [];
|
|
1210
|
+
var unresolvedAnnotations = [];
|
|
1211
|
+
var annotationListPerTarget = mergeAnnotations(rawMetadata);
|
|
1212
|
+
Object.keys(annotationListPerTarget).forEach(function (currentTargetName) {
|
|
1213
|
+
var annotationList = annotationListPerTarget[currentTargetName];
|
|
1214
|
+
var objectMapElement = objectMap[currentTargetName];
|
|
1215
|
+
|
|
1216
|
+
if (!objectMapElement && (currentTargetName === null || currentTargetName === void 0 ? void 0 : currentTargetName.indexOf('@')) > 0) {
|
|
1217
|
+
unresolvedAnnotations.push(annotationList);
|
|
1218
|
+
} else if (objectMapElement) {
|
|
1219
|
+
var allTargets = [objectMapElement];
|
|
1220
|
+
var bOverrideExisting = true;
|
|
1327
1221
|
|
|
1328
|
-
if (
|
|
1329
|
-
|
|
1222
|
+
if (objectMapElement._type === 'UnboundGenericAction') {
|
|
1223
|
+
allTargets = objectMapElement.actions;
|
|
1224
|
+
bOverrideExisting = false;
|
|
1330
1225
|
}
|
|
1331
1226
|
|
|
1332
|
-
|
|
1333
|
-
var
|
|
1227
|
+
allTargets.forEach(function (currentTarget) {
|
|
1228
|
+
var currentContext = {
|
|
1229
|
+
additionalAnnotations: unresolvedAnnotations,
|
|
1230
|
+
currentSource: annotationList.__source,
|
|
1231
|
+
currentTarget: currentTarget,
|
|
1232
|
+
currentTerm: '',
|
|
1233
|
+
rawMetadata: rawMetadata,
|
|
1234
|
+
unresolvedAnnotations: unresolvedTargets
|
|
1235
|
+
};
|
|
1236
|
+
processAnnotations(currentContext, annotationList, objectMap, bOverrideExisting);
|
|
1237
|
+
});
|
|
1238
|
+
}
|
|
1239
|
+
});
|
|
1240
|
+
var extraUnresolvedAnnotations = [];
|
|
1241
|
+
unresolvedAnnotations.forEach(function (annotationList) {
|
|
1242
|
+
var currentTargetName = (0, utils_1.unalias)(rawMetadata.references, annotationList.target);
|
|
1243
|
+
|
|
1244
|
+
var _currentTargetName$sp = currentTargetName.split('@'),
|
|
1245
|
+
_currentTargetName$sp2 = _slicedToArray(_currentTargetName$sp, 2),
|
|
1246
|
+
baseObj = _currentTargetName$sp2[0],
|
|
1247
|
+
annotationPart = _currentTargetName$sp2[1];
|
|
1248
|
+
|
|
1249
|
+
var targetSplit = annotationPart.split('/');
|
|
1250
|
+
baseObj = baseObj + '@' + targetSplit[0];
|
|
1251
|
+
var currentTarget = targetSplit.slice(1).reduce(function (currentObj, path) {
|
|
1252
|
+
return currentObj === null || currentObj === void 0 ? void 0 : currentObj[path];
|
|
1253
|
+
}, objectMap[baseObj]);
|
|
1254
|
+
|
|
1255
|
+
if (!currentTarget || typeof currentTarget !== 'object') {
|
|
1256
|
+
ANNOTATION_ERRORS.push({
|
|
1257
|
+
message: 'The following annotation target was not found on the service ' + currentTargetName
|
|
1258
|
+
});
|
|
1259
|
+
} else {
|
|
1260
|
+
var currentContext = {
|
|
1261
|
+
additionalAnnotations: extraUnresolvedAnnotations,
|
|
1262
|
+
currentSource: annotationList.__source,
|
|
1263
|
+
currentTarget: currentTarget,
|
|
1264
|
+
currentTerm: '',
|
|
1265
|
+
rawMetadata: rawMetadata,
|
|
1266
|
+
unresolvedAnnotations: unresolvedTargets
|
|
1267
|
+
};
|
|
1268
|
+
processAnnotations(currentContext, annotationList, objectMap, false);
|
|
1269
|
+
}
|
|
1270
|
+
});
|
|
1271
|
+
processUnresolvedTargets(unresolvedTargets, objectMap);
|
|
1334
1272
|
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
vocTerm = _splitTerm2[1];
|
|
1273
|
+
for (var property in ALL_ANNOTATION_ERRORS) {
|
|
1274
|
+
ANNOTATION_ERRORS.push(ALL_ANNOTATION_ERRORS[property][0]);
|
|
1275
|
+
}
|
|
1339
1276
|
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1277
|
+
rawMetadata.entitySets = rawMetadata.schema.entitySets;
|
|
1278
|
+
var extraReferences = rawMetadata.references.filter(function (reference) {
|
|
1279
|
+
return utils_1.defaultReferences.find(function (defaultRef) {
|
|
1280
|
+
return defaultRef.namespace === reference.namespace;
|
|
1281
|
+
}) === undefined;
|
|
1282
|
+
});
|
|
1283
|
+
var convertedOutput = {
|
|
1284
|
+
version: rawMetadata.version,
|
|
1285
|
+
annotations: rawMetadata.schema.annotations,
|
|
1286
|
+
namespace: rawMetadata.schema.namespace,
|
|
1287
|
+
entityContainer: rawMetadata.schema.entityContainer,
|
|
1288
|
+
actions: rawMetadata.schema.actions,
|
|
1289
|
+
entitySets: rawMetadata.schema.entitySets,
|
|
1290
|
+
singletons: rawMetadata.schema.singletons,
|
|
1291
|
+
entityTypes: rawMetadata.schema.entityTypes,
|
|
1292
|
+
complexTypes: rawMetadata.schema.complexTypes,
|
|
1293
|
+
typeDefinitions: rawMetadata.schema.typeDefinitions,
|
|
1294
|
+
references: utils_1.defaultReferences.concat(extraReferences),
|
|
1295
|
+
diagnostics: ANNOTATION_ERRORS.concat()
|
|
1296
|
+
};
|
|
1297
|
+
convertedOutput.resolvePath = createGlobalResolve(convertedOutput, objectMap);
|
|
1298
|
+
return convertedOutput;
|
|
1299
|
+
}
|
|
1343
1300
|
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1301
|
+
exports.convert = convert;
|
|
1302
|
+
/***/
|
|
1303
|
+
},
|
|
1304
|
+
|
|
1305
|
+
/***/
|
|
1306
|
+
126:
|
|
1307
|
+
/***/
|
|
1308
|
+
function (__unused_webpack_module, exports, __webpack_require__) {
|
|
1309
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {
|
|
1310
|
+
if (k2 === undefined) k2 = k;
|
|
1311
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
1312
|
+
|
|
1313
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
1314
|
+
desc = {
|
|
1315
|
+
enumerable: true,
|
|
1316
|
+
get: function () {
|
|
1317
|
+
return m[k];
|
|
1318
|
+
}
|
|
1319
|
+
};
|
|
1320
|
+
}
|
|
1347
1321
|
|
|
1348
|
-
|
|
1322
|
+
Object.defineProperty(o, k2, desc);
|
|
1323
|
+
} : function (o, m, k, k2) {
|
|
1324
|
+
if (k2 === undefined) k2 = k;
|
|
1325
|
+
o[k2] = m[k];
|
|
1326
|
+
});
|
|
1349
1327
|
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1328
|
+
var __exportStar = this && this.__exportStar || function (m, exports) {
|
|
1329
|
+
for (var p in m) {
|
|
1330
|
+
if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
1331
|
+
}
|
|
1332
|
+
};
|
|
1353
1333
|
|
|
1354
|
-
|
|
1334
|
+
Object.defineProperty(exports, "__esModule", {
|
|
1335
|
+
value: true
|
|
1336
|
+
});
|
|
1355
1337
|
|
|
1356
|
-
|
|
1357
|
-
case "string":
|
|
1358
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier] = new String(currentTarget.annotations[vocAlias][vocTermWithQualifier]);
|
|
1359
|
-
break;
|
|
1338
|
+
__exportStar(__webpack_require__(582), exports);
|
|
1360
1339
|
|
|
1361
|
-
|
|
1362
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier] = new Boolean(currentTarget.annotations[vocAlias][vocTermWithQualifier]);
|
|
1363
|
-
break;
|
|
1364
|
-
}
|
|
1340
|
+
__exportStar(__webpack_require__(922), exports);
|
|
1365
1341
|
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier].qualifier = annotation.qualifier;
|
|
1369
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier].__source = annotationSource;
|
|
1370
|
-
}
|
|
1342
|
+
__exportStar(__webpack_require__(800), exports);
|
|
1343
|
+
/***/
|
|
1371
1344
|
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
if (annotation.annotations && Array.isArray(annotation.annotations)) {
|
|
1375
|
-
var subAnnotationList = {
|
|
1376
|
-
target: annotationTarget,
|
|
1377
|
-
annotations: annotation.annotations,
|
|
1378
|
-
__source: annotationSource
|
|
1379
|
-
};
|
|
1380
|
-
unresolvedAnnotations.push(subAnnotationList);
|
|
1381
|
-
} else if (annotation.annotations && !currentTarget.annotations[vocAlias][vocTermWithQualifier].annotations) {
|
|
1382
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier].annotations = annotation.annotations;
|
|
1383
|
-
}
|
|
1345
|
+
},
|
|
1384
1346
|
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1347
|
+
/***/
|
|
1348
|
+
800:
|
|
1349
|
+
/***/
|
|
1350
|
+
function (__unused_webpack_module, exports) {
|
|
1351
|
+
Object.defineProperty(exports, "__esModule", {
|
|
1352
|
+
value: true
|
|
1390
1353
|
});
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1354
|
+
exports.Decimal = exports.isComplexTypeDefinition = exports.TermToTypes = exports.unalias = exports.alias = exports.defaultReferences = void 0;
|
|
1355
|
+
exports.defaultReferences = [{
|
|
1356
|
+
alias: 'Capabilities',
|
|
1357
|
+
namespace: 'Org.OData.Capabilities.V1',
|
|
1358
|
+
uri: ''
|
|
1359
|
+
}, {
|
|
1360
|
+
alias: 'Aggregation',
|
|
1361
|
+
namespace: 'Org.OData.Aggregation.V1',
|
|
1362
|
+
uri: ''
|
|
1363
|
+
}, {
|
|
1364
|
+
alias: 'Validation',
|
|
1365
|
+
namespace: 'Org.OData.Validation.V1',
|
|
1366
|
+
uri: ''
|
|
1367
|
+
}, {
|
|
1368
|
+
namespace: 'Org.OData.Core.V1',
|
|
1369
|
+
alias: 'Core',
|
|
1370
|
+
uri: ''
|
|
1371
|
+
}, {
|
|
1372
|
+
namespace: 'Org.OData.Measures.V1',
|
|
1373
|
+
alias: 'Measures',
|
|
1374
|
+
uri: ''
|
|
1375
|
+
}, {
|
|
1376
|
+
namespace: 'com.sap.vocabularies.Common.v1',
|
|
1377
|
+
alias: 'Common',
|
|
1378
|
+
uri: ''
|
|
1379
|
+
}, {
|
|
1380
|
+
namespace: 'com.sap.vocabularies.UI.v1',
|
|
1381
|
+
alias: 'UI',
|
|
1382
|
+
uri: ''
|
|
1383
|
+
}, {
|
|
1384
|
+
namespace: 'com.sap.vocabularies.Session.v1',
|
|
1385
|
+
alias: 'Session',
|
|
1386
|
+
uri: ''
|
|
1387
|
+
}, {
|
|
1388
|
+
namespace: 'com.sap.vocabularies.Analytics.v1',
|
|
1389
|
+
alias: 'Analytics',
|
|
1390
|
+
uri: ''
|
|
1391
|
+
}, {
|
|
1392
|
+
namespace: 'com.sap.vocabularies.CodeList.v1',
|
|
1393
|
+
alias: 'CodeList',
|
|
1394
|
+
uri: ''
|
|
1395
|
+
}, {
|
|
1396
|
+
namespace: 'com.sap.vocabularies.PersonalData.v1',
|
|
1397
|
+
alias: 'PersonalData',
|
|
1398
|
+
uri: ''
|
|
1399
|
+
}, {
|
|
1400
|
+
namespace: 'com.sap.vocabularies.Communication.v1',
|
|
1401
|
+
alias: 'Communication',
|
|
1402
|
+
uri: ''
|
|
1403
|
+
}, {
|
|
1404
|
+
namespace: 'com.sap.vocabularies.HTML5.v1',
|
|
1405
|
+
alias: 'HTML5',
|
|
1406
|
+
uri: ''
|
|
1407
|
+
}];
|
|
1408
|
+
/**
|
|
1409
|
+
* Transform an unaliased string representation annotation to the aliased version.
|
|
1410
|
+
*
|
|
1411
|
+
* @param references currentReferences for the project
|
|
1412
|
+
* @param unaliasedValue the unaliased value
|
|
1413
|
+
* @returns the aliased string representing the same
|
|
1414
|
+
*/
|
|
1415
|
+
|
|
1416
|
+
function alias(references, unaliasedValue) {
|
|
1417
|
+
if (!references.reverseReferenceMap) {
|
|
1418
|
+
references.reverseReferenceMap = references.reduce(function (map, ref) {
|
|
1419
|
+
map[ref.namespace] = ref;
|
|
1420
|
+
return map;
|
|
1421
|
+
}, {});
|
|
1406
1422
|
}
|
|
1407
1423
|
|
|
1408
|
-
|
|
1409
|
-
|
|
1424
|
+
if (!unaliasedValue) {
|
|
1425
|
+
return unaliasedValue;
|
|
1426
|
+
}
|
|
1410
1427
|
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
if (
|
|
1417
|
-
|
|
1428
|
+
var lastDotIndex = unaliasedValue.lastIndexOf('.');
|
|
1429
|
+
var namespace = unaliasedValue.substring(0, lastDotIndex);
|
|
1430
|
+
var value = unaliasedValue.substring(lastDotIndex + 1);
|
|
1431
|
+
var reference = references.reverseReferenceMap[namespace];
|
|
1432
|
+
|
|
1433
|
+
if (reference) {
|
|
1434
|
+
return "".concat(reference.alias, ".").concat(value);
|
|
1435
|
+
} else if (unaliasedValue.indexOf('@') !== -1) {
|
|
1436
|
+
// Try to see if it's an annotation Path like to_SalesOrder/@UI.LineItem
|
|
1437
|
+
var _unaliasedValue$split = unaliasedValue.split('@'),
|
|
1438
|
+
_unaliasedValue$split2 = _toArray(_unaliasedValue$split),
|
|
1439
|
+
preAlias = _unaliasedValue$split2[0],
|
|
1440
|
+
postAlias = _unaliasedValue$split2.slice(1);
|
|
1441
|
+
|
|
1442
|
+
return "".concat(preAlias, "@").concat(alias(references, postAlias.join('@')));
|
|
1443
|
+
} else {
|
|
1444
|
+
return unaliasedValue;
|
|
1418
1445
|
}
|
|
1446
|
+
}
|
|
1419
1447
|
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1448
|
+
exports.alias = alias;
|
|
1449
|
+
/**
|
|
1450
|
+
* Transform an aliased string representation annotation to the unaliased version.
|
|
1451
|
+
*
|
|
1452
|
+
* @param references currentReferences for the project
|
|
1453
|
+
* @param aliasedValue the aliased value
|
|
1454
|
+
* @returns the unaliased string representing the same
|
|
1455
|
+
*/
|
|
1456
|
+
|
|
1457
|
+
function unalias(references, aliasedValue) {
|
|
1458
|
+
if (!references.referenceMap) {
|
|
1459
|
+
references.referenceMap = references.reduce(function (map, ref) {
|
|
1460
|
+
map[ref.alias] = ref;
|
|
1461
|
+
return map;
|
|
1462
|
+
}, {});
|
|
1463
|
+
}
|
|
1425
1464
|
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1465
|
+
if (!aliasedValue) {
|
|
1466
|
+
return aliasedValue;
|
|
1467
|
+
}
|
|
1429
1468
|
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1469
|
+
var _aliasedValue$split = aliasedValue.split('.'),
|
|
1470
|
+
_aliasedValue$split2 = _toArray(_aliasedValue$split),
|
|
1471
|
+
vocAlias = _aliasedValue$split2[0],
|
|
1472
|
+
value = _aliasedValue$split2.slice(1);
|
|
1433
1473
|
|
|
1434
|
-
|
|
1435
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier] = convertAnnotation(annotation, parserOutput, currentTarget, objectMap, toResolve, annotationList.__source, extraUnresolvedAnnotations);
|
|
1474
|
+
var reference = references.referenceMap[vocAlias];
|
|
1436
1475
|
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1476
|
+
if (reference) {
|
|
1477
|
+
return "".concat(reference.namespace, ".").concat(value.join('.'));
|
|
1478
|
+
} else if (aliasedValue.indexOf('@') !== -1) {
|
|
1479
|
+
// Try to see if it's an annotation Path like to_SalesOrder/@UI.LineItem
|
|
1480
|
+
var _aliasedValue$split3 = aliasedValue.split('@'),
|
|
1481
|
+
_aliasedValue$split4 = _toArray(_aliasedValue$split3),
|
|
1482
|
+
preAlias = _aliasedValue$split4[0],
|
|
1483
|
+
postAlias = _aliasedValue$split4.slice(1);
|
|
1442
1484
|
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
}
|
|
1447
|
-
});
|
|
1448
|
-
toResolve.forEach(function (resolveable) {
|
|
1449
|
-
var toResolve = resolveable.toResolve;
|
|
1450
|
-
var targetStr = toResolve.$target;
|
|
1451
|
-
var resolvedTarget = objectMap[targetStr];
|
|
1452
|
-
var annotationsTerm = toResolve.annotationsTerm,
|
|
1453
|
-
annotationType = toResolve.annotationType;
|
|
1454
|
-
delete toResolve.annotationType;
|
|
1455
|
-
delete toResolve.annotationsTerm;
|
|
1456
|
-
|
|
1457
|
-
if (resolveable.inline && !(resolvedTarget instanceof String)) {
|
|
1458
|
-
// inline the resolved target
|
|
1459
|
-
var keys;
|
|
1460
|
-
|
|
1461
|
-
for (keys in toResolve) {
|
|
1462
|
-
delete toResolve[keys];
|
|
1485
|
+
return "".concat(preAlias, "@").concat(unalias(references, postAlias.join('@')));
|
|
1486
|
+
} else {
|
|
1487
|
+
return aliasedValue;
|
|
1463
1488
|
}
|
|
1489
|
+
}
|
|
1464
1490
|
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1491
|
+
exports.unalias = unalias;
|
|
1492
|
+
var TermToTypes;
|
|
1493
|
+
|
|
1494
|
+
(function (TermToTypes) {
|
|
1495
|
+
TermToTypes["Org.OData.Authorization.V1.SecuritySchemes"] = "Org.OData.Authorization.V1.SecurityScheme";
|
|
1496
|
+
TermToTypes["Org.OData.Authorization.V1.Authorizations"] = "Org.OData.Authorization.V1.Authorization";
|
|
1497
|
+
TermToTypes["Org.OData.Core.V1.Revisions"] = "Org.OData.Core.V1.RevisionType";
|
|
1498
|
+
TermToTypes["Org.OData.Core.V1.Links"] = "Org.OData.Core.V1.Link";
|
|
1499
|
+
TermToTypes["Org.OData.Core.V1.Example"] = "Org.OData.Core.V1.ExampleValue";
|
|
1500
|
+
TermToTypes["Org.OData.Core.V1.Messages"] = "Org.OData.Core.V1.MessageType";
|
|
1501
|
+
TermToTypes["Org.OData.Core.V1.ValueException"] = "Org.OData.Core.V1.ValueExceptionType";
|
|
1502
|
+
TermToTypes["Org.OData.Core.V1.ResourceException"] = "Org.OData.Core.V1.ResourceExceptionType";
|
|
1503
|
+
TermToTypes["Org.OData.Core.V1.DataModificationException"] = "Org.OData.Core.V1.DataModificationExceptionType";
|
|
1504
|
+
TermToTypes["Org.OData.Core.V1.IsLanguageDependent"] = "Org.OData.Core.V1.Tag";
|
|
1505
|
+
TermToTypes["Org.OData.Core.V1.DereferenceableIDs"] = "Org.OData.Core.V1.Tag";
|
|
1506
|
+
TermToTypes["Org.OData.Core.V1.ConventionalIDs"] = "Org.OData.Core.V1.Tag";
|
|
1507
|
+
TermToTypes["Org.OData.Core.V1.Permissions"] = "Org.OData.Core.V1.Permission";
|
|
1508
|
+
TermToTypes["Org.OData.Core.V1.DefaultNamespace"] = "Org.OData.Core.V1.Tag";
|
|
1509
|
+
TermToTypes["Org.OData.Core.V1.Immutable"] = "Org.OData.Core.V1.Tag";
|
|
1510
|
+
TermToTypes["Org.OData.Core.V1.Computed"] = "Org.OData.Core.V1.Tag";
|
|
1511
|
+
TermToTypes["Org.OData.Core.V1.ComputedDefaultValue"] = "Org.OData.Core.V1.Tag";
|
|
1512
|
+
TermToTypes["Org.OData.Core.V1.IsURL"] = "Org.OData.Core.V1.Tag";
|
|
1513
|
+
TermToTypes["Org.OData.Core.V1.IsMediaType"] = "Org.OData.Core.V1.Tag";
|
|
1514
|
+
TermToTypes["Org.OData.Core.V1.ContentDisposition"] = "Org.OData.Core.V1.ContentDispositionType";
|
|
1515
|
+
TermToTypes["Org.OData.Core.V1.OptimisticConcurrency"] = "Edm.PropertyPath";
|
|
1516
|
+
TermToTypes["Org.OData.Core.V1.AdditionalProperties"] = "Org.OData.Core.V1.Tag";
|
|
1517
|
+
TermToTypes["Org.OData.Core.V1.AutoExpand"] = "Org.OData.Core.V1.Tag";
|
|
1518
|
+
TermToTypes["Org.OData.Core.V1.AutoExpandReferences"] = "Org.OData.Core.V1.Tag";
|
|
1519
|
+
TermToTypes["Org.OData.Core.V1.MayImplement"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
1520
|
+
TermToTypes["Org.OData.Core.V1.Ordered"] = "Org.OData.Core.V1.Tag";
|
|
1521
|
+
TermToTypes["Org.OData.Core.V1.PositionalInsert"] = "Org.OData.Core.V1.Tag";
|
|
1522
|
+
TermToTypes["Org.OData.Core.V1.AlternateKeys"] = "Org.OData.Core.V1.AlternateKey";
|
|
1523
|
+
TermToTypes["Org.OData.Core.V1.OptionalParameter"] = "Org.OData.Core.V1.OptionalParameterType";
|
|
1524
|
+
TermToTypes["Org.OData.Core.V1.OperationAvailable"] = "Edm.Boolean";
|
|
1525
|
+
TermToTypes["Org.OData.Core.V1.SymbolicName"] = "Org.OData.Core.V1.SimpleIdentifier";
|
|
1526
|
+
TermToTypes["Org.OData.Capabilities.V1.ConformanceLevel"] = "Org.OData.Capabilities.V1.ConformanceLevelType";
|
|
1527
|
+
TermToTypes["Org.OData.Capabilities.V1.AsynchronousRequestsSupported"] = "Org.OData.Core.V1.Tag";
|
|
1528
|
+
TermToTypes["Org.OData.Capabilities.V1.BatchContinueOnErrorSupported"] = "Org.OData.Core.V1.Tag";
|
|
1529
|
+
TermToTypes["Org.OData.Capabilities.V1.IsolationSupported"] = "Org.OData.Capabilities.V1.IsolationLevel";
|
|
1530
|
+
TermToTypes["Org.OData.Capabilities.V1.CrossJoinSupported"] = "Org.OData.Core.V1.Tag";
|
|
1531
|
+
TermToTypes["Org.OData.Capabilities.V1.CallbackSupported"] = "Org.OData.Capabilities.V1.CallbackType";
|
|
1532
|
+
TermToTypes["Org.OData.Capabilities.V1.ChangeTracking"] = "Org.OData.Capabilities.V1.ChangeTrackingType";
|
|
1533
|
+
TermToTypes["Org.OData.Capabilities.V1.CountRestrictions"] = "Org.OData.Capabilities.V1.CountRestrictionsType";
|
|
1534
|
+
TermToTypes["Org.OData.Capabilities.V1.NavigationRestrictions"] = "Org.OData.Capabilities.V1.NavigationRestrictionsType";
|
|
1535
|
+
TermToTypes["Org.OData.Capabilities.V1.IndexableByKey"] = "Org.OData.Core.V1.Tag";
|
|
1536
|
+
TermToTypes["Org.OData.Capabilities.V1.TopSupported"] = "Org.OData.Core.V1.Tag";
|
|
1537
|
+
TermToTypes["Org.OData.Capabilities.V1.SkipSupported"] = "Org.OData.Core.V1.Tag";
|
|
1538
|
+
TermToTypes["Org.OData.Capabilities.V1.ComputeSupported"] = "Org.OData.Core.V1.Tag";
|
|
1539
|
+
TermToTypes["Org.OData.Capabilities.V1.SelectSupport"] = "Org.OData.Capabilities.V1.SelectSupportType";
|
|
1540
|
+
TermToTypes["Org.OData.Capabilities.V1.BatchSupported"] = "Org.OData.Core.V1.Tag";
|
|
1541
|
+
TermToTypes["Org.OData.Capabilities.V1.BatchSupport"] = "Org.OData.Capabilities.V1.BatchSupportType";
|
|
1542
|
+
TermToTypes["Org.OData.Capabilities.V1.FilterRestrictions"] = "Org.OData.Capabilities.V1.FilterRestrictionsType";
|
|
1543
|
+
TermToTypes["Org.OData.Capabilities.V1.SortRestrictions"] = "Org.OData.Capabilities.V1.SortRestrictionsType";
|
|
1544
|
+
TermToTypes["Org.OData.Capabilities.V1.ExpandRestrictions"] = "Org.OData.Capabilities.V1.ExpandRestrictionsType";
|
|
1545
|
+
TermToTypes["Org.OData.Capabilities.V1.SearchRestrictions"] = "Org.OData.Capabilities.V1.SearchRestrictionsType";
|
|
1546
|
+
TermToTypes["Org.OData.Capabilities.V1.KeyAsSegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
1547
|
+
TermToTypes["Org.OData.Capabilities.V1.QuerySegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
1548
|
+
TermToTypes["Org.OData.Capabilities.V1.InsertRestrictions"] = "Org.OData.Capabilities.V1.InsertRestrictionsType";
|
|
1549
|
+
TermToTypes["Org.OData.Capabilities.V1.DeepInsertSupport"] = "Org.OData.Capabilities.V1.DeepInsertSupportType";
|
|
1550
|
+
TermToTypes["Org.OData.Capabilities.V1.UpdateRestrictions"] = "Org.OData.Capabilities.V1.UpdateRestrictionsType";
|
|
1551
|
+
TermToTypes["Org.OData.Capabilities.V1.DeepUpdateSupport"] = "Org.OData.Capabilities.V1.DeepUpdateSupportType";
|
|
1552
|
+
TermToTypes["Org.OData.Capabilities.V1.DeleteRestrictions"] = "Org.OData.Capabilities.V1.DeleteRestrictionsType";
|
|
1553
|
+
TermToTypes["Org.OData.Capabilities.V1.CollectionPropertyRestrictions"] = "Org.OData.Capabilities.V1.CollectionPropertyRestrictionsType";
|
|
1554
|
+
TermToTypes["Org.OData.Capabilities.V1.OperationRestrictions"] = "Org.OData.Capabilities.V1.OperationRestrictionsType";
|
|
1555
|
+
TermToTypes["Org.OData.Capabilities.V1.AnnotationValuesInQuerySupported"] = "Org.OData.Core.V1.Tag";
|
|
1556
|
+
TermToTypes["Org.OData.Capabilities.V1.ModificationQueryOptions"] = "Org.OData.Capabilities.V1.ModificationQueryOptionsType";
|
|
1557
|
+
TermToTypes["Org.OData.Capabilities.V1.ReadRestrictions"] = "Org.OData.Capabilities.V1.ReadRestrictionsType";
|
|
1558
|
+
TermToTypes["Org.OData.Capabilities.V1.CustomHeaders"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
1559
|
+
TermToTypes["Org.OData.Capabilities.V1.CustomQueryOptions"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
1560
|
+
TermToTypes["Org.OData.Capabilities.V1.MediaLocationUpdateSupported"] = "Org.OData.Core.V1.Tag";
|
|
1561
|
+
TermToTypes["Org.OData.Aggregation.V1.ApplySupported"] = "Org.OData.Aggregation.V1.ApplySupportedType";
|
|
1562
|
+
TermToTypes["Org.OData.Aggregation.V1.Groupable"] = "Org.OData.Core.V1.Tag";
|
|
1563
|
+
TermToTypes["Org.OData.Aggregation.V1.Aggregatable"] = "Org.OData.Core.V1.Tag";
|
|
1564
|
+
TermToTypes["Org.OData.Aggregation.V1.ContextDefiningProperties"] = "Edm.PropertyPath";
|
|
1565
|
+
TermToTypes["Org.OData.Aggregation.V1.LeveledHierarchy"] = "Edm.PropertyPath";
|
|
1566
|
+
TermToTypes["Org.OData.Aggregation.V1.RecursiveHierarchy"] = "Org.OData.Aggregation.V1.RecursiveHierarchyType";
|
|
1567
|
+
TermToTypes["Org.OData.Aggregation.V1.AvailableOnAggregates"] = "Org.OData.Aggregation.V1.AvailableOnAggregatesType";
|
|
1568
|
+
TermToTypes["Org.OData.Validation.V1.Minimum"] = "Edm.PrimitiveType";
|
|
1569
|
+
TermToTypes["Org.OData.Validation.V1.Maximum"] = "Edm.PrimitiveType";
|
|
1570
|
+
TermToTypes["Org.OData.Validation.V1.Exclusive"] = "Org.OData.Core.V1.Tag";
|
|
1571
|
+
TermToTypes["Org.OData.Validation.V1.AllowedValues"] = "Org.OData.Validation.V1.AllowedValue";
|
|
1572
|
+
TermToTypes["Org.OData.Validation.V1.MultipleOf"] = "Edm.Decimal";
|
|
1573
|
+
TermToTypes["Org.OData.Validation.V1.Constraint"] = "Org.OData.Validation.V1.ConstraintType";
|
|
1574
|
+
TermToTypes["Org.OData.Validation.V1.ItemsOf"] = "Org.OData.Validation.V1.ItemsOfType";
|
|
1575
|
+
TermToTypes["Org.OData.Validation.V1.OpenPropertyTypeConstraint"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
1576
|
+
TermToTypes["Org.OData.Validation.V1.DerivedTypeConstraint"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
1577
|
+
TermToTypes["Org.OData.Validation.V1.AllowedTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
1578
|
+
TermToTypes["Org.OData.Validation.V1.ApplicableTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
1579
|
+
TermToTypes["Org.OData.Validation.V1.MaxItems"] = "Edm.Int64";
|
|
1580
|
+
TermToTypes["Org.OData.Validation.V1.MinItems"] = "Edm.Int64";
|
|
1581
|
+
TermToTypes["Org.OData.Measures.V1.Scale"] = "Edm.Byte";
|
|
1582
|
+
TermToTypes["Org.OData.Measures.V1.DurationGranularity"] = "Org.OData.Measures.V1.DurationGranularityType";
|
|
1583
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.Dimension"] = "Org.OData.Core.V1.Tag";
|
|
1584
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.Measure"] = "Org.OData.Core.V1.Tag";
|
|
1585
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.AccumulativeMeasure"] = "Org.OData.Core.V1.Tag";
|
|
1586
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.RolledUpPropertyCount"] = "Edm.Int16";
|
|
1587
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.PlanningAction"] = "Org.OData.Core.V1.Tag";
|
|
1588
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.AggregatedProperties"] = "com.sap.vocabularies.Analytics.v1.AggregatedPropertyType";
|
|
1589
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ServiceVersion"] = "Edm.Int32";
|
|
1590
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ServiceSchemaVersion"] = "Edm.Int32";
|
|
1591
|
+
TermToTypes["com.sap.vocabularies.Common.v1.TextFor"] = "Edm.PropertyPath";
|
|
1592
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsLanguageIdentifier"] = "Org.OData.Core.V1.Tag";
|
|
1593
|
+
TermToTypes["com.sap.vocabularies.Common.v1.TextFormat"] = "com.sap.vocabularies.Common.v1.TextFormatType";
|
|
1594
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDigitSequence"] = "Org.OData.Core.V1.Tag";
|
|
1595
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsUpperCase"] = "Org.OData.Core.V1.Tag";
|
|
1596
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCurrency"] = "Org.OData.Core.V1.Tag";
|
|
1597
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsUnit"] = "Org.OData.Core.V1.Tag";
|
|
1598
|
+
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificScale"] = "Edm.PrimitiveType";
|
|
1599
|
+
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificPrecision"] = "Edm.PrimitiveType";
|
|
1600
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SecondaryKey"] = "Edm.PropertyPath";
|
|
1601
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MinOccurs"] = "Edm.Int64";
|
|
1602
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MaxOccurs"] = "Edm.Int64";
|
|
1603
|
+
TermToTypes["com.sap.vocabularies.Common.v1.AssociationEntity"] = "Edm.NavigationPropertyPath";
|
|
1604
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DerivedNavigation"] = "Edm.NavigationPropertyPath";
|
|
1605
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Masked"] = "Org.OData.Core.V1.Tag";
|
|
1606
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MaskedAlways"] = "Org.OData.Core.V1.Tag";
|
|
1607
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SemanticObjectMapping"] = "com.sap.vocabularies.Common.v1.SemanticObjectMappingType";
|
|
1608
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsInstanceAnnotation"] = "Org.OData.Core.V1.Tag";
|
|
1609
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FilterExpressionRestrictions"] = "com.sap.vocabularies.Common.v1.FilterExpressionRestrictionType";
|
|
1610
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FieldControl"] = "com.sap.vocabularies.Common.v1.FieldControlType";
|
|
1611
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Application"] = "com.sap.vocabularies.Common.v1.ApplicationType";
|
|
1612
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Timestamp"] = "Edm.DateTimeOffset";
|
|
1613
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ErrorResolution"] = "com.sap.vocabularies.Common.v1.ErrorResolutionType";
|
|
1614
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Messages"] = "Edm.ComplexType";
|
|
1615
|
+
TermToTypes["com.sap.vocabularies.Common.v1.numericSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
1616
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MaximumNumericMessageSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
1617
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsActionCritical"] = "Edm.Boolean";
|
|
1618
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Attributes"] = "Edm.PropertyPath";
|
|
1619
|
+
TermToTypes["com.sap.vocabularies.Common.v1.RelatedRecursiveHierarchy"] = "Edm.AnnotationPath";
|
|
1620
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Interval"] = "com.sap.vocabularies.Common.v1.IntervalType";
|
|
1621
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ResultContext"] = "Org.OData.Core.V1.Tag";
|
|
1622
|
+
TermToTypes["com.sap.vocabularies.Common.v1.WeakReferentialConstraint"] = "com.sap.vocabularies.Common.v1.WeakReferentialConstraintType";
|
|
1623
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsNaturalPerson"] = "Org.OData.Core.V1.Tag";
|
|
1624
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueList"] = "com.sap.vocabularies.Common.v1.ValueListType";
|
|
1625
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueListRelevantQualifiers"] = "com.sap.vocabularies.Common.v1.SimpleIdentifier";
|
|
1626
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueListWithFixedValues"] = "Org.OData.Core.V1.Tag";
|
|
1627
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueListMapping"] = "com.sap.vocabularies.Common.v1.ValueListMappingType";
|
|
1628
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
1629
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
1630
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1631
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
1632
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarWeek"] = "Org.OData.Core.V1.Tag";
|
|
1633
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
1634
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
1635
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
1636
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1637
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearMonth"] = "Org.OData.Core.V1.Tag";
|
|
1638
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
1639
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarDate"] = "Org.OData.Core.V1.Tag";
|
|
1640
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
1641
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalPeriod"] = "Org.OData.Core.V1.Tag";
|
|
1642
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearPeriod"] = "Org.OData.Core.V1.Tag";
|
|
1643
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1644
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1645
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalWeek"] = "Org.OData.Core.V1.Tag";
|
|
1646
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
1647
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
1648
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearVariant"] = "Org.OData.Core.V1.Tag";
|
|
1649
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MutuallyExclusiveTerm"] = "Org.OData.Core.V1.Tag";
|
|
1650
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DraftRoot"] = "com.sap.vocabularies.Common.v1.DraftRootType";
|
|
1651
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DraftNode"] = "com.sap.vocabularies.Common.v1.DraftNodeType";
|
|
1652
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DraftActivationVia"] = "com.sap.vocabularies.Common.v1.SimpleIdentifier";
|
|
1653
|
+
TermToTypes["com.sap.vocabularies.Common.v1.EditableFieldFor"] = "Edm.PropertyPath";
|
|
1654
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SemanticKey"] = "Edm.PropertyPath";
|
|
1655
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SideEffects"] = "com.sap.vocabularies.Common.v1.SideEffectsType";
|
|
1656
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DefaultValuesFunction"] = "com.sap.vocabularies.Common.v1.QualifiedName";
|
|
1657
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValue"] = "Edm.PrimitiveType";
|
|
1658
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValueHigh"] = "Edm.PrimitiveType";
|
|
1659
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SortOrder"] = "com.sap.vocabularies.Common.v1.SortOrderType";
|
|
1660
|
+
TermToTypes["com.sap.vocabularies.Common.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Common.v1.RecursiveHierarchyType";
|
|
1661
|
+
TermToTypes["com.sap.vocabularies.Common.v1.CreatedAt"] = "Edm.DateTimeOffset";
|
|
1662
|
+
TermToTypes["com.sap.vocabularies.Common.v1.CreatedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
1663
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ChangedAt"] = "Edm.DateTimeOffset";
|
|
1664
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ChangedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
1665
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ApplyMultiUnitBehaviorForSortingAndFiltering"] = "Org.OData.Core.V1.Tag";
|
|
1666
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.CurrencyCodes"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
1667
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.UnitsOfMeasure"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
1668
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.StandardCode"] = "Edm.PropertyPath";
|
|
1669
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.ExternalCode"] = "Edm.PropertyPath";
|
|
1670
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.IsConfigurationDeprecationCode"] = "Edm.Boolean";
|
|
1671
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Contact"] = "com.sap.vocabularies.Communication.v1.ContactType";
|
|
1672
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Address"] = "com.sap.vocabularies.Communication.v1.AddressType";
|
|
1673
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.IsEmailAddress"] = "Org.OData.Core.V1.Tag";
|
|
1674
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.IsPhoneNumber"] = "Org.OData.Core.V1.Tag";
|
|
1675
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Event"] = "com.sap.vocabularies.Communication.v1.EventData";
|
|
1676
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Task"] = "com.sap.vocabularies.Communication.v1.TaskData";
|
|
1677
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Message"] = "com.sap.vocabularies.Communication.v1.MessageData";
|
|
1678
|
+
TermToTypes["com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchyType";
|
|
1679
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.EntitySemantics"] = "com.sap.vocabularies.PersonalData.v1.EntitySemanticsType";
|
|
1680
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.FieldSemantics"] = "com.sap.vocabularies.PersonalData.v1.FieldSemanticsType";
|
|
1681
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallyPersonal"] = "Org.OData.Core.V1.Tag";
|
|
1682
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallySensitive"] = "Org.OData.Core.V1.Tag";
|
|
1683
|
+
TermToTypes["com.sap.vocabularies.Session.v1.StickySessionSupported"] = "com.sap.vocabularies.Session.v1.StickySessionSupportedType";
|
|
1684
|
+
TermToTypes["com.sap.vocabularies.UI.v1.HeaderInfo"] = "com.sap.vocabularies.UI.v1.HeaderInfoType";
|
|
1685
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Identification"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1686
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Badge"] = "com.sap.vocabularies.UI.v1.BadgeType";
|
|
1687
|
+
TermToTypes["com.sap.vocabularies.UI.v1.LineItem"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1688
|
+
TermToTypes["com.sap.vocabularies.UI.v1.StatusInfo"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1689
|
+
TermToTypes["com.sap.vocabularies.UI.v1.FieldGroup"] = "com.sap.vocabularies.UI.v1.FieldGroupType";
|
|
1690
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ConnectedFields"] = "com.sap.vocabularies.UI.v1.ConnectedFieldsType";
|
|
1691
|
+
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocations"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
1692
|
+
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocation"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
1693
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Contacts"] = "Edm.AnnotationPath";
|
|
1694
|
+
TermToTypes["com.sap.vocabularies.UI.v1.MediaResource"] = "com.sap.vocabularies.UI.v1.MediaResourceType";
|
|
1695
|
+
TermToTypes["com.sap.vocabularies.UI.v1.DataPoint"] = "com.sap.vocabularies.UI.v1.DataPointType";
|
|
1696
|
+
TermToTypes["com.sap.vocabularies.UI.v1.KPI"] = "com.sap.vocabularies.UI.v1.KPIType";
|
|
1697
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Chart"] = "com.sap.vocabularies.UI.v1.ChartDefinitionType";
|
|
1698
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ValueCriticality"] = "com.sap.vocabularies.UI.v1.ValueCriticalityType";
|
|
1699
|
+
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityLabels"] = "com.sap.vocabularies.UI.v1.CriticalityLabelType";
|
|
1700
|
+
TermToTypes["com.sap.vocabularies.UI.v1.SelectionFields"] = "Edm.PropertyPath";
|
|
1701
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Facets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1702
|
+
TermToTypes["com.sap.vocabularies.UI.v1.HeaderFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1703
|
+
TermToTypes["com.sap.vocabularies.UI.v1.QuickViewFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1704
|
+
TermToTypes["com.sap.vocabularies.UI.v1.QuickCreateFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1705
|
+
TermToTypes["com.sap.vocabularies.UI.v1.FilterFacets"] = "com.sap.vocabularies.UI.v1.ReferenceFacet";
|
|
1706
|
+
TermToTypes["com.sap.vocabularies.UI.v1.SelectionPresentationVariant"] = "com.sap.vocabularies.UI.v1.SelectionPresentationVariantType";
|
|
1707
|
+
TermToTypes["com.sap.vocabularies.UI.v1.PresentationVariant"] = "com.sap.vocabularies.UI.v1.PresentationVariantType";
|
|
1708
|
+
TermToTypes["com.sap.vocabularies.UI.v1.SelectionVariant"] = "com.sap.vocabularies.UI.v1.SelectionVariantType";
|
|
1709
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ThingPerspective"] = "Org.OData.Core.V1.Tag";
|
|
1710
|
+
TermToTypes["com.sap.vocabularies.UI.v1.IsSummary"] = "Org.OData.Core.V1.Tag";
|
|
1711
|
+
TermToTypes["com.sap.vocabularies.UI.v1.PartOfPreview"] = "Org.OData.Core.V1.Tag";
|
|
1712
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Map"] = "Org.OData.Core.V1.Tag";
|
|
1713
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Gallery"] = "Org.OData.Core.V1.Tag";
|
|
1714
|
+
TermToTypes["com.sap.vocabularies.UI.v1.IsImageURL"] = "Org.OData.Core.V1.Tag";
|
|
1715
|
+
TermToTypes["com.sap.vocabularies.UI.v1.IsImage"] = "Org.OData.Core.V1.Tag";
|
|
1716
|
+
TermToTypes["com.sap.vocabularies.UI.v1.MultiLineText"] = "Org.OData.Core.V1.Tag";
|
|
1717
|
+
TermToTypes["com.sap.vocabularies.UI.v1.TextArrangement"] = "com.sap.vocabularies.UI.v1.TextArrangementType";
|
|
1718
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Importance"] = "com.sap.vocabularies.UI.v1.ImportanceType";
|
|
1719
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Hidden"] = "Org.OData.Core.V1.Tag";
|
|
1720
|
+
TermToTypes["com.sap.vocabularies.UI.v1.CreateHidden"] = "Org.OData.Core.V1.Tag";
|
|
1721
|
+
TermToTypes["com.sap.vocabularies.UI.v1.UpdateHidden"] = "Org.OData.Core.V1.Tag";
|
|
1722
|
+
TermToTypes["com.sap.vocabularies.UI.v1.DeleteHidden"] = "Org.OData.Core.V1.Tag";
|
|
1723
|
+
TermToTypes["com.sap.vocabularies.UI.v1.HiddenFilter"] = "Org.OData.Core.V1.Tag";
|
|
1724
|
+
TermToTypes["com.sap.vocabularies.UI.v1.DataFieldDefault"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1725
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Criticality"] = "com.sap.vocabularies.UI.v1.CriticalityType";
|
|
1726
|
+
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityCalculation"] = "com.sap.vocabularies.UI.v1.CriticalityCalculationType";
|
|
1727
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Emphasized"] = "Org.OData.Core.V1.Tag";
|
|
1728
|
+
TermToTypes["com.sap.vocabularies.UI.v1.OrderBy"] = "Edm.PropertyPath";
|
|
1729
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ParameterDefaultValue"] = "Edm.PrimitiveType";
|
|
1730
|
+
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationState"] = "com.sap.vocabularies.UI.v1.RecommendationStateType";
|
|
1731
|
+
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationList"] = "com.sap.vocabularies.UI.v1.RecommendationListType";
|
|
1732
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext"] = "Org.OData.Core.V1.Tag";
|
|
1733
|
+
TermToTypes["com.sap.vocabularies.HTML5.v1.CssDefaults"] = "com.sap.vocabularies.HTML5.v1.CssDefaultsType";
|
|
1734
|
+
})(TermToTypes = exports.TermToTypes || (exports.TermToTypes = {}));
|
|
1735
|
+
/**
|
|
1736
|
+
* Differentiate between a ComplexType and a TypeDefinition.
|
|
1737
|
+
* @param complexTypeDefinition
|
|
1738
|
+
* @returns true if the value is a complex type
|
|
1739
|
+
*/
|
|
1740
|
+
|
|
1741
|
+
|
|
1742
|
+
function isComplexTypeDefinition(complexTypeDefinition) {
|
|
1743
|
+
return !!complexTypeDefinition && complexTypeDefinition._type === 'ComplexType' && !!complexTypeDefinition.properties;
|
|
1469
1744
|
}
|
|
1470
1745
|
|
|
1471
|
-
|
|
1472
|
-
toResolve.targetString = targetStr;
|
|
1746
|
+
exports.isComplexTypeDefinition = isComplexTypeDefinition;
|
|
1473
1747
|
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
addAnnotationErrorMessage(targetStr, _oErrorMsg);
|
|
1487
|
-
}
|
|
1748
|
+
function Decimal(value) {
|
|
1749
|
+
return {
|
|
1750
|
+
isDecimal: function () {
|
|
1751
|
+
return true;
|
|
1752
|
+
},
|
|
1753
|
+
valueOf: function () {
|
|
1754
|
+
return value;
|
|
1755
|
+
},
|
|
1756
|
+
toString: function () {
|
|
1757
|
+
return value.toString();
|
|
1758
|
+
}
|
|
1759
|
+
};
|
|
1488
1760
|
}
|
|
1489
|
-
});
|
|
1490
1761
|
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
}
|
|
1762
|
+
exports.Decimal = Decimal;
|
|
1763
|
+
/***/
|
|
1764
|
+
},
|
|
1494
1765
|
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
annotations: parserOutput.schema.annotations,
|
|
1504
|
-
namespace: parserOutput.schema.namespace,
|
|
1505
|
-
entityContainer: parserOutput.schema.entityContainer,
|
|
1506
|
-
actions: parserOutput.schema.actions,
|
|
1507
|
-
entitySets: parserOutput.schema.entitySets,
|
|
1508
|
-
singletons: parserOutput.schema.singletons,
|
|
1509
|
-
entityTypes: parserOutput.schema.entityTypes,
|
|
1510
|
-
complexTypes: parserOutput.schema.complexTypes,
|
|
1511
|
-
typeDefinitions: parserOutput.schema.typeDefinitions,
|
|
1512
|
-
references: defaultReferences.concat(extraReferences),
|
|
1513
|
-
diagnostics: ANNOTATION_ERRORS.concat()
|
|
1514
|
-
};
|
|
1515
|
-
convertedOutput.resolvePath = createGlobalResolve(convertedOutput, objectMap);
|
|
1516
|
-
return convertedOutput;
|
|
1517
|
-
}
|
|
1766
|
+
/***/
|
|
1767
|
+
922:
|
|
1768
|
+
/***/
|
|
1769
|
+
function (__unused_webpack_module, exports, __webpack_require__) {
|
|
1770
|
+
Object.defineProperty(exports, "__esModule", {
|
|
1771
|
+
value: true
|
|
1772
|
+
});
|
|
1773
|
+
exports.revertTermToGenericType = void 0;
|
|
1518
1774
|
|
|
1519
|
-
|
|
1775
|
+
var utils_1 = __webpack_require__(800);
|
|
1776
|
+
/**
|
|
1777
|
+
* Revert an object to its raw type equivalent.
|
|
1778
|
+
*
|
|
1779
|
+
* @param references the current reference
|
|
1780
|
+
* @param value the value to revert
|
|
1781
|
+
* @returns the raw value
|
|
1782
|
+
*/
|
|
1520
1783
|
|
|
1521
|
-
function revertValueToGenericType(references, value) {
|
|
1522
|
-
var result;
|
|
1523
1784
|
|
|
1524
|
-
|
|
1525
|
-
|
|
1785
|
+
function revertObjectToRawType(references, value) {
|
|
1786
|
+
var _a, _b;
|
|
1526
1787
|
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
}
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
}
|
|
1788
|
+
var result;
|
|
1789
|
+
|
|
1790
|
+
if (Array.isArray(value)) {
|
|
1791
|
+
result = {
|
|
1792
|
+
type: 'Collection',
|
|
1793
|
+
Collection: value.map(function (anno) {
|
|
1794
|
+
return revertCollectionItemToRawType(references, anno);
|
|
1795
|
+
})
|
|
1796
|
+
};
|
|
1797
|
+
} else if ((_a = value.isDecimal) === null || _a === void 0 ? void 0 : _a.call(value)) {
|
|
1798
|
+
result = {
|
|
1799
|
+
type: 'Decimal',
|
|
1800
|
+
Decimal: value.valueOf()
|
|
1801
|
+
};
|
|
1802
|
+
} else if ((_b = value.isString) === null || _b === void 0 ? void 0 : _b.call(value)) {
|
|
1803
|
+
var valueMatches = value.split('.');
|
|
1804
|
+
|
|
1805
|
+
if (valueMatches.length > 1 && references.find(function (ref) {
|
|
1806
|
+
return ref.alias === valueMatches[0];
|
|
1807
|
+
})) {
|
|
1808
|
+
result = {
|
|
1809
|
+
type: 'EnumMember',
|
|
1810
|
+
EnumMember: value.valueOf()
|
|
1811
|
+
};
|
|
1812
|
+
} else {
|
|
1813
|
+
result = {
|
|
1814
|
+
type: 'String',
|
|
1815
|
+
String: value.valueOf()
|
|
1816
|
+
};
|
|
1817
|
+
}
|
|
1818
|
+
} else if (value.type === 'Path') {
|
|
1819
|
+
result = {
|
|
1820
|
+
type: 'Path',
|
|
1821
|
+
Path: value.path
|
|
1822
|
+
};
|
|
1823
|
+
} else if (value.type === 'AnnotationPath') {
|
|
1824
|
+
result = {
|
|
1825
|
+
type: 'AnnotationPath',
|
|
1826
|
+
AnnotationPath: value.value
|
|
1827
|
+
};
|
|
1828
|
+
} else if (value.type === 'Apply') {
|
|
1829
|
+
result = {
|
|
1830
|
+
type: 'Apply',
|
|
1831
|
+
Apply: value.Apply
|
|
1832
|
+
};
|
|
1833
|
+
} else if (value.type === 'Null') {
|
|
1834
|
+
result = {
|
|
1835
|
+
type: 'Null'
|
|
1836
|
+
};
|
|
1837
|
+
} else if (value.type === 'PropertyPath') {
|
|
1838
|
+
result = {
|
|
1839
|
+
type: 'PropertyPath',
|
|
1840
|
+
PropertyPath: value.value
|
|
1841
|
+
};
|
|
1842
|
+
} else if (value.type === 'NavigationPropertyPath') {
|
|
1843
|
+
result = {
|
|
1844
|
+
type: 'NavigationPropertyPath',
|
|
1845
|
+
NavigationPropertyPath: value.value
|
|
1846
|
+
};
|
|
1847
|
+
} else if (Object.prototype.hasOwnProperty.call(value, '$Type')) {
|
|
1848
|
+
result = {
|
|
1849
|
+
type: 'Record',
|
|
1850
|
+
Record: revertCollectionItemToRawType(references, value)
|
|
1851
|
+
};
|
|
1852
|
+
}
|
|
1853
|
+
|
|
1854
|
+
return result;
|
|
1563
1855
|
}
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
type: "NavigationPropertyPath",
|
|
1596
|
-
NavigationPropertyPath: value.value
|
|
1597
|
-
};
|
|
1598
|
-
} else if (Object.prototype.hasOwnProperty.call(value, "$Type")) {
|
|
1599
|
-
result = {
|
|
1600
|
-
type: "Record",
|
|
1601
|
-
Record: revertCollectionItemToGenericType(references, value)
|
|
1602
|
-
};
|
|
1603
|
-
}
|
|
1856
|
+
/**
|
|
1857
|
+
* Revert a value to its raw value depending on its type.
|
|
1858
|
+
*
|
|
1859
|
+
* @param references the current set of reference
|
|
1860
|
+
* @param value the value to revert
|
|
1861
|
+
* @returns the raw expression
|
|
1862
|
+
*/
|
|
1863
|
+
|
|
1864
|
+
|
|
1865
|
+
function revertValueToRawType(references, value) {
|
|
1866
|
+
var result;
|
|
1867
|
+
var valueConstructor = value === null || value === void 0 ? void 0 : value.constructor.name;
|
|
1868
|
+
|
|
1869
|
+
switch (valueConstructor) {
|
|
1870
|
+
case 'String':
|
|
1871
|
+
case 'string':
|
|
1872
|
+
var valueMatches = value.toString().split('.');
|
|
1873
|
+
|
|
1874
|
+
if (valueMatches.length > 1 && references.find(function (ref) {
|
|
1875
|
+
return ref.alias === valueMatches[0];
|
|
1876
|
+
})) {
|
|
1877
|
+
result = {
|
|
1878
|
+
type: 'EnumMember',
|
|
1879
|
+
EnumMember: value.toString()
|
|
1880
|
+
};
|
|
1881
|
+
} else {
|
|
1882
|
+
result = {
|
|
1883
|
+
type: 'String',
|
|
1884
|
+
String: value.toString()
|
|
1885
|
+
};
|
|
1886
|
+
}
|
|
1604
1887
|
|
|
1605
|
-
|
|
1606
|
-
|
|
1888
|
+
break;
|
|
1889
|
+
|
|
1890
|
+
case 'Boolean':
|
|
1891
|
+
case 'boolean':
|
|
1892
|
+
result = {
|
|
1893
|
+
type: 'Bool',
|
|
1894
|
+
Bool: value.valueOf()
|
|
1895
|
+
};
|
|
1896
|
+
break;
|
|
1897
|
+
|
|
1898
|
+
case 'Number':
|
|
1899
|
+
case 'number':
|
|
1900
|
+
if (value.toString() === value.toFixed()) {
|
|
1901
|
+
result = {
|
|
1902
|
+
type: 'Int',
|
|
1903
|
+
Int: value.valueOf()
|
|
1904
|
+
};
|
|
1905
|
+
} else {
|
|
1906
|
+
result = {
|
|
1907
|
+
type: 'Decimal',
|
|
1908
|
+
Decimal: value.valueOf()
|
|
1909
|
+
};
|
|
1910
|
+
}
|
|
1607
1911
|
|
|
1608
|
-
|
|
1609
|
-
if (typeof collectionItem === "string") {
|
|
1610
|
-
return collectionItem;
|
|
1611
|
-
} else if (typeof collectionItem === "object") {
|
|
1612
|
-
if (collectionItem.hasOwnProperty("$Type")) {
|
|
1613
|
-
// Annotation Record
|
|
1614
|
-
var outItem = {
|
|
1615
|
-
type: collectionItem.$Type,
|
|
1616
|
-
propertyValues: []
|
|
1617
|
-
}; // Could validate keys and type based on $Type
|
|
1618
|
-
|
|
1619
|
-
Object.keys(collectionItem).forEach(function (collectionKey) {
|
|
1620
|
-
if (collectionKey !== "$Type" && collectionKey !== "term" && collectionKey !== "__source" && collectionKey !== "qualifier" && collectionKey !== "ActionTarget" && collectionKey !== "fullyQualifiedName" && collectionKey !== "annotations") {
|
|
1621
|
-
var value = collectionItem[collectionKey];
|
|
1622
|
-
outItem.propertyValues.push({
|
|
1623
|
-
name: collectionKey,
|
|
1624
|
-
value: revertValueToGenericType(references, value)
|
|
1625
|
-
});
|
|
1626
|
-
} else if (collectionKey === "annotations") {
|
|
1627
|
-
var annotations = collectionItem[collectionKey];
|
|
1628
|
-
outItem.annotations = [];
|
|
1629
|
-
Object.keys(annotations).filter(function (key) {
|
|
1630
|
-
return key !== "_annotations";
|
|
1631
|
-
}).forEach(function (key) {
|
|
1632
|
-
Object.keys(annotations[key]).forEach(function (term) {
|
|
1633
|
-
var _outItem$annotations;
|
|
1634
|
-
|
|
1635
|
-
var parsedAnnotation = revertTermToGenericType(references, annotations[key][term]);
|
|
1636
|
-
|
|
1637
|
-
if (!parsedAnnotation.term) {
|
|
1638
|
-
var unaliasedTerm = unalias(references, "".concat(key, ".").concat(term));
|
|
1639
|
-
|
|
1640
|
-
if (unaliasedTerm) {
|
|
1641
|
-
var qualifiedSplit = unaliasedTerm.split("#");
|
|
1642
|
-
parsedAnnotation.term = qualifiedSplit[0];
|
|
1643
|
-
|
|
1644
|
-
if (qualifiedSplit.length > 1) {
|
|
1645
|
-
parsedAnnotation.qualifier = qualifiedSplit[1];
|
|
1646
|
-
}
|
|
1647
|
-
}
|
|
1648
|
-
}
|
|
1912
|
+
break;
|
|
1649
1913
|
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
}
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
return {
|
|
1658
|
-
type: "PropertyPath",
|
|
1659
|
-
PropertyPath: collectionItem.value
|
|
1660
|
-
};
|
|
1661
|
-
} else if (collectionItem.type === "AnnotationPath") {
|
|
1662
|
-
return {
|
|
1663
|
-
type: "AnnotationPath",
|
|
1664
|
-
AnnotationPath: collectionItem.value
|
|
1665
|
-
};
|
|
1666
|
-
} else if (collectionItem.type === "NavigationPropertyPath") {
|
|
1667
|
-
return {
|
|
1668
|
-
type: "NavigationPropertyPath",
|
|
1669
|
-
NavigationPropertyPath: collectionItem.value
|
|
1670
|
-
};
|
|
1914
|
+
case 'object':
|
|
1915
|
+
default:
|
|
1916
|
+
result = revertObjectToRawType(references, value);
|
|
1917
|
+
break;
|
|
1918
|
+
}
|
|
1919
|
+
|
|
1920
|
+
return result;
|
|
1671
1921
|
}
|
|
1672
|
-
}
|
|
1673
|
-
}
|
|
1674
1922
|
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1923
|
+
var restrictedKeys = ['$Type', 'term', '__source', 'qualifier', 'ActionTarget', 'fullyQualifiedName', 'annotations'];
|
|
1924
|
+
/**
|
|
1925
|
+
* Revert the current embedded annotations to their raw type.
|
|
1926
|
+
*
|
|
1927
|
+
* @param references the current set of reference
|
|
1928
|
+
* @param currentAnnotations the collection item to evaluate
|
|
1929
|
+
* @param targetAnnotations the place where we need to add the annotation
|
|
1930
|
+
*/
|
|
1680
1931
|
|
|
1681
|
-
|
|
1682
|
-
// Collection
|
|
1683
|
-
if (annotation.hasOwnProperty("annotations")) {
|
|
1684
|
-
baseAnnotation.annotations = [];
|
|
1685
|
-
var currentAnnotations = annotation.annotations;
|
|
1932
|
+
function revertAnnotationsToRawType(references, currentAnnotations, targetAnnotations) {
|
|
1686
1933
|
Object.keys(currentAnnotations).filter(function (key) {
|
|
1687
|
-
return key !==
|
|
1934
|
+
return key !== '_annotations';
|
|
1688
1935
|
}).forEach(function (key) {
|
|
1689
1936
|
Object.keys(currentAnnotations[key]).forEach(function (term) {
|
|
1690
|
-
var _baseAnnotation$annot;
|
|
1691
|
-
|
|
1692
1937
|
var parsedAnnotation = revertTermToGenericType(references, currentAnnotations[key][term]);
|
|
1693
1938
|
|
|
1694
1939
|
if (!parsedAnnotation.term) {
|
|
1695
|
-
var unaliasedTerm = unalias(references, "".concat(key, ".").concat(term));
|
|
1940
|
+
var unaliasedTerm = (0, utils_1.unalias)(references, "".concat(key, ".").concat(term));
|
|
1696
1941
|
|
|
1697
1942
|
if (unaliasedTerm) {
|
|
1698
|
-
var qualifiedSplit = unaliasedTerm.split(
|
|
1943
|
+
var qualifiedSplit = unaliasedTerm.split('#');
|
|
1699
1944
|
parsedAnnotation.term = qualifiedSplit[0];
|
|
1700
1945
|
|
|
1701
1946
|
if (qualifiedSplit.length > 1) {
|
|
1947
|
+
// Sub Annotation with a qualifier, not sure when that can happen in real scenarios
|
|
1702
1948
|
parsedAnnotation.qualifier = qualifiedSplit[1];
|
|
1703
1949
|
}
|
|
1704
1950
|
}
|
|
1705
1951
|
}
|
|
1706
1952
|
|
|
1707
|
-
|
|
1953
|
+
targetAnnotations.push(parsedAnnotation);
|
|
1708
1954
|
});
|
|
1709
1955
|
});
|
|
1710
1956
|
}
|
|
1957
|
+
/**
|
|
1958
|
+
* Revert the current collection item to the corresponding raw annotation.
|
|
1959
|
+
*
|
|
1960
|
+
* @param references the current set of reference
|
|
1961
|
+
* @param collectionItem the collection item to evaluate
|
|
1962
|
+
* @returns the raw type equivalent
|
|
1963
|
+
*/
|
|
1964
|
+
|
|
1965
|
+
|
|
1966
|
+
function revertCollectionItemToRawType(references, collectionItem) {
|
|
1967
|
+
if (typeof collectionItem === 'string') {
|
|
1968
|
+
return collectionItem;
|
|
1969
|
+
} else if (typeof collectionItem === 'object') {
|
|
1970
|
+
if (collectionItem.hasOwnProperty('$Type')) {
|
|
1971
|
+
// Annotation Record
|
|
1972
|
+
var outItem = {
|
|
1973
|
+
type: collectionItem.$Type,
|
|
1974
|
+
propertyValues: []
|
|
1975
|
+
}; // Could validate keys and type based on $Type
|
|
1976
|
+
|
|
1977
|
+
Object.keys(collectionItem).forEach(function (collectionKey) {
|
|
1978
|
+
if (restrictedKeys.indexOf(collectionKey) === -1) {
|
|
1979
|
+
var value = collectionItem[collectionKey];
|
|
1980
|
+
outItem.propertyValues.push({
|
|
1981
|
+
name: collectionKey,
|
|
1982
|
+
value: revertValueToRawType(references, value)
|
|
1983
|
+
});
|
|
1984
|
+
} else if (collectionKey === 'annotations') {
|
|
1985
|
+
outItem.annotations = [];
|
|
1986
|
+
revertAnnotationsToRawType(references, collectionItem[collectionKey], outItem.annotations);
|
|
1987
|
+
}
|
|
1988
|
+
});
|
|
1989
|
+
return outItem;
|
|
1990
|
+
} else if (collectionItem.type === 'PropertyPath') {
|
|
1991
|
+
return {
|
|
1992
|
+
type: 'PropertyPath',
|
|
1993
|
+
PropertyPath: collectionItem.value
|
|
1994
|
+
};
|
|
1995
|
+
} else if (collectionItem.type === 'AnnotationPath') {
|
|
1996
|
+
return {
|
|
1997
|
+
type: 'AnnotationPath',
|
|
1998
|
+
AnnotationPath: collectionItem.value
|
|
1999
|
+
};
|
|
2000
|
+
} else if (collectionItem.type === 'NavigationPropertyPath') {
|
|
2001
|
+
return {
|
|
2002
|
+
type: 'NavigationPropertyPath',
|
|
2003
|
+
NavigationPropertyPath: collectionItem.value
|
|
2004
|
+
};
|
|
2005
|
+
}
|
|
2006
|
+
}
|
|
2007
|
+
}
|
|
2008
|
+
/**
|
|
2009
|
+
* Revert an annotation term to it's generic or raw equivalent.
|
|
2010
|
+
*
|
|
2011
|
+
* @param references the reference of the current context
|
|
2012
|
+
* @param annotation the annotation term to revert
|
|
2013
|
+
* @returns the raw annotation
|
|
2014
|
+
*/
|
|
2015
|
+
|
|
2016
|
+
|
|
2017
|
+
function revertTermToGenericType(references, annotation) {
|
|
2018
|
+
var baseAnnotation = {
|
|
2019
|
+
term: annotation.term,
|
|
2020
|
+
qualifier: annotation.qualifier
|
|
2021
|
+
};
|
|
1711
2022
|
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
2023
|
+
if (Array.isArray(annotation)) {
|
|
2024
|
+
// Collection
|
|
2025
|
+
if (annotation.hasOwnProperty('annotations')) {
|
|
2026
|
+
// Annotation on a collection itself, not sure when that happens if at all
|
|
2027
|
+
baseAnnotation.annotations = [];
|
|
2028
|
+
revertAnnotationsToRawType(references, annotation.annotations, baseAnnotation.annotations);
|
|
2029
|
+
}
|
|
2030
|
+
|
|
2031
|
+
return Object.assign(Object.assign({}, baseAnnotation), {
|
|
2032
|
+
collection: annotation.map(function (anno) {
|
|
2033
|
+
return revertCollectionItemToRawType(references, anno);
|
|
2034
|
+
})
|
|
2035
|
+
});
|
|
2036
|
+
} else if (annotation.hasOwnProperty('$Type')) {
|
|
2037
|
+
return Object.assign(Object.assign({}, baseAnnotation), {
|
|
2038
|
+
record: revertCollectionItemToRawType(references, annotation)
|
|
2039
|
+
});
|
|
2040
|
+
} else {
|
|
2041
|
+
return Object.assign(Object.assign({}, baseAnnotation), {
|
|
2042
|
+
value: revertValueToRawType(references, annotation)
|
|
2043
|
+
});
|
|
2044
|
+
}
|
|
2045
|
+
}
|
|
2046
|
+
|
|
2047
|
+
exports.revertTermToGenericType = revertTermToGenericType;
|
|
2048
|
+
/***/
|
|
1725
2049
|
}
|
|
2050
|
+
/******/
|
|
2051
|
+
|
|
2052
|
+
};
|
|
2053
|
+
/************************************************************************/
|
|
2054
|
+
|
|
2055
|
+
/******/
|
|
2056
|
+
// The module cache
|
|
2057
|
+
|
|
2058
|
+
/******/
|
|
2059
|
+
|
|
2060
|
+
var __webpack_module_cache__ = {};
|
|
2061
|
+
/******/
|
|
2062
|
+
|
|
2063
|
+
/******/
|
|
2064
|
+
// The require function
|
|
2065
|
+
|
|
2066
|
+
/******/
|
|
2067
|
+
|
|
2068
|
+
function __webpack_require__(moduleId) {
|
|
2069
|
+
/******/
|
|
2070
|
+
// Check if module is in cache
|
|
2071
|
+
|
|
2072
|
+
/******/
|
|
2073
|
+
var cachedModule = __webpack_module_cache__[moduleId];
|
|
2074
|
+
/******/
|
|
2075
|
+
|
|
2076
|
+
if (cachedModule !== undefined) {
|
|
2077
|
+
/******/
|
|
2078
|
+
return cachedModule.exports;
|
|
2079
|
+
/******/
|
|
2080
|
+
}
|
|
2081
|
+
/******/
|
|
2082
|
+
// Create a new module (and put it into the cache)
|
|
2083
|
+
|
|
2084
|
+
/******/
|
|
2085
|
+
|
|
2086
|
+
|
|
2087
|
+
var module = __webpack_module_cache__[moduleId] = {
|
|
2088
|
+
/******/
|
|
2089
|
+
// no module.id needed
|
|
2090
|
+
|
|
2091
|
+
/******/
|
|
2092
|
+
// no module.loaded needed
|
|
2093
|
+
|
|
2094
|
+
/******/
|
|
2095
|
+
exports: {}
|
|
2096
|
+
/******/
|
|
2097
|
+
|
|
2098
|
+
};
|
|
2099
|
+
/******/
|
|
2100
|
+
|
|
2101
|
+
/******/
|
|
2102
|
+
// Execute the module function
|
|
2103
|
+
|
|
2104
|
+
/******/
|
|
2105
|
+
|
|
2106
|
+
__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
2107
|
+
/******/
|
|
2108
|
+
|
|
2109
|
+
/******/
|
|
2110
|
+
// Return the exports of the module
|
|
2111
|
+
|
|
2112
|
+
/******/
|
|
2113
|
+
|
|
2114
|
+
|
|
2115
|
+
return module.exports;
|
|
2116
|
+
/******/
|
|
1726
2117
|
}
|
|
2118
|
+
/******/
|
|
2119
|
+
|
|
2120
|
+
/************************************************************************/
|
|
2121
|
+
|
|
2122
|
+
/******/
|
|
2123
|
+
|
|
2124
|
+
/******/
|
|
2125
|
+
// startup
|
|
2126
|
+
|
|
2127
|
+
/******/
|
|
2128
|
+
// Load entry module and return exports
|
|
2129
|
+
|
|
2130
|
+
/******/
|
|
2131
|
+
// This entry module is referenced by other modules so it can't be inlined
|
|
2132
|
+
|
|
2133
|
+
/******/
|
|
2134
|
+
|
|
2135
|
+
|
|
2136
|
+
var __webpack_exports__ = __webpack_require__(126);
|
|
2137
|
+
/******/
|
|
2138
|
+
|
|
2139
|
+
|
|
2140
|
+
AnnotationConverter = __webpack_exports__;
|
|
2141
|
+
/******/
|
|
1727
2142
|
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
});
|
|
1731
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbW1vbi9Bbm5vdGF0aW9uQ29udmVydGVyLnRzIl0sIm5hbWVzIjpbIlBhdGgiLCJwYXRoRXhwcmVzc2lvbiIsInRhcmdldE5hbWUiLCJhbm5vdGF0aW9uc1Rlcm0iLCJhbm5vdGF0aW9uVHlwZSIsInRlcm0iLCJwYXRoIiwidHlwZSIsIiR0YXJnZXQiLCJUZXJtVG9UeXBlcyIsImRlZmF1bHRSZWZlcmVuY2VzIiwiYWxpYXMiLCJuYW1lc3BhY2UiLCJ1cmkiLCJyZWZlcmVuY2VzIiwidW5hbGlhc2VkVmFsdWUiLCJyZXZlcnNlUmVmZXJlbmNlTWFwIiwicmVkdWNlIiwibWFwIiwicmVmZXJlbmNlIiwibGFzdERvdEluZGV4IiwibGFzdEluZGV4T2YiLCJzdWJzdHIiLCJ2YWx1ZSIsImluZGV4T2YiLCJzcGxpdCIsInByZUFsaWFzIiwicG9zdEFsaWFzIiwiam9pbiIsInVuYWxpYXMiLCJhbGlhc2VkVmFsdWUiLCJyZWZlcmVuY2VNYXAiLCJidWlsZE9iamVjdE1hcCIsInBhcnNlck91dHB1dCIsIm9iamVjdE1hcCIsInNjaGVtYSIsImVudGl0eUNvbnRhaW5lciIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eVNldHMiLCJmb3JFYWNoIiwiZW50aXR5U2V0IiwiYWN0aW9ucyIsImFjdGlvbiIsImlzQm91bmQiLCJ1bkJvdW5kQWN0aW9uTmFtZSIsIl90eXBlIiwicHVzaCIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXIiLCJjb21wbGV4VHlwZXMiLCJjb21wbGV4VHlwZSIsInByb3BlcnRpZXMiLCJwcm9wZXJ0eSIsInR5cGVEZWZpbml0aW9ucyIsInR5cGVEZWZpbml0aW9uIiwiZW50aXR5VHlwZXMiLCJlbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImNvbXBsZXhUeXBlRGVmaW5pdGlvbiIsImNvbXBsZXhUeXBlUHJvcCIsImNvbXBsZXhUeXBlUHJvcFRhcmdldCIsIk9iamVjdCIsImFzc2lnbiIsIm5hbWUiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3BlcnR5Iiwia2V5cyIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvblNvdXJjZSIsImFubm90YXRpb25MaXN0IiwiY3VycmVudFRhcmdldE5hbWUiLCJ0YXJnZXQiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbkZRTiIsInF1YWxpZmllciIsImNvbWJpbmVQYXRoIiwiY3VycmVudFRhcmdldCIsInN0YXJ0c1dpdGgiLCJhZGRBbm5vdGF0aW9uRXJyb3JNZXNzYWdlIiwib0Vycm9yTXNnIiwiQUxMX0FOTk9UQVRJT05fRVJST1JTIiwicmVzb2x2ZVRhcmdldCIsInBhdGhPbmx5IiwiaW5jbHVkZVZpc2l0ZWRPYmplY3RzIiwidW5kZWZpbmVkIiwiYVZpc2l0ZWRPYmplY3RzIiwicGF0aFNwbGl0IiwidGFyZ2V0UGF0aFNwbGl0IiwicGF0aFBhcnQiLCJhbm5vdGF0aW9uUGF0aCIsImN1cnJlbnRQYXRoIiwiY3VycmVudENvbnRleHQiLCJjdXJyZW50VmFsdWUiLCJsZW5ndGgiLCJ0YXJnZXRUeXBlIiwiZW50aXR5VHlwZU5hbWUiLCJ0YXJnZXRUeXBlTmFtZSIsInNvdXJjZVR5cGUiLCJpc0VudGl0eVNldCIsImxhc3RJZHgiLCJzdWJUYXJnZXQiLCJ2aXNpdGVkT2JqZWN0cyIsInZpc2l0ZWRTdWJPYmplY3QiLCJjb25jYXQiLCJyZXZlcnNlIiwiZmluZCIsIm9iaiIsImludGVybWVkaWF0ZVRhcmdldCIsImhhc093blByb3BlcnR5IiwibWVzc2FnZSIsImlzQW5ub3RhdGlvblBhdGgiLCJwYXRoU3RyIiwicGFyc2VWYWx1ZSIsInByb3BlcnR5VmFsdWUiLCJ2YWx1ZUZRTiIsInRvUmVzb2x2ZSIsInVucmVzb2x2ZWRBbm5vdGF0aW9ucyIsIlN0cmluZyIsIkludCIsIkJvb2wiLCJEZWNpbWFsIiwiRGF0ZSIsIkVudW1NZW1iZXIiLCJQcm9wZXJ0eVBhdGgiLCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiYW5ub3RhdGlvblRhcmdldCIsIkFubm90YXRpb25QYXRoIiwiaW5saW5lIiwicGFyc2VSZWNvcmQiLCJSZWNvcmQiLCJwYXJzZUNvbGxlY3Rpb24iLCJDb2xsZWN0aW9uIiwiaW5mZXJUeXBlRnJvbVRlcm0iLCJpc0Vycm9yIiwicmVjb3JkRGVmaW5pdGlvbiIsImN1cnJlbnRGUU4iLCJhbm5vdGF0aW9uVGVybSIsIiRUeXBlIiwiYW5ub3RhdGlvbkNvbnRlbnQiLCJBcnJheSIsImlzQXJyYXkiLCJzdWJBbm5vdGF0aW9uTGlzdCIsIl9fc291cmNlIiwicHJvcGVydHlWYWx1ZXMiLCJBY3Rpb25UYXJnZXQiLCJBY3Rpb24iLCJBTk5PVEFUSU9OX0VSUk9SUyIsImdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZSIsImNvbGxlY3Rpb25EZWZpbml0aW9uIiwiZmlyc3RDb2xJdGVtIiwicGFyZW50RlFOIiwiY29sbGVjdGlvbkRlZmluaXRpb25UeXBlIiwicHJvcGVydHlQYXRoIiwicHJvcGVydHlJZHgiLCJwYXRoVmFsdWUiLCJhbm5vdGF0aW9uSWR4IiwiYW5ub3RhdGlvbkNvbGxlY3Rpb25FbGVtZW50IiwibmF2UHJvcGVydHlQYXRoIiwibmF2UHJvcElkeCIsInJlY29yZElkeCIsImlmVmFsdWUiLCJzdHJpbmdWYWx1ZSIsIkVycm9yIiwiY29udmVydEFubm90YXRpb24iLCJyZWNvcmQiLCJjb2xsZWN0aW9uIiwiY3JlYXRlUmVzb2x2ZVBhdGhGbiIsInJlbGF0aXZlUGF0aCIsInJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydGllcyIsImFzc29jaWF0aW9ucyIsIm5hdlByb3AiLCJvdXROYXZQcm9wIiwicGFydG5lciIsImlzQ29sbGVjdGlvbiIsImNvbnRhaW5zVGFyZ2V0IiwicmVmZXJlbnRpYWxDb25zdHJhaW50IiwicmVsYXRpb25zaGlwIiwidGFyZ2V0QXNzb2NpYXRpb24iLCJhc3NvY2lhdGlvbiIsImFzc29jaWF0aW9uRW5kIiwiZW5kIiwicm9sZSIsInRvUm9sZSIsIm11bHRpcGxpY2l0eSIsIm91dE5hdlByb3BSZXEiLCJyZXNvbHZlUGF0aCIsImxpbmtBY3Rpb25zVG9FbnRpdHlUeXBlIiwic291cmNlRW50aXR5VHlwZSIsInJldHVybkVudGl0eVR5cGUiLCJyZXR1cm5UeXBlIiwibGlua0VudGl0eVR5cGVUb0VudGl0eVNldCIsImtleVByb3AiLCJpc0tleSIsImxpbmtFbnRpdHlUeXBlVG9TaW5nbGV0b24iLCJzaW5nbGV0b25zIiwic2luZ2xldG9uIiwidHlwZU5hbWUiLCJsaW5rUHJvcGVydGllc1RvQ29tcGxleFR5cGVzIiwibGluayIsImNvbXBsZXhUeXBlTmFtZSIsInNFcnJvciIsInByZXBhcmVDb21wbGV4VHlwZXMiLCJzcGxpdFRlcm0iLCJ0ZXJtVmFsdWUiLCJhbGlhc2VkVGVybSIsImxhc3REb3QiLCJ0ZXJtQWxpYXMiLCJjcmVhdGVHbG9iYWxSZXNvbHZlIiwiY29udmVydGVkT3V0cHV0Iiwic1BhdGgiLCJhUGF0aFNwbGl0Iiwic2hpZnQiLCJlbnRpdHlTZXROYW1lIiwiZXQiLCJvYmplY3RQYXRoIiwidGFyZ2V0UmVzb2x1dGlvbiIsImNvbnZlcnRUeXBlcyIsIm9iamVjdE1hcEVsZW1lbnQiLCJhbGxUYXJnZXRzIiwiYk92ZXJyaWRlRXhpc3RpbmciLCJ2b2NBbGlhcyIsInZvY1Rlcm0iLCJfYW5ub3RhdGlvbnMiLCJ2b2NUZXJtV2l0aFF1YWxpZmllciIsIkJvb2xlYW4iLCJleHRyYVVucmVzb2x2ZWRBbm5vdGF0aW9ucyIsImJhc2VPYmoiLCJhbm5vdGF0aW9uUGFydCIsInRhcmdldFNwbGl0Iiwic2xpY2UiLCJjdXJyZW50T2JqIiwicmVzb2x2ZWFibGUiLCJ0YXJnZXRTdHIiLCJyZXNvbHZlZFRhcmdldCIsInRhcmdldFN0cmluZyIsInRlcm1JbmZvIiwiZXh0cmFSZWZlcmVuY2VzIiwiZmlsdGVyIiwiZGVmYXVsdFJlZiIsInZlcnNpb24iLCJkaWFnbm9zdGljcyIsInJldmVydFZhbHVlVG9HZW5lcmljVHlwZSIsInJlc3VsdCIsInZhbHVlTWF0Y2hlcyIsIm1hdGNoIiwicmVmIiwiYW5ubyIsInJldmVydENvbGxlY3Rpb25JdGVtVG9HZW5lcmljVHlwZSIsInRvU3RyaW5nIiwidG9GaXhlZCIsImlzRGVjaW1hbCIsInZhbHVlT2YiLCJBcHBseSIsInByb3RvdHlwZSIsImNhbGwiLCJjb2xsZWN0aW9uSXRlbSIsIm91dEl0ZW0iLCJjb2xsZWN0aW9uS2V5Iiwia2V5IiwicGFyc2VkQW5ub3RhdGlvbiIsInJldmVydFRlcm1Ub0dlbmVyaWNUeXBlIiwidW5hbGlhc2VkVGVybSIsInF1YWxpZmllZFNwbGl0IiwiYmFzZUFubm90YXRpb24iLCJjdXJyZW50QW5ub3RhdGlvbnMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF3Q01BLEksNkJBUUwsY0FDQ0MsY0FERCxFQUVDQyxVQUZELEVBR0NDLGVBSEQsRUFJQ0MsY0FKRCxFQUtDQyxJQUxELEVBTUU7QUFBQTs7QUFDRCxTQUFLQyxJQUFMLEdBQVlMLGNBQWMsQ0FBQ0QsSUFBM0I7QUFDQSxTQUFLTyxJQUFMLEdBQVksTUFBWjtBQUNBLFNBQUtDLE9BQUwsR0FBZU4sVUFBZjtBQUNDLFNBQUtHLElBQUwsR0FBWUEsSUFBYixFQUFxQixLQUFLRCxjQUFMLEdBQXNCQSxjQUEzQyxFQUE2RCxLQUFLRCxlQUFMLEdBQXVCQSxlQUFwRjtBQUNBLEc7O01BR0dNLFc7O2FBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFB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LEtBRk0sTUFFQTtBQUNOLDZDQUFZK0wsY0FBWjtBQUE0QmhQLFFBQUFBLEtBQUssRUFBRTBOLHdCQUF3QixDQUFDbk8sVUFBRCxFQUFhMEQsVUFBYjtBQUEzRDtBQUNBO0FBQ0QiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFubm90YXRpb24gYXMgRWRtQW5ub3RhdGlvbixcblx0QW5ub3RhdGlvbkxpc3QsXG5cdEFubm90YXRpb25SZWNvcmQsXG5cdEFubm90YXRpb25UZXJtLFxuXHRDb252ZXJ0ZXJPdXRwdXQsXG5cdEV4cHJlc3Npb24sXG5cdFBhcnNlck91dHB1dCxcblx0UGF0aEV4cHJlc3Npb24sXG5cdFByb3BlcnR5UGF0aCxcblx0UHJvcGVydHlWYWx1ZSxcblx0QW5ub3RhdGlvblBhdGhFeHByZXNzaW9uLFxuXHROYXZpZ2F0aW9uUHJvcGVydHlQYXRoRXhwcmVzc2lvbixcblx0UHJvcGVydHlQYXRoRXhwcmVzc2lvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7XG5cdEFzc29jaWF0aW9uLFxuXHRHZW5lcmljTmF2aWdhdGlvblByb3BlcnR5LFxuXHRSZWZlcmVuY2UsXG5cdFByb3BlcnR5IGFzIFBhcnNlclByb3BlcnR5LFxuXHRFbnRpdHlUeXBlIGFzIFBhcnNlckVudGl0eVR5cGUsXG5cdENvbXBsZXhUeXBlIGFzIFBhcnNlckNvbXBsZXhUeXBlLFxuXHRUeXBlRGVmaW5pdGlvbiBhcyBQYXJzZXJUeXBlRGVmaW5pdGlvbixcblx0VjJOYXZpZ2F0aW9uUHJvcGVydHksXG5cdFY0TmF2aWdhdGlvblByb3BlcnR5XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L1BhcnNlclwiO1xuaW1wb3J0IHtcblx0QW5ub3RhdGlvbixcblx0RW50aXR5VHlwZSxcblx0Q29tcGxleFR5cGUsXG5cdEFjdGlvbixcblx0RW50aXR5U2V0LFxuXHRTaW5nbGV0b24sXG5cdFByb3BlcnR5LFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdEVudGl0eUNvbnRhaW5lcixcblx0U2VydmljZU9iamVjdEFuZEFubm90YXRpb24sXG5cdFJlc29sdXRpb25UYXJnZXQsXG5cdFR5cGVEZWZpbml0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L0NvbnZlcnRlclwiO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwidHMtbm9kZVwiO1xuXG5jbGFzcyBQYXRoIHtcblx0cGF0aDogc3RyaW5nO1xuXHQkdGFyZ2V0OiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0YW5ub3RhdGlvbnNUZXJtOiBzdHJpbmc7XG5cdGFubm90YXRpb25UeXBlOiBzdHJpbmc7XG5cdHRlcm06IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwYXRoRXhwcmVzc2lvbjogUGF0aEV4cHJlc3Npb24sXG5cdFx0dGFyZ2V0TmFtZTogc3RyaW5nLFxuXHRcdGFubm90YXRpb25zVGVybTogc3RyaW5nLFxuXHRcdGFubm90YXRpb25UeXBlOiBzdHJpbmcsXG5cdFx0dGVybTogc3RyaW5nXG5cdCkge1xuXHRcdHRoaXMucGF0aCA9IHBhdGhFeHByZXNzaW9uLlBhdGg7XG5cdFx0dGhpcy50eXBlID0gXCJQYXRoXCI7XG5cdFx0dGhpcy4kdGFyZ2V0ID0gdGFyZ2V0TmFtZTtcblx0XHQodGhpcy50ZXJtID0gdGVybSksICh0aGlzLmFubm90YXRpb25UeXBlID0gYW5ub3RhdGlvblR5cGUpLCAodGhpcy5hbm5vdGF0aW9uc1Rlcm0gPSBhbm5vdGF0aW9uc1Rlcm0pO1xuXHR9XG59XG5cbmVudW0gVGVybVRvVHlwZXMge1xuXHRcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLlNlY3VyaXR5U2NoZW1lc1wiID0gXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5TZWN1cml0eVNjaGVtZVwiLFxuXHRcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLkF1dGhvcml6YXRpb25zXCIgPSBcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLkF1dGhvcml6YXRpb25cIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5SZXZpc2lvbnNcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUmV2aXNpb25UeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuTGlua3NcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuTGlua1wiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxLkV4YW1wbGVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuRXhhbXBsZVZhbHVlXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuTWVzc2FnZXNcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuTWVzc2FnZVR5cGVcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5WYWx1ZUV4Y2VwdGlvblwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5WYWx1ZUV4Y2VwdGlvblR5cGVcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5SZXNvdXJjZUV4Y2VwdGlvblwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXNvdXJjZUV4Y2VwdGlvblR5cGVcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5EYXRhTW9kaWZpY2F0aW9uRXhjZXB0aW9uXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkRhdGFNb2RpZmljYXRpb25FeGNlcHRpb25UeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuSXNMYW5ndWFnZURlcGVuZGVudFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5EZXJlZmVyZW5jZWFibGVJRHNcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuQ29udmVudGlvbmFsSURzXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxLlBlcm1pc3Npb25zXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlBlcm1pc3Npb25cIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5EZWZhdWx0TmFtZXNwYWNlXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZERlZmF1bHRWYWx1ZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5Jc1VSTFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5Jc01lZGlhVHlwZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5Db250ZW50RGlzcG9zaXRpb25cIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuQ29udGVudERpc3Bvc2l0aW9uVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxLk9wdGltaXN0aWNDb25jdXJyZW5jeVwiID0gXCJFZG0uUHJvcGVydHlQYXRoXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuQWRkaXRpb25hbFByb3BlcnRpZXNcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuQXV0b0V4cGFuZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5BdXRvRXhwYW5kUmVmZXJlbmNlc1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5NYXlJbXBsZW1lbnRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVHlwZU5hbWVcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5PcmRlcmVkXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxLlBvc2l0aW9uYWxJbnNlcnRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuQWx0ZXJuYXRlS2V5c1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5BbHRlcm5hdGVLZXlcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpb25hbFBhcmFtZXRlclwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpb25hbFBhcmFtZXRlclR5cGVcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVcIiA9IFwiRWRtLkJvb2xlYW5cIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5TeW1ib2xpY05hbWVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuU2ltcGxlSWRlbnRpZmllclwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29uZm9ybWFuY2VMZXZlbFwiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbmZvcm1hbmNlTGV2ZWxUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Bc3luY2hyb25vdXNSZXF1ZXN0c1N1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoQ29udGludWVPbkVycm9yU3VwcG9ydGVkXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSXNvbGF0aW9uU3VwcG9ydGVkXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSXNvbGF0aW9uTGV2ZWxcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNyb3NzSm9pblN1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNhbGxiYWNrU3VwcG9ydGVkXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2FsbGJhY2tUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DaGFuZ2VUcmFja2luZ1wiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNoYW5nZVRyYWNraW5nVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ291bnRSZXN0cmljdGlvbnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db3VudFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5kZXhhYmxlQnlLZXlcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Ub3BTdXBwb3J0ZWRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Ta2lwU3VwcG9ydGVkXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29tcHV0ZVN1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlbGVjdFN1cHBvcnRcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWxlY3RTdXBwb3J0VHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0ZWRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaFN1cHBvcnRcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaFN1cHBvcnRUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU29ydFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkV4cGFuZFJlc3RyaWN0aW9uc1wiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkV4cGFuZFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlYXJjaFJlc3RyaWN0aW9uc1wiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlYXJjaFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLktleUFzU2VnbWVudFN1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlF1ZXJ5U2VnbWVudFN1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluc2VydFJlc3RyaWN0aW9uc1wiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluc2VydFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZXBJbnNlcnRTdXBwb3J0XCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcEluc2VydFN1cHBvcnRUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5VcGRhdGVSZXN0cmljdGlvbnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5VcGRhdGVSZXN0cmljdGlvbnNUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwVXBkYXRlU3VwcG9ydFwiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZXBVcGRhdGVTdXBwb3J0VHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVsZXRlUmVzdHJpY3Rpb25zXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVsZXRlUmVzdHJpY3Rpb25zVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29sbGVjdGlvblByb3BlcnR5UmVzdHJpY3Rpb25zXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29sbGVjdGlvblByb3BlcnR5UmVzdHJpY3Rpb25zVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuT3BlcmF0aW9uUmVzdHJpY3Rpb25zXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuT3BlcmF0aW9uUmVzdHJpY3Rpb25zVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQW5ub3RhdGlvblZhbHVlc0luUXVlcnlTdXBwb3J0ZWRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Nb2RpZmljYXRpb25RdWVyeU9wdGlvbnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Nb2RpZmljYXRpb25RdWVyeU9wdGlvbnNUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5SZWFkUmVzdHJpY3Rpb25zXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuUmVhZFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbUhlYWRlcnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21QYXJhbWV0ZXJcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVF1ZXJ5T3B0aW9uc1wiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVBhcmFtZXRlclwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTWVkaWFMb2NhdGlvblVwZGF0ZVN1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRcIiA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Hcm91cGFibGVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFnZ3JlZ2F0YWJsZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQ29udGV4dERlZmluaW5nUHJvcGVydGllc1wiID0gXCJFZG0uUHJvcGVydHlQYXRoXCIsXG5cdFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkxldmVsZWRIaWVyYXJjaHlcIiA9IFwiRWRtLlByb3BlcnR5UGF0aFwiLFxuXHRcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5SZWN1cnNpdmVIaWVyYXJjaHlcIiA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGVcIixcblx0XCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXZhaWxhYmxlT25BZ2dyZWdhdGVzXCIgPSBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BdmFpbGFibGVPbkFnZ3JlZ2F0ZXNUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bVwiID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW1cIiA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIixcblx0XCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQWxsb3dlZFZhbHVlc1wiID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BbGxvd2VkVmFsdWVcIixcblx0XCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NdWx0aXBsZU9mXCIgPSBcIkVkbS5EZWNpbWFsXCIsXG5cdFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQ29uc3RyYWludFwiID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5Db25zdHJhaW50VHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkl0ZW1zT2ZcIiA9IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuSXRlbXNPZlR5cGVcIixcblx0XCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5PcGVuUHJvcGVydHlUeXBlQ29uc3RyYWludFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUeXBlTmFtZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkRlcml2ZWRUeXBlQ29uc3RyYWludFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUeXBlTmFtZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRUZXJtc1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUZXJtTmFtZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFwcGxpY2FibGVUZXJtc1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUZXJtTmFtZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heEl0ZW1zXCIgPSBcIkVkbS5JbnQ2NFwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbkl0ZW1zXCIgPSBcIkVkbS5JbnQ2NFwiLFxuXHRcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5TY2FsZVwiID0gXCJFZG0uQnl0ZVwiLFxuXHRcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5EdXJhdGlvbkdyYW51bGFyaXR5XCIgPSBcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5EdXJhdGlvbkdyYW51bGFyaXR5VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5EaW1lbnNpb25cIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLk1lYXN1cmVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFjY3VtdWxhdGl2ZU1lYXN1cmVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLlJvbGxlZFVwUHJvcGVydHlDb3VudFwiID0gXCJFZG0uSW50MTZcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuUGxhbm5pbmdBY3Rpb25cIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydHlUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlcnZpY2VWZXJzaW9uXCIgPSBcIkVkbS5JbnQzMlwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZXJ2aWNlU2NoZW1hVmVyc2lvblwiID0gXCJFZG0uSW50MzJcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEZvclwiID0gXCJFZG0uUHJvcGVydHlQYXRoXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzTGFuZ3VhZ2VJZGVudGlmaWVyXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9ybWF0XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9ybWF0VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVXBwZXJDYXNlXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0N1cnJlbmN5XCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc1VuaXRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVuaXRTcGVjaWZpY1NjYWxlXCIgPSBcIkVkbS5QcmltaXRpdmVUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVuaXRTcGVjaWZpY1ByZWNpc2lvblwiID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZWNvbmRhcnlLZXlcIiA9IFwiRWRtLlByb3BlcnR5UGF0aFwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NaW5PY2N1cnNcIiA9IFwiRWRtLkludDY0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1heE9jY3Vyc1wiID0gXCJFZG0uSW50NjRcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXNzb2NpYXRpb25FbnRpdHlcIiA9IFwiRWRtLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVyaXZlZE5hdmlnYXRpb25cIiA9IFwiRWRtLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWFza2VkXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXNrZWRBbHdheXNcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0TWFwcGluZ1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0luc3RhbmNlQW5ub3RhdGlvblwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uc1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbGljYXRpb25cIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGxpY2F0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UaW1lc3RhbXBcIiA9IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVycm9yUmVzb2x1dGlvblwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRXJyb3JSZXNvbHV0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NZXNzYWdlc1wiID0gXCJFZG0uQ29tcGxleFR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEubnVtZXJpY1NldmVyaXR5XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5OdW1lcmljTWVzc2FnZVNldmVyaXR5VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXhpbXVtTnVtZXJpY01lc3NhZ2VTZXZlcml0eVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTnVtZXJpY01lc3NhZ2VTZXZlcml0eVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbFwiID0gXCJFZG0uQm9vbGVhblwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5BdHRyaWJ1dGVzXCIgPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVsYXRlZFJlY3Vyc2l2ZUhpZXJhcmNoeVwiID0gXCJFZG0uQW5ub3RhdGlvblBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSW50ZXJ2YWxcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkludGVydmFsVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0XCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5XZWFrUmVmZXJlbnRpYWxDb25zdHJhaW50XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5XZWFrUmVmZXJlbnRpYWxDb25zdHJhaW50VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc05hdHVyYWxQZXJzb25cIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpbXBsZUlkZW50aWZpZXJcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhclwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhckhhbGZ5ZWFyXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyUXVhcnRlclwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhck1vbnRoXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyV2Vla1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEYXlPZkNhbGVuZGFyTW9udGhcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGF5T2ZDYWxlbmRhclllYXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFySGFsZnllYXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyUXVhcnRlclwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJNb250aFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJXZWVrXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyRGF0ZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFBlcmlvZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyUGVyaW9kXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFF1YXJ0ZXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclF1YXJ0ZXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsV2Vla1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyV2Vla1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEYXlPZkZpc2NhbFllYXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclZhcmlhbnRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk11dHVhbGx5RXhjbHVzaXZlVGVybVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdEFjdGl2YXRpb25WaWFcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpbXBsZUlkZW50aWZpZXJcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRWRpdGFibGVGaWVsZEZvclwiID0gXCJFZG0uUHJvcGVydHlQYXRoXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCIgPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHNcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EZWZhdWx0VmFsdWVzRnVuY3Rpb25cIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlF1YWxpZmllZE5hbWVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRGVmYXVsdFZhbHVlXCIgPSBcIkVkbS5QcmltaXRpdmVUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZUhpZ2hcIiA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU29ydE9yZGVyXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Tb3J0T3JkZXJUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DcmVhdGVkQXRcIiA9IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNyZWF0ZWRCeVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVXNlcklEXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNoYW5nZWRBdFwiID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ2hhbmdlZEJ5XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vc2VySURcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbHlNdWx0aVVuaXRCZWhhdmlvckZvclNvcnRpbmdBbmRGaWx0ZXJpbmdcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuQ3VycmVuY3lDb2Rlc1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Db2RlTGlzdFNvdXJjZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLlVuaXRzT2ZNZWFzdXJlXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkNvZGVMaXN0U291cmNlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuU3RhbmRhcmRDb2RlXCIgPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5FeHRlcm5hbENvZGVcIiA9IFwiRWRtLlByb3BlcnR5UGF0aFwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLklzQ29uZmlndXJhdGlvbkRlcHJlY2F0aW9uQ29kZVwiID0gXCJFZG0uQm9vbGVhblwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQWRkcmVzc1R5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLklzRW1haWxBZGRyZXNzXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuSXNQaG9uZU51bWJlclwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkV2ZW50XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuRXZlbnREYXRhXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5UYXNrXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuVGFza0RhdGFcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLk1lc3NhZ2VcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5NZXNzYWdlRGF0YVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuRW50aXR5U2VtYW50aWNzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5FbnRpdHlTZW1hbnRpY3NUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkZpZWxkU2VtYW50aWNzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5GaWVsZFNlbWFudGljc1R5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVBlcnNvbmFsXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mb1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklkZW50aWZpY2F0aW9uXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQmFkZ2VcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQmFkZ2VUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TdGF0dXNJbmZvXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbm5lY3RlZEZpZWxkc1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25zXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbnRhY3RzXCIgPSBcIkVkbS5Bbm5vdGF0aW9uUGF0aFwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk1lZGlhUmVzb3VyY2VcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTWVkaWFSZXNvdXJjZVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLktQSVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5LUElUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnREZWZpbml0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlZhbHVlQ3JpdGljYWxpdHlcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmFsdWVDcml0aWNhbGl0eVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUxhYmVsc1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUxhYmVsVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiID0gXCJFZG0uUHJvcGVydHlQYXRoXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVyRmFjZXRzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUXVpY2tWaWV3RmFjZXRzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUXVpY2tDcmVhdGVGYWNldHNcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWx0ZXJGYWNldHNcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVmZXJlbmNlRmFjZXRcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUHJlc2VudGF0aW9uVmFyaWFudFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblZhcmlhbnRcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uVmFyaWFudFR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UaGluZ1BlcnNwZWN0aXZlXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzU3VtbWFyeVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QYXJ0T2ZQcmV2aWV3XCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk1hcFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HYWxsZXJ5XCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzSW1hZ2VVUkxcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNJbWFnZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NdWx0aUxpbmVUZXh0XCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DcmVhdGVIaWRkZW5cIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVXBkYXRlSGlkZGVuXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRlbGV0ZUhpZGRlblwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdFwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb25cIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FbXBoYXNpemVkXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9yZGVyQnlcIiA9IFwiRWRtLlByb3BlcnR5UGF0aFwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcmFtZXRlckRlZmF1bHRWYWx1ZVwiID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uU3RhdGVcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25TdGF0ZVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvbkxpc3RcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25MaXN0VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuQ3NzRGVmYXVsdHNcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuQ3NzRGVmYXVsdHNUeXBlXCJcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZWZlcmVuY2VzOiBSZWZlcmVuY2VzV2l0aE1hcCA9IFtcblx0eyBhbGlhczogXCJDYXBhYmlsaXRpZXNcIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjFcIiwgdXJpOiBcIlwiIH0sXG5cdHsgYWxpYXM6IFwiQWdncmVnYXRpb25cIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMVwiLCB1cmk6IFwiXCIgfSxcblx0eyBhbGlhczogXCJWYWxpZGF0aW9uXCIsIG5hbWVzcGFjZTogXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMVwiLCB1cmk6IFwiXCIgfSxcblx0eyBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLkNvcmUuVjFcIiwgYWxpYXM6IFwiQ29yZVwiLCB1cmk6IFwiXCIgfSxcblx0eyBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLk1lYXN1cmVzLlYxXCIsIGFsaWFzOiBcIk1lYXN1cmVzXCIsIHVyaTogXCJcIiB9LFxuXHR7IG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjFcIiwgYWxpYXM6IFwiQ29tbW9uXCIsIHVyaTogXCJcIiB9LFxuXHR7IG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MVwiLCBhbGlhczogXCJVSVwiLCB1cmk6IFwiXCIgfSxcblx0eyBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MVwiLCBhbGlhczogXCJTZXNzaW9uXCIsIHVyaTogXCJcIiB9LFxuXHR7IG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjFcIiwgYWxpYXM6IFwiQW5hbHl0aWNzXCIsIHVyaTogXCJcIiB9LFxuXHR7IG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MVwiLCBhbGlhczogXCJDb2RlTGlzdFwiLCB1cmk6IFwiXCIgfSxcblx0eyBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxXCIsIGFsaWFzOiBcIlBlcnNvbmFsRGF0YVwiLCB1cmk6IFwiXCIgfSxcblx0eyBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MVwiLCBhbGlhczogXCJDb21tdW5pY2F0aW9uXCIsIHVyaTogXCJcIiB9LFxuXHR7IG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MVwiLCBhbGlhczogXCJIVE1MNVwiLCB1cmk6IFwiXCIgfVxuXTtcblxudHlwZSBSZWZlcmVuY2VzV2l0aE1hcCA9IFJlZmVyZW5jZVtdICYge1xuXHRyZWZlcmVuY2VNYXA/OiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+O1xuXHRyZXZlcnNlUmVmZXJlbmNlTWFwPzogUmVjb3JkPHN0cmluZywgUmVmZXJlbmNlPjtcbn07XG5cbmZ1bmN0aW9uIGFsaWFzKHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNXaXRoTWFwLCB1bmFsaWFzZWRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0aWYgKCFyZWZlcmVuY2VzLnJldmVyc2VSZWZlcmVuY2VNYXApIHtcblx0XHRyZWZlcmVuY2VzLnJldmVyc2VSZWZlcmVuY2VNYXAgPSByZWZlcmVuY2VzLnJlZHVjZSgobWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+LCByZWZlcmVuY2UpID0+IHtcblx0XHRcdG1hcFtyZWZlcmVuY2UubmFtZXNwYWNlXSA9IHJlZmVyZW5jZTtcblx0XHRcdHJldHVybiBtYXA7XG5cdFx0fSwge30pO1xuXHR9XG5cdGlmICghdW5hbGlhc2VkVmFsdWUpIHtcblx0XHRyZXR1cm4gdW5hbGlhc2VkVmFsdWU7XG5cdH1cblx0Y29uc3QgbGFzdERvdEluZGV4ID0gdW5hbGlhc2VkVmFsdWUubGFzdEluZGV4T2YoXCIuXCIpO1xuXHRjb25zdCBuYW1lc3BhY2UgPSB1bmFsaWFzZWRWYWx1ZS5zdWJzdHIoMCwgbGFzdERvdEluZGV4KTtcblx0Y29uc3QgdmFsdWUgPSB1bmFsaWFzZWRWYWx1ZS5zdWJzdHIobGFzdERvdEluZGV4ICsgMSk7XG5cdGNvbnN0IHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcFtuYW1lc3BhY2VdO1xuXHRpZiAocmVmZXJlbmNlKSB7XG5cdFx0cmV0dXJuIGAke3JlZmVyZW5jZS5hbGlhc30uJHt2YWx1ZX1gO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFRyeSB0byBzZWUgaWYgaXQncyBhbiBhbm5vdGF0aW9uIFBhdGggbGlrZSB0b19TYWxlc09yZGVyL0BVSS5MaW5lSXRlbVxuXHRcdGlmICh1bmFsaWFzZWRWYWx1ZS5pbmRleE9mKFwiQFwiKSAhPT0gLTEpIHtcblx0XHRcdGNvbnN0IFtwcmVBbGlhcywgLi4ucG9zdEFsaWFzXSA9IHVuYWxpYXNlZFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0XHRcdHJldHVybiBgJHtwcmVBbGlhc31AJHthbGlhcyhyZWZlcmVuY2VzLCBwb3N0QWxpYXMuam9pbihcIkBcIikpfWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmFsaWFzZWRWYWx1ZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gdW5hbGlhcyhyZWZlcmVuY2VzOiBSZWZlcmVuY2VzV2l0aE1hcCwgYWxpYXNlZFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXJlZmVyZW5jZXMucmVmZXJlbmNlTWFwKSB7XG5cdFx0cmVmZXJlbmNlcy5yZWZlcmVuY2VNYXAgPSByZWZlcmVuY2VzLnJlZHVjZSgobWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+LCByZWZlcmVuY2UpID0+IHtcblx0XHRcdG1hcFtyZWZlcmVuY2UuYWxpYXNdID0gcmVmZXJlbmNlO1xuXHRcdFx0cmV0dXJuIG1hcDtcblx0XHR9LCB7fSk7XG5cdH1cblx0aWYgKCFhbGlhc2VkVmFsdWUpIHtcblx0XHRyZXR1cm4gYWxpYXNlZFZhbHVlO1xuXHR9XG5cdGNvbnN0IFthbGlhcywgLi4udmFsdWVdID0gYWxpYXNlZFZhbHVlLnNwbGl0KFwiLlwiKTtcblx0Y29uc3QgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXBbYWxpYXNdO1xuXHRpZiAocmVmZXJlbmNlKSB7XG5cdFx0cmV0dXJuIGAke3JlZmVyZW5jZS5uYW1lc3BhY2V9LiR7dmFsdWUuam9pbihcIi5cIil9YDtcblx0fSBlbHNlIHtcblx0XHQvLyBUcnkgdG8gc2VlIGlmIGl0J3MgYW4gYW5ub3RhdGlvbiBQYXRoIGxpa2UgdG9fU2FsZXNPcmRlci9AVUkuTGluZUl0ZW1cblx0XHRpZiAoYWxpYXNlZFZhbHVlLmluZGV4T2YoXCJAXCIpICE9PSAtMSkge1xuXHRcdFx0Y29uc3QgW3ByZUFsaWFzLCAuLi5wb3N0QWxpYXNdID0gYWxpYXNlZFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0XHRcdHJldHVybiBgJHtwcmVBbGlhc31AJHt1bmFsaWFzKHJlZmVyZW5jZXMsIHBvc3RBbGlhcy5qb2luKFwiQFwiKSl9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGFsaWFzZWRWYWx1ZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYnVpbGRPYmplY3RNYXAocGFyc2VyT3V0cHV0OiBQYXJzZXJPdXRwdXQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcblx0Y29uc3Qgb2JqZWN0TWFwOiBhbnkgPSB7fTtcblx0aWYgKHBhcnNlck91dHB1dC5zY2hlbWEuZW50aXR5Q29udGFpbmVyICYmIHBhcnNlck91dHB1dC5zY2hlbWEuZW50aXR5Q29udGFpbmVyLmZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuXHRcdG9iamVjdE1hcFtwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eUNvbnRhaW5lci5mdWxseVF1YWxpZmllZE5hbWVdID0gcGFyc2VyT3V0cHV0LnNjaGVtYS5lbnRpdHlDb250YWluZXI7XG5cdH1cblx0cGFyc2VyT3V0cHV0LnNjaGVtYS5lbnRpdHlTZXRzLmZvckVhY2goZW50aXR5U2V0ID0+IHtcblx0XHRvYmplY3RNYXBbZW50aXR5U2V0LmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBlbnRpdHlTZXQ7XG5cdH0pO1xuXHRwYXJzZXJPdXRwdXQuc2NoZW1hLmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuXHRcdG9iamVjdE1hcFthY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lXSA9IGFjdGlvbjtcblx0XHRpZiAoYWN0aW9uLmlzQm91bmQpIHtcblx0XHRcdGNvbnN0IHVuQm91bmRBY3Rpb25OYW1lID0gYWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIihcIilbMF07XG5cdFx0XHRpZiAoIW9iamVjdE1hcFt1bkJvdW5kQWN0aW9uTmFtZV0pIHtcblx0XHRcdFx0b2JqZWN0TWFwW3VuQm91bmRBY3Rpb25OYW1lXSA9IHtcblx0XHRcdFx0XHRfdHlwZTogXCJVbmJvdW5kR2VuZXJpY0FjdGlvblwiLFxuXHRcdFx0XHRcdGFjdGlvbnM6IFtdXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRvYmplY3RNYXBbdW5Cb3VuZEFjdGlvbk5hbWVdLmFjdGlvbnMucHVzaChhY3Rpb24pO1xuXHRcdH1cblxuXHRcdGFjdGlvbi5wYXJhbWV0ZXJzLmZvckVhY2gocGFyYW1ldGVyID0+IHtcblx0XHRcdG9iamVjdE1hcFtwYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHBhcmFtZXRlcjtcblx0XHR9KTtcblx0fSk7XG5cdHBhcnNlck91dHB1dC5zY2hlbWEuY29tcGxleFR5cGVzLmZvckVhY2goY29tcGxleFR5cGUgPT4ge1xuXHRcdG9iamVjdE1hcFtjb21wbGV4VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdID0gY29tcGxleFR5cGU7XG5cdFx0Y29tcGxleFR5cGUucHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcblx0XHRcdG9iamVjdE1hcFtwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0gcHJvcGVydHk7XG5cdFx0fSk7XG5cdH0pO1xuXHRwYXJzZXJPdXRwdXQuc2NoZW1hLnR5cGVEZWZpbml0aW9ucy5mb3JFYWNoKHR5cGVEZWZpbml0aW9uID0+IHtcblx0XHRvYmplY3RNYXBbdHlwZURlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lXSA9IHR5cGVEZWZpbml0aW9uO1xuXHR9KTtcblx0cGFyc2VyT3V0cHV0LnNjaGVtYS5lbnRpdHlUeXBlcy5mb3JFYWNoKGVudGl0eVR5cGUgPT4ge1xuXHRcdG9iamVjdE1hcFtlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBlbnRpdHlUeXBlO1xuXHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcblx0XHRcdG9iamVjdE1hcFtwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0gcHJvcGVydHk7XG5cdFx0XHRpZiAocHJvcGVydHkudHlwZS5pbmRleE9mKFwiRWRtXCIpICE9PSAwKSB7XG5cdFx0XHRcdC8vIEhhbmRsZSBjb21wbGV4IHR5cGVzXG5cdFx0XHRcdGNvbnN0IGNvbXBsZXhUeXBlRGVmaW5pdGlvbiA9IG9iamVjdE1hcFtwcm9wZXJ0eS50eXBlXSBhcyBDb21wbGV4VHlwZSB8IFR5cGVEZWZpbml0aW9uO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y29tcGxleFR5cGVEZWZpbml0aW9uICYmXG5cdFx0XHRcdFx0Y29tcGxleFR5cGVEZWZpbml0aW9uLl90eXBlID09PSBcIkNvbXBsZXhUeXBlXCIgJiZcblx0XHRcdFx0XHRjb21wbGV4VHlwZURlZmluaXRpb24ucHJvcGVydGllc1xuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb21wbGV4VHlwZURlZmluaXRpb24ucHJvcGVydGllcy5mb3JFYWNoKGNvbXBsZXhUeXBlUHJvcCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb21wbGV4VHlwZVByb3BUYXJnZXQ6IFBhcnNlclByb3BlcnR5ID0gT2JqZWN0LmFzc2lnbihjb21wbGV4VHlwZVByb3AsIHtcblx0XHRcdFx0XHRcdFx0X3R5cGU6IFwiUHJvcGVydHlcIixcblx0XHRcdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUgKyBcIi9cIiArIGNvbXBsZXhUeXBlUHJvcC5uYW1lXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdG9iamVjdE1hcFtjb21wbGV4VHlwZVByb3BUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lXSA9IGNvbXBsZXhUeXBlUHJvcFRhcmdldDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZm9yRWFjaChuYXZQcm9wZXJ0eSA9PiB7XG5cdFx0XHRvYmplY3RNYXBbbmF2UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSA9IG5hdlByb3BlcnR5O1xuXHRcdH0pO1xuXHR9KTtcblxuXHRPYmplY3Qua2V5cyhwYXJzZXJPdXRwdXQuc2NoZW1hLmFubm90YXRpb25zKS5mb3JFYWNoKGFubm90YXRpb25Tb3VyY2UgPT4ge1xuXHRcdHBhcnNlck91dHB1dC5zY2hlbWEuYW5ub3RhdGlvbnNbYW5ub3RhdGlvblNvdXJjZV0uZm9yRWFjaChhbm5vdGF0aW9uTGlzdCA9PiB7XG5cdFx0XHRjb25zdCBjdXJyZW50VGFyZ2V0TmFtZSA9IHVuYWxpYXMocGFyc2VyT3V0cHV0LnJlZmVyZW5jZXMsIGFubm90YXRpb25MaXN0LnRhcmdldCk7XG5cdFx0XHRhbm5vdGF0aW9uTGlzdC5hbm5vdGF0aW9ucy5mb3JFYWNoKGFubm90YXRpb24gPT4ge1xuXHRcdFx0XHRsZXQgYW5ub3RhdGlvbkZRTiA9IGAke2N1cnJlbnRUYXJnZXROYW1lfUAke3VuYWxpYXMocGFyc2VyT3V0cHV0LnJlZmVyZW5jZXMsIGFubm90YXRpb24udGVybSl9YDtcblx0XHRcdFx0aWYgKGFubm90YXRpb24ucXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbkZRTiArPSBgIyR7YW5ub3RhdGlvbi5xdWFsaWZpZXJ9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZW9mIGFubm90YXRpb24gIT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRkZWJ1Z2dlcjtcblx0XHRcdFx0fVxuXHRcdFx0XHRvYmplY3RNYXBbYW5ub3RhdGlvbkZRTl0gPSBhbm5vdGF0aW9uO1xuXHRcdFx0XHQoYW5ub3RhdGlvbiBhcyBBbm5vdGF0aW9uKS5mdWxseVF1YWxpZmllZE5hbWUgPSBhbm5vdGF0aW9uRlFOO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH0pO1xuXHRyZXR1cm4gb2JqZWN0TWFwO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lUGF0aChjdXJyZW50VGFyZ2V0OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGlmIChwYXRoLnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG5cdFx0cmV0dXJuIGN1cnJlbnRUYXJnZXQgKyB1bmFsaWFzKGRlZmF1bHRSZWZlcmVuY2VzLCBwYXRoKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY3VycmVudFRhcmdldCArIFwiL1wiICsgcGF0aDtcblx0fVxufVxuXG5mdW5jdGlvbiBhZGRBbm5vdGF0aW9uRXJyb3JNZXNzYWdlKHBhdGg6IHN0cmluZywgb0Vycm9yTXNnOiBhbnkpIHtcblx0aWYgKCFBTExfQU5OT1RBVElPTl9FUlJPUlNbcGF0aF0pIHtcblx0XHRBTExfQU5OT1RBVElPTl9FUlJPUlNbcGF0aF0gPSBbb0Vycm9yTXNnXTtcblx0fSBlbHNlIHtcblx0XHRBTExfQU5OT1RBVElPTl9FUlJPUlNbcGF0aF0ucHVzaChvRXJyb3JNc2cpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVUYXJnZXQoXG5cdG9iamVjdE1hcDogYW55LFxuXHRjdXJyZW50VGFyZ2V0OiBhbnksXG5cdHBhdGg6IHN0cmluZyxcblx0cGF0aE9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcblx0aW5jbHVkZVZpc2l0ZWRPYmplY3RzOiBib29sZWFuID0gZmFsc2UsXG5cdGFubm90YXRpb25UeXBlPzogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc1Rlcm0/OiBzdHJpbmdcbikge1xuXHRpZiAoIXBhdGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdC8vY29uc3QgcHJvcGVydHlQYXRoID0gcGF0aDtcblx0bGV0IGFWaXNpdGVkT2JqZWN0czogYW55W10gPSBbXTtcblx0aWYgKGN1cnJlbnRUYXJnZXQgJiYgY3VycmVudFRhcmdldC5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0Y3VycmVudFRhcmdldCA9IG9iamVjdE1hcFtjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIi9cIilbMF1dO1xuXHR9XG5cdHBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZSwgcGF0aCk7XG5cblx0Y29uc3QgcGF0aFNwbGl0ID0gcGF0aC5zcGxpdChcIi9cIik7XG5cdGNvbnN0IHRhcmdldFBhdGhTcGxpdDogc3RyaW5nW10gPSBbXTtcblx0cGF0aFNwbGl0LmZvckVhY2gocGF0aFBhcnQgPT4ge1xuXHRcdC8vIFNlcGFyYXRlIG91dCB0aGUgYW5ub3RhdGlvblxuXHRcdGlmIChwYXRoUGFydC5pbmRleE9mKFwiQFwiKSAhPT0gLTEpIHtcblx0XHRcdGNvbnN0IFtwYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSBwYXRoUGFydC5zcGxpdChcIkBcIik7XG5cdFx0XHR0YXJnZXRQYXRoU3BsaXQucHVzaChwYXRoKTtcblx0XHRcdHRhcmdldFBhdGhTcGxpdC5wdXNoKGBAJHthbm5vdGF0aW9uUGF0aH1gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0UGF0aFNwbGl0LnB1c2gocGF0aFBhcnQpO1xuXHRcdH1cblx0fSk7XG5cdGxldCBjdXJyZW50UGF0aCA9IHBhdGg7XG5cdGxldCBjdXJyZW50Q29udGV4dCA9IGN1cnJlbnRUYXJnZXQ7XG5cdGNvbnN0IHRhcmdldCA9IHRhcmdldFBhdGhTcGxpdC5yZWR1Y2UoKGN1cnJlbnRWYWx1ZTogYW55LCBwYXRoUGFydCkgPT4ge1xuXHRcdGlmIChwYXRoUGFydCA9PT0gXCIkVHlwZVwiICYmIGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gXCJFbnRpdHlUeXBlXCIpIHtcblx0XHRcdHJldHVybiBjdXJyZW50VmFsdWU7XG5cdFx0fVxuXHRcdGlmIChwYXRoUGFydC5sZW5ndGggPT09IDApIHtcblx0XHRcdC8vIEVtcHR5IFBhdGggYWZ0ZXIgYW4gZW50aXR5U2V0IG1lYW5zIGVudGl0eVR5cGVcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLl90eXBlID09PSBcIkVudGl0eVNldFwiICYmIGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlKSB7XG5cdFx0XHRcdGlmIChpbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRcdFx0XHRhVmlzaXRlZE9iamVjdHMucHVzaChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUuX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgY3VycmVudFZhbHVlLnRhcmdldFR5cGUpIHtcblx0XHRcdFx0aWYgKGluY2x1ZGVWaXNpdGVkT2JqZWN0cykge1xuXHRcdFx0XHRcdGFWaXNpdGVkT2JqZWN0cy5wdXNoKGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlLnRhcmdldFR5cGU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlO1xuXHRcdH1cblx0XHRpZiAoaW5jbHVkZVZpc2l0ZWRPYmplY3RzICYmIGN1cnJlbnRWYWx1ZSAhPT0gbnVsbCAmJiBjdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YVZpc2l0ZWRPYmplY3RzLnB1c2goY3VycmVudFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKCFjdXJyZW50VmFsdWUpIHtcblx0XHRcdGN1cnJlbnRQYXRoID0gcGF0aFBhcnQ7XG5cdFx0fSBlbHNlIGlmIChjdXJyZW50VmFsdWUuX3R5cGUgPT09IFwiRW50aXR5U2V0XCIgJiYgcGF0aFBhcnQgPT09IFwiJFR5cGVcIikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlLnRhcmdldFR5cGU7XG5cdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSBcIkVudGl0eVNldFwiICYmIGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlKSB7XG5cdFx0XHRjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlTmFtZSwgcGF0aFBhcnQpO1xuXHRcdH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmIGN1cnJlbnRWYWx1ZS50YXJnZXRUeXBlTmFtZSkge1xuXHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUudGFyZ2V0VHlwZU5hbWUsIHBhdGhQYXJ0KTtcblx0XHR9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiBjdXJyZW50VmFsdWUudGFyZ2V0VHlwZSkge1xuXHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUudGFyZ2V0VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGhQYXJ0KTtcblx0XHR9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0XHQvLyBDb21wbGV4VHlwZSBvciBQcm9wZXJ0eVxuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZS50YXJnZXRUeXBlKSB7XG5cdFx0XHRcdGN1cnJlbnRQYXRoID0gY29tYmluZVBhdGgoY3VycmVudFZhbHVlLnRhcmdldFR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRWYWx1ZS5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGhQYXJ0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gXCJBY3Rpb25cIiAmJiBjdXJyZW50VmFsdWUuaXNCb3VuZCkge1xuXHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydCk7XG5cdFx0XHRpZiAoIW9iamVjdE1hcFtjdXJyZW50UGF0aF0pIHtcblx0XHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUuc291cmNlVHlwZSwgcGF0aFBhcnQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSBcIkFjdGlvblBhcmFtZXRlclwiICYmIGN1cnJlbnRWYWx1ZS5pc0VudGl0eVNldCkge1xuXHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUudHlwZSwgcGF0aFBhcnQpO1xuXHRcdH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSBcIkFjdGlvblBhcmFtZXRlclwiICYmICFjdXJyZW50VmFsdWUuaXNFbnRpdHlTZXQpIHtcblx0XHRcdGN1cnJlbnRQYXRoID0gY29tYmluZVBhdGgoXG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLnN1YnN0cigwLCBjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZS5sYXN0SW5kZXhPZihcIi9cIikpLFxuXHRcdFx0XHRwYXRoUGFydFxuXHRcdFx0KTtcblx0XHRcdGlmICghb2JqZWN0TWFwW2N1cnJlbnRQYXRoXSkge1xuXHRcdFx0XHRsZXQgbGFzdElkeCA9IGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLmxhc3RJbmRleE9mKFwiL1wiKTtcblx0XHRcdFx0aWYgKGxhc3RJZHggPT09IC0xKSB7XG5cdFx0XHRcdFx0bGFzdElkeCA9IGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLmxlbmd0aDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKFxuXHRcdFx0XHRcdChvYmplY3RNYXBbY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUuc3Vic3RyKDAsIGxhc3RJZHgpXSBhcyBBY3Rpb24pLnNvdXJjZVR5cGUsXG5cdFx0XHRcdFx0cGF0aFBhcnRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydCk7XG5cdFx0XHRpZiAocGF0aFBhcnQgIT09IFwibmFtZVwiICYmIGN1cnJlbnRWYWx1ZVtwYXRoUGFydF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlW3BhdGhQYXJ0XTtcblx0XHRcdH0gZWxzZSBpZiAocGF0aFBhcnQgPT09IFwiJEFubm90YXRpb25QYXRoXCIgJiYgY3VycmVudFZhbHVlLiR0YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudENvbnRleHQgPSBvYmplY3RNYXBbY3VycmVudFZhbHVlLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMF1dO1xuXHRcdFx0XHRjb25zdCBzdWJUYXJnZXQ6IGFueSA9IHJlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjdXJyZW50Q29udGV4dCwgY3VycmVudFZhbHVlLnZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdHN1YlRhcmdldC52aXNpdGVkT2JqZWN0cy5mb3JFYWNoKCh2aXNpdGVkU3ViT2JqZWN0OiBhbnkpID0+IHtcblx0XHRcdFx0XHRpZiAoYVZpc2l0ZWRPYmplY3RzLmluZGV4T2YodmlzaXRlZFN1Yk9iamVjdCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRhVmlzaXRlZE9iamVjdHMucHVzaCh2aXNpdGVkU3ViT2JqZWN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gc3ViVGFyZ2V0LnRhcmdldDtcblx0XHRcdH0gZWxzZSBpZiAocGF0aFBhcnQgPT09IFwiJFBhdGhcIiAmJiBjdXJyZW50VmFsdWUuJHRhcmdldCkge1xuXHRcdFx0XHRjdXJyZW50Q29udGV4dCA9IGFWaXNpdGVkT2JqZWN0c1xuXHRcdFx0XHRcdC5jb25jYXQoKVxuXHRcdFx0XHRcdC5yZXZlcnNlKClcblx0XHRcdFx0XHQuZmluZChcblx0XHRcdFx0XHRcdG9iaiA9PlxuXHRcdFx0XHRcdFx0XHRvYmouX3R5cGUgPT09IFwiRW50aXR5VHlwZVwiIHx8XG5cdFx0XHRcdFx0XHRcdG9iai5fdHlwZSA9PT0gXCJFbnRpdHlTZXRcIiB8fFxuXHRcdFx0XHRcdFx0XHRvYmouX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoY3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJUYXJnZXQ6IGFueSA9IHJlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjdXJyZW50Q29udGV4dCwgY3VycmVudFZhbHVlLnBhdGgsIGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRzdWJUYXJnZXQudmlzaXRlZE9iamVjdHMuZm9yRWFjaCgodmlzaXRlZFN1Yk9iamVjdDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoYVZpc2l0ZWRPYmplY3RzLmluZGV4T2YodmlzaXRlZFN1Yk9iamVjdCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGFWaXNpdGVkT2JqZWN0cy5wdXNoKHZpc2l0ZWRTdWJPYmplY3QpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiBzdWJUYXJnZXQudGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjdXJyZW50VmFsdWUuJHRhcmdldDtcblx0XHRcdH0gZWxzZSBpZiAocGF0aFBhcnQuc3RhcnRzV2l0aChcIiRQYXRoXCIpICYmIGN1cnJlbnRWYWx1ZS4kdGFyZ2V0KSB7XG5cdFx0XHRcdGNvbnN0IGludGVybWVkaWF0ZVRhcmdldCA9IGN1cnJlbnRWYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGludGVybWVkaWF0ZVRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGhQYXJ0LnN1YnN0cig1KSk7XG5cdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpICYmICFvYmplY3RNYXBbY3VycmVudFBhdGhdKSB7XG5cdFx0XHRcdC8vIFRoaXMgaXMgbm93IGFuIGFubm90YXRpb24gdmFsdWVcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IG9iamVjdE1hcFtjdXJyZW50VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiQFwiKVswXV07XG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgcGF0aFBhcnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvYmplY3RNYXBbY3VycmVudFBhdGhdO1xuXHR9LCBudWxsKTtcblx0aWYgKCF0YXJnZXQpIHtcblx0XHRpZiAoYW5ub3RhdGlvbnNUZXJtICYmIGFubm90YXRpb25UeXBlKSB7XG5cdFx0XHR2YXIgb0Vycm9yTXNnID0ge1xuXHRcdFx0XHRtZXNzYWdlOlxuXHRcdFx0XHRcdFwiVW5hYmxlIHRvIHJlc29sdmUgdGhlIHBhdGggZXhwcmVzc2lvbjogXCIgK1xuXHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdHBhdGggK1xuXHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFwiSGludDogQ2hlY2sgYW5kIGNvcnJlY3QgdGhlIHBhdGggdmFsdWVzIHVuZGVyIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluIHRoZSBtZXRhZGF0YSAoYW5ub3RhdGlvbi54bWwgZmlsZSBvciBDRFMgYW5ub3RhdGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbik6IFxcblxcblwiICtcblx0XHRcdFx0XHRcIjxBbm5vdGF0aW9uIFRlcm0gPSBcIiArXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtICtcblx0XHRcdFx0XHRcIj5cIiArXG5cdFx0XHRcdFx0XCJcXG5cIiArXG5cdFx0XHRcdFx0XCI8UmVjb3JkIFR5cGUgPSBcIiArXG5cdFx0XHRcdFx0YW5ub3RhdGlvblR5cGUgK1xuXHRcdFx0XHRcdFwiPlwiICtcblx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcIjxBbm5vdGF0aW9uUGF0aCA9IFwiICtcblx0XHRcdFx0XHRwYXRoICtcblx0XHRcdFx0XHRcIj5cIlxuXHRcdFx0fTtcblx0XHRcdGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UocGF0aCwgb0Vycm9yTXNnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIG9FcnJvck1zZyA9IHtcblx0XHRcdFx0bWVzc2FnZTpcblx0XHRcdFx0XHRcIlVuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246IFwiICtcblx0XHRcdFx0XHRwYXRoICtcblx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcIkhpbnQ6IENoZWNrIGFuZCBjb3JyZWN0IHRoZSBwYXRoIHZhbHVlcyB1bmRlciB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgbWV0YWRhdGEgKGFubm90YXRpb24ueG1sIGZpbGUgb3IgQ0RTIGFubm90YXRpb25zIGZvciB0aGUgYXBwbGljYXRpb24pOiBcXG5cXG5cIiArXG5cdFx0XHRcdFx0XCI8QW5ub3RhdGlvbiBUZXJtID0gXCIgK1xuXHRcdFx0XHRcdHBhdGhTcGxpdFswXSArXG5cdFx0XHRcdFx0XCI+XCIgK1xuXHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFwiPFByb3BlcnR5VmFsdWUgIFBhdGg9IFwiICtcblx0XHRcdFx0XHRwYXRoU3BsaXRbMV0gK1xuXHRcdFx0XHRcdFwiPlwiXG5cdFx0XHR9O1xuXHRcdFx0YWRkQW5ub3RhdGlvbkVycm9yTWVzc2FnZShwYXRoLCBvRXJyb3JNc2cpO1xuXHRcdH1cblx0XHQvLyBjb25zb2xlLmxvZyhcIk1pc3NpbmcgdGFyZ2V0IFwiICsgcGF0aCk7XG5cdH1cblx0aWYgKHBhdGhPbmx5KSB7XG5cdFx0cmV0dXJuIGN1cnJlbnRQYXRoO1xuXHR9XG5cdGlmIChpbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dmlzaXRlZE9iamVjdHM6IGFWaXNpdGVkT2JqZWN0cyxcblx0XHRcdHRhcmdldDogdGFyZ2V0XG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBpc0Fubm90YXRpb25QYXRoKHBhdGhTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcGF0aFN0ci5pbmRleE9mKFwiQFwiKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWUoXG5cdHByb3BlcnR5VmFsdWU6IEV4cHJlc3Npb24sXG5cdHZhbHVlRlFOOiBzdHJpbmcsXG5cdHBhcnNlck91dHB1dDogUGFyc2VyT3V0cHV0LFxuXHRjdXJyZW50VGFyZ2V0OiBhbnksXG5cdG9iamVjdE1hcDogYW55LFxuXHR0b1Jlc29sdmU6IFJlc29sdmVhYmxlW10sXG5cdGFubm90YXRpb25Tb3VyY2U6IHN0cmluZyxcblx0dW5yZXNvbHZlZEFubm90YXRpb25zOiBBbm5vdGF0aW9uTGlzdFtdLFxuXHRhbm5vdGF0aW9uVHlwZTogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc1Rlcm06IHN0cmluZ1xuKSB7XG5cdGlmIChwcm9wZXJ0eVZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHN3aXRjaCAocHJvcGVydHlWYWx1ZS50eXBlKSB7XG5cdFx0Y2FzZSBcIlN0cmluZ1wiOlxuXHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWUuU3RyaW5nO1xuXHRcdGNhc2UgXCJJbnRcIjpcblx0XHRcdHJldHVybiBwcm9wZXJ0eVZhbHVlLkludDtcblx0XHRjYXNlIFwiQm9vbFwiOlxuXHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWUuQm9vbDtcblx0XHRjYXNlIFwiRGVjaW1hbFwiOlxuXHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWUuRGVjaW1hbDtcblx0XHRjYXNlIFwiRGF0ZVwiOlxuXHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWUuRGF0ZTtcblx0XHRjYXNlIFwiRW51bU1lbWJlclwiOlxuXHRcdFx0cmV0dXJuIGFsaWFzKHBhcnNlck91dHB1dC5yZWZlcmVuY2VzLCBwcm9wZXJ0eVZhbHVlLkVudW1NZW1iZXIpO1xuXHRcdGNhc2UgXCJQcm9wZXJ0eVBhdGhcIjpcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFwiUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLlByb3BlcnR5UGF0aCxcblx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiB2YWx1ZUZRTixcblx0XHRcdFx0JHRhcmdldDogcmVzb2x2ZVRhcmdldChcblx0XHRcdFx0XHRvYmplY3RNYXAsXG5cdFx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlLlByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uc1Rlcm1cblx0XHRcdFx0KVxuXHRcdFx0fTtcblx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiOlxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdmFsdWVGUU4sXG5cdFx0XHRcdCR0YXJnZXQ6IHJlc29sdmVUYXJnZXQoXG5cdFx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQsXG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGFubm90YXRpb25UeXBlLFxuXHRcdFx0XHRcdGFubm90YXRpb25zVGVybVxuXHRcdFx0XHQpXG5cdFx0XHR9O1xuXHRcdGNhc2UgXCJBbm5vdGF0aW9uUGF0aFwiOlxuXHRcdFx0Y29uc3QgYW5ub3RhdGlvblRhcmdldCA9IHJlc29sdmVUYXJnZXQoXG5cdFx0XHRcdG9iamVjdE1hcCxcblx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0dW5hbGlhcyhwYXJzZXJPdXRwdXQucmVmZXJlbmNlcywgcHJvcGVydHlWYWx1ZS5Bbm5vdGF0aW9uUGF0aCkgYXMgc3RyaW5nLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdGFubm90YXRpb25zVGVybVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0ge1xuXHRcdFx0XHR0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLkFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IHZhbHVlRlFOLFxuXHRcdFx0XHQkdGFyZ2V0OiBhbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRhbm5vdGF0aW9uVHlwZTogYW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdGFubm90YXRpb25zVGVybTogYW5ub3RhdGlvbnNUZXJtLFxuXHRcdFx0XHR0ZXJtOiBcIlwiLFxuXHRcdFx0XHRwYXRoOiBcIlwiXG5cdFx0XHR9O1xuXHRcdFx0dG9SZXNvbHZlLnB1c2goeyBpbmxpbmU6IGZhbHNlLCB0b1Jlc29sdmU6IGFubm90YXRpb25QYXRoIH0pO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25QYXRoO1xuXHRcdGNhc2UgXCJQYXRoXCI6XG5cdFx0XHRjb25zdCAkdGFyZ2V0ID0gcmVzb2x2ZVRhcmdldChcblx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlLlBhdGgsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcGF0aCA9IG5ldyBQYXRoKHByb3BlcnR5VmFsdWUsICR0YXJnZXQsIGFubm90YXRpb25zVGVybSwgYW5ub3RhdGlvblR5cGUsIFwiXCIpO1xuXHRcdFx0dG9SZXNvbHZlLnB1c2goe1xuXHRcdFx0XHRpbmxpbmU6IGlzQW5ub3RhdGlvblBhdGgocHJvcGVydHlWYWx1ZS5QYXRoKSxcblx0XHRcdFx0dG9SZXNvbHZlOiBwYXRoXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBwYXRoO1xuXG5cdFx0Y2FzZSBcIlJlY29yZFwiOlxuXHRcdFx0cmV0dXJuIHBhcnNlUmVjb3JkKFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlLlJlY29yZCxcblx0XHRcdFx0dmFsdWVGUU4sXG5cdFx0XHRcdHBhcnNlck91dHB1dCxcblx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHR0b1Jlc29sdmUsXG5cdFx0XHRcdGFubm90YXRpb25Tb3VyY2UsXG5cdFx0XHRcdHVucmVzb2x2ZWRBbm5vdGF0aW9ucyxcblx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdGFubm90YXRpb25zVGVybVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiQ29sbGVjdGlvblwiOlxuXHRcdFx0cmV0dXJuIHBhcnNlQ29sbGVjdGlvbihcblx0XHRcdFx0cHJvcGVydHlWYWx1ZS5Db2xsZWN0aW9uLFxuXHRcdFx0XHR2YWx1ZUZRTixcblx0XHRcdFx0cGFyc2VyT3V0cHV0LFxuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LFxuXHRcdFx0XHRvYmplY3RNYXAsXG5cdFx0XHRcdHRvUmVzb2x2ZSxcblx0XHRcdFx0YW5ub3RhdGlvblNvdXJjZSxcblx0XHRcdFx0dW5yZXNvbHZlZEFubm90YXRpb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJBcHBseVwiOlxuXHRcdGNhc2UgXCJOdWxsXCI6XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdGNhc2UgXCJFcVwiOlxuXHRcdGNhc2UgXCJOZVwiOlxuXHRcdGNhc2UgXCJHdFwiOlxuXHRcdGNhc2UgXCJHZVwiOlxuXHRcdGNhc2UgXCJMdFwiOlxuXHRcdGNhc2UgXCJMZVwiOlxuXHRcdGNhc2UgXCJJZlwiOlxuXHRcdGNhc2UgXCJBbmRcIjpcblx0XHRjYXNlIFwiT3JcIjpcblx0XHRcdHJldHVybiBwcm9wZXJ0eVZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGluZmVyVHlwZUZyb21UZXJtKGFubm90YXRpb25zVGVybTogc3RyaW5nLCBwYXJzZXJPdXRwdXQ6IFBhcnNlck91dHB1dCwgYW5ub3RhdGlvblRhcmdldDogc3RyaW5nKSB7XG5cdGNvbnN0IHRhcmdldFR5cGUgPSAoVGVybVRvVHlwZXMgYXMgYW55KVthbm5vdGF0aW9uc1Rlcm1dO1xuXHR2YXIgb0Vycm9yTXNnID0ge1xuXHRcdGlzRXJyb3I6IGZhbHNlLFxuXHRcdG1lc3NhZ2U6IGBUaGUgdHlwZSBvZiB0aGUgcmVjb3JkIHVzZWQgd2l0aGluIHRoZSB0ZXJtICR7YW5ub3RhdGlvbnNUZXJtfSB3YXMgbm90IGRlZmluZWQgYW5kIHdhcyBpbmZlcnJlZCBhcyAke3RhcmdldFR5cGV9LlxuSGludDogSWYgcG9zc2libGUsIHRyeSB0byBtYWludGFpbiB0aGUgVHlwZSBwcm9wZXJ0eSBmb3IgZWFjaCBSZWNvcmQuXG48QW5ub3RhdGlvbnMgVGFyZ2V0PVwiJHthbm5vdGF0aW9uVGFyZ2V0fVwiPlxuXHQ8QW5ub3RhdGlvbiBUZXJtPVwiJHthbm5vdGF0aW9uc1Rlcm19XCI+XG5cdFx0PFJlY29yZD4uLi48L1JlY29yZD5cblx0PC9Bbm5vdGF0aW9uPlxuPC9Bbm5vdGF0aW9ucz5gXG5cdH07XG5cdGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UoYW5ub3RhdGlvblRhcmdldCArIFwiL1wiICsgYW5ub3RhdGlvbnNUZXJtLCBvRXJyb3JNc2cpO1xuXHRyZXR1cm4gdGFyZ2V0VHlwZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZWNvcmQoXG5cdHJlY29yZERlZmluaXRpb246IEFubm90YXRpb25SZWNvcmQsXG5cdGN1cnJlbnRGUU46IHN0cmluZyxcblx0cGFyc2VyT3V0cHV0OiBQYXJzZXJPdXRwdXQsXG5cdGN1cnJlbnRUYXJnZXQ6IGFueSxcblx0b2JqZWN0TWFwOiBhbnksXG5cdHRvUmVzb2x2ZTogUmVzb2x2ZWFibGVbXSxcblx0YW5ub3RhdGlvblNvdXJjZTogc3RyaW5nLFxuXHR1bnJlc29sdmVkQW5ub3RhdGlvbnM6IEFubm90YXRpb25MaXN0W10sXG5cdGFubm90YXRpb25UeXBlOiBzdHJpbmcsXG5cdGFubm90YXRpb25zVGVybTogc3RyaW5nXG4pIHtcblx0bGV0IHRhcmdldFR5cGU7XG5cdGlmICghcmVjb3JkRGVmaW5pdGlvbi50eXBlICYmIGFubm90YXRpb25zVGVybSkge1xuXHRcdHRhcmdldFR5cGUgPSBpbmZlclR5cGVGcm9tVGVybShhbm5vdGF0aW9uc1Rlcm0sIHBhcnNlck91dHB1dCwgY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUpO1xuXHR9IGVsc2Uge1xuXHRcdHRhcmdldFR5cGUgPSB1bmFsaWFzKHBhcnNlck91dHB1dC5yZWZlcmVuY2VzLCByZWNvcmREZWZpbml0aW9uLnR5cGUpO1xuXHR9XG5cdGNvbnN0IGFubm90YXRpb25UZXJtOiBhbnkgPSB7XG5cdFx0JFR5cGU6IHRhcmdldFR5cGUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBjdXJyZW50RlFOXG5cdH07XG5cdGNvbnN0IGFubm90YXRpb25Db250ZW50OiBhbnkgPSB7fTtcblx0aWYgKHJlY29yZERlZmluaXRpb24uYW5ub3RhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShyZWNvcmREZWZpbml0aW9uLmFubm90YXRpb25zKSkge1xuXHRcdGNvbnN0IHN1YkFubm90YXRpb25MaXN0ID0ge1xuXHRcdFx0dGFyZ2V0OiBjdXJyZW50RlFOLFxuXHRcdFx0YW5ub3RhdGlvbnM6IHJlY29yZERlZmluaXRpb24uYW5ub3RhdGlvbnMsXG5cdFx0XHRfX3NvdXJjZTogYW5ub3RhdGlvblNvdXJjZVxuXHRcdH07XG5cdFx0dW5yZXNvbHZlZEFubm90YXRpb25zLnB1c2goc3ViQW5ub3RhdGlvbkxpc3QpO1xuXHR9XG5cdGlmIChyZWNvcmREZWZpbml0aW9uLnByb3BlcnR5VmFsdWVzKSB7XG5cdFx0cmVjb3JkRGVmaW5pdGlvbi5wcm9wZXJ0eVZhbHVlcy5mb3JFYWNoKChwcm9wZXJ0eVZhbHVlOiBQcm9wZXJ0eVZhbHVlKSA9PiB7XG5cdFx0XHRhbm5vdGF0aW9uQ29udGVudFtwcm9wZXJ0eVZhbHVlLm5hbWVdID0gcGFyc2VWYWx1ZShcblx0XHRcdFx0cHJvcGVydHlWYWx1ZS52YWx1ZSxcblx0XHRcdFx0YCR7Y3VycmVudEZRTn0vJHtwcm9wZXJ0eVZhbHVlLm5hbWV9YCxcblx0XHRcdFx0cGFyc2VyT3V0cHV0LFxuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LFxuXHRcdFx0XHRvYmplY3RNYXAsXG5cdFx0XHRcdHRvUmVzb2x2ZSxcblx0XHRcdFx0YW5ub3RhdGlvblNvdXJjZSxcblx0XHRcdFx0dW5yZXNvbHZlZEFubm90YXRpb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtXG5cdFx0XHQpO1xuXHRcdFx0aWYgKHByb3BlcnR5VmFsdWUuYW5ub3RhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShwcm9wZXJ0eVZhbHVlLmFubm90YXRpb25zKSkge1xuXHRcdFx0XHRjb25zdCBzdWJBbm5vdGF0aW9uTGlzdCA9IHtcblx0XHRcdFx0XHR0YXJnZXQ6IGAke2N1cnJlbnRGUU59LyR7cHJvcGVydHlWYWx1ZS5uYW1lfWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnM6IHByb3BlcnR5VmFsdWUuYW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0X19zb3VyY2U6IGFubm90YXRpb25Tb3VyY2Vcblx0XHRcdFx0fTtcblx0XHRcdFx0dW5yZXNvbHZlZEFubm90YXRpb25zLnB1c2goc3ViQW5ub3RhdGlvbkxpc3QpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRhbm5vdGF0aW9uQ29udGVudC5oYXNPd25Qcm9wZXJ0eShcIkFjdGlvblwiKSAmJlxuXHRcdFx0XHQoYW5ub3RhdGlvblRlcm0uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCIgfHxcblx0XHRcdFx0XHRhbm5vdGF0aW9uVGVybS4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0YW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9uVGFyZ2V0ID1cblx0XHRcdFx0XHQoY3VycmVudFRhcmdldC5hY3Rpb25zICYmIGN1cnJlbnRUYXJnZXQuYWN0aW9uc1thbm5vdGF0aW9uQ29udGVudC5BY3Rpb25dKSB8fFxuXHRcdFx0XHRcdG9iamVjdE1hcFthbm5vdGF0aW9uQ29udGVudC5BY3Rpb25dO1xuXHRcdFx0XHRpZiAoIWFubm90YXRpb25Db250ZW50LkFjdGlvblRhcmdldCkge1xuXHRcdFx0XHRcdC8vIEFkZCB0byBkaWFnbm9zdGljcyBkZWJ1Z2dlcjtcblx0XHRcdFx0XHRBTk5PVEFUSU9OX0VSUk9SUy5wdXNoKHtcblx0XHRcdFx0XHRcdG1lc3NhZ2U6XG5cdFx0XHRcdFx0XHRcdFwiVW5hYmxlIHRvIHJlc29sdmUgdGhlIGFjdGlvbiBcIiArXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25Db250ZW50LkFjdGlvbiArXG5cdFx0XHRcdFx0XHRcdFwiIGRlZmluZWQgZm9yIFwiICtcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblRlcm0uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihhbm5vdGF0aW9uVGVybSwgYW5ub3RhdGlvbkNvbnRlbnQpO1xufVxuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uVHlwZSA9XG5cdHwgXCJQcm9wZXJ0eVBhdGhcIlxuXHR8IFwiUGF0aFwiXG5cdHwgXCJJZlwiXG5cdHwgXCJBcHBseVwiXG5cdHwgXCJOdWxsXCJcblx0fCBcIkFuZFwiXG5cdHwgXCJFcVwiXG5cdHwgXCJOZVwiXG5cdHwgXCJOb3RcIlxuXHR8IFwiR3RcIlxuXHR8IFwiR2VcIlxuXHR8IFwiTHRcIlxuXHR8IFwiTGVcIlxuXHR8IFwiT3JcIlxuXHR8IFwiQW5ub3RhdGlvblBhdGhcIlxuXHR8IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiXG5cdHwgXCJSZWNvcmRcIlxuXHR8IFwiU3RyaW5nXCJcblx0fCBcIkVtcHR5Q29sbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBnZXRPckluZmVyQ29sbGVjdGlvblR5cGUoY29sbGVjdGlvbkRlZmluaXRpb246IGFueVtdKTogQ29sbGVjdGlvblR5cGUge1xuXHRsZXQgdHlwZTogQ29sbGVjdGlvblR5cGUgPSAoY29sbGVjdGlvbkRlZmluaXRpb24gYXMgYW55KS50eXBlO1xuXHRpZiAodHlwZSA9PT0gdW5kZWZpbmVkICYmIGNvbGxlY3Rpb25EZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBmaXJzdENvbEl0ZW0gPSBjb2xsZWN0aW9uRGVmaW5pdGlvblswXTtcblx0XHRpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KFwiUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHR0eXBlID0gXCJQcm9wZXJ0eVBhdGhcIjtcblx0XHR9IGVsc2UgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eShcIlBhdGhcIikpIHtcblx0XHRcdHR5cGUgPSBcIlBhdGhcIjtcblx0XHR9IGVsc2UgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eShcIkFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHR0eXBlID0gXCJBbm5vdGF0aW9uUGF0aFwiO1xuXHRcdH0gZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0dHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHR0eXBlb2YgZmlyc3RDb2xJdGVtID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHQoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KFwidHlwZVwiKSB8fCBmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoXCJwcm9wZXJ0eVZhbHVlc1wiKSlcblx0XHQpIHtcblx0XHRcdHR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0Q29sSXRlbSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0dHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHR5cGUgPSBcIkVtcHR5Q29sbGVjdGlvblwiO1xuXHR9XG5cdHJldHVybiB0eXBlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbGxlY3Rpb24oXG5cdGNvbGxlY3Rpb25EZWZpbml0aW9uOiBhbnlbXSxcblx0cGFyZW50RlFOOiBzdHJpbmcsXG5cdHBhcnNlck91dHB1dDogUGFyc2VyT3V0cHV0LFxuXHRjdXJyZW50VGFyZ2V0OiBhbnksXG5cdG9iamVjdE1hcDogYW55LFxuXHR0b1Jlc29sdmU6IFJlc29sdmVhYmxlW10sXG5cdGFubm90YXRpb25Tb3VyY2U6IHN0cmluZyxcblx0dW5yZXNvbHZlZEFubm90YXRpb25zOiBBbm5vdGF0aW9uTGlzdFtdLFxuXHRhbm5vdGF0aW9uVHlwZTogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc1Rlcm06IHN0cmluZ1xuKSB7XG5cdGNvbnN0IGNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSA9IGdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZShjb2xsZWN0aW9uRGVmaW5pdGlvbik7XG5cdHN3aXRjaCAoY29sbGVjdGlvbkRlZmluaXRpb25UeXBlKSB7XG5cdFx0Y2FzZSBcIlByb3BlcnR5UGF0aFwiOlxuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocHJvcGVydHlQYXRoLCBwcm9wZXJ0eUlkeCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHR5cGU6IFwiUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdFx0dmFsdWU6IHByb3BlcnR5UGF0aC5Qcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtwYXJlbnRGUU59LyR7cHJvcGVydHlJZHh9YCxcblx0XHRcdFx0XHQkdGFyZ2V0OiByZXNvbHZlVGFyZ2V0KFxuXHRcdFx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aC5Qcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uc1Rlcm1cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRjYXNlIFwiUGF0aFwiOlxuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcChwYXRoVmFsdWUgPT4ge1xuXHRcdFx0XHRjb25zdCAkdGFyZ2V0ID0gcmVzb2x2ZVRhcmdldChcblx0XHRcdFx0XHRvYmplY3RNYXAsXG5cdFx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0XHRwYXRoVmFsdWUuUGF0aCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGFubm90YXRpb25UeXBlLFxuXHRcdFx0XHRcdGFubm90YXRpb25zVGVybVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBwYXRoID0gbmV3IFBhdGgocGF0aFZhbHVlLCAkdGFyZ2V0LCBhbm5vdGF0aW9uc1Rlcm0sIGFubm90YXRpb25UeXBlLCBcIlwiKTtcblx0XHRcdFx0dG9SZXNvbHZlLnB1c2goe1xuXHRcdFx0XHRcdGlubGluZTogaXNBbm5vdGF0aW9uUGF0aChwYXRoVmFsdWUuUGF0aCksXG5cdFx0XHRcdFx0dG9SZXNvbHZlOiBwYXRoXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gcGF0aDtcblx0XHRcdH0pO1xuXHRcdGNhc2UgXCJBbm5vdGF0aW9uUGF0aFwiOlxuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgoYW5ub3RhdGlvblBhdGgsIGFubm90YXRpb25JZHgpID0+IHtcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblRhcmdldCA9IHJlc29sdmVUYXJnZXQoXG5cdFx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGguQW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uc1Rlcm1cblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbGxlY3Rpb25FbGVtZW50ID0ge1xuXHRcdFx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdFx0XHR2YWx1ZTogYW5ub3RhdGlvblBhdGguQW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtwYXJlbnRGUU59LyR7YW5ub3RhdGlvbklkeH1gLFxuXHRcdFx0XHRcdCR0YXJnZXQ6IGFubm90YXRpb25UYXJnZXQsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblR5cGU6IGFubm90YXRpb25UeXBlLFxuXHRcdFx0XHRcdGFubm90YXRpb25zVGVybTogYW5ub3RhdGlvbnNUZXJtLFxuXHRcdFx0XHRcdHRlcm06IFwiXCIsXG5cdFx0XHRcdFx0cGF0aDogXCJcIlxuXHRcdFx0XHR9O1xuXHRcdFx0XHR0b1Jlc29sdmUucHVzaCh7XG5cdFx0XHRcdFx0aW5saW5lOiBmYWxzZSxcblx0XHRcdFx0XHR0b1Jlc29sdmU6IGFubm90YXRpb25Db2xsZWN0aW9uRWxlbWVudFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2xsZWN0aW9uRWxlbWVudDtcblx0XHRcdH0pO1xuXHRcdGNhc2UgXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI6XG5cdFx0XHRyZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChuYXZQcm9wZXJ0eVBhdGgsIG5hdlByb3BJZHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0eXBlOiBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIixcblx0XHRcdFx0XHR2YWx1ZTogbmF2UHJvcGVydHlQYXRoLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtwYXJlbnRGUU59LyR7bmF2UHJvcElkeH1gLFxuXHRcdFx0XHRcdCR0YXJnZXQ6IHJlc29sdmVUYXJnZXQoXG5cdFx0XHRcdFx0XHRvYmplY3RNYXAsXG5cdFx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LFxuXHRcdFx0XHRcdFx0bmF2UHJvcGVydHlQYXRoLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uc1Rlcm1cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRjYXNlIFwiUmVjb3JkXCI6XG5cdFx0XHRyZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChyZWNvcmREZWZpbml0aW9uLCByZWNvcmRJZHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlUmVjb3JkKFxuXHRcdFx0XHRcdHJlY29yZERlZmluaXRpb24sXG5cdFx0XHRcdFx0YCR7cGFyZW50RlFOfS8ke3JlY29yZElkeH1gLFxuXHRcdFx0XHRcdHBhcnNlck91dHB1dCxcblx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LFxuXHRcdFx0XHRcdG9iamVjdE1hcCxcblx0XHRcdFx0XHR0b1Jlc29sdmUsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblNvdXJjZSxcblx0XHRcdFx0XHR1bnJlc29sdmVkQW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHRjYXNlIFwiQXBwbHlcIjpcblx0XHRjYXNlIFwiTnVsbFwiOlxuXHRcdGNhc2UgXCJJZlwiOlxuXHRcdGNhc2UgXCJFcVwiOlxuXHRcdGNhc2UgXCJOZVwiOlxuXHRcdGNhc2UgXCJMdFwiOlxuXHRcdGNhc2UgXCJHdFwiOlxuXHRcdGNhc2UgXCJMZVwiOlxuXHRcdGNhc2UgXCJHZVwiOlxuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRjYXNlIFwiQW5kXCI6XG5cdFx0Y2FzZSBcIk9yXCI6XG5cdFx0XHRyZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKGlmVmFsdWUgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaWZWYWx1ZTtcblx0XHRcdH0pO1xuXHRcdGNhc2UgXCJTdHJpbmdcIjpcblx0XHRcdHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoc3RyaW5nVmFsdWUgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIHN0cmluZ1ZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0cmluZ1ZhbHVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHN0cmluZ1ZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RyaW5nVmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0cmluZ1ZhbHVlLlN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGlmIChjb2xsZWN0aW9uRGVmaW5pdGlvbi5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgY2FzZVwiKTtcblx0fVxufVxuXG50eXBlIFJlc29sdmVhYmxlID0ge1xuXHRpbmxpbmU6IGJvb2xlYW47XG5cdHRvUmVzb2x2ZToge1xuXHRcdCR0YXJnZXQ6IHN0cmluZztcblx0XHR0YXJnZXRTdHJpbmc/OiBzdHJpbmc7XG5cdFx0YW5ub3RhdGlvbnNUZXJtOiBzdHJpbmc7XG5cdFx0YW5ub3RhdGlvblR5cGU6IHN0cmluZztcblx0XHR0ZXJtOiBzdHJpbmc7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHR9O1xufTtcblxuZnVuY3Rpb24gY29udmVydEFubm90YXRpb24oXG5cdGFubm90YXRpb246IEFubm90YXRpb24sXG5cdHBhcnNlck91dHB1dDogUGFyc2VyT3V0cHV0LFxuXHRjdXJyZW50VGFyZ2V0OiBhbnksXG5cdG9iamVjdE1hcDogYW55LFxuXHR0b1Jlc29sdmU6IFJlc29sdmVhYmxlW10sXG5cdGFubm90YXRpb25Tb3VyY2U6IHN0cmluZyxcblx0dW5yZXNvbHZlZEFubm90YXRpb25zOiBBbm5vdGF0aW9uTGlzdFtdXG4pOiBhbnkge1xuXHRpZiAoYW5ub3RhdGlvbi5yZWNvcmQpIHtcblx0XHRjb25zdCBhbm5vdGF0aW9uVHlwZSA9IGFubm90YXRpb24ucmVjb3JkLnR5cGVcblx0XHRcdD8gdW5hbGlhcyhwYXJzZXJPdXRwdXQucmVmZXJlbmNlcywgYW5ub3RhdGlvbi5yZWNvcmQudHlwZSlcblx0XHRcdDogaW5mZXJUeXBlRnJvbVRlcm0oYW5ub3RhdGlvbi50ZXJtLCBwYXJzZXJPdXRwdXQsIGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRjb25zdCBhbm5vdGF0aW9uVGVybTogYW55ID0ge1xuXHRcdFx0JFR5cGU6IGFubm90YXRpb25UeXBlLFxuXHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdHF1YWxpZmllcjogYW5ub3RhdGlvbi5xdWFsaWZpZXJcblx0XHR9O1xuXHRcdGNvbnN0IGFubm90YXRpb25Db250ZW50OiBhbnkgPSB7fTtcblx0XHRhbm5vdGF0aW9uLnJlY29yZC5wcm9wZXJ0eVZhbHVlcy5mb3JFYWNoKChwcm9wZXJ0eVZhbHVlOiBQcm9wZXJ0eVZhbHVlKSA9PiB7XG5cdFx0XHRhbm5vdGF0aW9uQ29udGVudFtwcm9wZXJ0eVZhbHVlLm5hbWVdID0gcGFyc2VWYWx1ZShcblx0XHRcdFx0cHJvcGVydHlWYWx1ZS52YWx1ZSxcblx0XHRcdFx0YCR7YW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWV9LyR7cHJvcGVydHlWYWx1ZS5uYW1lfWAsXG5cdFx0XHRcdHBhcnNlck91dHB1dCxcblx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHR0b1Jlc29sdmUsXG5cdFx0XHRcdGFubm90YXRpb25Tb3VyY2UsXG5cdFx0XHRcdHVucmVzb2x2ZWRBbm5vdGF0aW9ucyxcblx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdGFubm90YXRpb24udGVybVxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0YW5ub3RhdGlvbkNvbnRlbnQuaGFzT3duUHJvcGVydHkoXCJBY3Rpb25cIikgJiZcblx0XHRcdFx0KCFhbm5vdGF0aW9uLnJlY29yZCB8fFxuXHRcdFx0XHRcdGFubm90YXRpb25UZXJtLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiIHx8XG5cdFx0XHRcdFx0YW5ub3RhdGlvblRlcm0uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFubm90YXRpb25Db250ZW50LkFjdGlvblRhcmdldCA9XG5cdFx0XHRcdFx0KGN1cnJlbnRUYXJnZXQuYWN0aW9ucyAmJiBjdXJyZW50VGFyZ2V0LmFjdGlvbnNbYW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9uXSkgfHxcblx0XHRcdFx0XHRvYmplY3RNYXBbYW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9uXTtcblx0XHRcdFx0aWYgKCFhbm5vdGF0aW9uQ29udGVudC5BY3Rpb25UYXJnZXQpIHtcblx0XHRcdFx0XHRBTk5PVEFUSU9OX0VSUk9SUy5wdXNoKHtcblx0XHRcdFx0XHRcdG1lc3NhZ2U6XG5cdFx0XHRcdFx0XHRcdFwiVW5hYmxlIHRvIHJlc29sdmUgdGhlIGFjdGlvbiBcIiArXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25Db250ZW50LkFjdGlvbiArXG5cdFx0XHRcdFx0XHRcdFwiIGRlZmluZWQgZm9yIFwiICtcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvLyBBZGQgdG8gZGlhZ25vc3RpY3Ncblx0XHRcdFx0XHQvLyBkZWJ1Z2dlcjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKGFubm90YXRpb25UZXJtLCBhbm5vdGF0aW9uQ29udGVudCk7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5jb2xsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRpZiAoYW5ub3RhdGlvbi52YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHBhcnNlVmFsdWUoXG5cdFx0XHRcdGFubm90YXRpb24udmFsdWUsXG5cdFx0XHRcdGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRwYXJzZXJPdXRwdXQsXG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQsXG5cdFx0XHRcdG9iamVjdE1hcCxcblx0XHRcdFx0dG9SZXNvbHZlLFxuXHRcdFx0XHRhbm5vdGF0aW9uU291cmNlLFxuXHRcdFx0XHR1bnJlc29sdmVkQW5ub3RhdGlvbnMsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRcdGFubm90YXRpb24udGVybVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGFubm90YXRpb24uY29sbGVjdGlvbikge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb246IGFueSA9IHBhcnNlQ29sbGVjdGlvbihcblx0XHRcdGFubm90YXRpb24uY29sbGVjdGlvbixcblx0XHRcdGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0cGFyc2VyT3V0cHV0LFxuXHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdG9iamVjdE1hcCxcblx0XHRcdHRvUmVzb2x2ZSxcblx0XHRcdGFubm90YXRpb25Tb3VyY2UsXG5cdFx0XHR1bnJlc29sdmVkQW5ub3RhdGlvbnMsXG5cdFx0XHRcIlwiLFxuXHRcdFx0YW5ub3RhdGlvbi50ZXJtXG5cdFx0KTtcblx0XHRjb2xsZWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9IGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdHJldHVybiBjb2xsZWN0aW9uO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGNhc2VcIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZVBhdGhGbihlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBvYmplY3RNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBpbmNsdWRlVmlzaXRlZE9iamVjdHM6IGJvb2xlYW4pOiBhbnkge1xuXHRcdGNvbnN0IGFubm90YXRpb25UZXJtOiBzdHJpbmcgPSBcIlwiO1xuXHRcdGNvbnN0IGFubm90YXRpb25UeXBlOiBzdHJpbmcgPSBcIlwiO1xuXHRcdHJldHVybiByZXNvbHZlVGFyZ2V0KFxuXHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdHJlbGF0aXZlUGF0aCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0aW5jbHVkZVZpc2l0ZWRPYmplY3RzLFxuXHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRhbm5vdGF0aW9uVGVybVxuXHRcdCk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydGllcyhcblx0ZW50aXR5VHlwZXM6IFBhcnNlckVudGl0eVR5cGVbXSxcblx0YXNzb2NpYXRpb25zOiBBc3NvY2lhdGlvbltdLFxuXHRvYmplY3RNYXA6IFJlY29yZDxzdHJpbmcsIGFueT5cbik6IHZvaWQge1xuXHRlbnRpdHlUeXBlcy5mb3JFYWNoKGVudGl0eVR5cGUgPT4ge1xuXHRcdGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcChuYXZQcm9wID0+IHtcblx0XHRcdGNvbnN0IG91dE5hdlByb3A6IFBhcnRpYWw8TmF2aWdhdGlvblByb3BlcnR5PiA9IHtcblx0XHRcdFx0X3R5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5XCIsXG5cdFx0XHRcdG5hbWU6IG5hdlByb3AubmFtZSxcblx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBuYXZQcm9wLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0cGFydG5lcjogKG5hdlByb3AgYXMgYW55KS5oYXNPd25Qcm9wZXJ0eShcInBhcnRuZXJcIikgPyAobmF2UHJvcCBhcyBhbnkpLnBhcnRuZXIgOiB1bmRlZmluZWQsXG5cdFx0XHRcdC8vIHRhcmdldFR5cGVOYW1lOiBGdWxseVF1YWxpZmllZE5hbWU7XG5cdFx0XHRcdC8vIHRhcmdldFR5cGU6IEVudGl0eVR5cGU7XG5cdFx0XHRcdGlzQ29sbGVjdGlvbjogKG5hdlByb3AgYXMgYW55KS5oYXNPd25Qcm9wZXJ0eShcImlzQ29sbGVjdGlvblwiKSA/IChuYXZQcm9wIGFzIGFueSkuaXNDb2xsZWN0aW9uIDogZmFsc2UsXG5cdFx0XHRcdGNvbnRhaW5zVGFyZ2V0OiAobmF2UHJvcCBhcyBhbnkpLmhhc093blByb3BlcnR5KFwiY29udGFpbnNUYXJnZXRcIilcblx0XHRcdFx0XHQ/IChuYXZQcm9wIGFzIGFueSkuY29udGFpbnNUYXJnZXRcblx0XHRcdFx0XHQ6IGZhbHNlLFxuXHRcdFx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnQ6IChuYXZQcm9wIGFzIGFueSkucmVmZXJlbnRpYWxDb25zdHJhaW50XG5cdFx0XHRcdFx0PyAobmF2UHJvcCBhcyBhbnkpLnJlZmVyZW50aWFsQ29uc3RyYWludFxuXHRcdFx0XHRcdDogW10sXG5cdFx0XHRcdGFubm90YXRpb25zOiB7fVxuXHRcdFx0fTtcblx0XHRcdGlmICgobmF2UHJvcCBhcyBHZW5lcmljTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlTmFtZSkge1xuXHRcdFx0XHRvdXROYXZQcm9wLnRhcmdldFR5cGUgPSBvYmplY3RNYXBbKG5hdlByb3AgYXMgVjROYXZpZ2F0aW9uUHJvcGVydHkpLnRhcmdldFR5cGVOYW1lXTtcblx0XHRcdH0gZWxzZSBpZiAoKG5hdlByb3AgYXMgVjJOYXZpZ2F0aW9uUHJvcGVydHkpLnJlbGF0aW9uc2hpcCkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRBc3NvY2lhdGlvbiA9IGFzc29jaWF0aW9ucy5maW5kKFxuXHRcdFx0XHRcdGFzc29jaWF0aW9uID0+IGFzc29jaWF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gKG5hdlByb3AgYXMgVjJOYXZpZ2F0aW9uUHJvcGVydHkpLnJlbGF0aW9uc2hpcFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodGFyZ2V0QXNzb2NpYXRpb24pIHtcblx0XHRcdFx0XHRjb25zdCBhc3NvY2lhdGlvbkVuZCA9IHRhcmdldEFzc29jaWF0aW9uLmFzc29jaWF0aW9uRW5kLmZpbmQoXG5cdFx0XHRcdFx0XHRlbmQgPT4gZW5kLnJvbGUgPT09IChuYXZQcm9wIGFzIFYyTmF2aWdhdGlvblByb3BlcnR5KS50b1JvbGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChhc3NvY2lhdGlvbkVuZCkge1xuXHRcdFx0XHRcdFx0b3V0TmF2UHJvcC50YXJnZXRUeXBlID0gb2JqZWN0TWFwW2Fzc29jaWF0aW9uRW5kLnR5cGVdO1xuXHRcdFx0XHRcdFx0b3V0TmF2UHJvcC5pc0NvbGxlY3Rpb24gPSBhc3NvY2lhdGlvbkVuZC5tdWx0aXBsaWNpdHkgPT09IFwiKlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG91dE5hdlByb3AudGFyZ2V0VHlwZSkge1xuXHRcdFx0XHRvdXROYXZQcm9wLnRhcmdldFR5cGVOYW1lID0gb3V0TmF2UHJvcC50YXJnZXRUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG91dE5hdlByb3BSZXEgPSBvdXROYXZQcm9wIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eTtcblx0XHRcdG9iamVjdE1hcFtvdXROYXZQcm9wUmVxLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBvdXROYXZQcm9wUmVxO1xuXHRcdFx0cmV0dXJuIG91dE5hdlByb3BSZXE7XG5cdFx0fSk7XG5cdFx0KGVudGl0eVR5cGUgYXMgRW50aXR5VHlwZSkucmVzb2x2ZVBhdGggPSBjcmVhdGVSZXNvbHZlUGF0aEZuKGVudGl0eVR5cGUgYXMgRW50aXR5VHlwZSwgb2JqZWN0TWFwKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGxpbmtBY3Rpb25zVG9FbnRpdHlUeXBlKG5hbWVzcGFjZTogc3RyaW5nLCBhY3Rpb25zOiBBY3Rpb25bXSwgb2JqZWN0TWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG5cdGFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuXHRcdGlmICghYWN0aW9uLmFubm90YXRpb25zKSB7XG5cdFx0XHRhY3Rpb24uYW5ub3RhdGlvbnMgPSB7fTtcblx0XHR9XG5cdFx0aWYgKGFjdGlvbi5pc0JvdW5kKSB7XG5cdFx0XHRjb25zdCBzb3VyY2VFbnRpdHlUeXBlID0gb2JqZWN0TWFwW2FjdGlvbi5zb3VyY2VUeXBlXTtcblx0XHRcdGFjdGlvbi5zb3VyY2VFbnRpdHlUeXBlID0gc291cmNlRW50aXR5VHlwZTtcblx0XHRcdGlmIChzb3VyY2VFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdGlmICghc291cmNlRW50aXR5VHlwZS5hY3Rpb25zKSB7XG5cdFx0XHRcdFx0c291cmNlRW50aXR5VHlwZS5hY3Rpb25zID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0c291cmNlRW50aXR5VHlwZS5hY3Rpb25zW2FjdGlvbi5uYW1lXSA9IGFjdGlvbjtcblx0XHRcdFx0c291cmNlRW50aXR5VHlwZS5hY3Rpb25zW2Ake25hbWVzcGFjZX0uJHthY3Rpb24ubmFtZX1gXSA9IGFjdGlvbjtcblx0XHRcdH1cblx0XHRcdGFjdGlvbi5yZXR1cm5FbnRpdHlUeXBlID0gb2JqZWN0TWFwW2FjdGlvbi5yZXR1cm5UeXBlXTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBsaW5rRW50aXR5VHlwZVRvRW50aXR5U2V0KFxuXHRlbnRpdHlTZXRzOiBFbnRpdHlTZXRbXSxcblx0b2JqZWN0TWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuXHRyZWZlcmVuY2VzOiBSZWZlcmVuY2VzV2l0aE1hcFxuKTogdm9pZCB7XG5cdGVudGl0eVNldHMuZm9yRWFjaChlbnRpdHlTZXQgPT4ge1xuXHRcdGVudGl0eVNldC5lbnRpdHlUeXBlID0gb2JqZWN0TWFwW2VudGl0eVNldC5lbnRpdHlUeXBlTmFtZV07XG5cdFx0aWYgKCFlbnRpdHlTZXQuZW50aXR5VHlwZSkge1xuXHRcdFx0ZW50aXR5U2V0LmVudGl0eVR5cGUgPSBvYmplY3RNYXBbdW5hbGlhcyhyZWZlcmVuY2VzLCBlbnRpdHlTZXQuZW50aXR5VHlwZU5hbWUpIGFzIHN0cmluZ107XG5cdFx0fVxuXHRcdGlmICghZW50aXR5U2V0LmFubm90YXRpb25zKSB7XG5cdFx0XHRlbnRpdHlTZXQuYW5ub3RhdGlvbnMgPSB7fTtcblx0XHR9XG5cdFx0aWYgKCFlbnRpdHlTZXQuZW50aXR5VHlwZS5hbm5vdGF0aW9ucykge1xuXHRcdFx0ZW50aXR5U2V0LmVudGl0eVR5cGUuYW5ub3RhdGlvbnMgPSB7fTtcblx0XHR9XG5cdFx0ZW50aXR5U2V0LmVudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXlQcm9wOiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0a2V5UHJvcC5pc0tleSA9IHRydWU7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBsaW5rRW50aXR5VHlwZVRvU2luZ2xldG9uKFxuXHRzaW5nbGV0b25zOiBTaW5nbGV0b25bXSA9IFtdLFxuXHRvYmplY3RNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sXG5cdHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNXaXRoTWFwXG4pOiB2b2lkIHtcblx0c2luZ2xldG9ucy5mb3JFYWNoKHNpbmdsZXRvbiA9PiB7XG5cdFx0c2luZ2xldG9uLnR5cGUgPSBvYmplY3RNYXBbc2luZ2xldG9uLnR5cGVOYW1lXTtcblx0XHRpZiAoIXNpbmdsZXRvbi50eXBlKSB7XG5cdFx0XHRzaW5nbGV0b24udHlwZSA9IG9iamVjdE1hcFt1bmFsaWFzKHJlZmVyZW5jZXMsIHNpbmdsZXRvbi50eXBlTmFtZSkgYXMgc3RyaW5nXTtcblx0XHR9XG5cdFx0aWYgKCFzaW5nbGV0b24uYW5ub3RhdGlvbnMpIHtcblx0XHRcdHNpbmdsZXRvbi5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXNpbmdsZXRvbi50eXBlLmFubm90YXRpb25zKSB7XG5cdFx0XHRzaW5nbGV0b24udHlwZS5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdH1cblx0XHRzaW5nbGV0b24udHlwZS5rZXlzLmZvckVhY2goKGtleVByb3A6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRrZXlQcm9wLmlzS2V5ID0gdHJ1ZTtcblx0XHR9KTtcblx0XHRzaW5nbGV0b24uZW50aXR5VHlwZSA9IHNpbmdsZXRvbi50eXBlO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gbGlua1Byb3BlcnRpZXNUb0NvbXBsZXhUeXBlcyhlbnRpdHlUeXBlczogRW50aXR5VHlwZVtdLCBvYmplY3RNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcblx0ZnVuY3Rpb24gbGluayhwcm9wZXJ0eTogUHJvcGVydHkpIHtcblx0XHRpZiAoIXByb3BlcnR5LmFubm90YXRpb25zKSB7XG5cdFx0XHRwcm9wZXJ0eS5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdH1cblxuXHRcdHRyeSB7XG4gICAgICBpZiAocHJvcGVydHkudHlwZS5pbmRleE9mKFwiRWRtXCIpICE9PSAwKSB7XG4gICAgICAgIGxldCBjb21wbGV4VHlwZTogQ29tcGxleFR5cGUgfCBUeXBlRGVmaW5pdGlvbjtcbiAgICAgICAgaWYgKHByb3BlcnR5LnR5cGUuc3RhcnRzV2l0aChcIkNvbGxlY3Rpb25cIikpIHtcbiAgICAgICAgICBjb25zdCBjb21wbGV4VHlwZU5hbWUgPSBwcm9wZXJ0eS50eXBlLnN1YnN0cigxMSwgcHJvcGVydHkudHlwZS5sZW5ndGggLSAxMik7XG4gICAgICAgICAgY29tcGxleFR5cGUgPSBvYmplY3RNYXBbY29tcGxleFR5cGVOYW1lXSBhcyBDb21wbGV4VHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wbGV4VHlwZSA9IG9iamVjdE1hcFtwcm9wZXJ0eS50eXBlXSBhcyBDb21wbGV4VHlwZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGxleFR5cGUpIHtcbiAgICAgICAgICBwcm9wZXJ0eS50YXJnZXRUeXBlID0gY29tcGxleFR5cGU7XG4gICAgICAgICAgaWYgKGNvbXBsZXhUeXBlLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbXBsZXhUeXBlLnByb3BlcnRpZXMuZm9yRWFjaChsaW5rKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblx0XHR9IGNhdGNoIChzRXJyb3Ipe1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUHJvcGVydHkgVHlwZSBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHR9XG5cdFx0XG5cdH1cblxuXHRlbnRpdHlUeXBlcy5mb3JFYWNoKGVudGl0eVR5cGUgPT4ge1xuXHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKGxpbmspO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUNvbXBsZXhUeXBlcyhcblx0Y29tcGxleFR5cGVzOiBQYXJzZXJDb21wbGV4VHlwZVtdLFxuXHRhc3NvY2lhdGlvbnM6IEFzc29jaWF0aW9uW10sXG5cdG9iamVjdE1hcDogUmVjb3JkPHN0cmluZywgYW55PlxuKSB7XG5cdGNvbXBsZXhUeXBlcy5mb3JFYWNoKGNvbXBsZXhUeXBlID0+IHtcblx0XHQoY29tcGxleFR5cGUgYXMgQ29tcGxleFR5cGUpLmFubm90YXRpb25zID0ge307XG5cdFx0Y29tcGxleFR5cGUucHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcblx0XHRcdGlmICghKHByb3BlcnR5IGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucykge1xuXHRcdFx0XHQocHJvcGVydHkgYXMgUHJvcGVydHkpLmFubm90YXRpb25zID0ge307XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29tcGxleFR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb21wbGV4VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAobmF2UHJvcCA9PiB7XG5cdFx0XHRpZiAoIShuYXZQcm9wIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSkuYW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0KG5hdlByb3AgYXMgTmF2aWdhdGlvblByb3BlcnR5KS5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb3V0TmF2UHJvcDogUGFydGlhbDxOYXZpZ2F0aW9uUHJvcGVydHk+ID0ge1xuXHRcdFx0XHRfdHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlcIixcblx0XHRcdFx0bmFtZTogbmF2UHJvcC5uYW1lLFxuXHRcdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IG5hdlByb3AuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRwYXJ0bmVyOiAobmF2UHJvcCBhcyBhbnkpLmhhc093blByb3BlcnR5KFwicGFydG5lclwiKSA/IChuYXZQcm9wIGFzIGFueSkucGFydG5lciA6IHVuZGVmaW5lZCxcblx0XHRcdFx0Ly8gdGFyZ2V0VHlwZU5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdFx0Ly8gdGFyZ2V0VHlwZTogRW50aXR5VHlwZTtcblx0XHRcdFx0aXNDb2xsZWN0aW9uOiAobmF2UHJvcCBhcyBhbnkpLmhhc093blByb3BlcnR5KFwiaXNDb2xsZWN0aW9uXCIpID8gKG5hdlByb3AgYXMgYW55KS5pc0NvbGxlY3Rpb24gOiBmYWxzZSxcblx0XHRcdFx0Y29udGFpbnNUYXJnZXQ6IChuYXZQcm9wIGFzIGFueSkuaGFzT3duUHJvcGVydHkoXCJjb250YWluc1RhcmdldFwiKVxuXHRcdFx0XHRcdD8gKG5hdlByb3AgYXMgYW55KS5jb250YWluc1RhcmdldFxuXHRcdFx0XHRcdDogZmFsc2UsXG5cdFx0XHRcdHJlZmVyZW50aWFsQ29uc3RyYWludDogKG5hdlByb3AgYXMgYW55KS5yZWZlcmVudGlhbENvbnN0cmFpbnRcblx0XHRcdFx0XHQ/IChuYXZQcm9wIGFzIGFueSkucmVmZXJlbnRpYWxDb25zdHJhaW50XG5cdFx0XHRcdFx0OiBbXVxuXHRcdFx0fTtcblx0XHRcdGlmICgobmF2UHJvcCBhcyBHZW5lcmljTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlTmFtZSkge1xuXHRcdFx0XHRvdXROYXZQcm9wLnRhcmdldFR5cGUgPSBvYmplY3RNYXBbKG5hdlByb3AgYXMgVjROYXZpZ2F0aW9uUHJvcGVydHkpLnRhcmdldFR5cGVOYW1lXTtcblx0XHRcdH0gZWxzZSBpZiAoKG5hdlByb3AgYXMgVjJOYXZpZ2F0aW9uUHJvcGVydHkpLnJlbGF0aW9uc2hpcCkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRBc3NvY2lhdGlvbiA9IGFzc29jaWF0aW9ucy5maW5kKFxuXHRcdFx0XHRcdGFzc29jaWF0aW9uID0+IGFzc29jaWF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gKG5hdlByb3AgYXMgVjJOYXZpZ2F0aW9uUHJvcGVydHkpLnJlbGF0aW9uc2hpcFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodGFyZ2V0QXNzb2NpYXRpb24pIHtcblx0XHRcdFx0XHRjb25zdCBhc3NvY2lhdGlvbkVuZCA9IHRhcmdldEFzc29jaWF0aW9uLmFzc29jaWF0aW9uRW5kLmZpbmQoXG5cdFx0XHRcdFx0XHRlbmQgPT4gZW5kLnJvbGUgPT09IChuYXZQcm9wIGFzIFYyTmF2aWdhdGlvblByb3BlcnR5KS50b1JvbGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChhc3NvY2lhdGlvbkVuZCkge1xuXHRcdFx0XHRcdFx0b3V0TmF2UHJvcC50YXJnZXRUeXBlID0gb2JqZWN0TWFwW2Fzc29jaWF0aW9uRW5kLnR5cGVdO1xuXHRcdFx0XHRcdFx0b3V0TmF2UHJvcC5pc0NvbGxlY3Rpb24gPSBhc3NvY2lhdGlvbkVuZC5tdWx0aXBsaWNpdHkgPT09IFwiKlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG91dE5hdlByb3AudGFyZ2V0VHlwZSkge1xuXHRcdFx0XHRvdXROYXZQcm9wLnRhcmdldFR5cGVOYW1lID0gb3V0TmF2UHJvcC50YXJnZXRUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG91dE5hdlByb3BSZXEgPSBvdXROYXZQcm9wIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eTtcblx0XHRcdG9iamVjdE1hcFtvdXROYXZQcm9wUmVxLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBvdXROYXZQcm9wUmVxO1xuXHRcdFx0cmV0dXJuIG91dE5hdlByb3BSZXE7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBzcGxpdFRlcm0ocmVmZXJlbmNlczogUmVmZXJlbmNlc1dpdGhNYXAsIHRlcm1WYWx1ZTogc3RyaW5nKSB7XG5cdGNvbnN0IGFsaWFzZWRUZXJtID0gYWxpYXMocmVmZXJlbmNlcywgdGVybVZhbHVlKTtcblx0Y29uc3QgbGFzdERvdCA9IGFsaWFzZWRUZXJtLmxhc3RJbmRleE9mKFwiLlwiKTtcblx0bGV0IHRlcm1BbGlhcyA9IGFsaWFzZWRUZXJtLnN1YnN0cigwLCBsYXN0RG90KTtcblx0bGV0IHRlcm0gPSBhbGlhc2VkVGVybS5zdWJzdHIobGFzdERvdCArIDEpO1xuXHRyZXR1cm4gW3Rlcm1BbGlhcywgdGVybV07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHNwZWNpZmljIHBhdGhcbiAqIEBwYXJhbSBzUGF0aFxuICovXG5mdW5jdGlvbiBjcmVhdGVHbG9iYWxSZXNvbHZlKGNvbnZlcnRlZE91dHB1dDogQ29udmVydGVyT3V0cHV0LCBvYmplY3RNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIHJlc29sdmVQYXRoPFQgZXh0ZW5kcyBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbj4oc1BhdGg6IHN0cmluZyk6IFJlc29sdXRpb25UYXJnZXQ8VD4ge1xuXHRcdGNvbnN0IGFQYXRoU3BsaXQgPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0aWYgKGFQYXRoU3BsaXQuc2hpZnQoKSAhPT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGRlYWwgd2l0aCByZWxhdGl2ZSBwYXRoXCIpO1xuXHRcdH1cblx0XHRjb25zdCBlbnRpdHlTZXROYW1lID0gYVBhdGhTcGxpdC5zaGlmdCgpO1xuXHRcdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlZE91dHB1dC5lbnRpdHlTZXRzLmZpbmQoZXQgPT4gZXQubmFtZSA9PT0gZW50aXR5U2V0TmFtZSk7XG5cdFx0aWYgKCFlbnRpdHlTZXQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRhcmdldDogY29udmVydGVkT3V0cHV0LmVudGl0eUNvbnRhaW5lcixcblx0XHRcdFx0b2JqZWN0UGF0aDogW2NvbnZlcnRlZE91dHB1dC5lbnRpdHlDb250YWluZXJdXG5cdFx0XHR9IGFzIFJlc29sdXRpb25UYXJnZXQ8VD47XG5cdFx0fVxuXHRcdGlmIChhUGF0aFNwbGl0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGFyZ2V0OiBlbnRpdHlTZXQsXG5cdFx0XHRcdG9iamVjdFBhdGg6IFtjb252ZXJ0ZWRPdXRwdXQuZW50aXR5Q29udGFpbmVyLCBlbnRpdHlTZXRdXG5cdFx0XHR9IGFzIFJlc29sdXRpb25UYXJnZXQ8VD47XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHRhcmdldFJlc29sdXRpb246IGFueSA9IHJlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBlbnRpdHlTZXQsIFwiL1wiICsgYVBhdGhTcGxpdC5qb2luKFwiL1wiKSwgZmFsc2UsIHRydWUpO1xuXHRcdFx0aWYgKHRhcmdldFJlc29sdXRpb24udGFyZ2V0KSB7XG5cdFx0XHRcdHRhcmdldFJlc29sdXRpb24udmlzaXRlZE9iamVjdHMucHVzaCh0YXJnZXRSZXNvbHV0aW9uLnRhcmdldCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0YXJnZXQ6IHRhcmdldFJlc29sdXRpb24udGFyZ2V0LFxuXHRcdFx0XHRvYmplY3RQYXRoOiB0YXJnZXRSZXNvbHV0aW9uLnZpc2l0ZWRPYmplY3RzXG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcbn1cblxubGV0IEFOTk9UQVRJT05fRVJST1JTOiB7IG1lc3NhZ2U6IHN0cmluZyB9W10gPSBbXTtcbmxldCBBTExfQU5OT1RBVElPTl9FUlJPUlM6IGFueSA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGVzKHBhcnNlck91dHB1dDogUGFyc2VyT3V0cHV0KTogQ29udmVydGVyT3V0cHV0IHtcblx0QU5OT1RBVElPTl9FUlJPUlMgPSBbXTtcblx0Y29uc3Qgb2JqZWN0TWFwID0gYnVpbGRPYmplY3RNYXAocGFyc2VyT3V0cHV0KTtcblx0cmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKFxuXHRcdHBhcnNlck91dHB1dC5zY2hlbWEuZW50aXR5VHlwZXMgYXMgRW50aXR5VHlwZVtdLFxuXHRcdHBhcnNlck91dHB1dC5zY2hlbWEuYXNzb2NpYXRpb25zLFxuXHRcdG9iamVjdE1hcFxuXHQpO1xuXHRpZiAoIShwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eUNvbnRhaW5lciBhcyBFbnRpdHlDb250YWluZXIpLmFubm90YXRpb25zKSB7XG5cdFx0KHBhcnNlck91dHB1dC5zY2hlbWEuZW50aXR5Q29udGFpbmVyIGFzIEVudGl0eUNvbnRhaW5lcikuYW5ub3RhdGlvbnMgPSB7fTtcblx0fVxuXHRsaW5rQWN0aW9uc1RvRW50aXR5VHlwZShwYXJzZXJPdXRwdXQuc2NoZW1hLm5hbWVzcGFjZSwgcGFyc2VyT3V0cHV0LnNjaGVtYS5hY3Rpb25zIGFzIEFjdGlvbltdLCBvYmplY3RNYXApO1xuXHRsaW5rRW50aXR5VHlwZVRvRW50aXR5U2V0KHBhcnNlck91dHB1dC5zY2hlbWEuZW50aXR5U2V0cyBhcyBFbnRpdHlTZXRbXSwgb2JqZWN0TWFwLCBwYXJzZXJPdXRwdXQucmVmZXJlbmNlcyk7XG5cdGxpbmtFbnRpdHlUeXBlVG9TaW5nbGV0b24ocGFyc2VyT3V0cHV0LnNjaGVtYS5zaW5nbGV0b25zIGFzIFNpbmdsZXRvbltdLCBvYmplY3RNYXAsIHBhcnNlck91dHB1dC5yZWZlcmVuY2VzKTtcblx0bGlua1Byb3BlcnRpZXNUb0NvbXBsZXhUeXBlcyhwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eVR5cGVzIGFzIEVudGl0eVR5cGVbXSwgb2JqZWN0TWFwKTtcblx0cHJlcGFyZUNvbXBsZXhUeXBlcyhwYXJzZXJPdXRwdXQuc2NoZW1hLmNvbXBsZXhUeXBlcyBhcyBDb21wbGV4VHlwZVtdLCBwYXJzZXJPdXRwdXQuc2NoZW1hLmFzc29jaWF0aW9ucywgb2JqZWN0TWFwKTtcblx0Y29uc3QgdG9SZXNvbHZlOiBSZXNvbHZlYWJsZVtdID0gW107XG5cdGNvbnN0IHVucmVzb2x2ZWRBbm5vdGF0aW9uczogQW5ub3RhdGlvbkxpc3RbXSA9IFtdO1xuXG5cdE9iamVjdC5rZXlzKHBhcnNlck91dHB1dC5zY2hlbWEuYW5ub3RhdGlvbnMpLmZvckVhY2goYW5ub3RhdGlvblNvdXJjZSA9PiB7XG5cdFx0cGFyc2VyT3V0cHV0LnNjaGVtYS5hbm5vdGF0aW9uc1thbm5vdGF0aW9uU291cmNlXS5mb3JFYWNoKGFubm90YXRpb25MaXN0ID0+IHtcblx0XHRcdGxldCBjdXJyZW50VGFyZ2V0TmFtZSA9IHVuYWxpYXMocGFyc2VyT3V0cHV0LnJlZmVyZW5jZXMsIGFubm90YXRpb25MaXN0LnRhcmdldCkgYXMgc3RyaW5nO1xuXHRcdFx0Y29uc3Qgb2JqZWN0TWFwRWxlbWVudCA9IG9iamVjdE1hcFtjdXJyZW50VGFyZ2V0TmFtZV07XG5cdFx0XHRpZiAoIW9iamVjdE1hcEVsZW1lbnQpIHtcblx0XHRcdFx0aWYgKGN1cnJlbnRUYXJnZXROYW1lICYmIGN1cnJlbnRUYXJnZXROYW1lLmluZGV4T2YoXCJAXCIpICE9PSAtMSkge1xuXHRcdFx0XHRcdChhbm5vdGF0aW9uTGlzdCBhcyBhbnkpLl9fc291cmNlID0gYW5ub3RhdGlvblNvdXJjZTtcblx0XHRcdFx0XHR1bnJlc29sdmVkQW5ub3RhdGlvbnMucHVzaChhbm5vdGF0aW9uTGlzdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdE1hcEVsZW1lbnQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0bGV0IGFsbFRhcmdldHMgPSBbb2JqZWN0TWFwRWxlbWVudF07XG5cdFx0XHRcdGxldCBiT3ZlcnJpZGVFeGlzdGluZyA9IHRydWU7XG5cdFx0XHRcdGlmIChvYmplY3RNYXBFbGVtZW50Ll90eXBlID09PSBcIlVuYm91bmRHZW5lcmljQWN0aW9uXCIpIHtcblx0XHRcdFx0XHRhbGxUYXJnZXRzID0gb2JqZWN0TWFwRWxlbWVudC5hY3Rpb25zO1xuXHRcdFx0XHRcdGJPdmVycmlkZUV4aXN0aW5nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0YWxsVGFyZ2V0cy5mb3JFYWNoKGN1cnJlbnRUYXJnZXQgPT4ge1xuXHRcdFx0XHRcdGlmIChjdXJyZW50VGFyZ2V0TmFtZSAhPT0gY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXROYW1lID0gY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICghY3VycmVudFRhcmdldC5hbm5vdGF0aW9ucykge1xuXHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdC5hbm5vdGF0aW9ucy5mb3JFYWNoKGFubm90YXRpb24gPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgW3ZvY0FsaWFzLCB2b2NUZXJtXSA9IHNwbGl0VGVybShkZWZhdWx0UmVmZXJlbmNlcywgYW5ub3RhdGlvbi50ZXJtKTtcblx0XHRcdFx0XHRcdGlmICghY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc10pIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc10gPSB7fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICghY3VycmVudFRhcmdldC5hbm5vdGF0aW9ucy5fYW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9ucy5fYW5ub3RhdGlvbnMgPSB7fTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3Qgdm9jVGVybVdpdGhRdWFsaWZpZXIgPSBgJHt2b2NUZXJtfSR7XG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24ucXVhbGlmaWVyID8gYCMke2Fubm90YXRpb24ucXVhbGlmaWVyfWAgOiBcIlwiXG5cdFx0XHRcdFx0XHR9YDtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0IWJPdmVycmlkZUV4aXN0aW5nICYmXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnM/Llt2b2NBbGlhc10/Llt2b2NUZXJtV2l0aFF1YWxpZmllcl0gIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSA9IGNvbnZlcnRBbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uIGFzIEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdHBhcnNlck91dHB1dCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRcdFx0XHR0b1Jlc29sdmUsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25Tb3VyY2UsXG5cdFx0XHRcdFx0XHRcdHVucmVzb2x2ZWRBbm5vdGF0aW9uc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZW9mIGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdID0gbmV3IFN0cmluZyhcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdID0gbmV3IEJvb2xlYW4oXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl1cblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0gIT09IG51bGwgJiZcblx0XHRcdFx0XHRcdFx0dHlwZW9mIGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSA9PT0gXCJvYmplY3RcIlxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXS50ZXJtID0gdW5hbGlhcyhcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0UmVmZXJlbmNlcyxcblx0XHRcdFx0XHRcdFx0XHRgJHt2b2NBbGlhc30uJHt2b2NUZXJtfWBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdLnF1YWxpZmllciA9IGFubm90YXRpb24ucXVhbGlmaWVyO1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0uX19zb3VyY2UgPSBhbm5vdGF0aW9uU291cmNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblRhcmdldCA9IGAke2N1cnJlbnRUYXJnZXROYW1lfUAke3VuYWxpYXMoXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRSZWZlcmVuY2VzLFxuXHRcdFx0XHRcdFx0XHR2b2NBbGlhcyArIFwiLlwiICsgdm9jVGVybVdpdGhRdWFsaWZpZXJcblx0XHRcdFx0XHRcdCl9YDtcblx0XHRcdFx0XHRcdGlmIChhbm5vdGF0aW9uLmFubm90YXRpb25zICYmIEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbi5hbm5vdGF0aW9ucykpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3ViQW5ub3RhdGlvbkxpc3QgPSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0OiBhbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25zOiBhbm5vdGF0aW9uLmFubm90YXRpb25zLFxuXHRcdFx0XHRcdFx0XHRcdF9fc291cmNlOiBhbm5vdGF0aW9uU291cmNlXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdHVucmVzb2x2ZWRBbm5vdGF0aW9ucy5wdXNoKHN1YkFubm90YXRpb25MaXN0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24uYW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0XHRcdFx0IWN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXS5hbm5vdGF0aW9uc1xuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXS5hbm5vdGF0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbi5hbm5vdGF0aW9ucztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnMuX2Fubm90YXRpb25zW2Ake3ZvY0FsaWFzfS4ke3ZvY1Rlcm1XaXRoUXVhbGlmaWVyfWBdID1cblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdO1xuXHRcdFx0XHRcdFx0b2JqZWN0TWFwW2Fubm90YXRpb25UYXJnZXRdID0gY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cdGNvbnN0IGV4dHJhVW5yZXNvbHZlZEFubm90YXRpb25zOiBBbm5vdGF0aW9uTGlzdFtdID0gW107XG5cdHVucmVzb2x2ZWRBbm5vdGF0aW9ucy5mb3JFYWNoKGFubm90YXRpb25MaXN0ID0+IHtcblx0XHRjb25zdCBjdXJyZW50VGFyZ2V0TmFtZSA9IHVuYWxpYXMocGFyc2VyT3V0cHV0LnJlZmVyZW5jZXMsIGFubm90YXRpb25MaXN0LnRhcmdldCkgYXMgc3RyaW5nO1xuXHRcdGxldCBbYmFzZU9iaiwgYW5ub3RhdGlvblBhcnRdID0gY3VycmVudFRhcmdldE5hbWUuc3BsaXQoXCJAXCIpO1xuXHRcdGNvbnN0IHRhcmdldFNwbGl0ID0gYW5ub3RhdGlvblBhcnQuc3BsaXQoXCIvXCIpO1xuXHRcdGJhc2VPYmogPSBiYXNlT2JqICsgXCJAXCIgKyB0YXJnZXRTcGxpdFswXTtcblx0XHRjb25zdCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0U3BsaXQuc2xpY2UoMSkucmVkdWNlKChjdXJyZW50T2JqLCBwYXRoKSA9PiB7XG5cdFx0XHRpZiAoIWN1cnJlbnRPYmopIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY3VycmVudE9ialtwYXRoXTtcblx0XHR9LCBvYmplY3RNYXBbYmFzZU9ial0pO1xuXHRcdGlmICghY3VycmVudFRhcmdldCkge1xuXHRcdFx0QU5OT1RBVElPTl9FUlJPUlMucHVzaCh7XG5cdFx0XHRcdG1lc3NhZ2U6IFwiVGhlIGZvbGxvd2luZyBhbm5vdGF0aW9uIHRhcmdldCB3YXMgbm90IGZvdW5kIG9uIHRoZSBzZXJ2aWNlIFwiICsgY3VycmVudFRhcmdldE5hbWVcblx0XHRcdH0pO1xuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJNaXNzaW5nIHRhcmdldCBhZ2FpbiBcIiArIGN1cnJlbnRUYXJnZXROYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50VGFyZ2V0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0YW5ub3RhdGlvbkxpc3QuYW5ub3RhdGlvbnMuZm9yRWFjaChhbm5vdGF0aW9uID0+IHtcblx0XHRcdFx0Y29uc3QgW3ZvY0FsaWFzLCB2b2NUZXJtXSA9IHNwbGl0VGVybShkZWZhdWx0UmVmZXJlbmNlcywgYW5ub3RhdGlvbi50ZXJtKTtcblx0XHRcdFx0aWYgKCFjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXSkge1xuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zLl9hbm5vdGF0aW9ucykge1xuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnMuX2Fubm90YXRpb25zID0ge307XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB2b2NUZXJtV2l0aFF1YWxpZmllciA9IGAke3ZvY1Rlcm19JHthbm5vdGF0aW9uLnF1YWxpZmllciA/IGAjJHthbm5vdGF0aW9uLnF1YWxpZmllcn1gIDogXCJcIn1gO1xuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0gPSBjb252ZXJ0QW5ub3RhdGlvbihcblx0XHRcdFx0XHRhbm5vdGF0aW9uIGFzIEFubm90YXRpb24sXG5cdFx0XHRcdFx0cGFyc2VyT3V0cHV0LFxuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQsXG5cdFx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRcdHRvUmVzb2x2ZSxcblx0XHRcdFx0XHQoYW5ub3RhdGlvbkxpc3QgYXMgYW55KS5fX3NvdXJjZSxcblx0XHRcdFx0XHRleHRyYVVucmVzb2x2ZWRBbm5vdGF0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdICE9PSBudWxsICYmXG5cdFx0XHRcdFx0dHlwZW9mIGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSA9PT0gXCJvYmplY3RcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0udGVybSA9IHVuYWxpYXMoXG5cdFx0XHRcdFx0XHRkZWZhdWx0UmVmZXJlbmNlcyxcblx0XHRcdFx0XHRcdGAke3ZvY0FsaWFzfS4ke3ZvY1Rlcm19YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdLnF1YWxpZmllciA9IGFubm90YXRpb24ucXVhbGlmaWVyO1xuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW1xuXHRcdFx0XHRcdFx0dm9jVGVybVdpdGhRdWFsaWZpZXJcblx0XHRcdFx0XHRdLl9fc291cmNlID0gKGFubm90YXRpb25MaXN0IGFzIGFueSkuX19zb3VyY2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9ucy5fYW5ub3RhdGlvbnNbYCR7dm9jQWxpYXN9LiR7dm9jVGVybVdpdGhRdWFsaWZpZXJ9YF0gPVxuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXTtcblx0XHRcdFx0b2JqZWN0TWFwW2Ake2N1cnJlbnRUYXJnZXROYW1lfUAke3VuYWxpYXMoZGVmYXVsdFJlZmVyZW5jZXMsIHZvY0FsaWFzICsgXCIuXCIgKyB2b2NUZXJtV2l0aFF1YWxpZmllcil9YF0gPVxuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHRvUmVzb2x2ZS5mb3JFYWNoKHJlc29sdmVhYmxlID0+IHtcblx0XHRjb25zdCB0b1Jlc29sdmUgPSByZXNvbHZlYWJsZS50b1Jlc29sdmU7XG5cdFx0Y29uc3QgdGFyZ2V0U3RyID0gdG9SZXNvbHZlLiR0YXJnZXQ7XG5cdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBvYmplY3RNYXBbdGFyZ2V0U3RyXTtcblx0XHRjb25zdCB7IGFubm90YXRpb25zVGVybSwgYW5ub3RhdGlvblR5cGUgfSA9IHRvUmVzb2x2ZTtcblx0XHRkZWxldGUgdG9SZXNvbHZlLmFubm90YXRpb25UeXBlO1xuXHRcdGRlbGV0ZSB0b1Jlc29sdmUuYW5ub3RhdGlvbnNUZXJtO1xuXG5cdFx0aWYgKHJlc29sdmVhYmxlLmlubGluZSAmJiAhKHJlc29sdmVkVGFyZ2V0IGluc3RhbmNlb2YgU3RyaW5nKSkge1xuXHRcdFx0Ly8gaW5saW5lIHRoZSByZXNvbHZlZCB0YXJnZXRcblx0XHRcdGxldCBrZXlzOiBrZXlvZiB0eXBlb2YgdG9SZXNvbHZlO1xuXHRcdFx0Zm9yIChrZXlzIGluIHRvUmVzb2x2ZSkgZGVsZXRlIHRvUmVzb2x2ZVtrZXlzXTtcblxuXHRcdFx0T2JqZWN0LmFzc2lnbih0b1Jlc29sdmUsIHJlc29sdmVkVGFyZ2V0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gYXNzaWduIHRoZSByZXNvbHZlZCB0YXJnZXRcblx0XHRcdHRvUmVzb2x2ZS4kdGFyZ2V0ID0gcmVzb2x2ZWRUYXJnZXQ7XG5cdFx0fVxuXG5cdFx0aWYgKCFyZXNvbHZlZFRhcmdldCkge1xuXHRcdFx0dG9SZXNvbHZlLnRhcmdldFN0cmluZyA9IHRhcmdldFN0cjtcblx0XHRcdGlmIChhbm5vdGF0aW9uc1Rlcm0gJiYgYW5ub3RhdGlvblR5cGUpIHtcblx0XHRcdFx0Y29uc3Qgb0Vycm9yTXNnID0ge1xuXHRcdFx0XHRcdG1lc3NhZ2U6XG5cdFx0XHRcdFx0XHRcIlVuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246IFwiICtcblx0XHRcdFx0XHRcdHRhcmdldFN0ciArXG5cdFx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFx0XCJIaW50OiBDaGVjayBhbmQgY29ycmVjdCB0aGUgcGF0aCB2YWx1ZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIG1ldGFkYXRhIChhbm5vdGF0aW9uLnhtbCBmaWxlIG9yIENEUyBhbm5vdGF0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uKTogXFxuXFxuXCIgK1xuXHRcdFx0XHRcdFx0XCI8QW5ub3RhdGlvbiBUZXJtID0gXCIgK1xuXHRcdFx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtICtcblx0XHRcdFx0XHRcdFwiPlwiICtcblx0XHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFx0XCI8UmVjb3JkIFR5cGUgPSBcIiArXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uVHlwZSArXG5cdFx0XHRcdFx0XHRcIj5cIiArXG5cdFx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcdFwiPEFubm90YXRpb25QYXRoID0gXCIgK1xuXHRcdFx0XHRcdFx0dGFyZ2V0U3RyICtcblx0XHRcdFx0XHRcdFwiPlwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UodGFyZ2V0U3RyLCBvRXJyb3JNc2cpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSB0b1Jlc29sdmUudGVybTtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IHRvUmVzb2x2ZS5wYXRoO1xuXHRcdFx0XHRjb25zdCB0ZXJtSW5mbyA9IHRhcmdldFN0ciA/IHRhcmdldFN0ci5zcGxpdChcIi9cIilbMF0gOiB0YXJnZXRTdHI7XG5cdFx0XHRcdGNvbnN0IG9FcnJvck1zZyA9IHtcblx0XHRcdFx0XHRtZXNzYWdlOlxuXHRcdFx0XHRcdFx0XCJVbmFibGUgdG8gcmVzb2x2ZSB0aGUgcGF0aCBleHByZXNzaW9uOiBcIiArXG5cdFx0XHRcdFx0XHR0YXJnZXRTdHIgK1xuXHRcdFx0XHRcdFx0XCJcXG5cIiArXG5cdFx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcdFwiSGludDogQ2hlY2sgYW5kIGNvcnJlY3QgdGhlIHBhdGggdmFsdWVzIHVuZGVyIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluIHRoZSBtZXRhZGF0YSAoYW5ub3RhdGlvbi54bWwgZmlsZSBvciBDRFMgYW5ub3RhdGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbik6IFxcblxcblwiICtcblx0XHRcdFx0XHRcdFwiPEFubm90YXRpb24gVGVybSA9IFwiICtcblx0XHRcdFx0XHRcdHRlcm1JbmZvICtcblx0XHRcdFx0XHRcdFwiPlwiICtcblx0XHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFx0XCI8UHJvcGVydHlWYWx1ZSBQcm9wZXJ0eSA9IFwiICtcblx0XHRcdFx0XHRcdHByb3BlcnR5ICtcblx0XHRcdFx0XHRcdFwiICAgICAgICBQYXRoPSBcIiArXG5cdFx0XHRcdFx0XHRwYXRoICtcblx0XHRcdFx0XHRcdFwiPlwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UodGFyZ2V0U3RyLCBvRXJyb3JNc2cpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGZvciAodmFyIHByb3BlcnR5IGluIEFMTF9BTk5PVEFUSU9OX0VSUk9SUykge1xuXHRcdEFOTk9UQVRJT05fRVJST1JTLnB1c2goQUxMX0FOTk9UQVRJT05fRVJST1JTW3Byb3BlcnR5XVswXSk7XG5cdH1cblx0KHBhcnNlck91dHB1dCBhcyBhbnkpLmVudGl0eVNldHMgPSBwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eVNldHM7XG5cdGNvbnN0IGV4dHJhUmVmZXJlbmNlcyA9IHBhcnNlck91dHB1dC5yZWZlcmVuY2VzLmZpbHRlcihyZWZlcmVuY2UgPT4ge1xuXHRcdHJldHVybiBkZWZhdWx0UmVmZXJlbmNlcy5maW5kKGRlZmF1bHRSZWYgPT4gZGVmYXVsdFJlZi5uYW1lc3BhY2UgPT09IHJlZmVyZW5jZS5uYW1lc3BhY2UpID09PSB1bmRlZmluZWQ7XG5cdH0pO1xuXHRjb25zdCBjb252ZXJ0ZWRPdXRwdXQ6IFBhcnRpYWw8Q29udmVydGVyT3V0cHV0PiA9IHtcblx0XHR2ZXJzaW9uOiBwYXJzZXJPdXRwdXQudmVyc2lvbixcblx0XHRhbm5vdGF0aW9uczogcGFyc2VyT3V0cHV0LnNjaGVtYS5hbm5vdGF0aW9ucyxcblx0XHRuYW1lc3BhY2U6IHBhcnNlck91dHB1dC5zY2hlbWEubmFtZXNwYWNlLFxuXHRcdGVudGl0eUNvbnRhaW5lcjogcGFyc2VyT3V0cHV0LnNjaGVtYS5lbnRpdHlDb250YWluZXIgYXMgRW50aXR5Q29udGFpbmVyLFxuXHRcdGFjdGlvbnM6IHBhcnNlck91dHB1dC5zY2hlbWEuYWN0aW9ucyBhcyBBY3Rpb25bXSxcblx0XHRlbnRpdHlTZXRzOiBwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eVNldHMgYXMgRW50aXR5U2V0W10sXG5cdFx0c2luZ2xldG9uczogcGFyc2VyT3V0cHV0LnNjaGVtYS5zaW5nbGV0b25zIGFzIFNpbmdsZXRvbltdLFxuXHRcdGVudGl0eVR5cGVzOiBwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eVR5cGVzIGFzIEVudGl0eVR5cGVbXSxcblx0XHRjb21wbGV4VHlwZXM6IHBhcnNlck91dHB1dC5zY2hlbWEuY29tcGxleFR5cGVzIGFzIENvbXBsZXhUeXBlW10sXG5cdFx0dHlwZURlZmluaXRpb25zOiBwYXJzZXJPdXRwdXQuc2NoZW1hLnR5cGVEZWZpbml0aW9ucyBhcyBUeXBlRGVmaW5pdGlvbltdLFxuXHRcdHJlZmVyZW5jZXM6IGRlZmF1bHRSZWZlcmVuY2VzLmNvbmNhdChleHRyYVJlZmVyZW5jZXMpLFxuXHRcdGRpYWdub3N0aWNzOiBBTk5PVEFUSU9OX0VSUk9SUy5jb25jYXQoKVxuXHR9O1xuXHRjb252ZXJ0ZWRPdXRwdXQucmVzb2x2ZVBhdGggPSBjcmVhdGVHbG9iYWxSZXNvbHZlKGNvbnZlcnRlZE91dHB1dCBhcyBDb252ZXJ0ZXJPdXRwdXQsIG9iamVjdE1hcCk7XG5cdHJldHVybiBjb252ZXJ0ZWRPdXRwdXQgYXMgQ29udmVydGVyT3V0cHV0O1xufVxuXG5mdW5jdGlvbiByZXZlcnRWYWx1ZVRvR2VuZXJpY1R5cGUocmVmZXJlbmNlczogUmVmZXJlbmNlW10sIHZhbHVlOiBhbnkpOiBFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcblx0bGV0IHJlc3VsdDogRXhwcmVzc2lvbiB8IHVuZGVmaW5lZDtcblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGNvbnN0IHZhbHVlTWF0Y2hlcyA9IHZhbHVlLm1hdGNoKC8oXFx3KylcXC5cXHcrXFwvLiovKTtcblx0XHRpZiAodmFsdWVNYXRjaGVzICYmIHJlZmVyZW5jZXMuZmluZChyZWYgPT4gcmVmLmFsaWFzID09PSB2YWx1ZU1hdGNoZXNbMV0pKSB7XG5cdFx0XHRyZXN1bHQgPSB7XG5cdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRFbnVtTWVtYmVyOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0ge1xuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRTdHJpbmc6IHZhbHVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdHJlc3VsdCA9IHtcblx0XHRcdHR5cGU6IFwiQ29sbGVjdGlvblwiLFxuXHRcdFx0Q29sbGVjdGlvbjogdmFsdWUubWFwKGFubm8gPT4gcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub0dlbmVyaWNUeXBlKHJlZmVyZW5jZXMsIGFubm8pKSBhcyBhbnlbXVxuXHRcdH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdHJlc3VsdCA9IHtcblx0XHRcdHR5cGU6IFwiQm9vbFwiLFxuXHRcdFx0Qm9vbDogdmFsdWVcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuXHRcdGlmICh2YWx1ZS50b1N0cmluZygpID09PSB2YWx1ZS50b0ZpeGVkKCkpIHtcblx0XHRcdHJlc3VsdCA9IHtcblx0XHRcdFx0dHlwZTogXCJJbnRcIixcblx0XHRcdFx0SW50OiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0ge1xuXHRcdFx0XHR0eXBlOiBcIkRlY2ltYWxcIixcblx0XHRcdFx0RGVjaW1hbDogdmFsdWVcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZS5pc0RlY2ltYWwgJiYgdmFsdWUuaXNEZWNpbWFsKCkpIHtcblx0XHRyZXN1bHQgPSB7XG5cdFx0XHR0eXBlOiBcIkRlY2ltYWxcIixcblx0XHRcdERlY2ltYWw6IHZhbHVlLnZhbHVlT2YoKVxuXHRcdH07XG5cdH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gXCJQYXRoXCIpIHtcblx0XHRyZXN1bHQgPSB7XG5cdFx0XHR0eXBlOiBcIlBhdGhcIixcblx0XHRcdFBhdGg6IHZhbHVlLnBhdGhcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09IFwiQW5ub3RhdGlvblBhdGhcIikge1xuXHRcdHJlc3VsdCA9IHtcblx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdEFubm90YXRpb25QYXRoOiB2YWx1ZS52YWx1ZVxuXHRcdH07XG5cdH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gXCJBcHBseVwiKSB7XG5cdFx0cmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJBcHBseVwiLFxuXHRcdFx0QXBwbHk6IHZhbHVlLkFwcGx5XG5cdFx0fTtcblx0fSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSBcIk51bGxcIikge1xuXHRcdHJlc3VsdCA9IHtcblx0XHRcdHR5cGU6IFwiTnVsbFwiXG5cdFx0fTtcblx0fSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSBcIlByb3BlcnR5UGF0aFwiKSB7XG5cdFx0cmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJQcm9wZXJ0eVBhdGhcIixcblx0XHRcdFByb3BlcnR5UGF0aDogdmFsdWUudmFsdWVcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSB7XG5cdFx0cmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiB2YWx1ZS52YWx1ZVxuXHRcdH07XG5cdH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBcIiRUeXBlXCIpKSB7XG5cdFx0cmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJSZWNvcmRcIixcblx0XHRcdFJlY29yZDogcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub0dlbmVyaWNUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKSBhcyBBbm5vdGF0aW9uUmVjb3JkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvR2VuZXJpY1R5cGUoXG5cdHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLFxuXHRjb2xsZWN0aW9uSXRlbTogYW55XG4pOlxuXHR8IEFubm90YXRpb25SZWNvcmRcblx0fCBzdHJpbmdcblx0fCBQcm9wZXJ0eVBhdGhFeHByZXNzaW9uXG5cdHwgUGF0aEV4cHJlc3Npb25cblx0fCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoRXhwcmVzc2lvblxuXHR8IEFubm90YXRpb25QYXRoRXhwcmVzc2lvblxuXHR8IHVuZGVmaW5lZCB7XG5cdGlmICh0eXBlb2YgY29sbGVjdGlvbkl0ZW0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbkl0ZW07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGNvbGxlY3Rpb25JdGVtID09PSBcIm9iamVjdFwiKSB7XG5cdFx0aWYgKGNvbGxlY3Rpb25JdGVtLmhhc093blByb3BlcnR5KFwiJFR5cGVcIikpIHtcblx0XHRcdC8vIEFubm90YXRpb24gUmVjb3JkXG5cdFx0XHRjb25zdCBvdXRJdGVtOiBBbm5vdGF0aW9uUmVjb3JkID0ge1xuXHRcdFx0XHR0eXBlOiBjb2xsZWN0aW9uSXRlbS4kVHlwZSxcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXM6IFtdIGFzIGFueVtdXG5cdFx0XHR9O1xuXHRcdFx0Ly8gQ291bGQgdmFsaWRhdGUga2V5cyBhbmQgdHlwZSBiYXNlZCBvbiAkVHlwZVxuXHRcdFx0T2JqZWN0LmtleXMoY29sbGVjdGlvbkl0ZW0pLmZvckVhY2goY29sbGVjdGlvbktleSA9PiB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRjb2xsZWN0aW9uS2V5ICE9PSBcIiRUeXBlXCIgJiZcblx0XHRcdFx0XHRjb2xsZWN0aW9uS2V5ICE9PSBcInRlcm1cIiAmJlxuXHRcdFx0XHRcdGNvbGxlY3Rpb25LZXkgIT09IFwiX19zb3VyY2VcIiAmJlxuXHRcdFx0XHRcdGNvbGxlY3Rpb25LZXkgIT09IFwicXVhbGlmaWVyXCIgJiZcblx0XHRcdFx0XHRjb2xsZWN0aW9uS2V5ICE9PSBcIkFjdGlvblRhcmdldFwiICYmXG5cdFx0XHRcdFx0Y29sbGVjdGlvbktleSAhPT0gXCJmdWxseVF1YWxpZmllZE5hbWVcIiAmJlxuXHRcdFx0XHRcdGNvbGxlY3Rpb25LZXkgIT09IFwiYW5ub3RhdGlvbnNcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IGNvbGxlY3Rpb25JdGVtW2NvbGxlY3Rpb25LZXldO1xuXHRcdFx0XHRcdG91dEl0ZW0ucHJvcGVydHlWYWx1ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBjb2xsZWN0aW9uS2V5LFxuXHRcdFx0XHRcdFx0dmFsdWU6IHJldmVydFZhbHVlVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCB2YWx1ZSkgYXMgRXhwcmVzc2lvblxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbGxlY3Rpb25LZXkgPT09IFwiYW5ub3RhdGlvbnNcIikge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25zID0gY29sbGVjdGlvbkl0ZW1bY29sbGVjdGlvbktleV07XG5cdFx0XHRcdFx0b3V0SXRlbS5hbm5vdGF0aW9ucyA9IFtdO1xuXHRcdFx0XHRcdE9iamVjdC5rZXlzKGFubm90YXRpb25zKVxuXHRcdFx0XHRcdFx0LmZpbHRlcihrZXkgPT4ga2V5ICE9PSBcIl9hbm5vdGF0aW9uc1wiKVxuXHRcdFx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHtcblx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXMoYW5ub3RhdGlvbnNba2V5XSkuZm9yRWFjaCh0ZXJtID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXJzZWRBbm5vdGF0aW9uID0gcmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUocmVmZXJlbmNlcywgYW5ub3RhdGlvbnNba2V5XVt0ZXJtXSk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFwYXJzZWRBbm5vdGF0aW9uLnRlcm0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHVuYWxpYXNlZFRlcm0gPSB1bmFsaWFzKHJlZmVyZW5jZXMsIGAke2tleX0uJHt0ZXJtfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHVuYWxpYXNlZFRlcm0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcXVhbGlmaWVkU3BsaXQgPSB1bmFsaWFzZWRUZXJtLnNwbGl0KFwiI1wiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbi50ZXJtID0gcXVhbGlmaWVkU3BsaXRbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChxdWFsaWZpZWRTcGxpdC5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbi5xdWFsaWZpZXIgPSBxdWFsaWZpZWRTcGxpdFsxXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRvdXRJdGVtLmFubm90YXRpb25zPy5wdXNoKHBhcnNlZEFubm90YXRpb24pO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBvdXRJdGVtO1xuXHRcdH0gZWxzZSBpZiAoY29sbGVjdGlvbkl0ZW0udHlwZSA9PT0gXCJQcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogXCJQcm9wZXJ0eVBhdGhcIixcblx0XHRcdFx0UHJvcGVydHlQYXRoOiBjb2xsZWN0aW9uSXRlbS52YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKGNvbGxlY3Rpb25JdGVtLnR5cGUgPT09IFwiQW5ub3RhdGlvblBhdGhcIikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLFxuXHRcdFx0XHRBbm5vdGF0aW9uUGF0aDogY29sbGVjdGlvbkl0ZW0udmFsdWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChjb2xsZWN0aW9uSXRlbS50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGNvbGxlY3Rpb25JdGVtLnZhbHVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUocmVmZXJlbmNlczogUmVmZXJlbmNlW10sIGFubm90YXRpb246IEFubm90YXRpb25UZXJtPGFueT4pOiBFZG1Bbm5vdGF0aW9uIHtcblx0Y29uc3QgYmFzZUFubm90YXRpb246IEVkbUFubm90YXRpb24gPSB7XG5cdFx0dGVybTogYW5ub3RhdGlvbi50ZXJtLFxuXHRcdHF1YWxpZmllcjogYW5ub3RhdGlvbi5xdWFsaWZpZXJcblx0fTtcblx0aWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbikpIHtcblx0XHQvLyBDb2xsZWN0aW9uXG5cdFx0aWYgKGFubm90YXRpb24uaGFzT3duUHJvcGVydHkoXCJhbm5vdGF0aW9uc1wiKSkge1xuXHRcdFx0YmFzZUFubm90YXRpb24uYW5ub3RhdGlvbnMgPSBbXTtcblx0XHRcdGNvbnN0IGN1cnJlbnRBbm5vdGF0aW9ucyA9IChhbm5vdGF0aW9uIGFzIGFueSkuYW5ub3RhdGlvbnM7XG5cdFx0XHRPYmplY3Qua2V5cyhjdXJyZW50QW5ub3RhdGlvbnMpXG5cdFx0XHRcdC5maWx0ZXIoa2V5ID0+IGtleSAhPT0gXCJfYW5ub3RhdGlvbnNcIilcblx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHtcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhjdXJyZW50QW5ub3RhdGlvbnNba2V5XSkuZm9yRWFjaCh0ZXJtID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHBhcnNlZEFubm90YXRpb24gPSByZXZlcnRUZXJtVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBjdXJyZW50QW5ub3RhdGlvbnNba2V5XVt0ZXJtXSk7XG5cdFx0XHRcdFx0XHRpZiAoIXBhcnNlZEFubm90YXRpb24udGVybSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB1bmFsaWFzZWRUZXJtID0gdW5hbGlhcyhyZWZlcmVuY2VzLCBgJHtrZXl9LiR7dGVybX1gKTtcblx0XHRcdFx0XHRcdFx0aWYgKHVuYWxpYXNlZFRlcm0pIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBxdWFsaWZpZWRTcGxpdCA9IHVuYWxpYXNlZFRlcm0uc3BsaXQoXCIjXCIpO1xuXHRcdFx0XHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb24udGVybSA9IHF1YWxpZmllZFNwbGl0WzBdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChxdWFsaWZpZWRTcGxpdC5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uLnF1YWxpZmllciA9IHF1YWxpZmllZFNwbGl0WzFdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YmFzZUFubm90YXRpb24uYW5ub3RhdGlvbnM/LnB1c2gocGFyc2VkQW5ub3RhdGlvbik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uYmFzZUFubm90YXRpb24sXG5cdFx0XHRjb2xsZWN0aW9uOiBhbm5vdGF0aW9uLm1hcChhbm5vID0+IHJldmVydENvbGxlY3Rpb25JdGVtVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBhbm5vKSkgYXMgYW55W11cblx0XHR9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb24uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdHJldHVybiB7IC4uLmJhc2VBbm5vdGF0aW9uLCByZWNvcmQ6IHJldmVydENvbGxlY3Rpb25JdGVtVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uKSBhcyBhbnkgfTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4geyAuLi5iYXNlQW5ub3RhdGlvbiwgdmFsdWU6IHJldmVydFZhbHVlVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uKSB9O1xuXHR9XG59XG4iXX0=
|
|
2143
|
+
/******/
|
|
2144
|
+
})();
|
|
2145
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2Rpc3QvQW5ub3RhdGlvbkNvbnZlcnRlci5qcyJdLCJuYW1lcyI6WyJBbm5vdGF0aW9uQ29udmVydGVyIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIl9fdW51c2VkX3dlYnBhY2tfbW9kdWxlIiwiZXhwb3J0cyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiY29udmVydCIsInV0aWxzXzEiLCJQYXRoIiwicGF0aEV4cHJlc3Npb24iLCJ0YXJnZXROYW1lIiwiYW5ub3RhdGlvbnNUZXJtIiwidGVybSIsInBhdGgiLCJ0eXBlIiwiJHRhcmdldCIsImJ1aWxkT2JqZWN0TWFwIiwicmF3TWV0YWRhdGEiLCJfYSIsIm9iamVjdE1hcCIsInNjaGVtYSIsImVudGl0eUNvbnRhaW5lciIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eVNldHMiLCJmb3JFYWNoIiwiZW50aXR5U2V0IiwiYWN0aW9ucyIsImFjdGlvbiIsImlzQm91bmQiLCJ1bkJvdW5kQWN0aW9uTmFtZSIsInNwbGl0IiwiX3R5cGUiLCJwdXNoIiwiYWN0aW9uU3BsaXQiLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyIiwiY29tcGxleFR5cGVzIiwiY29tcGxleFR5cGUiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJ0eXBlRGVmaW5pdGlvbnMiLCJ0eXBlRGVmaW5pdGlvbiIsImVudGl0eVR5cGVzIiwiZW50aXR5VHlwZSIsImFubm90YXRpb25zIiwiZW50aXR5UHJvcGVydGllcyIsImNvbXBsZXhUeXBlRGVmaW5pdGlvbiIsImlzQ29tcGxleFR5cGVEZWZpbml0aW9uIiwiY29tcGxleFR5cGVQcm9wIiwiY29tcGxleFR5cGVQcm9wVGFyZ2V0IiwiYXNzaWduIiwibmFtZSIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydHkiLCJrZXlzIiwiYW5ub3RhdGlvblNvdXJjZSIsImFubm90YXRpb25MaXN0IiwiY3VycmVudFRhcmdldE5hbWUiLCJ1bmFsaWFzIiwicmVmZXJlbmNlcyIsInRhcmdldCIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uRlFOIiwicXVhbGlmaWVyIiwiY29tYmluZVBhdGgiLCJjdXJyZW50VGFyZ2V0Iiwic3RhcnRzV2l0aCIsImRlZmF1bHRSZWZlcmVuY2VzIiwiQUxMX0FOTk9UQVRJT05fRVJST1JTIiwiQU5OT1RBVElPTl9FUlJPUlMiLCJhZGRBbm5vdGF0aW9uRXJyb3JNZXNzYWdlIiwib0Vycm9yTXNnIiwiX3Jlc29sdmVUYXJnZXQiLCJwYXRoT25seSIsImluY2x1ZGVWaXNpdGVkT2JqZWN0cyIsInVuZGVmaW5lZCIsImFWaXNpdGVkT2JqZWN0cyIsInBhdGhTcGxpdCIsInRhcmdldFBhdGhTcGxpdCIsInBhdGhQYXJ0IiwiaW5kZXhPZiIsInNwbGl0dGVkUGF0aCIsImFubm90YXRpb25QYXRoIiwiY3VycmVudFBhdGgiLCJjdXJyZW50Q29udGV4dCIsInJlZHVjZSIsImN1cnJlbnRWYWx1ZSIsImxlbmd0aCIsInRhcmdldFR5cGUiLCJlbnRpdHlUeXBlTmFtZSIsInRhcmdldFR5cGVOYW1lIiwic291cmNlVHlwZSIsImlzRW50aXR5U2V0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJsYXN0SWR4IiwiY29udGV4dFRvUmVzb2x2ZSIsInN1YlRhcmdldCIsInZpc2l0ZWRPYmplY3RzIiwidmlzaXRlZFN1Yk9iamVjdCIsImNvbmNhdCIsInJldmVyc2UiLCJmaW5kIiwib2JqIiwiaW50ZXJtZWRpYXRlVGFyZ2V0IiwiaGFzT3duUHJvcGVydHkiLCJhbm5vdGF0aW9uVHlwZSIsImluZmVyVHlwZUZyb21UZXJtIiwibWVzc2FnZSIsImlzQW5ub3RhdGlvblBhdGgiLCJwYXRoU3RyIiwicGFyc2VWYWx1ZSIsInByb3BlcnR5VmFsdWUiLCJ2YWx1ZUZRTiIsImNvbnRleHQiLCJTdHJpbmciLCJJbnQiLCJCb29sIiwiRGVjaW1hbCIsIkRhdGUiLCJhbGlhcyIsIkVudW1NZW1iZXIiLCJQcm9wZXJ0eVBhdGgiLCJjdXJyZW50VGVybSIsIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJhbm5vdGF0aW9uVGFyZ2V0IiwiQW5ub3RhdGlvblBhdGgiLCJ1bnJlc29sdmVkQW5ub3RhdGlvbnMiLCJpbmxpbmUiLCJ0b1Jlc29sdmUiLCJwYXJzZVJlY29yZCIsIlJlY29yZCIsInBhcnNlQ29sbGVjdGlvbiIsIkNvbGxlY3Rpb24iLCJUZXJtVG9UeXBlcyIsImlzRXJyb3IiLCJpc0RhdGFGaWVsZFdpdGhGb3JBY3Rpb24iLCJhbm5vdGF0aW9uQ29udGVudCIsImFubm90YXRpb25UZXJtIiwiJFR5cGUiLCJwYXJzZVJlY29yZFR5cGUiLCJyZWNvcmREZWZpbml0aW9uIiwiY3VycmVudEZRTiIsIkFycmF5IiwiaXNBcnJheSIsInN1YkFubm90YXRpb25MaXN0IiwiX19zb3VyY2UiLCJjdXJyZW50U291cmNlIiwiYWRkaXRpb25hbEFubm90YXRpb25zIiwicHJvcGVydHlWYWx1ZXMiLCJBY3Rpb25UYXJnZXQiLCJBY3Rpb24iLCJnZXRPckluZmVyQ29sbGVjdGlvblR5cGUiLCJjb2xsZWN0aW9uRGVmaW5pdGlvbiIsImZpcnN0Q29sSXRlbSIsInBhcmVudEZRTiIsImNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSIsIm1hcCIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5SWR4IiwicGF0aFZhbHVlIiwiYW5ub3RhdGlvbklkeCIsImFubm90YXRpb25Db2xsZWN0aW9uRWxlbWVudCIsIm5hdlByb3BlcnR5UGF0aCIsIm5hdlByb3BJZHgiLCJyZWNvcmRJZHgiLCJpZlZhbHVlIiwic3RyaW5nVmFsdWUiLCJFcnJvciIsImNvbnZlcnRBbm5vdGF0aW9uIiwicmVjb3JkIiwiY29sbGVjdGlvbiIsImNyZWF0ZVJlc29sdmVQYXRoRm4iLCJyZWxhdGl2ZVBhdGgiLCJyZXNvbHZlVjJOYXZpZ2F0aW9uUHJvcGVydHkiLCJuYXZQcm9wIiwiYXNzb2NpYXRpb25zIiwib3V0TmF2UHJvcCIsInRhcmdldEFzc29jaWF0aW9uIiwiYXNzb2NpYXRpb24iLCJyZWxhdGlvbnNoaXAiLCJhc3NvY2lhdGlvbkVuZCIsImVuZCIsInJvbGUiLCJ0b1JvbGUiLCJpc0NvbGxlY3Rpb24iLCJtdWx0aXBsaWNpdHkiLCJyZXNvbHZlVjROYXZpZ2F0aW9uUHJvcGVydHkiLCJwYXJ0bmVyIiwiY29udGFpbnNUYXJnZXQiLCJyZWZlcmVudGlhbENvbnN0cmFpbnQiLCJpc1Y0TmF2aWdhdGlvblByb3BlcnR5IiwicHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwicmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwicmVzb2x2ZVBhdGgiLCJsaW5rQWN0aW9uc1RvRW50aXR5VHlwZSIsIm5hbWVzcGFjZSIsInNvdXJjZUVudGl0eVR5cGUiLCJyZXR1cm5FbnRpdHlUeXBlIiwicmV0dXJuVHlwZSIsImxpbmtFbnRpdHlUeXBlVG9FbnRpdHlTZXQiLCJrZXlQcm9wIiwiaXNLZXkiLCJsaW5rRW50aXR5VHlwZVRvU2luZ2xldG9uIiwic2luZ2xldG9ucyIsInNpbmdsZXRvbiIsImxpbmtQcm9wZXJ0aWVzVG9Db21wbGV4VHlwZXMiLCJsaW5rIiwiY29tcGxleFR5cGVOYW1lIiwic0Vycm9yIiwicHJlcGFyZUNvbXBsZXhUeXBlcyIsInNwbGl0VGVybSIsInRlcm1WYWx1ZSIsImFsaWFzZWRUZXJtIiwibGFzdERvdCIsInRlcm1BbGlhcyIsImNyZWF0ZUdsb2JhbFJlc29sdmUiLCJjb252ZXJ0ZWRPdXRwdXQiLCJzUGF0aCIsImFQYXRoU3BsaXQiLCJzaGlmdCIsImVudGl0eVNldE5hbWUiLCJldCIsIm9iamVjdFBhdGgiLCJ0YXJnZXRSZXNvbHV0aW9uIiwiam9pbiIsImVuc3VyZUFubm90YXRpb25zIiwidm9jQWxpYXMiLCJfYW5ub3RhdGlvbnMiLCJwcm9jZXNzQW5ub3RhdGlvbnMiLCJiT3ZlcnJpZGVFeGlzdGluZyIsIl9iIiwidm9jVGVybSIsInZvY1Rlcm1XaXRoUXVhbGlmaWVyIiwiQm9vbGVhbiIsInByb2Nlc3NVbnJlc29sdmVkVGFyZ2V0cyIsInVucmVzb2x2ZWRUYXJnZXRzIiwicmVzb2x2YWJsZSIsInRhcmdldFRvUmVzb2x2ZSIsInRhcmdldFN0ciIsInJlc29sdmVkVGFyZ2V0IiwidGFyZ2V0U3RyaW5nIiwidGVybUluZm8iLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbkxpc3RQZXJUYXJnZXQiLCJmaW5kSW5kZXgiLCJyZWZlcmVuY2VBbm5vdGF0aW9uIiwic3BsaWNlIiwib2JqZWN0TWFwRWxlbWVudCIsImFsbFRhcmdldHMiLCJleHRyYVVucmVzb2x2ZWRBbm5vdGF0aW9ucyIsImJhc2VPYmoiLCJhbm5vdGF0aW9uUGFydCIsInRhcmdldFNwbGl0Iiwic2xpY2UiLCJjdXJyZW50T2JqIiwiZXh0cmFSZWZlcmVuY2VzIiwiZmlsdGVyIiwicmVmZXJlbmNlIiwiZGVmYXVsdFJlZiIsInZlcnNpb24iLCJkaWFnbm9zdGljcyIsIl9fY3JlYXRlQmluZGluZyIsImNyZWF0ZSIsIm8iLCJtIiwiayIsImsyIiwiZGVzYyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9fZXNNb2R1bGUiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJnZXQiLCJfX2V4cG9ydFN0YXIiLCJwIiwicHJvdG90eXBlIiwiY2FsbCIsInVyaSIsInVuYWxpYXNlZFZhbHVlIiwicmV2ZXJzZVJlZmVyZW5jZU1hcCIsInJlZiIsImxhc3REb3RJbmRleCIsInByZUFsaWFzIiwicG9zdEFsaWFzIiwiYWxpYXNlZFZhbHVlIiwicmVmZXJlbmNlTWFwIiwiaXNEZWNpbWFsIiwidmFsdWVPZiIsInRvU3RyaW5nIiwicmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUiLCJyZXZlcnRPYmplY3RUb1Jhd1R5cGUiLCJyZXN1bHQiLCJhbm5vIiwicmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUiLCJpc1N0cmluZyIsInZhbHVlTWF0Y2hlcyIsIkFwcGx5IiwicmV2ZXJ0VmFsdWVUb1Jhd1R5cGUiLCJ2YWx1ZUNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJ0b0ZpeGVkIiwicmVzdHJpY3RlZEtleXMiLCJyZXZlcnRBbm5vdGF0aW9uc1RvUmF3VHlwZSIsImN1cnJlbnRBbm5vdGF0aW9ucyIsInRhcmdldEFubm90YXRpb25zIiwia2V5IiwicGFyc2VkQW5ub3RhdGlvbiIsInVuYWxpYXNlZFRlcm0iLCJxdWFsaWZpZWRTcGxpdCIsImNvbGxlY3Rpb25JdGVtIiwib3V0SXRlbSIsImNvbGxlY3Rpb25LZXkiLCJiYXNlQW5ub3RhdGlvbiIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwibW9kdWxlIiwiX193ZWJwYWNrX2V4cG9ydHNfXyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZBLElBQUlBLG1CQUFKO0FBQ0E7O0FBQVMsQ0FBQyxZQUFXO0FBQUU7O0FBQ3ZCO0FBQVU7QUFDVjs7QUFBVSxNQUFJQyxtQkFBbUIsR0FBSTtBQUVyQztBQUFNO0FBQ047QUFBTyxjQUFTQyx1QkFBVCxFQUFrQ0MsT0FBbEMsRUFBMkNDLG1CQUEzQyxFQUFnRTtBQUd2RUMsTUFBQUEsTUFBTSxDQUFDQyxjQUFQLENBQXNCSCxPQUF0QixFQUErQixZQUEvQixFQUE4QztBQUFFSSxRQUFBQSxLQUFLLEVBQUU7QUFBVCxPQUE5QztBQUNBSixNQUFBQSxPQUFPLENBQUNLLE9BQVIsR0FBa0IsS0FBSyxDQUF2Qjs7QUFDQSxVQUFNQyxPQUFPLEdBQUdMLG1CQUFtQixDQUFDLEdBQUQsQ0FBbkM7QUFDQTtBQUNBO0FBQ0E7OztBQVJ1RSxVQVNqRU0sSUFUaUU7QUFVbkU7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0ksb0JBQVlDLGNBQVosRUFBNEJDLFVBQTVCLEVBQXdDQyxlQUF4QyxFQUF5REMsSUFBekQsRUFBK0Q7QUFDM0QsYUFBS0MsSUFBTCxHQUFZSixjQUFjLENBQUNELElBQTNCO0FBQ0EsYUFBS00sSUFBTCxHQUFZLE1BQVo7QUFDQSxhQUFLQyxPQUFMLEdBQWVM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QVUsTUFBSXdCLHdCQUF3QixHQUFHLEVBQS9CO0FBQ1Y7O0FBQ0E7QUFBVTs7QUFDVjs7QUFBVSxXQUFTelQsbUJBQVQsQ0FBNkIwVCxRQUE3QixFQUF1QztBQUNqRDtBQUFXOztBQUNYO0FBQVcsUUFBSUMsWUFBWSxHQUFHRix3QkFBd0IsQ0FBQ0MsUUFBRCxDQUEzQztBQUNYOztBQUFXLFFBQUlDLFlBQVksS0FBS2xQLFNBQXJCLEVBQWdDO0FBQzNDO0FBQVksYUFBT2tQLFlBQVksQ0FBQzVULE9BQXBCO0FBQ1o7QUFBWTtBQUNaO0FBQVc7O0FBQ1g7OztBQUFXLFFBQUk2VCxNQUFNLEdBQUdILHdCQUF3QixDQUFDQyxRQUFELENBQXhCLEdBQXFDO0FBQzdEO0FBQVk7O0FBQ1o7QUFBWTs7QUFDWjtBQUFZM1QsTUFBQUEsT0FBTyxFQUFFO0FBQ3JCOztBQUo2RCxLQUFsRDtBQUtYOztBQUNBO0FBQVc7O0FBQ1g7O0FBQVdGLElBQUFBLG1CQUFtQixDQUFDNlQsUUFBRCxDQUFuQixDQUE4QnRDLElBQTlCLENBQW1Dd0MsTUFBTSxDQUFDN1QsT0FBMUMsRUFBbUQ2VCxNQUFuRCxFQUEyREEsTUFBTSxDQUFDN1QsT0FBbEUsRUFBMkVDLG1CQUEzRTtBQUNYOztBQUNBO0FBQVc7O0FBQ1g7OztBQUFXLFdBQU80VCxNQUFNLENBQUM3VCxPQUFkO0FBQ1g7QUFBVztBQUNYOztBQUNBOztBQUNBOztBQUNBO0FBQVU7O0FBQ1Y7QUFBVTs7QUFDVjtBQUFVOztBQUNWOzs7QUFBVSxNQUFJOFQsbUJBQW1CLEdBQUc3VCxtQkFBbUIsQ0FBQyxHQUFELENBQTdDO0FBQ1Y7OztBQUFVSixFQUFBQSxtQkFBbUIsR0FBR2lVLG1CQUF0QjtBQUNWOztBQUNBO0FBQVUsQ0F0ekREIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgQW5ub3RhdGlvbkNvbnZlcnRlcjtcbi8qKioqKiovIChmdW5jdGlvbigpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHRcInVzZSBzdHJpY3RcIjtcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xuXG4vKioqLyA1ODI6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7IHZhbHVlOiB0cnVlIH0pKTtcbmV4cG9ydHMuY29udmVydCA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgwMCk7XG4vKipcbiAqXG4gKi9cbmNsYXNzIFBhdGgge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBwYXRoRXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB0YXJnZXROYW1lXG4gICAgICogQHBhcmFtIGFubm90YXRpb25zVGVybVxuICAgICAqIEBwYXJhbSB0ZXJtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGF0aEV4cHJlc3Npb24sIHRhcmdldE5hbWUsIGFubm90YXRpb25zVGVybSwgdGVybSkge1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoRXhwcmVzc2lvbi5QYXRoO1xuICAgICAgICB0aGlzLnR5cGUgPSAnUGF0aCc7XG4gICAgICAgIHRoaXMuJHRhcmdldCA9IHRhcmdldE5hbWU7XG4gICAgICAgIHRoaXMudGVybSA9IHRlcm07XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbnNUZXJtID0gYW5ub3RhdGlvbnNUZXJtO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIE1hcCBiYXNlZCBvbiB0aGUgZnVsbHlRdWFsaWZpZWROYW1lIG9mIGVhY2ggb2JqZWN0IHBhcnQgb2YgdGhlIG1ldGFkYXRhLlxuICpcbiAqIEBwYXJhbSByYXdNZXRhZGF0YSB0aGUgcmF3TWV0YWRhdGEgd2UncmUgd29ya2luZyBhZ2FpbnN0XG4gKiBAcmV0dXJucyB0aGUgb2JqZWN0bWFwIGZvciBlYXN5IGFjY2VzcyB0byB0aGUgZGlmZmVyZW50IG9iamVjdCBvZiB0aGUgbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gYnVpbGRPYmplY3RNYXAocmF3TWV0YWRhdGEpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb2JqZWN0TWFwID0ge307XG4gICAgaWYgKChfYSA9IHJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlDb250YWluZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgb2JqZWN0TWFwW3Jhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlDb250YWluZXIuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlDb250YWluZXI7XG4gICAgfVxuICAgIHJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlTZXRzLmZvckVhY2goKGVudGl0eVNldCkgPT4ge1xuICAgICAgICBvYmplY3RNYXBbZW50aXR5U2V0LmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBlbnRpdHlTZXQ7XG4gICAgfSk7XG4gICAgcmF3TWV0YWRhdGEuc2NoZW1hLmFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG4gICAgICAgIG9iamVjdE1hcFthY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lXSA9IGFjdGlvbjtcbiAgICAgICAgaWYgKGFjdGlvbi5pc0JvdW5kKSB7XG4gICAgICAgICAgICBjb25zdCB1bkJvdW5kQWN0aW9uTmFtZSA9IGFjdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoJygnKVswXTtcbiAgICAgICAgICAgIGlmICghb2JqZWN0TWFwW3VuQm91bmRBY3Rpb25OYW1lXSkge1xuICAgICAgICAgICAgICAgIG9iamVjdE1hcFt1bkJvdW5kQWN0aW9uTmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIF90eXBlOiAnVW5ib3VuZEdlbmVyaWNBY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmplY3RNYXBbdW5Cb3VuZEFjdGlvbk5hbWVdLmFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uU3BsaXQgPSBhY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KCcoJyk7XG4gICAgICAgICAgICBvYmplY3RNYXBbYCR7YWN0aW9uU3BsaXRbMV0uc3BsaXQoJyknKVswXX0vJHthY3Rpb25TcGxpdFswXX1gXSA9IGFjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBhY3Rpb24ucGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgIG9iamVjdE1hcFtwYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHBhcmFtZXRlcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmF3TWV0YWRhdGEuc2NoZW1hLmNvbXBsZXhUeXBlcy5mb3JFYWNoKChjb21wbGV4VHlwZSkgPT4ge1xuICAgICAgICBvYmplY3RNYXBbY29tcGxleFR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXSA9IGNvbXBsZXhUeXBlO1xuICAgICAgICBjb21wbGV4VHlwZS5wcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICBvYmplY3RNYXBbcHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHByb3BlcnR5O1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByYXdNZXRhZGF0YS5zY2hlbWEudHlwZURlZmluaXRpb25zLmZvckVhY2goKHR5cGVEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgIG9iamVjdE1hcFt0eXBlRGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWVdID0gdHlwZURlZmluaXRpb247XG4gICAgfSk7XG4gICAgcmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eVR5cGVzLmZvckVhY2goKGVudGl0eVR5cGUpID0+IHtcbiAgICAgICAgZW50aXR5VHlwZS5hbm5vdGF0aW9ucyA9IHt9OyAvLyAnYW5ub3RhdGlvbnMnIHByb3BlcnR5IGlzIG1hbmRhdG9yeVxuICAgICAgICBvYmplY3RNYXBbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdID0gZW50aXR5VHlwZTtcbiAgICAgICAgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICBvYmplY3RNYXBbcHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHByb3BlcnR5O1xuICAgICAgICAgICAgLy8gSGFuZGxlIGNvbXBsZXggdHlwZXNcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhUeXBlRGVmaW5pdGlvbiA9IG9iamVjdE1hcFtwcm9wZXJ0eS50eXBlXTtcbiAgICAgICAgICAgIGlmICgoMCwgdXRpbHNfMS5pc0NvbXBsZXhUeXBlRGVmaW5pdGlvbikoY29tcGxleFR5cGVEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbXBsZXhUeXBlRGVmaW5pdGlvbi5wcm9wZXJ0aWVzLmZvckVhY2goKGNvbXBsZXhUeXBlUHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV4VHlwZVByb3BUYXJnZXQgPSBPYmplY3QuYXNzaWduKGNvbXBsZXhUeXBlUHJvcCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3R5cGU6ICdQcm9wZXJ0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSArICcvJyArIGNvbXBsZXhUeXBlUHJvcC5uYW1lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBvYmplY3RNYXBbY29tcGxleFR5cGVQcm9wVGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBjb21wbGV4VHlwZVByb3BUYXJnZXQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goKG5hdlByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICBvYmplY3RNYXBbbmF2UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSA9IG5hdlByb3BlcnR5O1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBPYmplY3Qua2V5cyhyYXdNZXRhZGF0YS5zY2hlbWEuYW5ub3RhdGlvbnMpLmZvckVhY2goKGFubm90YXRpb25Tb3VyY2UpID0+IHtcbiAgICAgICAgcmF3TWV0YWRhdGEuc2NoZW1hLmFubm90YXRpb25zW2Fubm90YXRpb25Tb3VyY2VdLmZvckVhY2goKGFubm90YXRpb25MaXN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0TmFtZSA9ICgwLCB1dGlsc18xLnVuYWxpYXMpKHJhd01ldGFkYXRhLnJlZmVyZW5jZXMsIGFubm90YXRpb25MaXN0LnRhcmdldCk7XG4gICAgICAgICAgICBhbm5vdGF0aW9uTGlzdC5hbm5vdGF0aW9ucy5mb3JFYWNoKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGFubm90YXRpb25GUU4gPSBgJHtjdXJyZW50VGFyZ2V0TmFtZX1AJHsoMCwgdXRpbHNfMS51bmFsaWFzKShyYXdNZXRhZGF0YS5yZWZlcmVuY2VzLCBhbm5vdGF0aW9uLnRlcm0pfWA7XG4gICAgICAgICAgICAgICAgaWYgKGFubm90YXRpb24ucXVhbGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25GUU4gKz0gYCMke2Fubm90YXRpb24ucXVhbGlmaWVyfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iamVjdE1hcFthbm5vdGF0aW9uRlFOXSA9IGFubm90YXRpb247XG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgPSBhbm5vdGF0aW9uRlFOO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBvYmplY3RNYXA7XG59XG4vKipcbiAqIENvbWJpbmUgdHdvIHN0cmluZ3MgcmVwcmVzZW50aW5nIHBhdGggaW4gdGhlIG1ldGFtb2RlbCB3aGlsZSBlbnN1cmluZyB0aGVpciBzcGVjaWZpY2l0aWVzIChhbm5vdGF0aW9uLi4uKSBhcmUgcmVzcGVjdGVkLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50VGFyZ2V0IHRoZSBjdXJyZW50IHBhdGhcbiAqIEBwYXJhbSBwYXRoIHRoZSBwYXJ0IHdlIHdhbnQgdG8gYXBwZW5kXG4gKiBAcmV0dXJucyB0aGUgY29tcGxldGUgcGF0aCBpbmNsdWRpbmcgdGhlIGV4dGVuc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29tYmluZVBhdGgoY3VycmVudFRhcmdldCwgcGF0aCkge1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgICByZXR1cm4gY3VycmVudFRhcmdldCArICgwLCB1dGlsc18xLnVuYWxpYXMpKHV0aWxzXzEuZGVmYXVsdFJlZmVyZW5jZXMsIHBhdGgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUYXJnZXQgKyAnLycgKyBwYXRoO1xuICAgIH1cbn1cbmNvbnN0IEFMTF9BTk5PVEFUSU9OX0VSUk9SUyA9IHt9O1xubGV0IEFOTk9UQVRJT05fRVJST1JTID0gW107XG4vKipcbiAqIEBwYXJhbSBwYXRoXG4gKiBAcGFyYW0gb0Vycm9yTXNnXG4gKi9cbmZ1bmN0aW9uIGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UocGF0aCwgb0Vycm9yTXNnKSB7XG4gICAgaWYgKCFBTExfQU5OT1RBVElPTl9FUlJPUlNbcGF0aF0pIHtcbiAgICAgICAgQUxMX0FOTk9UQVRJT05fRVJST1JTW3BhdGhdID0gW29FcnJvck1zZ107XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBBTExfQU5OT1RBVElPTl9FUlJPUlNbcGF0aF0ucHVzaChvRXJyb3JNc2cpO1xuICAgIH1cbn1cbi8qKlxuICogUmVzb2x2ZXMgYSBzcGVjaWZpYyBwYXRoIGJhc2VkIG9uIHRoZSBvYmplY3RNYXAuXG4gKlxuICogQHBhcmFtIG9iamVjdE1hcFxuICogQHBhcmFtIGN1cnJlbnRUYXJnZXRcbiAqIEBwYXJhbSBwYXRoXG4gKiBAcGFyYW0gcGF0aE9ubHlcbiAqIEBwYXJhbSBpbmNsdWRlVmlzaXRlZE9iamVjdHNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uc1Rlcm1cbiAqIEByZXR1cm5zIHRoZSByZXNvbHZlZCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX3Jlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjdXJyZW50VGFyZ2V0LCBwYXRoLCBwYXRoT25seSA9IGZhbHNlLCBpbmNsdWRlVmlzaXRlZE9iamVjdHMgPSBmYWxzZSwgYW5ub3RhdGlvbnNUZXJtKSB7XG4gICAgbGV0IG9FcnJvck1zZztcbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgYVZpc2l0ZWRPYmplY3RzID0gW107XG4gICAgaWYgKGN1cnJlbnRUYXJnZXQgJiYgY3VycmVudFRhcmdldC5fdHlwZSA9PT0gJ1Byb3BlcnR5Jykge1xuICAgICAgICBjdXJyZW50VGFyZ2V0ID0gb2JqZWN0TWFwW2N1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KCcvJylbMF1dO1xuICAgIH1cbiAgICBwYXRoID0gY29tYmluZVBhdGgoY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGgpO1xuICAgIGNvbnN0IHBhdGhTcGxpdCA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICBjb25zdCB0YXJnZXRQYXRoU3BsaXQgPSBbXTtcbiAgICBwYXRoU3BsaXQuZm9yRWFjaCgocGF0aFBhcnQpID0+IHtcbiAgICAgICAgLy8gU2VwYXJhdGUgb3V0IHRoZSBhbm5vdGF0aW9uXG4gICAgICAgIGlmIChwYXRoUGFydC5pbmRleE9mKCdAJykgIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBbc3BsaXR0ZWRQYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSBwYXRoUGFydC5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgdGFyZ2V0UGF0aFNwbGl0LnB1c2goc3BsaXR0ZWRQYXRoKTtcbiAgICAgICAgICAgIHRhcmdldFBhdGhTcGxpdC5wdXNoKGBAJHthbm5vdGF0aW9uUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGhTcGxpdC5wdXNoKHBhdGhQYXJ0KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBjdXJyZW50UGF0aCA9IHBhdGg7XG4gICAgbGV0IGN1cnJlbnRDb250ZXh0ID0gY3VycmVudFRhcmdldDtcbiAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRQYXRoU3BsaXQucmVkdWNlKChjdXJyZW50VmFsdWUsIHBhdGhQYXJ0KSA9PiB7XG4gICAgICAgIGlmIChwYXRoUGFydCA9PT0gJyRUeXBlJyAmJiBjdXJyZW50VmFsdWUuX3R5cGUgPT09ICdFbnRpdHlUeXBlJykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHBhdGhQYXJ0ID09PSAnQCR1aTUub3ZlcmxvYWQnIHx8IHBhdGhQYXJ0ID09PSAnMCcpICYmIGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gJ0FjdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gRW1wdHkgUGF0aCBhZnRlciBhbiBlbnRpdHlTZXQgbWVhbnMgZW50aXR5VHlwZVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUuX3R5cGUgPT09ICdFbnRpdHlTZXQnICYmIGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVWaXNpdGVkT2JqZWN0cykge1xuICAgICAgICAgICAgICAgICAgICBhVmlzaXRlZE9iamVjdHMucHVzaChjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUuZW50aXR5VHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLl90eXBlID09PSAnTmF2aWdhdGlvblByb3BlcnR5JyAmJiBjdXJyZW50VmFsdWUudGFyZ2V0VHlwZSkge1xuICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYVZpc2l0ZWRPYmplY3RzLnB1c2goY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlLnRhcmdldFR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmNsdWRlVmlzaXRlZE9iamVjdHMgJiYgY3VycmVudFZhbHVlICE9PSBudWxsICYmIGN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhVmlzaXRlZE9iamVjdHMucHVzaChjdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICBjdXJyZW50UGF0aCA9IHBhdGhQYXJ0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gJ0VudGl0eVNldCcgJiYgcGF0aFBhcnQgPT09ICckVHlwZScpIHtcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZS50YXJnZXRUeXBlO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXJyZW50VmFsdWUuX3R5cGUgPT09ICdFbnRpdHlTZXQnICYmIGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlKSB7XG4gICAgICAgICAgICBjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlTmFtZSwgcGF0aFBhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gJ05hdmlnYXRpb25Qcm9wZXJ0eScpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYXRoID0gY29tYmluZVBhdGgoY3VycmVudFZhbHVlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgcGF0aFBhcnQpO1xuICAgICAgICAgICAgaWYgKCFvYmplY3RNYXBbY3VycmVudFBhdGhdKSB7XG4gICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgbG9nIGVycm9yXG4gICAgICAgICAgICAgICAgY3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUudGFyZ2V0VHlwZU5hbWUsIHBhdGhQYXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXJyZW50VmFsdWUuX3R5cGUgPT09ICdQcm9wZXJ0eScpIHtcbiAgICAgICAgICAgIC8vIENvbXBsZXhUeXBlIG9yIFByb3BlcnR5XG4gICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlLnRhcmdldFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRWYWx1ZS50YXJnZXRUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgcGF0aFBhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSAnQWN0aW9uJyAmJiBjdXJyZW50VmFsdWUuaXNCb3VuZCkge1xuICAgICAgICAgICAgY3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydCk7XG4gICAgICAgICAgICBpZiAocGF0aFBhcnQgPT09ICckUGFyYW1ldGVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFsdWUucGFyYW1ldGVycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb2JqZWN0TWFwW2N1cnJlbnRQYXRoXSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXRoID0gY29tYmluZVBhdGgoY3VycmVudFZhbHVlLnNvdXJjZVR5cGUsIHBhdGhQYXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXJyZW50VmFsdWUuX3R5cGUgPT09ICdBY3Rpb25QYXJhbWV0ZXInICYmIGN1cnJlbnRWYWx1ZS5pc0VudGl0eVNldCkge1xuICAgICAgICAgICAgY3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUudHlwZSwgcGF0aFBhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gJ0FjdGlvblBhcmFtZXRlcicgJiYgIWN1cnJlbnRWYWx1ZS5pc0VudGl0eVNldCkge1xuICAgICAgICAgICAgY3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZS5zdWJzdHJpbmcoMCwgY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUubGFzdEluZGV4T2YoJy8nKSksIHBhdGhQYXJ0KTtcbiAgICAgICAgICAgIGlmICghb2JqZWN0TWFwW2N1cnJlbnRQYXRoXSkge1xuICAgICAgICAgICAgICAgIGxldCBsYXN0SWR4ID0gY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdElkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdElkeCA9IGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFBhdGggPSBjb21iaW5lUGF0aChvYmplY3RNYXBbY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUuc3Vic3RyaW5nKDAsIGxhc3RJZHgpXS5zb3VyY2VUeXBlLCBwYXRoUGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRWYWx1ZS5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGhQYXJ0KTtcbiAgICAgICAgICAgIGlmIChwYXRoUGFydCAhPT0gJ25hbWUnICYmIGN1cnJlbnRWYWx1ZVtwYXRoUGFydF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFsdWVbcGF0aFBhcnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocGF0aFBhcnQgPT09ICckQW5ub3RhdGlvblBhdGgnICYmIGN1cnJlbnRWYWx1ZS4kdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dFRvUmVzb2x2ZSA9IG9iamVjdE1hcFtjdXJyZW50VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KCdAJylbMF1dO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YlRhcmdldCA9IF9yZXNvbHZlVGFyZ2V0KG9iamVjdE1hcCwgY29udGV4dFRvUmVzb2x2ZSwgY3VycmVudFZhbHVlLnZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3ViVGFyZ2V0LnZpc2l0ZWRPYmplY3RzLmZvckVhY2goKHZpc2l0ZWRTdWJPYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFWaXNpdGVkT2JqZWN0cy5pbmRleE9mKHZpc2l0ZWRTdWJPYmplY3QpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYVZpc2l0ZWRPYmplY3RzLnB1c2godmlzaXRlZFN1Yk9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ViVGFyZ2V0LnRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBhdGhQYXJ0ID09PSAnJFBhdGgnICYmIGN1cnJlbnRWYWx1ZS4kdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudENvbnRleHQgPSBhVmlzaXRlZE9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgpXG4gICAgICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoKG9iaikgPT4gb2JqLl90eXBlID09PSAnRW50aXR5VHlwZScgfHxcbiAgICAgICAgICAgICAgICAgICAgb2JqLl90eXBlID09PSAnRW50aXR5U2V0JyB8fFxuICAgICAgICAgICAgICAgICAgICBvYmouX3R5cGUgPT09ICdOYXZpZ2F0aW9uUHJvcGVydHknKTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViVGFyZ2V0ID0gX3Jlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjdXJyZW50Q29udGV4dCwgY3VycmVudFZhbHVlLnBhdGgsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgc3ViVGFyZ2V0LnZpc2l0ZWRPYmplY3RzLmZvckVhY2goKHZpc2l0ZWRTdWJPYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhVmlzaXRlZE9iamVjdHMuaW5kZXhPZih2aXNpdGVkU3ViT2JqZWN0KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmlzaXRlZE9iamVjdHMucHVzaCh2aXNpdGVkU3ViT2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJUYXJnZXQudGFyZ2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlLiR0YXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwYXRoUGFydC5zdGFydHNXaXRoKCckUGF0aCcpICYmIGN1cnJlbnRWYWx1ZS4kdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlVGFyZ2V0ID0gY3VycmVudFZhbHVlLiR0YXJnZXQ7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhdGggPSBjb21iaW5lUGF0aChpbnRlcm1lZGlhdGVUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydC5zdWJzdHJpbmcoNSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFZhbHVlLmhhc093blByb3BlcnR5KCckVHlwZScpICYmICFvYmplY3RNYXBbY3VycmVudFBhdGhdKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBub3cgYW4gYW5ub3RhdGlvbiB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVR5cGUgPSBvYmplY3RNYXBbY3VycmVudFZhbHVlLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdCgnQCcpWzBdXTtcbiAgICAgICAgICAgICAgICBpZiAoZW50aXR5VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RNYXBbY3VycmVudFBhdGhdO1xuICAgIH0sIG51bGwpO1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgIGlmIChhbm5vdGF0aW9uc1Rlcm0pIHtcbiAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb25UeXBlID0gaW5mZXJUeXBlRnJvbVRlcm0oYW5ub3RhdGlvbnNUZXJtLCBjdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIG9FcnJvck1zZyA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVW5hYmxlIHRvIHJlc29sdmUgdGhlIHBhdGggZXhwcmVzc2lvbjogJyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnSGludDogQ2hlY2sgYW5kIGNvcnJlY3QgdGhlIHBhdGggdmFsdWVzIHVuZGVyIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluIHRoZSBtZXRhZGF0YSAoYW5ub3RhdGlvbi54bWwgZmlsZSBvciBDRFMgYW5ub3RhdGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbik6IFxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPEFubm90YXRpb24gVGVybSA9ICcgK1xuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uc1Rlcm0gK1xuICAgICAgICAgICAgICAgICAgICAnPicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8UmVjb3JkIFR5cGUgPSAnICtcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvblR5cGUgK1xuICAgICAgICAgICAgICAgICAgICAnPicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8QW5ub3RhdGlvblBhdGggPSAnICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCArXG4gICAgICAgICAgICAgICAgICAgICc+J1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UocGF0aCwgb0Vycm9yTXNnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9FcnJvck1zZyA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVW5hYmxlIHRvIHJlc29sdmUgdGhlIHBhdGggZXhwcmVzc2lvbjogJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGggK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ0hpbnQ6IENoZWNrIGFuZCBjb3JyZWN0IHRoZSBwYXRoIHZhbHVlcyB1bmRlciB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgbWV0YWRhdGEgKGFubm90YXRpb24ueG1sIGZpbGUgb3IgQ0RTIGFubm90YXRpb25zIGZvciB0aGUgYXBwbGljYXRpb24pOiBcXG5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxBbm5vdGF0aW9uIFRlcm0gPSAnICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aFNwbGl0WzBdICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPFByb3BlcnR5VmFsdWUgIFBhdGg9ICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoU3BsaXRbMV0gK1xuICAgICAgICAgICAgICAgICAgICAnPidcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhZGRBbm5vdGF0aW9uRXJyb3JNZXNzYWdlKHBhdGgsIG9FcnJvck1zZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhdGhPbmx5KSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50UGF0aDtcbiAgICB9XG4gICAgaWYgKGluY2x1ZGVWaXNpdGVkT2JqZWN0cykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmlzaXRlZE9iamVjdHM6IGFWaXNpdGVkT2JqZWN0cyxcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG4vKipcbiAqIFR5cGVndWFyZCB0byBjaGVjayBpZiB0aGUgcGF0aCBjb250YWlucyBhbiBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBwYXRoU3RyIHRoZSBwYXRoIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGFubm90YXRpb24gaW4gdGhlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGlzQW5ub3RhdGlvblBhdGgocGF0aFN0cikge1xuICAgIHJldHVybiBwYXRoU3RyLmluZGV4T2YoJ0AnKSAhPT0gLTE7XG59XG5mdW5jdGlvbiBwYXJzZVZhbHVlKHByb3BlcnR5VmFsdWUsIHZhbHVlRlFOLCBvYmplY3RNYXAsIGNvbnRleHQpIHtcbiAgICBpZiAocHJvcGVydHlWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN3aXRjaCAocHJvcGVydHlWYWx1ZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS5TdHJpbmc7XG4gICAgICAgIGNhc2UgJ0ludCc6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS5JbnQ7XG4gICAgICAgIGNhc2UgJ0Jvb2wnOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUuQm9vbDtcbiAgICAgICAgY2FzZSAnRGVjaW1hbCc6XG4gICAgICAgICAgICByZXR1cm4gKDAsIHV0aWxzXzEuRGVjaW1hbCkocHJvcGVydHlWYWx1ZS5EZWNpbWFsKTtcbiAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS5EYXRlO1xuICAgICAgICBjYXNlICdFbnVtTWVtYmVyJzpcbiAgICAgICAgICAgIHJldHVybiAoMCwgdXRpbHNfMS5hbGlhcykoY29udGV4dC5yYXdNZXRhZGF0YS5yZWZlcmVuY2VzLCBwcm9wZXJ0eVZhbHVlLkVudW1NZW1iZXIpO1xuICAgICAgICBjYXNlICdQcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcGVydHlWYWx1ZS5Qcm9wZXJ0eVBhdGgsXG4gICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiB2YWx1ZUZRTixcbiAgICAgICAgICAgICAgICAkdGFyZ2V0OiBfcmVzb2x2ZVRhcmdldChvYmplY3RNYXAsIGNvbnRleHQuY3VycmVudFRhcmdldCwgcHJvcGVydHlWYWx1ZS5Qcm9wZXJ0eVBhdGgsIGZhbHNlLCBmYWxzZSwgY29udGV4dC5jdXJyZW50VGVybSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHByb3BlcnR5VmFsdWUuTmF2aWdhdGlvblByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IHZhbHVlRlFOLFxuICAgICAgICAgICAgICAgICR0YXJnZXQ6IF9yZXNvbHZlVGFyZ2V0KG9iamVjdE1hcCwgY29udGV4dC5jdXJyZW50VGFyZ2V0LCBwcm9wZXJ0eVZhbHVlLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGZhbHNlLCBmYWxzZSwgY29udGV4dC5jdXJyZW50VGVybSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgJ0Fubm90YXRpb25QYXRoJzpcbiAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb25UYXJnZXQgPSBfcmVzb2x2ZVRhcmdldChvYmplY3RNYXAsIGNvbnRleHQuY3VycmVudFRhcmdldCwgKDAsIHV0aWxzXzEudW5hbGlhcykoY29udGV4dC5yYXdNZXRhZGF0YS5yZWZlcmVuY2VzLCBwcm9wZXJ0eVZhbHVlLkFubm90YXRpb25QYXRoKSwgdHJ1ZSwgZmFsc2UsIGNvbnRleHQuY3VycmVudFRlcm0pO1xuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvblBhdGggPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0Fubm90YXRpb25QYXRoJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcGVydHlWYWx1ZS5Bbm5vdGF0aW9uUGF0aCxcbiAgICAgICAgICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IHZhbHVlRlFOLFxuICAgICAgICAgICAgICAgICR0YXJnZXQ6IGFubm90YXRpb25UYXJnZXQsXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbnNUZXJtOiBjb250ZXh0LmN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgIHRlcm06ICcnLFxuICAgICAgICAgICAgICAgIHBhdGg6ICcnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29udGV4dC51bnJlc29sdmVkQW5ub3RhdGlvbnMucHVzaCh7IGlubGluZTogZmFsc2UsIHRvUmVzb2x2ZTogYW5ub3RhdGlvblBhdGggfSk7XG4gICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvblBhdGg7XG4gICAgICAgIGNhc2UgJ1BhdGgnOlxuICAgICAgICAgICAgY29uc3QgJHRhcmdldCA9IF9yZXNvbHZlVGFyZ2V0KG9iamVjdE1hcCwgY29udGV4dC5jdXJyZW50VGFyZ2V0LCBwcm9wZXJ0eVZhbHVlLlBhdGgsIHRydWUsIGZhbHNlLCBjb250ZXh0LmN1cnJlbnRUZXJtKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBuZXcgUGF0aChwcm9wZXJ0eVZhbHVlLCAkdGFyZ2V0LCBjb250ZXh0LmN1cnJlbnRUZXJtLCAnJyk7XG4gICAgICAgICAgICBjb250ZXh0LnVucmVzb2x2ZWRBbm5vdGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbmxpbmU6IGlzQW5ub3RhdGlvblBhdGgocHJvcGVydHlWYWx1ZS5QYXRoKSxcbiAgICAgICAgICAgICAgICB0b1Jlc29sdmU6IHBhdGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIGNhc2UgJ1JlY29yZCc6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmQocHJvcGVydHlWYWx1ZS5SZWNvcmQsIHZhbHVlRlFOLCBvYmplY3RNYXAsIGNvbnRleHQpO1xuICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbGxlY3Rpb24ocHJvcGVydHlWYWx1ZS5Db2xsZWN0aW9uLCB2YWx1ZUZRTiwgb2JqZWN0TWFwLCBjb250ZXh0KTtcbiAgICAgICAgY2FzZSAnQXBwbHknOlxuICAgICAgICBjYXNlICdOdWxsJzpcbiAgICAgICAgY2FzZSAnTm90JzpcbiAgICAgICAgY2FzZSAnRXEnOlxuICAgICAgICBjYXNlICdOZSc6XG4gICAgICAgIGNhc2UgJ0d0JzpcbiAgICAgICAgY2FzZSAnR2UnOlxuICAgICAgICBjYXNlICdMdCc6XG4gICAgICAgIGNhc2UgJ0xlJzpcbiAgICAgICAgY2FzZSAnSWYnOlxuICAgICAgICBjYXNlICdBbmQnOlxuICAgICAgICBjYXNlICdPcic6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcbiAgICB9XG59XG4vKipcbiAqIEluZmVyIHRoZSB0eXBlIG9mIGEgdGVybSBiYXNlZCBvbiBpdHMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gYW5ub3RhdGlvbnNUZXJtIFRoZSBhbm5vdGF0aW9uIHRlcm1cbiAqIEBwYXJhbSBhbm5vdGF0aW9uVGFyZ2V0IHRoZSBhbm5vdGF0aW9uIHRhcmdldFxuICogQHJldHVybnMgdGhlIGluZmVycmVkIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGluZmVyVHlwZUZyb21UZXJtKGFubm90YXRpb25zVGVybSwgYW5ub3RhdGlvblRhcmdldCkge1xuICAgIGNvbnN0IHRhcmdldFR5cGUgPSB1dGlsc18xLlRlcm1Ub1R5cGVzW2Fubm90YXRpb25zVGVybV07XG4gICAgY29uc3Qgb0Vycm9yTXNnID0ge1xuICAgICAgICBpc0Vycm9yOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYFRoZSB0eXBlIG9mIHRoZSByZWNvcmQgdXNlZCB3aXRoaW4gdGhlIHRlcm0gJHthbm5vdGF0aW9uc1Rlcm19IHdhcyBub3QgZGVmaW5lZCBhbmQgd2FzIGluZmVycmVkIGFzICR7dGFyZ2V0VHlwZX0uXG5IaW50OiBJZiBwb3NzaWJsZSwgdHJ5IHRvIG1haW50YWluIHRoZSBUeXBlIHByb3BlcnR5IGZvciBlYWNoIFJlY29yZC5cbjxBbm5vdGF0aW9ucyBUYXJnZXQ9XCIke2Fubm90YXRpb25UYXJnZXR9XCI+XG5cdDxBbm5vdGF0aW9uIFRlcm09XCIke2Fubm90YXRpb25zVGVybX1cIj5cblx0XHQ8UmVjb3JkPi4uLjwvUmVjb3JkPlxuXHQ8L0Fubm90YXRpb24+XG48L0Fubm90YXRpb25zPmBcbiAgICB9O1xuICAgIGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UoYW5ub3RhdGlvblRhcmdldCArICcvJyArIGFubm90YXRpb25zVGVybSwgb0Vycm9yTXNnKTtcbiAgICByZXR1cm4gdGFyZ2V0VHlwZTtcbn1cbmZ1bmN0aW9uIGlzRGF0YUZpZWxkV2l0aEZvckFjdGlvbihhbm5vdGF0aW9uQ29udGVudCwgYW5ub3RhdGlvblRlcm0pIHtcbiAgICByZXR1cm4gKGFubm90YXRpb25Db250ZW50Lmhhc093blByb3BlcnR5KCdBY3Rpb24nKSAmJlxuICAgICAgICAoYW5ub3RhdGlvblRlcm0uJFR5cGUgPT09ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb24nIHx8XG4gICAgICAgICAgICBhbm5vdGF0aW9uVGVybS4kVHlwZSA9PT0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb24nKSk7XG59XG5mdW5jdGlvbiBwYXJzZVJlY29yZFR5cGUocmVjb3JkRGVmaW5pdGlvbiwgY29udGV4dCkge1xuICAgIGxldCB0YXJnZXRUeXBlO1xuICAgIGlmICghcmVjb3JkRGVmaW5pdGlvbi50eXBlICYmIGNvbnRleHQuY3VycmVudFRlcm0pIHtcbiAgICAgICAgdGFyZ2V0VHlwZSA9IGluZmVyVHlwZUZyb21UZXJtKGNvbnRleHQuY3VycmVudFRlcm0sIGNvbnRleHQuY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGFyZ2V0VHlwZSA9ICgwLCB1dGlsc18xLnVuYWxpYXMpKGNvbnRleHQucmF3TWV0YWRhdGEucmVmZXJlbmNlcywgcmVjb3JkRGVmaW5pdGlvbi50eXBlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldFR5cGU7XG59XG5mdW5jdGlvbiBwYXJzZVJlY29yZChyZWNvcmREZWZpbml0aW9uLCBjdXJyZW50RlFOLCBvYmplY3RNYXAsIGNvbnRleHQpIHtcbiAgICBjb25zdCB0YXJnZXRUeXBlID0gcGFyc2VSZWNvcmRUeXBlKHJlY29yZERlZmluaXRpb24sIGNvbnRleHQpO1xuICAgIGNvbnN0IGFubm90YXRpb25UZXJtID0ge1xuICAgICAgICAkVHlwZTogdGFyZ2V0VHlwZSxcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBjdXJyZW50RlFOXG4gICAgfTtcbiAgICBjb25zdCBhbm5vdGF0aW9uQ29udGVudCA9IHt9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlY29yZERlZmluaXRpb24uYW5ub3RhdGlvbnMpKSB7XG4gICAgICAgIGNvbnN0IHN1YkFubm90YXRpb25MaXN0ID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiBjdXJyZW50RlFOLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IHJlY29yZERlZmluaXRpb24uYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICBfX3NvdXJjZTogY29udGV4dC5jdXJyZW50U291cmNlXG4gICAgICAgIH07XG4gICAgICAgIGNvbnRleHQuYWRkaXRpb25hbEFubm90YXRpb25zLnB1c2goc3ViQW5ub3RhdGlvbkxpc3QpO1xuICAgIH1cbiAgICBpZiAocmVjb3JkRGVmaW5pdGlvbi5wcm9wZXJ0eVZhbHVlcykge1xuICAgICAgICByZWNvcmREZWZpbml0aW9uLnByb3BlcnR5VmFsdWVzLmZvckVhY2goKHByb3BlcnR5VmFsdWUpID0+IHtcbiAgICAgICAgICAgIGFubm90YXRpb25Db250ZW50W3Byb3BlcnR5VmFsdWUubmFtZV0gPSBwYXJzZVZhbHVlKHByb3BlcnR5VmFsdWUudmFsdWUsIGAke2N1cnJlbnRGUU59LyR7cHJvcGVydHlWYWx1ZS5uYW1lfWAsIG9iamVjdE1hcCwgY29udGV4dCk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eVZhbHVlLmFubm90YXRpb25zKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YkFubm90YXRpb25MaXN0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IGAke2N1cnJlbnRGUU59LyR7cHJvcGVydHlWYWx1ZS5uYW1lfWAsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiBwcm9wZXJ0eVZhbHVlLmFubm90YXRpb25zLFxuICAgICAgICAgICAgICAgICAgICBfX3NvdXJjZTogY29udGV4dC5jdXJyZW50U291cmNlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmFkZGl0aW9uYWxBbm5vdGF0aW9ucy5wdXNoKHN1YkFubm90YXRpb25MaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RhdGFGaWVsZFdpdGhGb3JBY3Rpb24oYW5ub3RhdGlvbkNvbnRlbnQsIGFubm90YXRpb25UZXJtKSkge1xuICAgICAgICAgICAgICAgIGFubm90YXRpb25Db250ZW50LkFjdGlvblRhcmdldCA9XG4gICAgICAgICAgICAgICAgICAgIChjb250ZXh0LmN1cnJlbnRUYXJnZXQuYWN0aW9ucyAmJiBjb250ZXh0LmN1cnJlbnRUYXJnZXQuYWN0aW9uc1thbm5vdGF0aW9uQ29udGVudC5BY3Rpb25dKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0TWFwW2Fubm90YXRpb25Db250ZW50LkFjdGlvbl07XG4gICAgICAgICAgICAgICAgaWYgKCFhbm5vdGF0aW9uQ29udGVudC5BY3Rpb25UYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRvIGRpYWdub3N0aWNzIGRlYnVnZ2VyO1xuICAgICAgICAgICAgICAgICAgICBBTk5PVEFUSU9OX0VSUk9SUy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVbmFibGUgdG8gcmVzb2x2ZSB0aGUgYWN0aW9uICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25Db250ZW50LkFjdGlvbiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBkZWZpbmVkIGZvciAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVGVybS5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYW5ub3RhdGlvblRlcm0sIGFubm90YXRpb25Db250ZW50KTtcbn1cbi8qKlxuICogUmV0cmlldmUgb3IgaW5mZXIgdGhlIGNvbGxlY3Rpb24gdHlwZSBiYXNlZCBvbiBpdHMgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gY29sbGVjdGlvbkRlZmluaXRpb25cbiAqIEByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBjb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZShjb2xsZWN0aW9uRGVmaW5pdGlvbikge1xuICAgIGxldCB0eXBlID0gY29sbGVjdGlvbkRlZmluaXRpb24udHlwZTtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkICYmIGNvbGxlY3Rpb25EZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RDb2xJdGVtID0gY29sbGVjdGlvbkRlZmluaXRpb25bMF07XG4gICAgICAgIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ1Byb3BlcnR5UGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ1Byb3BlcnR5UGF0aCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdQYXRoJykpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnUGF0aCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdBbm5vdGF0aW9uUGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ0Fubm90YXRpb25QYXRoJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnKSkge1xuICAgICAgICAgICAgdHlwZSA9ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgZmlyc3RDb2xJdGVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgndHlwZScpIHx8IGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgncHJvcGVydHlWYWx1ZXMnKSkpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnUmVjb3JkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgZmlyc3RDb2xJdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdHlwZSA9ICdTdHJpbmcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0eXBlID0gJ0VtcHR5Q29sbGVjdGlvbic7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xufVxuZnVuY3Rpb24gcGFyc2VDb2xsZWN0aW9uKGNvbGxlY3Rpb25EZWZpbml0aW9uLCBwYXJlbnRGUU4sIG9iamVjdE1hcCwgY29udGV4dCkge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSA9IGdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZShjb2xsZWN0aW9uRGVmaW5pdGlvbik7XG4gICAgc3dpdGNoIChjb2xsZWN0aW9uRGVmaW5pdGlvblR5cGUpIHtcbiAgICAgICAgY2FzZSAnUHJvcGVydHlQYXRoJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKHByb3BlcnR5UGF0aCwgcHJvcGVydHlJZHgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHByb3BlcnR5UGF0aC5Qcm9wZXJ0eVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7cGFyZW50RlFOfS8ke3Byb3BlcnR5SWR4fWAsXG4gICAgICAgICAgICAgICAgICAgICR0YXJnZXQ6IF9yZXNvbHZlVGFyZ2V0KG9iamVjdE1hcCwgY29udGV4dC5jdXJyZW50VGFyZ2V0LCBwcm9wZXJ0eVBhdGguUHJvcGVydHlQYXRoLCBmYWxzZSwgZmFsc2UsIGNvbnRleHQuY3VycmVudFRlcm0pXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlICdQYXRoJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKHBhdGhWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0ICR0YXJnZXQgPSBfcmVzb2x2ZVRhcmdldChvYmplY3RNYXAsIGNvbnRleHQuY3VycmVudFRhcmdldCwgcGF0aFZhbHVlLlBhdGgsIHRydWUsIGZhbHNlLCBjb250ZXh0LmN1cnJlbnRUZXJtKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gbmV3IFBhdGgocGF0aFZhbHVlLCAkdGFyZ2V0LCBjb250ZXh0LmN1cnJlbnRUZXJtLCAnJyk7XG4gICAgICAgICAgICAgICAgY29udGV4dC51bnJlc29sdmVkQW5ub3RhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogaXNBbm5vdGF0aW9uUGF0aChwYXRoVmFsdWUuUGF0aCksXG4gICAgICAgICAgICAgICAgICAgIHRvUmVzb2x2ZTogcGF0aFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgJ0Fubm90YXRpb25QYXRoJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKGFubm90YXRpb25QYXRoLCBhbm5vdGF0aW9uSWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvblRhcmdldCA9IF9yZXNvbHZlVGFyZ2V0KG9iamVjdE1hcCwgY29udGV4dC5jdXJyZW50VGFyZ2V0LCBhbm5vdGF0aW9uUGF0aC5Bbm5vdGF0aW9uUGF0aCwgdHJ1ZSwgZmFsc2UsIGNvbnRleHQuY3VycmVudFRlcm0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb25Db2xsZWN0aW9uRWxlbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0Fubm90YXRpb25QYXRoJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFubm90YXRpb25QYXRoLkFubm90YXRpb25QYXRoLFxuICAgICAgICAgICAgICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IGAke3BhcmVudEZRTn0vJHthbm5vdGF0aW9uSWR4fWAsXG4gICAgICAgICAgICAgICAgICAgICR0YXJnZXQ6IGFubm90YXRpb25UYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zVGVybTogY29udGV4dC5jdXJyZW50VGVybSxcbiAgICAgICAgICAgICAgICAgICAgdGVybTogJycsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6ICcnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnVucmVzb2x2ZWRBbm5vdGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdG9SZXNvbHZlOiBhbm5vdGF0aW9uQ29sbGVjdGlvbkVsZW1lbnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbkNvbGxlY3Rpb25FbGVtZW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgobmF2UHJvcGVydHlQYXRoLCBuYXZQcm9wSWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmF2UHJvcGVydHlQYXRoLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7cGFyZW50RlFOfS8ke25hdlByb3BJZHh9YCxcbiAgICAgICAgICAgICAgICAgICAgJHRhcmdldDogX3Jlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjb250ZXh0LmN1cnJlbnRUYXJnZXQsIG5hdlByb3BlcnR5UGF0aC5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBmYWxzZSwgZmFsc2UsIGNvbnRleHQuY3VycmVudFRlcm0pXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlICdSZWNvcmQnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocmVjb3JkRGVmaW5pdGlvbiwgcmVjb3JkSWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVjb3JkKHJlY29yZERlZmluaXRpb24sIGAke3BhcmVudEZRTn0vJHtyZWNvcmRJZHh9YCwgb2JqZWN0TWFwLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlICdBcHBseSc6XG4gICAgICAgIGNhc2UgJ051bGwnOlxuICAgICAgICBjYXNlICdJZic6XG4gICAgICAgIGNhc2UgJ0VxJzpcbiAgICAgICAgY2FzZSAnTmUnOlxuICAgICAgICBjYXNlICdMdCc6XG4gICAgICAgIGNhc2UgJ0d0JzpcbiAgICAgICAgY2FzZSAnTGUnOlxuICAgICAgICBjYXNlICdHZSc6XG4gICAgICAgIGNhc2UgJ05vdCc6XG4gICAgICAgIGNhc2UgJ0FuZCc6XG4gICAgICAgIGNhc2UgJ09yJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKGlmVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWZWYWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgoc3RyaW5nVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0cmluZ1ZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmluZ1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlLlN0cmluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uRGVmaW5pdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNhc2UnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb252ZXJ0QW5ub3RhdGlvbihhbm5vdGF0aW9uLCBvYmplY3RNYXAsIGNvbnRleHQpIHtcbiAgICBpZiAoYW5ub3RhdGlvbi5yZWNvcmQpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlUmVjb3JkKGFubm90YXRpb24ucmVjb3JkLCBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgb2JqZWN0TWFwLCBjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYW5ub3RhdGlvbi5jb2xsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFubm90YXRpb24udmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVZhbHVlKGFubm90YXRpb24udmFsdWUsIGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLCBvYmplY3RNYXAsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYW5ub3RhdGlvbi5jb2xsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBwYXJzZUNvbGxlY3Rpb24oYW5ub3RhdGlvbi5jb2xsZWN0aW9uLCBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgb2JqZWN0TWFwLCBjb250ZXh0KTtcbiAgICAgICAgY29sbGVjdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgPSBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNhc2UnKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSByZXNvbHZlUGF0aCBmdW5jdGlvbiBmb3IgYSBnaXZlbiBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHlUeXBlIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSBvYmplY3RNYXAgVGhlIGN1cnJlbnQgb2JqZWN0TWFwXG4gKiBAcmV0dXJucyB0aGUgcmVzb2x2ZVBhdGggZnVuY3Rpb24gdGhhdCBzdGFydHMgYXQgdGhlIGVudGl0eVR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZVBhdGhGbihlbnRpdHlUeXBlLCBvYmplY3RNYXApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbGF0aXZlUGF0aCwgaW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG4gICAgICAgIGNvbnN0IGFubm90YXRpb25UZXJtID0gJyc7XG4gICAgICAgIHJldHVybiBfcmVzb2x2ZVRhcmdldChvYmplY3RNYXAsIGVudGl0eVR5cGUsIHJlbGF0aXZlUGF0aCwgZmFsc2UsIGluY2x1ZGVWaXNpdGVkT2JqZWN0cywgYW5ub3RhdGlvblRlcm0pO1xuICAgIH07XG59XG5mdW5jdGlvbiByZXNvbHZlVjJOYXZpZ2F0aW9uUHJvcGVydHkobmF2UHJvcCwgYXNzb2NpYXRpb25zLCBvYmplY3RNYXAsIG91dE5hdlByb3ApIHtcbiAgICBjb25zdCB0YXJnZXRBc3NvY2lhdGlvbiA9IGFzc29jaWF0aW9ucy5maW5kKChhc3NvY2lhdGlvbikgPT4gYXNzb2NpYXRpb24uZnVsbHlRdWFsaWZpZWROYW1lID09PSBuYXZQcm9wLnJlbGF0aW9uc2hpcCk7XG4gICAgaWYgKHRhcmdldEFzc29jaWF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFzc29jaWF0aW9uRW5kID0gdGFyZ2V0QXNzb2NpYXRpb24uYXNzb2NpYXRpb25FbmQuZmluZCgoZW5kKSA9PiBlbmQucm9sZSA9PT0gbmF2UHJvcC50b1JvbGUpO1xuICAgICAgICBpZiAoYXNzb2NpYXRpb25FbmQpIHtcbiAgICAgICAgICAgIG91dE5hdlByb3AudGFyZ2V0VHlwZSA9IG9iamVjdE1hcFthc3NvY2lhdGlvbkVuZC50eXBlXTtcbiAgICAgICAgICAgIG91dE5hdlByb3AuaXNDb2xsZWN0aW9uID0gYXNzb2NpYXRpb25FbmQubXVsdGlwbGljaXR5ID09PSAnKic7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiByZXNvbHZlVjROYXZpZ2F0aW9uUHJvcGVydHkobmF2UHJvcCwgb2JqZWN0TWFwLCBvdXROYXZQcm9wKSB7XG4gICAgb3V0TmF2UHJvcC50YXJnZXRUeXBlID0gb2JqZWN0TWFwW25hdlByb3AudGFyZ2V0VHlwZU5hbWVdO1xuICAgIG91dE5hdlByb3AucGFydG5lciA9IG5hdlByb3AucGFydG5lcjtcbiAgICBvdXROYXZQcm9wLmlzQ29sbGVjdGlvbiA9IG5hdlByb3AuaXNDb2xsZWN0aW9uO1xuICAgIG91dE5hdlByb3AuY29udGFpbnNUYXJnZXQgPSBuYXZQcm9wLmNvbnRhaW5zVGFyZ2V0O1xuICAgIG91dE5hdlByb3AucmVmZXJlbnRpYWxDb25zdHJhaW50ID0gbmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQ7XG59XG5mdW5jdGlvbiBpc1Y0TmF2aWdhdGlvblByb3BlcnR5KG5hdlByb3ApIHtcbiAgICByZXR1cm4gISFuYXZQcm9wLnRhcmdldFR5cGVOYW1lO1xufVxuZnVuY3Rpb24gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKG5hdmlnYXRpb25Qcm9wZXJ0aWVzLCBhc3NvY2lhdGlvbnMsIG9iamVjdE1hcCkge1xuICAgIHJldHVybiBuYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAoKG5hdlByb3ApID0+IHtcbiAgICAgICAgY29uc3Qgb3V0TmF2UHJvcCA9IHtcbiAgICAgICAgICAgIF90eXBlOiAnTmF2aWdhdGlvblByb3BlcnR5JyxcbiAgICAgICAgICAgIG5hbWU6IG5hdlByb3AubmFtZSxcbiAgICAgICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogbmF2UHJvcC5mdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgICAgICBpc0NvbGxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgY29udGFpbnNUYXJnZXQ6IGZhbHNlLFxuICAgICAgICAgICAgcmVmZXJlbnRpYWxDb25zdHJhaW50OiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiB7fSxcbiAgICAgICAgICAgIHBhcnRuZXI6ICcnLFxuICAgICAgICAgICAgdGFyZ2V0VHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdGFyZ2V0VHlwZU5hbWU6ICcnXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc1Y0TmF2aWdhdGlvblByb3BlcnR5KG5hdlByb3ApKSB7XG4gICAgICAgICAgICByZXNvbHZlVjROYXZpZ2F0aW9uUHJvcGVydHkobmF2UHJvcCwgb2JqZWN0TWFwLCBvdXROYXZQcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmVWMk5hdmlnYXRpb25Qcm9wZXJ0eShuYXZQcm9wLCBhc3NvY2lhdGlvbnMsIG9iamVjdE1hcCwgb3V0TmF2UHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG91dE5hdlByb3AudGFyZ2V0VHlwZSkge1xuICAgICAgICAgICAgb3V0TmF2UHJvcC50YXJnZXRUeXBlTmFtZSA9IG91dE5hdlByb3AudGFyZ2V0VHlwZS5mdWxseVF1YWxpZmllZE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0TWFwW291dE5hdlByb3AuZnVsbHlRdWFsaWZpZWROYW1lXSA9IG91dE5hdlByb3A7XG4gICAgICAgIHJldHVybiBvdXROYXZQcm9wO1xuICAgIH0pO1xufVxuLyoqXG4gKiBAcGFyYW0gZW50aXR5VHlwZXNcbiAqIEBwYXJhbSBhc3NvY2lhdGlvbnNcbiAqIEBwYXJhbSBvYmplY3RNYXBcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKGVudGl0eVR5cGVzLCBhc3NvY2lhdGlvbnMsIG9iamVjdE1hcCkge1xuICAgIGVudGl0eVR5cGVzLmZvckVhY2goKGVudGl0eVR5cGUpID0+IHtcbiAgICAgICAgZW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydGllcyhlbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLCBhc3NvY2lhdGlvbnMsIG9iamVjdE1hcCk7XG4gICAgICAgIGVudGl0eVR5cGUucmVzb2x2ZVBhdGggPSBjcmVhdGVSZXNvbHZlUGF0aEZuKGVudGl0eVR5cGUsIG9iamVjdE1hcCk7XG4gICAgfSk7XG59XG4vKipcbiAqIEBwYXJhbSBuYW1lc3BhY2VcbiAqIEBwYXJhbSBhY3Rpb25zXG4gKiBAcGFyYW0gb2JqZWN0TWFwXG4gKi9cbmZ1bmN0aW9uIGxpbmtBY3Rpb25zVG9FbnRpdHlUeXBlKG5hbWVzcGFjZSwgYWN0aW9ucywgb2JqZWN0TWFwKSB7XG4gICAgYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKCFhY3Rpb24uYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIGFjdGlvbi5hbm5vdGF0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb24uaXNCb3VuZCkge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlRW50aXR5VHlwZSA9IG9iamVjdE1hcFthY3Rpb24uc291cmNlVHlwZV07XG4gICAgICAgICAgICBhY3Rpb24uc291cmNlRW50aXR5VHlwZSA9IHNvdXJjZUVudGl0eVR5cGU7XG4gICAgICAgICAgICBpZiAoc291cmNlRW50aXR5VHlwZSkge1xuICAgICAgICAgICAgICAgIGlmICghc291cmNlRW50aXR5VHlwZS5hY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUVudGl0eVR5cGUuYWN0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzb3VyY2VFbnRpdHlUeXBlLmFjdGlvbnNbYWN0aW9uLm5hbWVdID0gYWN0aW9uO1xuICAgICAgICAgICAgICAgIHNvdXJjZUVudGl0eVR5cGUuYWN0aW9uc1tgJHtuYW1lc3BhY2V9LiR7YWN0aW9uLm5hbWV9YF0gPSBhY3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3Rpb24ucmV0dXJuRW50aXR5VHlwZSA9IG9iamVjdE1hcFthY3Rpb24ucmV0dXJuVHlwZV07XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogQHBhcmFtIGVudGl0eVNldHNcbiAqIEBwYXJhbSBvYmplY3RNYXBcbiAqIEBwYXJhbSByZWZlcmVuY2VzXG4gKi9cbmZ1bmN0aW9uIGxpbmtFbnRpdHlUeXBlVG9FbnRpdHlTZXQoZW50aXR5U2V0cywgb2JqZWN0TWFwLCByZWZlcmVuY2VzKSB7XG4gICAgZW50aXR5U2V0cy5mb3JFYWNoKChlbnRpdHlTZXQpID0+IHtcbiAgICAgICAgZW50aXR5U2V0LmVudGl0eVR5cGUgPSBvYmplY3RNYXBbZW50aXR5U2V0LmVudGl0eVR5cGVOYW1lXTtcbiAgICAgICAgaWYgKCFlbnRpdHlTZXQuZW50aXR5VHlwZSkge1xuICAgICAgICAgICAgZW50aXR5U2V0LmVudGl0eVR5cGUgPSBvYmplY3RNYXBbKDAsIHV0aWxzXzEudW5hbGlhcykocmVmZXJlbmNlcywgZW50aXR5U2V0LmVudGl0eVR5cGVOYW1lKV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbnRpdHlTZXQuYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIGVudGl0eVNldC5hbm5vdGF0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghZW50aXR5U2V0LmVudGl0eVR5cGUuYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIGVudGl0eVNldC5lbnRpdHlUeXBlLmFubm90YXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZW50aXR5U2V0LmVudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXlQcm9wKSA9PiB7XG4gICAgICAgICAgICBrZXlQcm9wLmlzS2V5ID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vKipcbiAqIEBwYXJhbSBzaW5nbGV0b25zXG4gKiBAcGFyYW0gb2JqZWN0TWFwXG4gKiBAcGFyYW0gcmVmZXJlbmNlc1xuICovXG5mdW5jdGlvbiBsaW5rRW50aXR5VHlwZVRvU2luZ2xldG9uKHNpbmdsZXRvbnMsIG9iamVjdE1hcCwgcmVmZXJlbmNlcykge1xuICAgIHNpbmdsZXRvbnMuZm9yRWFjaCgoc2luZ2xldG9uKSA9PiB7XG4gICAgICAgIHNpbmdsZXRvbi5lbnRpdHlUeXBlID0gb2JqZWN0TWFwW3NpbmdsZXRvbi5lbnRpdHlUeXBlTmFtZV07XG4gICAgICAgIGlmICghc2luZ2xldG9uLmVudGl0eVR5cGUpIHtcbiAgICAgICAgICAgIHNpbmdsZXRvbi5lbnRpdHlUeXBlID0gb2JqZWN0TWFwWygwLCB1dGlsc18xLnVuYWxpYXMpKHJlZmVyZW5jZXMsIHNpbmdsZXRvbi5lbnRpdHlUeXBlTmFtZSldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2luZ2xldG9uLmFubm90YXRpb25zKSB7XG4gICAgICAgICAgICBzaW5nbGV0b24uYW5ub3RhdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNpbmdsZXRvbi5lbnRpdHlUeXBlLmFubm90YXRpb25zKSB7XG4gICAgICAgICAgICBzaW5nbGV0b24uZW50aXR5VHlwZS5hbm5vdGF0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHNpbmdsZXRvbi5lbnRpdHlUeXBlLmtleXMuZm9yRWFjaCgoa2V5UHJvcCkgPT4ge1xuICAgICAgICAgICAga2V5UHJvcC5pc0tleSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBAcGFyYW0gZW50aXR5VHlwZXNcbiAqIEBwYXJhbSBvYmplY3RNYXBcbiAqL1xuZnVuY3Rpb24gbGlua1Byb3BlcnRpZXNUb0NvbXBsZXhUeXBlcyhlbnRpdHlUeXBlcywgb2JqZWN0TWFwKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHByb3BlcnR5XG4gICAgICovXG4gICAgZnVuY3Rpb24gbGluayhwcm9wZXJ0eSkge1xuICAgICAgICBpZiAoIXByb3BlcnR5LmFubm90YXRpb25zKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eS5hbm5vdGF0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkudHlwZS5pbmRleE9mKCdFZG0nKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBjb21wbGV4VHlwZTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkudHlwZS5zdGFydHNXaXRoKCdDb2xsZWN0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxleFR5cGVOYW1lID0gcHJvcGVydHkudHlwZS5zdWJzdHJpbmcoMTEsIHByb3BlcnR5LnR5cGUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXhUeXBlID0gb2JqZWN0TWFwW2NvbXBsZXhUeXBlTmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV4VHlwZSA9IG9iamVjdE1hcFtwcm9wZXJ0eS50eXBlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBsZXhUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LnRhcmdldFR5cGUgPSBjb21wbGV4VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXhUeXBlLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhUeXBlLnByb3BlcnRpZXMuZm9yRWFjaChsaW5rKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoc0Vycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3BlcnR5IFR5cGUgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbnRpdHlUeXBlcy5mb3JFYWNoKChlbnRpdHlUeXBlKSA9PiB7XG4gICAgICAgIGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKGxpbmspO1xuICAgIH0pO1xufVxuLyoqXG4gKiBAcGFyYW0gY29tcGxleFR5cGVzXG4gKiBAcGFyYW0gYXNzb2NpYXRpb25zXG4gKiBAcGFyYW0gb2JqZWN0TWFwXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVDb21wbGV4VHlwZXMoY29tcGxleFR5cGVzLCBhc3NvY2lhdGlvbnMsIG9iamVjdE1hcCkge1xuICAgIGNvbXBsZXhUeXBlcy5mb3JFYWNoKChjb21wbGV4VHlwZSkgPT4ge1xuICAgICAgICBjb21wbGV4VHlwZS5hbm5vdGF0aW9ucyA9IHt9O1xuICAgICAgICBjb21wbGV4VHlwZS5wcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5LmFubm90YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHkuYW5ub3RhdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBsZXhUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKGNvbXBsZXhUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLCBhc3NvY2lhdGlvbnMsIG9iamVjdE1hcCk7XG4gICAgfSk7XG59XG4vKipcbiAqIFNwbGl0IHRoZSBhbGlhcyBmcm9tIHRoZSB0ZXJtIHZhbHVlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSBjdXJyZW50IHNldCBvZiByZWZlcmVuY2VzXG4gKiBAcGFyYW0gdGVybVZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgdGVybVxuICogQHJldHVybnMgdGhlIHRlcm0gYWxpYXMgYW5kIHRoZSBhY3R1YWwgdGVybSB2YWx1ZVxuICovXG5mdW5jdGlvbiBzcGxpdFRlcm0ocmVmZXJlbmNlcywgdGVybVZhbHVlKSB7XG4gICAgY29uc3QgYWxpYXNlZFRlcm0gPSAoMCwgdXRpbHNfMS5hbGlhcykocmVmZXJlbmNlcywgdGVybVZhbHVlKTtcbiAgICBjb25zdCBsYXN0RG90ID0gYWxpYXNlZFRlcm0ubGFzdEluZGV4T2YoJy4nKTtcbiAgICBjb25zdCB0ZXJtQWxpYXMgPSBhbGlhc2VkVGVybS5zdWJzdHJpbmcoMCwgbGFzdERvdCk7XG4gICAgY29uc3QgdGVybSA9IGFsaWFzZWRUZXJtLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XG4gICAgcmV0dXJuIFt0ZXJtQWxpYXMsIHRlcm1dO1xufVxuLyoqXG4gKiBDcmVhdGVzIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgcmVzb2x2ZSBhIHNwZWNpZmljIHBhdGguXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlZE91dHB1dFxuICogQHBhcmFtIG9iamVjdE1hcFxuICogQHJldHVybnMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBhbGxvdyB0byByZXNvbHZlIGVsZW1lbnQgZ2xvYmFsbHkuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUdsb2JhbFJlc29sdmUoY29udmVydGVkT3V0cHV0LCBvYmplY3RNYXApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVzb2x2ZVBhdGgoc1BhdGgpIHtcbiAgICAgICAgY29uc3QgYVBhdGhTcGxpdCA9IHNQYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgIGlmIChhUGF0aFNwbGl0LnNoaWZ0KCkgIT09ICcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWFsIHdpdGggcmVsYXRpdmUgcGF0aCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVudGl0eVNldE5hbWUgPSBhUGF0aFNwbGl0LnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlZE91dHB1dC5lbnRpdHlTZXRzLmZpbmQoKGV0KSA9PiBldC5uYW1lID09PSBlbnRpdHlTZXROYW1lKTtcbiAgICAgICAgaWYgKCFlbnRpdHlTZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBjb252ZXJ0ZWRPdXRwdXQuZW50aXR5Q29udGFpbmVyLFxuICAgICAgICAgICAgICAgIG9iamVjdFBhdGg6IFtjb252ZXJ0ZWRPdXRwdXQuZW50aXR5Q29udGFpbmVyXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYVBhdGhTcGxpdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBlbnRpdHlTZXQsXG4gICAgICAgICAgICAgICAgb2JqZWN0UGF0aDogW2NvbnZlcnRlZE91dHB1dC5lbnRpdHlDb250YWluZXIsIGVudGl0eVNldF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRSZXNvbHV0aW9uID0gX3Jlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBlbnRpdHlTZXQsICcvJyArIGFQYXRoU3BsaXQuam9pbignLycpLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0UmVzb2x1dGlvbi50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRSZXNvbHV0aW9uLnZpc2l0ZWRPYmplY3RzLnB1c2godGFyZ2V0UmVzb2x1dGlvbi50YXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldFJlc29sdXRpb24udGFyZ2V0LFxuICAgICAgICAgICAgICAgIG9iamVjdFBhdGg6IHRhcmdldFJlc29sdXRpb24udmlzaXRlZE9iamVjdHNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gZW5zdXJlQW5ub3RhdGlvbnMoY3VycmVudFRhcmdldCwgdm9jQWxpYXMpIHtcbiAgICBpZiAoIWN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIWN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdKSB7XG4gICAgICAgIGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdID0ge307XG4gICAgfVxuICAgIGlmICghY3VycmVudFRhcmdldC5hbm5vdGF0aW9ucy5fYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9ucy5fYW5ub3RhdGlvbnMgPSB7fTtcbiAgICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzQW5ub3RhdGlvbnMoY3VycmVudENvbnRleHQsIGFubm90YXRpb25MaXN0LCBvYmplY3RNYXAsIGJPdmVycmlkZUV4aXN0aW5nKSB7XG4gICAgY29uc3QgY3VycmVudFRhcmdldCA9IGN1cnJlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXQ7XG4gICAgY29uc3QgY3VycmVudFRhcmdldE5hbWUgPSBjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZTtcbiAgICBhbm5vdGF0aW9uTGlzdC5hbm5vdGF0aW9ucy5mb3JFYWNoKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGN1cnJlbnRDb250ZXh0LmN1cnJlbnRTb3VyY2UgPSBhbm5vdGF0aW9uLl9fc291cmNlIHx8IGFubm90YXRpb25MaXN0Ll9fc291cmNlO1xuICAgICAgICBjb25zdCBbdm9jQWxpYXMsIHZvY1Rlcm1dID0gc3BsaXRUZXJtKHV0aWxzXzEuZGVmYXVsdFJlZmVyZW5jZXMsIGFubm90YXRpb24udGVybSk7XG4gICAgICAgIGVuc3VyZUFubm90YXRpb25zKGN1cnJlbnRUYXJnZXQsIHZvY0FsaWFzKTtcbiAgICAgICAgY29uc3Qgdm9jVGVybVdpdGhRdWFsaWZpZXIgPSBgJHt2b2NUZXJtfSR7YW5ub3RhdGlvbi5xdWFsaWZpZXIgPyAnIycgKyBhbm5vdGF0aW9uLnF1YWxpZmllciA6ICcnfWA7XG4gICAgICAgIGlmICghYk92ZXJyaWRlRXhpc3RpbmcgJiYgKChfYiA9IChfYSA9IGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVt2b2NBbGlhc10pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlt2b2NUZXJtV2l0aFF1YWxpZmllcl0pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50Q29udGV4dC5jdXJyZW50VGVybSA9IGFubm90YXRpb24udGVybTtcbiAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdID0gY29udmVydEFubm90YXRpb24oYW5ub3RhdGlvbiwgb2JqZWN0TWFwLCBjdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHN3aXRjaCAodHlwZW9mIGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSkge1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LXdyYXBwZXJzXG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdID0gbmV3IFN0cmluZyhjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy13cmFwcGVyc1xuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSA9IG5ldyBCb29sZWFuKGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdLnRlcm0gPSAoMCwgdXRpbHNfMS51bmFsaWFzKSh1dGlsc18xLmRlZmF1bHRSZWZlcmVuY2VzLCBgJHt2b2NBbGlhc30uJHt2b2NUZXJtfWApO1xuICAgICAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdLnF1YWxpZmllciA9IGFubm90YXRpb24ucXVhbGlmaWVyO1xuICAgICAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdLl9fc291cmNlID0gY3VycmVudENvbnRleHQuY3VycmVudFNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbm5vdGF0aW9uVGFyZ2V0ID0gYCR7Y3VycmVudFRhcmdldE5hbWV9QCR7KDAsIHV0aWxzXzEudW5hbGlhcykodXRpbHNfMS5kZWZhdWx0UmVmZXJlbmNlcywgdm9jQWxpYXMgKyAnLicgKyB2b2NUZXJtV2l0aFF1YWxpZmllcil9YDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbi5hbm5vdGF0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YkFubm90YXRpb25MaXN0ID0ge1xuICAgICAgICAgICAgICAgIHRhcmdldDogYW5ub3RhdGlvblRhcmdldCxcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczogYW5ub3RhdGlvbi5hbm5vdGF0aW9ucyxcbiAgICAgICAgICAgICAgICBfX3NvdXJjZTogY3VycmVudENvbnRleHQuY3VycmVudFNvdXJjZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmFkZGl0aW9uYWxBbm5vdGF0aW9ucy5wdXNoKHN1YkFubm90YXRpb25MaXN0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhbm5vdGF0aW9uLmFubm90YXRpb25zICYmICFjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0uYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXS5hbm5vdGF0aW9ucyA9IGFubm90YXRpb24uYW5ub3RhdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9ucy5fYW5ub3RhdGlvbnNbYCR7dm9jQWxpYXN9LiR7dm9jVGVybVdpdGhRdWFsaWZpZXJ9YF0gPVxuICAgICAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdO1xuICAgICAgICBvYmplY3RNYXBbYW5ub3RhdGlvblRhcmdldF0gPSBjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl07XG4gICAgfSk7XG59XG4vKipcbiAqIFByb2Nlc3MgYWxsIHRoZSB1bnJlc29sdmVkIHRhcmdldHMgc28gZmFyIHRvIHRyeSBhbmQgc2VlIGlmIHRoZXkgYXJlIHJlc29sdmVhYmxlIGluIHRoZSBlbmQuXG4gKlxuICogQHBhcmFtIHVucmVzb2x2ZWRUYXJnZXRzXG4gKiBAcGFyYW0gb2JqZWN0TWFwXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NVbnJlc29sdmVkVGFyZ2V0cyh1bnJlc29sdmVkVGFyZ2V0cywgb2JqZWN0TWFwKSB7XG4gICAgdW5yZXNvbHZlZFRhcmdldHMuZm9yRWFjaCgocmVzb2x2YWJsZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRUb1Jlc29sdmUgPSByZXNvbHZhYmxlLnRvUmVzb2x2ZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0U3RyID0gdGFyZ2V0VG9SZXNvbHZlLiR0YXJnZXQ7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gb2JqZWN0TWFwW3RhcmdldFN0cl07XG4gICAgICAgIGNvbnN0IHsgYW5ub3RhdGlvbnNUZXJtLCBhbm5vdGF0aW9uVHlwZSB9ID0gdGFyZ2V0VG9SZXNvbHZlO1xuICAgICAgICBkZWxldGUgdGFyZ2V0VG9SZXNvbHZlLmFubm90YXRpb25UeXBlO1xuICAgICAgICBkZWxldGUgdGFyZ2V0VG9SZXNvbHZlLmFubm90YXRpb25zVGVybTtcbiAgICAgICAgaWYgKHJlc29sdmFibGUuaW5saW5lICYmICEocmVzb2x2ZWRUYXJnZXQgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBpbmxpbmUgdGhlIHJlc29sdmVkIHRhcmdldFxuICAgICAgICAgICAgbGV0IGtleXM7XG4gICAgICAgICAgICBmb3IgKGtleXMgaW4gdGFyZ2V0VG9SZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRhcmdldFRvUmVzb2x2ZVtrZXlzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0VG9SZXNvbHZlLCByZXNvbHZlZFRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBhc3NpZ24gdGhlIHJlc29sdmVkIHRhcmdldFxuICAgICAgICAgICAgdGFyZ2V0VG9SZXNvbHZlLiR0YXJnZXQgPSByZXNvbHZlZFRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc29sdmVkVGFyZ2V0KSB7XG4gICAgICAgICAgICB0YXJnZXRUb1Jlc29sdmUudGFyZ2V0U3RyaW5nID0gdGFyZ2V0U3RyO1xuICAgICAgICAgICAgaWYgKGFubm90YXRpb25zVGVybSAmJiBhbm5vdGF0aW9uVHlwZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9FcnJvck1zZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RyICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdIaW50OiBDaGVjayBhbmQgY29ycmVjdCB0aGUgcGF0aCB2YWx1ZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIG1ldGFkYXRhIChhbm5vdGF0aW9uLnhtbCBmaWxlIG9yIENEUyBhbm5vdGF0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uKTogXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPEFubm90YXRpb24gVGVybSA9ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnNUZXJtICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPFJlY29yZCBUeXBlID0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVHlwZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxBbm5vdGF0aW9uUGF0aCA9ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RyICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc+J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkQW5ub3RhdGlvbkVycm9yTWVzc2FnZSh0YXJnZXRTdHIsIG9FcnJvck1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRhcmdldFRvUmVzb2x2ZS50ZXJtO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB0YXJnZXRUb1Jlc29sdmUucGF0aDtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXJtSW5mbyA9IHRhcmdldFN0ciA/IHRhcmdldFN0ci5zcGxpdCgnLycpWzBdIDogdGFyZ2V0U3RyO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9FcnJvck1zZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RyICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdIaW50OiBDaGVjayBhbmQgY29ycmVjdCB0aGUgcGF0aCB2YWx1ZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIG1ldGFkYXRhIChhbm5vdGF0aW9uLnhtbCBmaWxlIG9yIENEUyBhbm5vdGF0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uKTogXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPEFubm90YXRpb24gVGVybSA9ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVybUluZm8gK1xuICAgICAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8UHJvcGVydHlWYWx1ZSBQcm9wZXJ0eSA9ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgUGF0aD0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc+J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkQW5ub3RhdGlvbkVycm9yTWVzc2FnZSh0YXJnZXRTdHIsIG9FcnJvck1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogTWVyZ2UgYW5ub3RhdGlvbiBmcm9tIGRpZmZlcmVudCBzb3VyY2UgdG9nZXRoZXIgYnkgb3ZlcndyaXRpbmcgYXQgdGhlIHRlcm0gbGV2ZWwuXG4gKlxuICogQHBhcmFtIHJhd01ldGFkYXRhXG4gKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIG1lcmdlZCBhbm5vdGF0aW9uc1xuICovXG5mdW5jdGlvbiBtZXJnZUFubm90YXRpb25zKHJhd01ldGFkYXRhKSB7XG4gICAgY29uc3QgYW5ub3RhdGlvbkxpc3RQZXJUYXJnZXQgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhyYXdNZXRhZGF0YS5zY2hlbWEuYW5ub3RhdGlvbnMpLmZvckVhY2goKGFubm90YXRpb25Tb3VyY2UpID0+IHtcbiAgICAgICAgcmF3TWV0YWRhdGEuc2NoZW1hLmFubm90YXRpb25zW2Fubm90YXRpb25Tb3VyY2VdLmZvckVhY2goKGFubm90YXRpb25MaXN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0TmFtZSA9ICgwLCB1dGlsc18xLnVuYWxpYXMpKHJhd01ldGFkYXRhLnJlZmVyZW5jZXMsIGFubm90YXRpb25MaXN0LnRhcmdldCk7XG4gICAgICAgICAgICBhbm5vdGF0aW9uTGlzdC5fX3NvdXJjZSA9IGFubm90YXRpb25Tb3VyY2U7XG4gICAgICAgICAgICBpZiAoIWFubm90YXRpb25MaXN0UGVyVGFyZ2V0W2N1cnJlbnRUYXJnZXROYW1lXSkge1xuICAgICAgICAgICAgICAgIGFubm90YXRpb25MaXN0UGVyVGFyZ2V0W2N1cnJlbnRUYXJnZXROYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IGFubm90YXRpb25MaXN0LmFubm90YXRpb25zLmNvbmNhdCgpLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IGN1cnJlbnRUYXJnZXROYW1lXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uTGlzdFBlclRhcmdldFtjdXJyZW50VGFyZ2V0TmFtZV0uX19zb3VyY2UgPSBhbm5vdGF0aW9uU291cmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbkxpc3QuYW5ub3RhdGlvbnMuZm9yRWFjaCgoYW5ub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSBhbm5vdGF0aW9uTGlzdFBlclRhcmdldFtjdXJyZW50VGFyZ2V0TmFtZV0uYW5ub3RhdGlvbnMuZmluZEluZGV4KChyZWZlcmVuY2VBbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJlZmVyZW5jZUFubm90YXRpb24udGVybSA9PT0gYW5ub3RhdGlvbi50ZXJtICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlQW5ub3RhdGlvbi5xdWFsaWZpZXIgPT09IGFubm90YXRpb24ucXVhbGlmaWVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24uX19zb3VyY2UgPSBhbm5vdGF0aW9uU291cmNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbkxpc3RQZXJUYXJnZXRbY3VycmVudFRhcmdldE5hbWVdLmFubm90YXRpb25zLnNwbGljZShmaW5kSW5kZXgsIDEsIGFubm90YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbkxpc3RQZXJUYXJnZXRbY3VycmVudFRhcmdldE5hbWVdLmFubm90YXRpb25zLnB1c2goYW5ub3RhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFubm90YXRpb25MaXN0UGVyVGFyZ2V0O1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgUmF3TWV0YWRhdGEgaW50byBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gdG8gYmUgdXNlZCB0byBlYXNpbHkgbmF2aWdhdGUgYSBtZXRhZGF0YSBvYmplY3QgYW5kIGl0cyBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSByYXdNZXRhZGF0YVxuICogQHJldHVybnMgdGhlIGNvbnZlcnRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWV0YWRhdGEuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnQocmF3TWV0YWRhdGEpIHtcbiAgICBBTk5PVEFUSU9OX0VSUk9SUyA9IFtdO1xuICAgIGNvbnN0IG9iamVjdE1hcCA9IGJ1aWxkT2JqZWN0TWFwKHJhd01ldGFkYXRhKTtcbiAgICByZXNvbHZlTmF2aWdhdGlvblByb3BlcnRpZXMocmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eVR5cGVzLCByYXdNZXRhZGF0YS5zY2hlbWEuYXNzb2NpYXRpb25zLCBvYmplY3RNYXApO1xuICAgIHJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlDb250YWluZXIuYW5ub3RhdGlvbnMgPSB7fTtcbiAgICBsaW5rQWN0aW9uc1RvRW50aXR5VHlwZShyYXdNZXRhZGF0YS5zY2hlbWEubmFtZXNwYWNlLCByYXdNZXRhZGF0YS5zY2hlbWEuYWN0aW9ucywgb2JqZWN0TWFwKTtcbiAgICBsaW5rRW50aXR5VHlwZVRvRW50aXR5U2V0KHJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlTZXRzLCBvYmplY3RNYXAsIHJhd01ldGFkYXRhLnJlZmVyZW5jZXMpO1xuICAgIGxpbmtFbnRpdHlUeXBlVG9TaW5nbGV0b24ocmF3TWV0YWRhdGEuc2NoZW1hLnNpbmdsZXRvbnMsIG9iamVjdE1hcCwgcmF3TWV0YWRhdGEucmVmZXJlbmNlcyk7XG4gICAgbGlua1Byb3BlcnRpZXNUb0NvbXBsZXhUeXBlcyhyYXdNZXRhZGF0YS5zY2hlbWEuZW50aXR5VHlwZXMsIG9iamVjdE1hcCk7XG4gICAgcHJlcGFyZUNvbXBsZXhUeXBlcyhyYXdNZXRhZGF0YS5zY2hlbWEuY29tcGxleFR5cGVzLCByYXdNZXRhZGF0YS5zY2hlbWEuYXNzb2NpYXRpb25zLCBvYmplY3RNYXApO1xuICAgIGNvbnN0IHVucmVzb2x2ZWRUYXJnZXRzID0gW107XG4gICAgY29uc3QgdW5yZXNvbHZlZEFubm90YXRpb25zID0gW107XG4gICAgY29uc3QgYW5ub3RhdGlvbkxpc3RQZXJUYXJnZXQgPSBtZXJnZUFubm90YXRpb25zKHJhd01ldGFkYXRhKTtcbiAgICBPYmplY3Qua2V5cyhhbm5vdGF0aW9uTGlzdFBlclRhcmdldCkuZm9yRWFjaCgoY3VycmVudFRhcmdldE5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgYW5ub3RhdGlvbkxpc3QgPSBhbm5vdGF0aW9uTGlzdFBlclRhcmdldFtjdXJyZW50VGFyZ2V0TmFtZV07XG4gICAgICAgIGNvbnN0IG9iamVjdE1hcEVsZW1lbnQgPSBvYmplY3RNYXBbY3VycmVudFRhcmdldE5hbWVdO1xuICAgICAgICBpZiAoIW9iamVjdE1hcEVsZW1lbnQgJiYgKGN1cnJlbnRUYXJnZXROYW1lID09PSBudWxsIHx8IGN1cnJlbnRUYXJnZXROYW1lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXJyZW50VGFyZ2V0TmFtZS5pbmRleE9mKCdAJykpID4gMCkge1xuICAgICAgICAgICAgdW5yZXNvbHZlZEFubm90YXRpb25zLnB1c2goYW5ub3RhdGlvbkxpc3QpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9iamVjdE1hcEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGxldCBhbGxUYXJnZXRzID0gW29iamVjdE1hcEVsZW1lbnRdO1xuICAgICAgICAgICAgbGV0IGJPdmVycmlkZUV4aXN0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvYmplY3RNYXBFbGVtZW50Ll90eXBlID09PSAnVW5ib3VuZEdlbmVyaWNBY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYWxsVGFyZ2V0cyA9IG9iamVjdE1hcEVsZW1lbnQuYWN0aW9ucztcbiAgICAgICAgICAgICAgICBiT3ZlcnJpZGVFeGlzdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWxsVGFyZ2V0cy5mb3JFYWNoKChjdXJyZW50VGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxBbm5vdGF0aW9uczogdW5yZXNvbHZlZEFubm90YXRpb25zLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlOiBhbm5vdGF0aW9uTGlzdC5fX3NvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldDogY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRlcm06ICcnLFxuICAgICAgICAgICAgICAgICAgICByYXdNZXRhZGF0YTogcmF3TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHVucmVzb2x2ZWRBbm5vdGF0aW9uczogdW5yZXNvbHZlZFRhcmdldHNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHByb2Nlc3NBbm5vdGF0aW9ucyhjdXJyZW50Q29udGV4dCwgYW5ub3RhdGlvbkxpc3QsIG9iamVjdE1hcCwgYk92ZXJyaWRlRXhpc3RpbmcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBleHRyYVVucmVzb2x2ZWRBbm5vdGF0aW9ucyA9IFtdO1xuICAgIHVucmVzb2x2ZWRBbm5vdGF0aW9ucy5mb3JFYWNoKChhbm5vdGF0aW9uTGlzdCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0TmFtZSA9ICgwLCB1dGlsc18xLnVuYWxpYXMpKHJhd01ldGFkYXRhLnJlZmVyZW5jZXMsIGFubm90YXRpb25MaXN0LnRhcmdldCk7XG4gICAgICAgIGxldCBbYmFzZU9iaiwgYW5ub3RhdGlvblBhcnRdID0gY3VycmVudFRhcmdldE5hbWUuc3BsaXQoJ0AnKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0U3BsaXQgPSBhbm5vdGF0aW9uUGFydC5zcGxpdCgnLycpO1xuICAgICAgICBiYXNlT2JqID0gYmFzZU9iaiArICdAJyArIHRhcmdldFNwbGl0WzBdO1xuICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0U3BsaXQuc2xpY2UoMSkucmVkdWNlKChjdXJyZW50T2JqLCBwYXRoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudE9iaiA9PT0gbnVsbCB8fCBjdXJyZW50T2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXJyZW50T2JqW3BhdGhdO1xuICAgICAgICB9LCBvYmplY3RNYXBbYmFzZU9ial0pO1xuICAgICAgICBpZiAoIWN1cnJlbnRUYXJnZXQgfHwgdHlwZW9mIGN1cnJlbnRUYXJnZXQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBBTk5PVEFUSU9OX0VSUk9SUy5wdXNoKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVGhlIGZvbGxvd2luZyBhbm5vdGF0aW9uIHRhcmdldCB3YXMgbm90IGZvdW5kIG9uIHRoZSBzZXJ2aWNlICcgKyBjdXJyZW50VGFyZ2V0TmFtZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQW5ub3RhdGlvbnM6IGV4dHJhVW5yZXNvbHZlZEFubm90YXRpb25zLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2U6IGFubm90YXRpb25MaXN0Ll9fc291cmNlLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgY3VycmVudFRlcm06ICcnLFxuICAgICAgICAgICAgICAgIHJhd01ldGFkYXRhOiByYXdNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICB1bnJlc29sdmVkQW5ub3RhdGlvbnM6IHVucmVzb2x2ZWRUYXJnZXRzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcHJvY2Vzc0Fubm90YXRpb25zKGN1cnJlbnRDb250ZXh0LCBhbm5vdGF0aW9uTGlzdCwgb2JqZWN0TWFwLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBwcm9jZXNzVW5yZXNvbHZlZFRhcmdldHModW5yZXNvbHZlZFRhcmdldHMsIG9iamVjdE1hcCk7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBBTExfQU5OT1RBVElPTl9FUlJPUlMpIHtcbiAgICAgICAgQU5OT1RBVElPTl9FUlJPUlMucHVzaChBTExfQU5OT1RBVElPTl9FUlJPUlNbcHJvcGVydHldWzBdKTtcbiAgICB9XG4gICAgcmF3TWV0YWRhdGEuZW50aXR5U2V0cyA9IHJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlTZXRzO1xuICAgIGNvbnN0IGV4dHJhUmVmZXJlbmNlcyA9IHJhd01ldGFkYXRhLnJlZmVyZW5jZXMuZmlsdGVyKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgcmV0dXJuIHV0aWxzXzEuZGVmYXVsdFJlZmVyZW5jZXMuZmluZCgoZGVmYXVsdFJlZikgPT4gZGVmYXVsdFJlZi5uYW1lc3BhY2UgPT09IHJlZmVyZW5jZS5uYW1lc3BhY2UpID09PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgY29uc3QgY29udmVydGVkT3V0cHV0ID0ge1xuICAgICAgICB2ZXJzaW9uOiByYXdNZXRhZGF0YS52ZXJzaW9uLFxuICAgICAgICBhbm5vdGF0aW9uczogcmF3TWV0YWRhdGEuc2NoZW1hLmFubm90YXRpb25zLFxuICAgICAgICBuYW1lc3BhY2U6IHJhd01ldGFkYXRhLnNjaGVtYS5uYW1lc3BhY2UsXG4gICAgICAgIGVudGl0eUNvbnRhaW5lcjogcmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eUNvbnRhaW5lcixcbiAgICAgICAgYWN0aW9uczogcmF3TWV0YWRhdGEuc2NoZW1hLmFjdGlvbnMsXG4gICAgICAgIGVudGl0eVNldHM6IHJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlTZXRzLFxuICAgICAgICBzaW5nbGV0b25zOiByYXdNZXRhZGF0YS5zY2hlbWEuc2luZ2xldG9ucyxcbiAgICAgICAgZW50aXR5VHlwZXM6IHJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlUeXBlcyxcbiAgICAgICAgY29tcGxleFR5cGVzOiByYXdNZXRhZGF0YS5zY2hlbWEuY29tcGxleFR5cGVzLFxuICAgICAgICB0eXBlRGVmaW5pdGlvbnM6IHJhd01ldGFkYXRhLnNjaGVtYS50eXBlRGVmaW5pdGlvbnMsXG4gICAgICAgIHJlZmVyZW5jZXM6IHV0aWxzXzEuZGVmYXVsdFJlZmVyZW5jZXMuY29uY2F0KGV4dHJhUmVmZXJlbmNlcyksXG4gICAgICAgIGRpYWdub3N0aWNzOiBBTk5PVEFUSU9OX0VSUk9SUy5jb25jYXQoKVxuICAgIH07XG4gICAgY29udmVydGVkT3V0cHV0LnJlc29sdmVQYXRoID0gY3JlYXRlR2xvYmFsUmVzb2x2ZShjb252ZXJ0ZWRPdXRwdXQsIG9iamVjdE1hcCk7XG4gICAgcmV0dXJuIGNvbnZlcnRlZE91dHB1dDtcbn1cbmV4cG9ydHMuY29udmVydCA9IGNvbnZlcnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb252ZXJ0ZXIuanMubWFwXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMjY6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHsgdmFsdWU6IHRydWUgfSkpO1xuX19leHBvcnRTdGFyKF9fd2VicGFja19yZXF1aXJlX18oNTgyKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXyg5MjIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKDgwMCksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4MDA6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7IHZhbHVlOiB0cnVlIH0pKTtcbmV4cG9ydHMuRGVjaW1hbCA9IGV4cG9ydHMuaXNDb21wbGV4VHlwZURlZmluaXRpb24gPSBleHBvcnRzLlRlcm1Ub1R5cGVzID0gZXhwb3J0cy51bmFsaWFzID0gZXhwb3J0cy5hbGlhcyA9IGV4cG9ydHMuZGVmYXVsdFJlZmVyZW5jZXMgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHRSZWZlcmVuY2VzID0gW1xuICAgIHsgYWxpYXM6ICdDYXBhYmlsaXRpZXMnLCBuYW1lc3BhY2U6ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxJywgdXJpOiAnJyB9LFxuICAgIHsgYWxpYXM6ICdBZ2dyZWdhdGlvbicsIG5hbWVzcGFjZTogJ09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMScsIHVyaTogJycgfSxcbiAgICB7IGFsaWFzOiAnVmFsaWRhdGlvbicsIG5hbWVzcGFjZTogJ09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxJywgdXJpOiAnJyB9LFxuICAgIHsgbmFtZXNwYWNlOiAnT3JnLk9EYXRhLkNvcmUuVjEnLCBhbGlhczogJ0NvcmUnLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdPcmcuT0RhdGEuTWVhc3VyZXMuVjEnLCBhbGlhczogJ01lYXN1cmVzJywgdXJpOiAnJyB9LFxuICAgIHsgbmFtZXNwYWNlOiAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxJywgYWxpYXM6ICdDb21tb24nLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MScsIGFsaWFzOiAnVUknLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxJywgYWxpYXM6ICdTZXNzaW9uJywgdXJpOiAnJyB9LFxuICAgIHsgbmFtZXNwYWNlOiAnY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxJywgYWxpYXM6ICdBbmFseXRpY3MnLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MScsIGFsaWFzOiAnQ29kZUxpc3QnLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEnLCBhbGlhczogJ1BlcnNvbmFsRGF0YScsIHVyaTogJycgfSxcbiAgICB7IG5hbWVzcGFjZTogJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEnLCBhbGlhczogJ0NvbW11bmljYXRpb24nLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MScsIGFsaWFzOiAnSFRNTDUnLCB1cmk6ICcnIH1cbl07XG4vKipcbiAqIFRyYW5zZm9ybSBhbiB1bmFsaWFzZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFubm90YXRpb24gdG8gdGhlIGFsaWFzZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyBjdXJyZW50UmVmZXJlbmNlcyBmb3IgdGhlIHByb2plY3RcbiAqIEBwYXJhbSB1bmFsaWFzZWRWYWx1ZSB0aGUgdW5hbGlhc2VkIHZhbHVlXG4gKiBAcmV0dXJucyB0aGUgYWxpYXNlZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzYW1lXG4gKi9cbmZ1bmN0aW9uIGFsaWFzKHJlZmVyZW5jZXMsIHVuYWxpYXNlZFZhbHVlKSB7XG4gICAgaWYgKCFyZWZlcmVuY2VzLnJldmVyc2VSZWZlcmVuY2VNYXApIHtcbiAgICAgICAgcmVmZXJlbmNlcy5yZXZlcnNlUmVmZXJlbmNlTWFwID0gcmVmZXJlbmNlcy5yZWR1Y2UoKG1hcCwgcmVmKSA9PiB7XG4gICAgICAgICAgICBtYXBbcmVmLm5hbWVzcGFjZV0gPSByZWY7XG4gICAgICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIGlmICghdW5hbGlhc2VkVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHVuYWxpYXNlZFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBsYXN0RG90SW5kZXggPSB1bmFsaWFzZWRWYWx1ZS5sYXN0SW5kZXhPZignLicpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHVuYWxpYXNlZFZhbHVlLnN1YnN0cmluZygwLCBsYXN0RG90SW5kZXgpO1xuICAgIGNvbnN0IHZhbHVlID0gdW5hbGlhc2VkVmFsdWUuc3Vic3RyaW5nKGxhc3REb3RJbmRleCArIDEpO1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcFtuYW1lc3BhY2VdO1xuICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgICAgcmV0dXJuIGAke3JlZmVyZW5jZS5hbGlhc30uJHt2YWx1ZX1gO1xuICAgIH1cbiAgICBlbHNlIGlmICh1bmFsaWFzZWRWYWx1ZS5pbmRleE9mKCdAJykgIT09IC0xKSB7XG4gICAgICAgIC8vIFRyeSB0byBzZWUgaWYgaXQncyBhbiBhbm5vdGF0aW9uIFBhdGggbGlrZSB0b19TYWxlc09yZGVyL0BVSS5MaW5lSXRlbVxuICAgICAgICBjb25zdCBbcHJlQWxpYXMsIC4uLnBvc3RBbGlhc10gPSB1bmFsaWFzZWRWYWx1ZS5zcGxpdCgnQCcpO1xuICAgICAgICByZXR1cm4gYCR7cHJlQWxpYXN9QCR7YWxpYXMocmVmZXJlbmNlcywgcG9zdEFsaWFzLmpvaW4oJ0AnKSl9YDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmFsaWFzZWRWYWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLmFsaWFzID0gYWxpYXM7XG4vKipcbiAqIFRyYW5zZm9ybSBhbiBhbGlhc2VkIHN0cmluZyByZXByZXNlbnRhdGlvbiBhbm5vdGF0aW9uIHRvIHRoZSB1bmFsaWFzZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyBjdXJyZW50UmVmZXJlbmNlcyBmb3IgdGhlIHByb2plY3RcbiAqIEBwYXJhbSBhbGlhc2VkVmFsdWUgdGhlIGFsaWFzZWQgdmFsdWVcbiAqIEByZXR1cm5zIHRoZSB1bmFsaWFzZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2FtZVxuICovXG5mdW5jdGlvbiB1bmFsaWFzKHJlZmVyZW5jZXMsIGFsaWFzZWRWYWx1ZSkge1xuICAgIGlmICghcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXApIHtcbiAgICAgICAgcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXAgPSByZWZlcmVuY2VzLnJlZHVjZSgobWFwLCByZWYpID0+IHtcbiAgICAgICAgICAgIG1hcFtyZWYuYWxpYXNdID0gcmVmO1xuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgfSwge30pO1xuICAgIH1cbiAgICBpZiAoIWFsaWFzZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gYWxpYXNlZFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBbdm9jQWxpYXMsIC4uLnZhbHVlXSA9IGFsaWFzZWRWYWx1ZS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMucmVmZXJlbmNlTWFwW3ZvY0FsaWFzXTtcbiAgICBpZiAocmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBgJHtyZWZlcmVuY2UubmFtZXNwYWNlfS4ke3ZhbHVlLmpvaW4oJy4nKX1gO1xuICAgIH1cbiAgICBlbHNlIGlmIChhbGlhc2VkVmFsdWUuaW5kZXhPZignQCcpICE9PSAtMSkge1xuICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIGl0J3MgYW4gYW5ub3RhdGlvbiBQYXRoIGxpa2UgdG9fU2FsZXNPcmRlci9AVUkuTGluZUl0ZW1cbiAgICAgICAgY29uc3QgW3ByZUFsaWFzLCAuLi5wb3N0QWxpYXNdID0gYWxpYXNlZFZhbHVlLnNwbGl0KCdAJyk7XG4gICAgICAgIHJldHVybiBgJHtwcmVBbGlhc31AJHt1bmFsaWFzKHJlZmVyZW5jZXMsIHBvc3RBbGlhcy5qb2luKCdAJykpfWA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gYWxpYXNlZFZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydHMudW5hbGlhcyA9IHVuYWxpYXM7XG52YXIgVGVybVRvVHlwZXM7XG4oZnVuY3Rpb24gKFRlcm1Ub1R5cGVzKSB7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5TZWN1cml0eVNjaGVtZXNcIl0gPSBcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLlNlY3VyaXR5U2NoZW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5BdXRob3JpemF0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEuQXV0aG9yaXphdGlvblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUmV2aXNpb25zXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXZpc2lvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkxpbmtzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5MaW5rXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5FeGFtcGxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5FeGFtcGxlVmFsdWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk1lc3NhZ2VzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5NZXNzYWdlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuVmFsdWVFeGNlcHRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlZhbHVlRXhjZXB0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUmVzb3VyY2VFeGNlcHRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlJlc291cmNlRXhjZXB0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuRGF0YU1vZGlmaWNhdGlvbkV4Y2VwdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuRGF0YU1vZGlmaWNhdGlvbkV4Y2VwdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLklzTGFuZ3VhZ2VEZXBlbmRlbnRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuRGVyZWZlcmVuY2VhYmxlSURzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbnZlbnRpb25hbElEc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5QZXJtaXNzaW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUGVybWlzc2lvblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuRGVmYXVsdE5hbWVzcGFjZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWREZWZhdWx0VmFsdWVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSXNVUkxcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSXNNZWRpYVR5cGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQ29udGVudERpc3Bvc2l0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5Db250ZW50RGlzcG9zaXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpbWlzdGljQ29uY3VycmVuY3lcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkFkZGl0aW9uYWxQcm9wZXJ0aWVzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkF1dG9FeHBhbmRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQXV0b0V4cGFuZFJlZmVyZW5jZXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuTWF5SW1wbGVtZW50XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUeXBlTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3JkZXJlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Qb3NpdGlvbmFsSW5zZXJ0XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkFsdGVybmF0ZUtleXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkFsdGVybmF0ZUtleVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3B0aW9uYWxQYXJhbWV0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLk9wdGlvbmFsUGFyYW1ldGVyVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlXCJdID0gXCJFZG0uQm9vbGVhblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuU3ltYm9saWNOYW1lXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbmZvcm1hbmNlTGV2ZWxcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29uZm9ybWFuY2VMZXZlbFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQXN5bmNocm9ub3VzUmVxdWVzdHNTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaENvbnRpbnVlT25FcnJvclN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLklzb2xhdGlvblN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Jc29sYXRpb25MZXZlbFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Dcm9zc0pvaW5TdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1N1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluZGV4YWJsZUJ5S2V5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVG9wU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2tpcFN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbXB1dGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWxlY3RTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlbGVjdFN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU29ydFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5FeHBhbmRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRXhwYW5kUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VhcmNoUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5LZXlBc1NlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5RdWVyeVNlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbGxlY3Rpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db2xsZWN0aW9uUHJvcGVydHlSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk9wZXJhdGlvblJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5PcGVyYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkFubm90YXRpb25WYWx1ZXNJblF1ZXJ5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTW9kaWZpY2F0aW9uUXVlcnlPcHRpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1vZGlmaWNhdGlvblF1ZXJ5T3B0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuUmVhZFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5SZWFkUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21IZWFkZXJzXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVBhcmFtZXRlclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21RdWVyeU9wdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ3VzdG9tUGFyYW1ldGVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1lZGlhTG9jYXRpb25VcGRhdGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuR3JvdXBhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BZ2dyZWdhdGFibGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5MZXZlbGVkSGllcmFyY2h5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5XCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkF2YWlsYWJsZU9uQWdncmVnYXRlc1wiXSA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkF2YWlsYWJsZU9uQWdncmVnYXRlc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW1cIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRWYWx1ZXNcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRWYWx1ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTXVsdGlwbGVPZlwiXSA9IFwiRWRtLkRlY2ltYWxcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkNvbnN0cmFpbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5JdGVtc09mXCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5JdGVtc09mVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuT3BlblByb3BlcnR5VHlwZUNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZFR5cGVOYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5EZXJpdmVkVHlwZUNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZFR5cGVOYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BbGxvd2VkVGVybXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZFRlcm1OYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BcHBsaWNhYmxlVGVybXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZFRlcm1OYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhJdGVtc1wiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5JdGVtc1wiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuTWVhc3VyZXMuVjEuU2NhbGVcIl0gPSBcIkVkbS5CeXRlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuTWVhc3VyZXMuVjEuRHVyYXRpb25HcmFudWxhcml0eVwiXSA9IFwiT3JnLk9EYXRhLk1lYXN1cmVzLlYxLkR1cmF0aW9uR3JhbnVsYXJpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuRGltZW5zaW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5NZWFzdXJlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BY2N1bXVsYXRpdmVNZWFzdXJlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5Sb2xsZWRVcFByb3BlcnR5Q291bnRcIl0gPSBcIkVkbS5JbnQxNlwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLlBsYW5uaW5nQWN0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydGllc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZXJ2aWNlVmVyc2lvblwiXSA9IFwiRWRtLkludDMyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VydmljZVNjaGVtYVZlcnNpb25cIl0gPSBcIkVkbS5JbnQzMlwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRGb3JcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0xhbmd1YWdlSWRlbnRpZmllclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEZvcm1hdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRGb3JtYXRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc1VwcGVyQ2FzZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDdXJyZW5jeVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNVbml0XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vbml0U3BlY2lmaWNTY2FsZVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vbml0U3BlY2lmaWNQcmVjaXNpb25cIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2Vjb25kYXJ5S2V5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWluT2NjdXJzXCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXhPY2N1cnNcIl0gPSBcIkVkbS5JbnQ2NFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFzc29jaWF0aW9uRW50aXR5XCJdID0gXCJFZG0uTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRlcml2ZWROYXZpZ2F0aW9uXCJdID0gXCJFZG0uTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1hc2tlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWFza2VkQWx3YXlzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNJbnN0YW5jZUFubm90YXRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGxpY2F0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbGljYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGltZXN0YW1wXCJdID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXNcIl0gPSBcIkVkbS5Db21wbGV4VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLm51bWVyaWNTZXZlcml0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk51bWVyaWNNZXNzYWdlU2V2ZXJpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWF4aW11bU51bWVyaWNNZXNzYWdlU2V2ZXJpdHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5OdW1lcmljTWVzc2FnZVNldmVyaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQWN0aW9uQ3JpdGljYWxcIl0gPSBcIkVkbS5Cb29sZWFuXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXR0cmlidXRlc1wiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlbGF0ZWRSZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcIkVkbS5Bbm5vdGF0aW9uUGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkludGVydmFsXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSW50ZXJ2YWxUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuV2Vha1JlZmVyZW50aWFsQ29uc3RyYWludFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLldlYWtSZWZlcmVudGlhbENvbnN0cmFpbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNOYXR1cmFsUGVyc29uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2ltcGxlSWRlbnRpZmllclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0TWFwcGluZ1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdE1hcHBpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJIYWxmeWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclF1YXJ0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJNb250aFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhcldlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGF5T2ZDYWxlbmRhck1vbnRoXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mQ2FsZW5kYXJZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhckhhbGZ5ZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhclF1YXJ0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyTW9udGhcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyV2Vla1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhckRhdGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxQZXJpb2RcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclBlcmlvZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFdlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhcldlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGF5T2ZGaXNjYWxZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJWYXJpYW50XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NdXR1YWxseUV4Y2x1c2l2ZVRlcm1cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRBY3RpdmF0aW9uVmlhXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2ltcGxlSWRlbnRpZmllclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVkaXRhYmxlRmllbGRGb3JcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUXVhbGlmaWVkTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVIaWdoXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlclwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlclR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZWN1cnNpdmVIaWVyYXJjaHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ3JlYXRlZEF0XCJdID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DcmVhdGVkQnlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vc2VySURcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DaGFuZ2VkQXRcIl0gPSBcIkVkbS5EYXRlVGltZU9mZnNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNoYW5nZWRCeVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVzZXJJRFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGx5TXVsdGlVbml0QmVoYXZpb3JGb3JTb3J0aW5nQW5kRmlsdGVyaW5nXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkN1cnJlbmN5Q29kZXNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkNvZGVMaXN0U291cmNlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Vbml0c09mTWVhc3VyZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuQ29kZUxpc3RTb3VyY2VcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLlN0YW5kYXJkQ29kZVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuRXh0ZXJuYWxDb2RlXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Jc0NvbmZpZ3VyYXRpb25EZXByZWNhdGlvbkNvZGVcIl0gPSBcIkVkbS5Cb29sZWFuXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQWRkcmVzc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Jc0VtYWlsQWRkcmVzc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLklzUGhvbmVOdW1iZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5FdmVudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5FdmVudERhdGFcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuVGFza1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5UYXNrRGF0YVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5NZXNzYWdlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLk1lc3NhZ2VEYXRhXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkVudGl0eVNlbWFudGljc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkVudGl0eVNlbWFudGljc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5GaWVsZFNlbWFudGljc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkZpZWxkU2VtYW50aWNzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlQZXJzb25hbFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm9cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm9UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JZGVudGlmaWNhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkJhZGdlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5CYWRnZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU3RhdHVzSW5mb1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbm5lY3RlZEZpZWxkc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HZW9Mb2NhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db250YWN0c1wiXSA9IFwiRWRtLkFubm90YXRpb25QYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NZWRpYVJlc291cmNlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NZWRpYVJlc291cmNlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5LUElcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLktQSVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydERlZmluaXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlMYWJlbHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5TGFiZWxUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlF1aWNrVmlld0ZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlF1aWNrQ3JlYXRlRmFjZXRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmlsdGVyRmFjZXRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWZlcmVuY2VGYWNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25WYXJpYW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25WYXJpYW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGhpbmdQZXJzcGVjdGl2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc1N1bW1hcnlcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUGFydE9mUHJldmlld1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NYXBcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2FsbGVyeVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0ltYWdlVVJMXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzSW1hZ2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTXVsdGlMaW5lVGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JlYXRlSGlkZGVuXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlVwZGF0ZUhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EZWxldGVIaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRW1waGFzaXplZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5PcmRlckJ5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QYXJhbWV0ZXJEZWZhdWx0VmFsdWVcIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvblN0YXRlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvblN0YXRlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25MaXN0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvbkxpc3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhUTUw1LnYxLkNzc0RlZmF1bHRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MS5Dc3NEZWZhdWx0c1R5cGVcIjtcbn0pKFRlcm1Ub1R5cGVzID0gZXhwb3J0cy5UZXJtVG9UeXBlcyB8fCAoZXhwb3J0cy5UZXJtVG9UeXBlcyA9IHt9KSk7XG4vKipcbiAqIERpZmZlcmVudGlhdGUgYmV0d2VlbiBhIENvbXBsZXhUeXBlIGFuZCBhIFR5cGVEZWZpbml0aW9uLlxuICogQHBhcmFtIGNvbXBsZXhUeXBlRGVmaW5pdGlvblxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBjb21wbGV4IHR5cGVcbiAqL1xuZnVuY3Rpb24gaXNDb21wbGV4VHlwZURlZmluaXRpb24oY29tcGxleFR5cGVEZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuICghIWNvbXBsZXhUeXBlRGVmaW5pdGlvbiAmJiBjb21wbGV4VHlwZURlZmluaXRpb24uX3R5cGUgPT09ICdDb21wbGV4VHlwZScgJiYgISFjb21wbGV4VHlwZURlZmluaXRpb24ucHJvcGVydGllcyk7XG59XG5leHBvcnRzLmlzQ29tcGxleFR5cGVEZWZpbml0aW9uID0gaXNDb21wbGV4VHlwZURlZmluaXRpb247XG5mdW5jdGlvbiBEZWNpbWFsKHZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXNEZWNpbWFsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlT2YoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5EZWNpbWFsID0gRGVjaW1hbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcFxuXG4vKioqLyB9KSxcblxuLyoqKi8gOTIyOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoeyB2YWx1ZTogdHJ1ZSB9KSk7XG5leHBvcnRzLnJldmVydFRlcm1Ub0dlbmVyaWNUeXBlID0gdm9pZCAwO1xuY29uc3QgdXRpbHNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oODAwKTtcbi8qKlxuICogUmV2ZXJ0IGFuIG9iamVjdCB0byBpdHMgcmF3IHR5cGUgZXF1aXZhbGVudC5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCByZWZlcmVuY2VcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmV2ZXJ0XG4gKiBAcmV0dXJucyB0aGUgcmF3IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHJldmVydE9iamVjdFRvUmF3VHlwZShyZWZlcmVuY2VzLCB2YWx1ZSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgQ29sbGVjdGlvbjogdmFsdWUubWFwKChhbm5vKSA9PiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vKSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKF9hID0gdmFsdWUuaXNEZWNpbWFsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0RlY2ltYWwnLFxuICAgICAgICAgICAgRGVjaW1hbDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKChfYiA9IHZhbHVlLmlzU3RyaW5nKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVNYXRjaGVzID0gdmFsdWUuc3BsaXQoJy4nKTtcbiAgICAgICAgaWYgKHZhbHVlTWF0Y2hlcy5sZW5ndGggPiAxICYmIHJlZmVyZW5jZXMuZmluZCgocmVmKSA9PiByZWYuYWxpYXMgPT09IHZhbHVlTWF0Y2hlc1swXSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnRW51bU1lbWJlcicsXG4gICAgICAgICAgICAgICAgRW51bU1lbWJlcjogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgICAgIFN0cmluZzogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdQYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnUGF0aCcsXG4gICAgICAgICAgICBQYXRoOiB2YWx1ZS5wYXRoXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdBbm5vdGF0aW9uUGF0aCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0Fubm90YXRpb25QYXRoJyxcbiAgICAgICAgICAgIEFubm90YXRpb25QYXRoOiB2YWx1ZS52YWx1ZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnQXBwbHknKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdBcHBseScsXG4gICAgICAgICAgICBBcHBseTogdmFsdWUuQXBwbHlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ051bGwnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnUHJvcGVydHlQYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgIFByb3BlcnR5UGF0aDogdmFsdWUudmFsdWVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHZhbHVlLnZhbHVlXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJyRUeXBlJykpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ1JlY29yZCcsXG4gICAgICAgICAgICBSZWNvcmQ6IHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBSZXZlcnQgYSB2YWx1ZSB0byBpdHMgcmF3IHZhbHVlIGRlcGVuZGluZyBvbiBpdHMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCBzZXQgb2YgcmVmZXJlbmNlXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJldmVydFxuICogQHJldHVybnMgdGhlIHJhdyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIHJldmVydFZhbHVlVG9SYXdUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBjb25zdCB2YWx1ZUNvbnN0cnVjdG9yID0gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgc3dpdGNoICh2YWx1ZUNvbnN0cnVjdG9yKSB7XG4gICAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBjb25zdCB2YWx1ZU1hdGNoZXMgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBpZiAodmFsdWVNYXRjaGVzLmxlbmd0aCA+IDEgJiYgcmVmZXJlbmNlcy5maW5kKChyZWYpID0+IHJlZi5hbGlhcyA9PT0gdmFsdWVNYXRjaGVzWzBdKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0VudW1NZW1iZXInLFxuICAgICAgICAgICAgICAgICAgICBFbnVtTWVtYmVyOiB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgIFN0cmluZzogdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdCb29sJyxcbiAgICAgICAgICAgICAgICBCb29sOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTnVtYmVyJzpcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGlmICh2YWx1ZS50b1N0cmluZygpID09PSB2YWx1ZS50b0ZpeGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICAgICAgICAgICAgICBJbnQ6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdEZWNpbWFsJyxcbiAgICAgICAgICAgICAgICAgICAgRGVjaW1hbDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVzdWx0ID0gcmV2ZXJ0T2JqZWN0VG9SYXdUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuY29uc3QgcmVzdHJpY3RlZEtleXMgPSBbJyRUeXBlJywgJ3Rlcm0nLCAnX19zb3VyY2UnLCAncXVhbGlmaWVyJywgJ0FjdGlvblRhcmdldCcsICdmdWxseVF1YWxpZmllZE5hbWUnLCAnYW5ub3RhdGlvbnMnXTtcbi8qKlxuICogUmV2ZXJ0IHRoZSBjdXJyZW50IGVtYmVkZGVkIGFubm90YXRpb25zIHRvIHRoZWlyIHJhdyB0eXBlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSBjdXJyZW50IHNldCBvZiByZWZlcmVuY2VcbiAqIEBwYXJhbSBjdXJyZW50QW5ub3RhdGlvbnMgdGhlIGNvbGxlY3Rpb24gaXRlbSB0byBldmFsdWF0ZVxuICogQHBhcmFtIHRhcmdldEFubm90YXRpb25zIHRoZSBwbGFjZSB3aGVyZSB3ZSBuZWVkIHRvIGFkZCB0aGUgYW5ub3RhdGlvblxuICovXG5mdW5jdGlvbiByZXZlcnRBbm5vdGF0aW9uc1RvUmF3VHlwZShyZWZlcmVuY2VzLCBjdXJyZW50QW5ub3RhdGlvbnMsIHRhcmdldEFubm90YXRpb25zKSB7XG4gICAgT2JqZWN0LmtleXMoY3VycmVudEFubm90YXRpb25zKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSAhPT0gJ19hbm5vdGF0aW9ucycpXG4gICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudEFubm90YXRpb25zW2tleV0pLmZvckVhY2goKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFubm90YXRpb24gPSByZXZlcnRUZXJtVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBjdXJyZW50QW5ub3RhdGlvbnNba2V5XVt0ZXJtXSk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZEFubm90YXRpb24udGVybSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVuYWxpYXNlZFRlcm0gPSAoMCwgdXRpbHNfMS51bmFsaWFzKShyZWZlcmVuY2VzLCBgJHtrZXl9LiR7dGVybX1gKTtcbiAgICAgICAgICAgICAgICBpZiAodW5hbGlhc2VkVGVybSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWFsaWZpZWRTcGxpdCA9IHVuYWxpYXNlZFRlcm0uc3BsaXQoJyMnKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkQW5ub3RhdGlvbi50ZXJtID0gcXVhbGlmaWVkU3BsaXRbMF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWFsaWZpZWRTcGxpdC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWIgQW5ub3RhdGlvbiB3aXRoIGEgcXVhbGlmaWVyLCBub3Qgc3VyZSB3aGVuIHRoYXQgY2FuIGhhcHBlbiBpbiByZWFsIHNjZW5hcmlvc1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQW5ub3RhdGlvbi5xdWFsaWZpZXIgPSBxdWFsaWZpZWRTcGxpdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhcmdldEFubm90YXRpb25zLnB1c2gocGFyc2VkQW5ub3RhdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBSZXZlcnQgdGhlIGN1cnJlbnQgY29sbGVjdGlvbiBpdGVtIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJhdyBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSBjdXJyZW50IHNldCBvZiByZWZlcmVuY2VcbiAqIEBwYXJhbSBjb2xsZWN0aW9uSXRlbSB0aGUgY29sbGVjdGlvbiBpdGVtIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyB0aGUgcmF3IHR5cGUgZXF1aXZhbGVudFxuICovXG5mdW5jdGlvbiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShyZWZlcmVuY2VzLCBjb2xsZWN0aW9uSXRlbSkge1xuICAgIGlmICh0eXBlb2YgY29sbGVjdGlvbkl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uSXRlbTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbGxlY3Rpb25JdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoY29sbGVjdGlvbkl0ZW0uaGFzT3duUHJvcGVydHkoJyRUeXBlJykpIHtcbiAgICAgICAgICAgIC8vIEFubm90YXRpb24gUmVjb3JkXG4gICAgICAgICAgICBjb25zdCBvdXRJdGVtID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IGNvbGxlY3Rpb25JdGVtLiRUeXBlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWVzOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIENvdWxkIHZhbGlkYXRlIGtleXMgYW5kIHR5cGUgYmFzZWQgb24gJFR5cGVcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbGxlY3Rpb25JdGVtKS5mb3JFYWNoKChjb2xsZWN0aW9uS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3RyaWN0ZWRLZXlzLmluZGV4T2YoY29sbGVjdGlvbktleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29sbGVjdGlvbkl0ZW1bY29sbGVjdGlvbktleV07XG4gICAgICAgICAgICAgICAgICAgIG91dEl0ZW0ucHJvcGVydHlWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb2xsZWN0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJldmVydFZhbHVlVG9SYXdUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sbGVjdGlvbktleSA9PT0gJ2Fubm90YXRpb25zJykge1xuICAgICAgICAgICAgICAgICAgICBvdXRJdGVtLmFubm90YXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgIHJldmVydEFubm90YXRpb25zVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGNvbGxlY3Rpb25JdGVtW2NvbGxlY3Rpb25LZXldLCBvdXRJdGVtLmFubm90YXRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvdXRJdGVtO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbGxlY3Rpb25JdGVtLnR5cGUgPT09ICdQcm9wZXJ0eVBhdGgnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdQcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgIFByb3BlcnR5UGF0aDogY29sbGVjdGlvbkl0ZW0udmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29sbGVjdGlvbkl0ZW0udHlwZSA9PT0gJ0Fubm90YXRpb25QYXRoJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnQW5ub3RhdGlvblBhdGgnLFxuICAgICAgICAgICAgICAgIEFubm90YXRpb25QYXRoOiBjb2xsZWN0aW9uSXRlbS52YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2xsZWN0aW9uSXRlbS50eXBlID09PSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGNvbGxlY3Rpb25JdGVtLnZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBSZXZlcnQgYW4gYW5ub3RhdGlvbiB0ZXJtIHRvIGl0J3MgZ2VuZXJpYyBvciByYXcgZXF1aXZhbGVudC5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjdXJyZW50IGNvbnRleHRcbiAqIEBwYXJhbSBhbm5vdGF0aW9uIHRoZSBhbm5vdGF0aW9uIHRlcm0gdG8gcmV2ZXJ0XG4gKiBAcmV0dXJucyB0aGUgcmF3IGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gcmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUocmVmZXJlbmNlcywgYW5ub3RhdGlvbikge1xuICAgIGNvbnN0IGJhc2VBbm5vdGF0aW9uID0ge1xuICAgICAgICB0ZXJtOiBhbm5vdGF0aW9uLnRlcm0sXG4gICAgICAgIHF1YWxpZmllcjogYW5ub3RhdGlvbi5xdWFsaWZpZXJcbiAgICB9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb24pKSB7XG4gICAgICAgIC8vIENvbGxlY3Rpb25cbiAgICAgICAgaWYgKGFubm90YXRpb24uaGFzT3duUHJvcGVydHkoJ2Fubm90YXRpb25zJykpIHtcbiAgICAgICAgICAgIC8vIEFubm90YXRpb24gb24gYSBjb2xsZWN0aW9uIGl0c2VsZiwgbm90IHN1cmUgd2hlbiB0aGF0IGhhcHBlbnMgaWYgYXQgYWxsXG4gICAgICAgICAgICBiYXNlQW5ub3RhdGlvbi5hbm5vdGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgcmV2ZXJ0QW5ub3RhdGlvbnNUb1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ub3RhdGlvbi5hbm5vdGF0aW9ucywgYmFzZUFubm90YXRpb24uYW5ub3RhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJhc2VBbm5vdGF0aW9uKSwgeyBjb2xsZWN0aW9uOiBhbm5vdGF0aW9uLm1hcCgoYW5ubykgPT4gcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ubykpIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChhbm5vdGF0aW9uLmhhc093blByb3BlcnR5KCckVHlwZScpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJhc2VBbm5vdGF0aW9uKSwgeyByZWNvcmQ6IHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGFubm90YXRpb24pIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUFubm90YXRpb24pLCB7IHZhbHVlOiByZXZlcnRWYWx1ZVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uKSB9KTtcbiAgICB9XG59XG5leHBvcnRzLnJldmVydFRlcm1Ub0dlbmVyaWNUeXBlID0gcmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD13cml0ZWJhY2suanMubWFwXG5cbi8qKiovIH0pXG5cbi8qKioqKiovIFx0fSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBzdGFydHVwXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHQvLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI2KTtcbi8qKioqKiovIFx0QW5ub3RhdGlvbkNvbnZlcnRlciA9IF9fd2VicGFja19leHBvcnRzX187XG4vKioqKioqLyBcdFxuLyoqKioqKi8gfSkoKVxuOyJdfQ==
|
|
2146
|
+
return AnnotationConverter;
|
|
2147
|
+
},true);
|