@sapui5/sap.fe.core 1.97.0 → 1.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +7 -4
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +309 -405
- package/src/sap/fe/core/AnnotationHelper.ts +315 -0
- package/src/sap/fe/core/AppComponent.js +389 -397
- package/src/sap/fe/core/AppComponent.ts +403 -0
- package/src/sap/fe/core/AppStateHandler.js +198 -181
- package/src/sap/fe/core/AppStateHandler.ts +171 -0
- package/src/sap/fe/core/BaseController.js +83 -58
- package/src/sap/fe/core/BaseController.ts +68 -0
- package/src/sap/fe/core/BusyLocker.js +105 -121
- package/src/sap/fe/core/BusyLocker.ts +98 -0
- package/src/sap/fe/core/CommonUtils.js +2164 -2379
- package/src/sap/fe/core/CommonUtils.ts +2177 -0
- package/src/sap/fe/core/ExtensionAPI.js +279 -266
- package/src/sap/fe/core/ExtensionAPI.ts +250 -0
- package/src/sap/fe/core/PageController.js +218 -125
- package/src/sap/fe/core/PageController.ts +129 -0
- package/src/sap/fe/core/RouterProxy.js +924 -807
- package/src/sap/fe/core/RouterProxy.ts +840 -0
- package/src/sap/fe/core/Synchronization.js +41 -35
- package/src/sap/fe/core/Synchronization.ts +29 -0
- package/src/sap/fe/core/TemplateComponent.js +173 -155
- package/src/sap/fe/core/TemplateComponent.ts +173 -0
- package/src/sap/fe/core/TemplateModel.js +79 -54
- package/src/sap/fe/core/TemplateModel.ts +63 -0
- package/src/sap/fe/core/TransactionHelper.js +1560 -1579
- package/src/sap/fe/core/TransactionHelper.ts +1717 -0
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
- package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
- package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
- package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
- package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
- package/src/sap/fe/core/actions/draft.js +521 -581
- package/src/sap/fe/core/actions/draft.ts +566 -0
- package/src/sap/fe/core/actions/messageHandling.js +564 -511
- package/src/sap/fe/core/actions/messageHandling.ts +552 -0
- package/src/sap/fe/core/actions/nonDraft.js +17 -19
- package/src/sap/fe/core/actions/nonDraft.ts +12 -0
- package/src/sap/fe/core/actions/operations.js +1093 -1211
- package/src/sap/fe/core/actions/operations.ts +1192 -0
- package/src/sap/fe/core/actions/sticky.js +114 -104
- package/src/sap/fe/core/actions/sticky.ts +119 -0
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +70 -66
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
- package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
- package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
- package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
- package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
- package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
- package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
- package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
- package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Share.js +220 -244
- package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
- package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
- package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
- package/src/sap/fe/core/controls/CommandExecution.js +68 -66
- package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
- package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
- package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
- package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
- package/src/sap/fe/core/controls/FilterBar.js +163 -159
- package/src/sap/fe/core/controls/FilterBar.ts +143 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
- package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
- package/src/sap/fe/core/converters/ConverterContext.js +348 -367
- package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
- package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
- package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
- package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
- package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
- package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
- package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
- package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
- package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
- package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
- package/src/sap/fe/core/converters/helpers/Key.js +42 -57
- package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
- package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
- package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
- package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
- package/src/sap/fe/core/fpm/Component.js +51 -54
- package/src/sap/fe/core/fpm/Component.ts +48 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
- package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
- package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
- package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
- package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
- package/src/sap/fe/core/helpers/EditState.js +81 -84
- package/src/sap/fe/core/helpers/EditState.ts +81 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
- package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
- package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
- package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
- package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
- package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
- package/src/sap/fe/core/library.js +427 -425
- package/src/sap/fe/core/library.support.js +23 -27
- package/src/sap/fe/core/library.support.ts +23 -0
- package/src/sap/fe/core/library.ts +420 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
- package/src/sap/fe/core/messagebundle.properties +78 -13
- package/src/sap/fe/core/messagebundle_ar.properties +58 -7
- package/src/sap/fe/core/messagebundle_bg.properties +58 -7
- package/src/sap/fe/core/messagebundle_ca.properties +58 -7
- package/src/sap/fe/core/messagebundle_cs.properties +59 -8
- package/src/sap/fe/core/messagebundle_cy.properties +58 -7
- package/src/sap/fe/core/messagebundle_da.properties +58 -7
- package/src/sap/fe/core/messagebundle_de.properties +58 -7
- package/src/sap/fe/core/messagebundle_el.properties +58 -7
- package/src/sap/fe/core/messagebundle_en.properties +57 -6
- package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
- package/src/sap/fe/core/messagebundle_es.properties +58 -7
- package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
- package/src/sap/fe/core/messagebundle_et.properties +58 -7
- package/src/sap/fe/core/messagebundle_fi.properties +60 -9
- package/src/sap/fe/core/messagebundle_fr.properties +64 -13
- package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
- package/src/sap/fe/core/messagebundle_hi.properties +58 -7
- package/src/sap/fe/core/messagebundle_hr.properties +58 -7
- package/src/sap/fe/core/messagebundle_hu.properties +59 -8
- package/src/sap/fe/core/messagebundle_id.properties +61 -10
- package/src/sap/fe/core/messagebundle_it.properties +58 -7
- package/src/sap/fe/core/messagebundle_iw.properties +58 -7
- package/src/sap/fe/core/messagebundle_ja.properties +58 -7
- package/src/sap/fe/core/messagebundle_kk.properties +58 -7
- package/src/sap/fe/core/messagebundle_ko.properties +58 -7
- package/src/sap/fe/core/messagebundle_lt.properties +58 -7
- package/src/sap/fe/core/messagebundle_lv.properties +59 -8
- package/src/sap/fe/core/messagebundle_ms.properties +58 -7
- package/src/sap/fe/core/messagebundle_nl.properties +58 -7
- package/src/sap/fe/core/messagebundle_no.properties +58 -7
- package/src/sap/fe/core/messagebundle_pl.properties +58 -7
- package/src/sap/fe/core/messagebundle_pt.properties +59 -8
- package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
- package/src/sap/fe/core/messagebundle_ro.properties +58 -7
- package/src/sap/fe/core/messagebundle_ru.properties +58 -7
- package/src/sap/fe/core/messagebundle_sh.properties +58 -7
- package/src/sap/fe/core/messagebundle_sk.properties +58 -7
- package/src/sap/fe/core/messagebundle_sl.properties +58 -7
- package/src/sap/fe/core/messagebundle_sv.properties +59 -8
- package/src/sap/fe/core/messagebundle_th.properties +58 -7
- package/src/sap/fe/core/messagebundle_tr.properties +60 -9
- package/src/sap/fe/core/messagebundle_uk.properties +58 -7
- package/src/sap/fe/core/messagebundle_vi.properties +58 -7
- package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
- package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
- package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
- package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
- package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +36 -48
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
- package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
- package/src/sap/fe/core/templating/FilterHelper.js +140 -78
- package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
- package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
- package/src/sap/fe/core/templating/UIFormatters.js +76 -135
- package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +4 -6
- package/ui5.yaml +0 -3
- package/src/sap/fe/core/controls/filterbar.d.js +0 -8
- package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
|
@@ -2,23 +2,21 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/util/ObjectPath", "sap/base/
|
|
5
|
+
sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/ui/base/Metadata", "sap/fe/core/controllerextensions/ControllerExtensionMetadata", "sap/ui/core/mvc/ControllerMetadata", "sap/base/util/uid", "sap/base/util/merge"], function (ObjectPath, ElementMetadata, Metadata, ControllerExtensionMetadata, ControllerMetadata, uid, merge) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
|
|
10
10
|
var ensureMetadata = function (target) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
11
|
+
target.metadata = merge({
|
|
12
|
+
controllerExtensions: {},
|
|
13
|
+
properties: {},
|
|
14
|
+
macroContexts: {},
|
|
15
|
+
aggregations: {},
|
|
16
|
+
associations: {},
|
|
17
|
+
methods: {},
|
|
18
|
+
events: {}
|
|
19
|
+
}, target.metadata || {});
|
|
22
20
|
return target.metadata;
|
|
23
21
|
};
|
|
24
22
|
|
|
@@ -62,8 +60,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
62
60
|
|
|
63
61
|
_exports.Extensible = Extensible;
|
|
64
62
|
|
|
65
|
-
function Public(target, propertyKey) {
|
|
63
|
+
function Public(target, propertyKey, descriptor) {
|
|
66
64
|
var metadata = ensureMetadata(target);
|
|
65
|
+
descriptor.enumerable = true;
|
|
67
66
|
|
|
68
67
|
if (!metadata.methods[propertyKey]) {
|
|
69
68
|
metadata.methods[propertyKey] = {};
|
|
@@ -74,8 +73,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
74
73
|
|
|
75
74
|
_exports.Public = Public;
|
|
76
75
|
|
|
77
|
-
function Private(target, propertyKey) {
|
|
76
|
+
function Private(target, propertyKey, descriptor) {
|
|
78
77
|
var metadata = ensureMetadata(target);
|
|
78
|
+
descriptor.enumerable = true;
|
|
79
79
|
|
|
80
80
|
if (!metadata.methods[propertyKey]) {
|
|
81
81
|
metadata.methods[propertyKey] = {};
|
|
@@ -86,8 +86,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
86
86
|
|
|
87
87
|
_exports.Private = Private;
|
|
88
88
|
|
|
89
|
-
function Final(target, propertyKey) {
|
|
89
|
+
function Final(target, propertyKey, descriptor) {
|
|
90
90
|
var metadata = ensureMetadata(target);
|
|
91
|
+
descriptor.enumerable = true;
|
|
91
92
|
|
|
92
93
|
if (!metadata.methods[propertyKey]) {
|
|
93
94
|
metadata.methods[propertyKey] = {};
|
|
@@ -128,6 +129,17 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
128
129
|
|
|
129
130
|
_exports.MacroContext = MacroContext;
|
|
130
131
|
|
|
132
|
+
function UsingExtension(extensionClass) {
|
|
133
|
+
return function (target, propertyKey, propertyDescriptor) {
|
|
134
|
+
var metadata = ensureMetadata(target);
|
|
135
|
+
delete propertyDescriptor.initializer;
|
|
136
|
+
metadata.controllerExtensions[propertyKey] = extensionClass;
|
|
137
|
+
return propertyDescriptor;
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
_exports.UsingExtension = UsingExtension;
|
|
142
|
+
|
|
131
143
|
function Property(oPropertyParams) {
|
|
132
144
|
return function (target, propertyKey, propertyDescriptor) {
|
|
133
145
|
var metadata = ensureMetadata(target);
|
|
@@ -143,15 +155,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
143
155
|
}
|
|
144
156
|
|
|
145
157
|
delete propertyDescriptor.writable;
|
|
146
|
-
delete propertyDescriptor.initializer;
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
propertyDescriptor.get = function () {
|
|
153
|
-
return this.getProperty(propertyKey);
|
|
154
|
-
};
|
|
158
|
+
delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
|
|
159
|
+
// return this.setProperty(propertyKey, v);
|
|
160
|
+
// };
|
|
161
|
+
// (propertyDescriptor as any).get = function() {
|
|
162
|
+
// return this.getProperty(propertyKey);
|
|
163
|
+
// };
|
|
155
164
|
|
|
156
165
|
return propertyDescriptor;
|
|
157
166
|
};
|
|
@@ -172,15 +181,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
172
181
|
}
|
|
173
182
|
|
|
174
183
|
delete propertyDescriptor.writable;
|
|
175
|
-
delete propertyDescriptor.initializer;
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
propertyDescriptor.get = function () {
|
|
182
|
-
return this.getAggregation(propertyKey);
|
|
183
|
-
};
|
|
184
|
+
delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
|
|
185
|
+
// return this.setAggregation(propertyKey, v);
|
|
186
|
+
// };
|
|
187
|
+
// (propertyDescriptor as any).get = function() {
|
|
188
|
+
// return this.getAggregation(propertyKey);
|
|
189
|
+
// };
|
|
184
190
|
|
|
185
191
|
return propertyDescriptor;
|
|
186
192
|
};
|
|
@@ -197,15 +203,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
197
203
|
}
|
|
198
204
|
|
|
199
205
|
delete propertyDescriptor.writable;
|
|
200
|
-
delete propertyDescriptor.initializer;
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
propertyDescriptor.get = function () {
|
|
207
|
-
return this.getAggregation(propertyKey);
|
|
208
|
-
};
|
|
206
|
+
delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
|
|
207
|
+
// return this.setAggregation(propertyKey, v);
|
|
208
|
+
// };
|
|
209
|
+
// (propertyDescriptor as any).get = function() {
|
|
210
|
+
// return this.getAggregation(propertyKey);
|
|
211
|
+
// };
|
|
209
212
|
|
|
210
213
|
return propertyDescriptor;
|
|
211
214
|
};
|
|
@@ -213,7 +216,15 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
213
216
|
|
|
214
217
|
_exports.Association = Association;
|
|
215
218
|
|
|
219
|
+
/**
|
|
220
|
+
* Decorator to provide a new API class to be used in the macros.
|
|
221
|
+
*
|
|
222
|
+
* @param sTarget The fully qualified name of the macro API
|
|
223
|
+
* @param isDependentBound Whether this API will be used as a dependent or not
|
|
224
|
+
* @class
|
|
225
|
+
*/
|
|
216
226
|
function APIClass(sTarget) {
|
|
227
|
+
var isDependentBound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
217
228
|
return function (constructor) {
|
|
218
229
|
if (!constructor.prototype.metadata) {
|
|
219
230
|
constructor.prototype.metadata = {};
|
|
@@ -224,6 +235,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
224
235
|
}
|
|
225
236
|
|
|
226
237
|
constructor.prototype.metadata.interfaces.push("sap.ui.core.IFormContent");
|
|
238
|
+
constructor.isDependentBound = isDependentBound;
|
|
227
239
|
|
|
228
240
|
if (!constructor.prototype.renderer) {
|
|
229
241
|
constructor.prototype.renderer = {
|
|
@@ -241,74 +253,198 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
241
253
|
_exports.APIClass = APIClass;
|
|
242
254
|
|
|
243
255
|
function UI5Class(sTarget, metadataClass, metadataDefinition) {
|
|
256
|
+
var useExtend = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
244
257
|
return function (constructor) {
|
|
245
258
|
if (!constructor.prototype.metadata) {
|
|
246
259
|
constructor.prototype.metadata = {};
|
|
247
260
|
}
|
|
248
261
|
|
|
249
|
-
if (metadataDefinition
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
if (metadataDefinition !== null && metadataDefinition !== void 0 && metadataDefinition.events) {
|
|
254
|
-
constructor.prototype.metadata.events = metadataDefinition.events;
|
|
262
|
+
if (metadataDefinition) {
|
|
263
|
+
Object.keys(metadataDefinition).forEach(function (key) {
|
|
264
|
+
constructor.prototype.metadata[key] = metadataDefinition[key];
|
|
265
|
+
});
|
|
255
266
|
}
|
|
256
267
|
|
|
257
|
-
describe(constructor, sTarget, constructor.prototype, metadataClass);
|
|
268
|
+
return describe(constructor, sTarget, constructor.prototype, metadataClass, useExtend);
|
|
258
269
|
};
|
|
259
270
|
}
|
|
260
271
|
|
|
261
272
|
_exports.UI5Class = UI5Class;
|
|
262
273
|
|
|
263
274
|
function describe(clazz, name, inObj, metadataClass) {
|
|
264
|
-
var _inObj$metadata, _clazz$metadata;
|
|
275
|
+
var _inObj$metadata, _clazz$metadata, _obj$metadata;
|
|
276
|
+
|
|
277
|
+
var useExtend = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
|
|
278
|
+
|
|
279
|
+
if (metadataClass === ControllerExtensionMetadata) {
|
|
280
|
+
Object.getOwnPropertyNames(inObj).forEach(function (objName) {
|
|
281
|
+
var descriptor = Object.getOwnPropertyDescriptor(inObj, objName);
|
|
282
|
+
|
|
283
|
+
if (descriptor && !descriptor.enumerable) {
|
|
284
|
+
descriptor.enumerable = true; // Log.error(`Property ${objName} from ${name} should be decorated as public`);
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
265
288
|
|
|
266
289
|
var obj = {};
|
|
267
290
|
obj.metadata = inObj.metadata || {};
|
|
268
291
|
obj.override = inObj.override;
|
|
269
292
|
obj.constructor = clazz;
|
|
270
293
|
obj.metadata.baseType = Object.getPrototypeOf(clazz.prototype).getMetadata().getName();
|
|
271
|
-
|
|
294
|
+
var rendererDefinition = inObj.renderer || clazz.renderer;
|
|
295
|
+
obj.renderer = {
|
|
296
|
+
apiVersion: 2
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
if (typeof rendererDefinition === "function") {
|
|
300
|
+
obj.renderer.render = rendererDefinition;
|
|
301
|
+
} else if (rendererDefinition != undefined) {
|
|
302
|
+
obj.renderer = rendererDefinition;
|
|
303
|
+
}
|
|
304
|
+
|
|
272
305
|
obj.metadata.interfaces = ((_inObj$metadata = inObj.metadata) === null || _inObj$metadata === void 0 ? void 0 : _inObj$metadata.interfaces) || ((_clazz$metadata = clazz.metadata) === null || _clazz$metadata === void 0 ? void 0 : _clazz$metadata.interfaces);
|
|
273
|
-
var metadata;
|
|
274
306
|
|
|
275
|
-
if (
|
|
276
|
-
|
|
307
|
+
if (useExtend) {
|
|
308
|
+
Object.keys(clazz.prototype).forEach(function (key) {
|
|
309
|
+
if (key !== "metadata") {
|
|
310
|
+
try {
|
|
311
|
+
obj[key] = clazz.prototype[key];
|
|
312
|
+
} catch (e) {//console.log(e);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
if ((_obj$metadata = obj.metadata) !== null && _obj$metadata !== void 0 && _obj$metadata.controllerExtensions && Object.keys(obj.metadata.controllerExtensions).length > 0) {
|
|
319
|
+
for (var cExtName in obj.metadata.controllerExtensions) {
|
|
320
|
+
obj[cExtName] = obj.metadata.controllerExtensions[cExtName];
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
var output = clazz;
|
|
325
|
+
|
|
326
|
+
if (useExtend) {
|
|
327
|
+
output = clazz.extend(name, obj, metadataClass);
|
|
328
|
+
var _fnInit = output.prototype.init;
|
|
329
|
+
|
|
330
|
+
output.prototype.init = function () {
|
|
331
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
332
|
+
args[_key] = arguments[_key];
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
_fnInit && _fnInit.apply(this, args);
|
|
336
|
+
this.metadata = obj.metadata;
|
|
337
|
+
|
|
338
|
+
if (obj.metadata.properties) {
|
|
339
|
+
var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
340
|
+
|
|
341
|
+
var that = this;
|
|
342
|
+
aPropertyKeys.forEach(function (propertyKey) {
|
|
343
|
+
Object.defineProperty(that, propertyKey, {
|
|
344
|
+
configurable: true,
|
|
345
|
+
set: function (v) {
|
|
346
|
+
return that.setProperty(propertyKey, v);
|
|
347
|
+
},
|
|
348
|
+
get: function () {
|
|
349
|
+
return that.getProperty(propertyKey);
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
var aAggregationKeys = Object.keys(obj.metadata.aggregations);
|
|
354
|
+
aAggregationKeys.forEach(function (aggregationKey) {
|
|
355
|
+
Object.defineProperty(that, aggregationKey, {
|
|
356
|
+
configurable: true,
|
|
357
|
+
set: function (v) {
|
|
358
|
+
return that.setAggregation(aggregationKey, v);
|
|
359
|
+
},
|
|
360
|
+
get: function () {
|
|
361
|
+
return that.getAggregation(aggregationKey);
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
};
|
|
277
367
|
} else {
|
|
278
|
-
metadata
|
|
368
|
+
var metadata;
|
|
369
|
+
|
|
370
|
+
if (metadataClass) {
|
|
371
|
+
metadata = new metadataClass(name, obj);
|
|
372
|
+
} else {
|
|
373
|
+
metadata = new ElementMetadata(name, obj);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
clazz.getMetadata = clazz.prototype.getMetadata = function () {
|
|
377
|
+
return metadata;
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
if (!clazz.getMetadata().isFinal()) {
|
|
381
|
+
clazz.extend = function (sSCName, oSCClassInfo, fnSCMetaImpl) {
|
|
382
|
+
// the default constructor created by ui5 does not return the value which is problematic with TS
|
|
383
|
+
oSCClassInfo.constructor = function () {
|
|
384
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
385
|
+
args[_key2] = arguments[_key2];
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
return clazz.apply(this, args);
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
var fnClass = Metadata.createClass(clazz, sSCName, oSCClassInfo, fnSCMetaImpl || metadataClass || ElementMetadata); // fnClass.prototype.constructor = function(...args: any[]) {
|
|
392
|
+
// return clazz.apply(this, ...args);
|
|
393
|
+
// };
|
|
394
|
+
|
|
395
|
+
return fnClass;
|
|
396
|
+
};
|
|
397
|
+
}
|
|
279
398
|
}
|
|
280
399
|
|
|
281
|
-
clazz.
|
|
282
|
-
|
|
400
|
+
clazz.override = function (oExtension) {
|
|
401
|
+
var pol = {};
|
|
402
|
+
|
|
403
|
+
pol.constructor = function () {
|
|
404
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
405
|
+
args[_key3] = arguments[_key3];
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
return clazz.apply(this, args);
|
|
409
|
+
};
|
|
410
|
+
|
|
411
|
+
var oClass = Metadata.createClass(clazz, "anonymousExtension~" + uid(), pol, ControllerMetadata);
|
|
412
|
+
oClass.getMetadata()._staticOverride = oExtension;
|
|
413
|
+
oClass.getMetadata()._override = clazz.getMetadata()._override;
|
|
414
|
+
return oClass;
|
|
283
415
|
};
|
|
284
416
|
|
|
285
417
|
var fnInit = clazz.prototype.init;
|
|
286
418
|
|
|
287
|
-
|
|
288
|
-
for (var
|
|
289
|
-
args[
|
|
419
|
+
output.prototype.init = function () {
|
|
420
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
421
|
+
args[_key4] = arguments[_key4];
|
|
290
422
|
}
|
|
291
423
|
|
|
292
|
-
fnInit.apply(this, args);
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
424
|
+
fnInit && fnInit.apply(this, args);
|
|
425
|
+
|
|
426
|
+
if (obj.metadata.properties) {
|
|
427
|
+
var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
428
|
+
|
|
429
|
+
var that = this;
|
|
430
|
+
aPropertyKeys.forEach(function (propertyKey) {
|
|
431
|
+
Object.defineProperty(that, propertyKey, {
|
|
432
|
+
configurable: true,
|
|
433
|
+
set: function (v) {
|
|
434
|
+
return that.setProperty(propertyKey, v);
|
|
435
|
+
},
|
|
436
|
+
get: function () {
|
|
437
|
+
return that.getProperty(propertyKey);
|
|
438
|
+
}
|
|
439
|
+
});
|
|
305
440
|
});
|
|
306
|
-
}
|
|
441
|
+
}
|
|
307
442
|
};
|
|
308
443
|
|
|
309
|
-
ObjectPath.set(name,
|
|
444
|
+
ObjectPath.set(name, output);
|
|
445
|
+
return output;
|
|
310
446
|
}
|
|
311
447
|
|
|
312
448
|
return _exports;
|
|
313
449
|
}, false);
|
|
314
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsImhhc093blByb3BlcnR5IiwibWV0YWRhdGEiLCJkZWVwQ2xvbmUiLCJwcm9wZXJ0aWVzIiwibWFjcm9Db250ZXh0cyIsImFnZ3JlZ2F0aW9ucyIsImFzc29jaWF0aW9ucyIsIm1ldGhvZHMiLCJldmVudHMiLCJPdmVycmlkZSIsInNUYXJnZXQiLCJwcm9wZXJ0eUtleSIsIm92ZXJyaWRlIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsIkV4dGVuc2libGUiLCJvT3ZlcnJpZGVFeGVjdXRpb24iLCJvdmVycmlkZUV4ZWN1dGlvbiIsIlB1YmxpYyIsInB1YmxpYyIsIlByaXZhdGUiLCJGaW5hbCIsImZpbmFsIiwiRXZlbnQiLCJldmVudEtleSIsIkV2ZW50SGFuZGxlciIsInByb3BlcnR5a2V5IiwiY29uc3RydWN0b3IiLCJnZXRBUEkiLCJNYWNyb0NvbnRleHQiLCJiTWV0YU1vZGVsT2JqZWN0IiwiUHJvcGVydHkiLCJ0eXBlIiwibWFjcm9Db250ZXh0IiwibWV0YU1vZGVsT2JqZWN0Iiwib1Byb3BlcnR5UGFyYW1zIiwicHJvcGVydHlEZXNjcmlwdG9yIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsInNldCIsInYiLCJzZXRQcm9wZXJ0eSIsImdldCIsImdldFByb3BlcnR5IiwiQWdncmVnYXRpb24iLCJvQWdncmVnYXRpb25EZXNjcmlwdG9yIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwic2V0QWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsIkFzc29jaWF0aW9uIiwib0Fzc29jaWF0aW9uRGVzY3JpcHRpb24iLCJBUElDbGFzcyIsInByb3RvdHlwZSIsImludGVyZmFjZXMiLCJwdXNoIiwicmVuZGVyZXIiLCJhcGlWZXJzaW9uIiwicmVuZGVyIiwib1JtIiwib0NvbnRyb2wiLCJyZW5kZXJDb250cm9sIiwiZ2V0Q29udGVudCIsImRlc2NyaWJlIiwiRWxlbWVudE1ldGFkYXRhIiwiVUk1Q2xhc3MiLCJtZXRhZGF0YUNsYXNzIiwibWV0YWRhdGFEZWZpbml0aW9uIiwiY2xhenoiLCJuYW1lIiwiaW5PYmoiLCJvYmoiLCJiYXNlVHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZm5Jbml0IiwiaW5pdCIsImFyZ3MiLCJhcHBseSIsImFQcm9wZXJ0eUtleXMiLCJrZXlzIiwidGhhdCIsImZvckVhY2giLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsIk9iamVjdFBhdGgiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQUVBLE1BQU1BLGNBQWMsR0FBRyxVQUFTQyxNQUFULEVBQXNCO0FBQzVDLFFBQUksQ0FBQ0EsTUFBTSxDQUFDQyxjQUFQLENBQXNCLFVBQXRCLENBQUwsRUFBd0M7QUFDdkNELE1BQUFBLE1BQU0sQ0FBQ0UsUUFBUCxHQUFrQkMsU0FBUyxDQUMxQkgsTUFBTSxDQUFDRSxRQUFQLElBQW1CO0FBQ2xCRSxRQUFBQSxVQUFVLEVBQUUsRUFETTtBQUVsQkMsUUFBQUEsYUFBYSxFQUFFLEVBRkc7QUFHbEJDLFFBQUFBLFlBQVksRUFBRSxFQUhJO0FBSWxCQyxRQUFBQSxZQUFZLEVBQUUsRUFKSTtBQUtsQkMsUUFBQUEsT0FBTyxFQUFFLEVBTFM7QUFNbEJDLFFBQUFBLE1BQU0sRUFBRTtBQU5VLE9BRE8sQ0FBM0I7QUFVQTs7QUFDRCxXQUFPVCxNQUFNLENBQUNFLFFBQWQ7QUFDQSxHQWREOztBQWVPLFdBQVNRLFFBQVQsQ0FBa0JDLE9BQWxCLEVBQW9DO0FBQzFDLFdBQU8sVUFBU1gsTUFBVCxFQUFzQlksV0FBdEIsRUFBMkM7QUFDakQsVUFBSSxDQUFDWixNQUFNLENBQUNhLFFBQVosRUFBc0I7QUFDckJiLFFBQUFBLE1BQU0sQ0FBQ2EsUUFBUCxHQUFrQixFQUFsQjtBQUNBOztBQUNELFVBQUlDLGFBQWEsR0FBR2QsTUFBTSxDQUFDYSxR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Q0FBQ2hELEdBQVgsQ0FBZThCLElBQWYsRUFBcUJELEtBQXJCO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJyaWRlRXhlY3V0aW9uIH0gZnJvbSBcInNhcC91aS9jb3JlL212Y1wiO1xuaW1wb3J0IHsgT2JqZWN0UGF0aCwgZGVlcENsb25lIH0gZnJvbSBcInNhcC9iYXNlL3V0aWxcIjtcbmltcG9ydCB7ICRDb250cm9sU2V0dGluZ3MsIEVsZW1lbnRNZXRhZGF0YSwgUmVuZGVyTWFuYWdlciB9IGZyb20gXCJzYXAvdWkvY29yZVwiO1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uKHRhcmdldDogYW55KSB7XG5cdGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KFwibWV0YWRhdGFcIikpIHtcblx0XHR0YXJnZXQubWV0YWRhdGEgPSBkZWVwQ2xvbmUoXG5cdFx0XHR0YXJnZXQubWV0YWRhdGEgfHwge1xuXHRcdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0bWFjcm9Db250ZXh0czoge30sXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uczoge30sXG5cdFx0XHRcdGFzc29jaWF0aW9uczoge30sXG5cdFx0XHRcdG1ldGhvZHM6IHt9LFxuXHRcdFx0XHRldmVudHM6IHt9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBPdmVycmlkZShzVGFyZ2V0Pzogc3RyaW5nKSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGU7XG5cdFx0aWYgKHNUYXJnZXQpIHtcblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb24pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltzVGFyZ2V0XTtcblx0XHR9XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eUtleV0gPSB0YXJnZXRbcHJvcGVydHlLZXldO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIEV4dGVuc2libGUob092ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLm92ZXJyaWRlRXhlY3V0aW9uID0gb092ZXJyaWRlRXhlY3V0aW9uO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIFB1YmxpYyh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLnB1YmxpYyA9IHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gUHJpdmF0ZSh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLnB1YmxpYyA9IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbmFsKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG5cdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSkge1xuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldID0ge307XG5cdH1cblx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0uZmluYWwgPSB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnQodGFyZ2V0OiBhbnksIGV2ZW50S2V5OiBzdHJpbmcpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleV0pIHtcblx0XHRtZXRhZGF0YS5ldmVudHNbZXZlbnRLZXldID0ge307XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50SGFuZGxlcih0YXJnZXQ6IGFueSwgcHJvcGVydHlrZXk6IGFueSkge1xuXHR0YXJnZXQuY29uc3RydWN0b3JbcHJvcGVydHlrZXldID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRjb25zdCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0LmNvbnN0cnVjdG9yLmdldEFQSShhcmdzWzBdIGFzIFVJNUV2ZW50KTtcblx0XHRjdXJyZW50VGFyZ2V0W3Byb3BlcnR5a2V5XSguLi5hcmdzKTtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1hY3JvQ29udGV4dChiTWV0YU1vZGVsT2JqZWN0OiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuXHRyZXR1cm4gUHJvcGVydHkoeyB0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsIG1hY3JvQ29udGV4dDogdHJ1ZSwgbWV0YU1vZGVsT2JqZWN0OiBiTWV0YU1vZGVsT2JqZWN0IH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvcGVydHkob1Byb3BlcnR5UGFyYW1zOiBhbnkpOiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogYW55IHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKG9Qcm9wZXJ0eVBhcmFtcz8ubWFjcm9Db250ZXh0KSB7XG5cdFx0XHRpZiAoIW1ldGFkYXRhLm1hY3JvQ29udGV4dHNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdG1ldGFkYXRhLm1hY3JvQ29udGV4dHNbcHJvcGVydHlLZXldID0gb1Byb3BlcnR5UGFyYW1zO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIW1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IG9Qcm9wZXJ0eVBhcmFtcztcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5zZXQgPSBmdW5jdGlvbih2OiBhbnkpIHtcblx0XHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHR9O1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5nZXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFnZ3JlZ2F0aW9uKG9BZ2dyZWdhdGlvbkRlc2NyaXB0b3I/OiBhbnkpOiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogYW55IHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldID0gb0FnZ3JlZ2F0aW9uRGVzY3JpcHRvcjtcblx0XHR9XG5cdFx0aWYgKG9BZ2dyZWdhdGlvbkRlc2NyaXB0b3IuaXNEZWZhdWx0KSB7XG5cdFx0XHRtZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gPSBwcm9wZXJ0eUtleTtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5zZXQgPSBmdW5jdGlvbih2OiBhbnkpIHtcblx0XHRcdHJldHVybiB0aGlzLnNldEFnZ3JlZ2F0aW9uKHByb3BlcnR5S2V5LCB2KTtcblx0XHR9O1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5nZXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldEFnZ3JlZ2F0aW9uKHByb3BlcnR5S2V5KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFzc29jaWF0aW9uKG9Bc3NvY2lhdGlvbkRlc2NyaXB0aW9uPzogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSA9IG9Bc3NvY2lhdGlvbkRlc2NyaXB0aW9uO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXksIHYpO1xuXHRcdH07XG5cdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXkpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxudHlwZSBDb250cm9sUHJvcGVydHlOYW1lczxUPiA9IHtcblx0W0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBGdW5jdGlvbiA/IG5ldmVyIDogSztcbn1ba2V5b2YgVF07XG5leHBvcnQgdHlwZSBQcm9wZXJ0aWVzT2Y8VD4gPSBQYXJ0aWFsPFBpY2s8VCwgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4+PiAmICRDb250cm9sU2V0dGluZ3M7XG5cbmV4cG9ydCBmdW5jdGlvbiBBUElDbGFzcyhzVGFyZ2V0OiBzdHJpbmcpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEuaW50ZXJmYWNlcyA9IFtdO1xuXHRcdH1cblx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKFwic2FwLnVpLmNvcmUuSUZvcm1Db250ZW50XCIpO1xuXG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyZXIpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXJlciA9IHtcblx0XHRcdFx0YXBpVmVyc2lvbjogMixcblx0XHRcdFx0cmVuZGVyOiBmdW5jdGlvbihvUm06IFJlbmRlck1hbmFnZXIsIG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRvUm0ucmVuZGVyQ29udHJvbChvQ29udHJvbC5nZXRDb250ZW50KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIEVsZW1lbnRNZXRhZGF0YSk7XG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gVUk1Q2xhc3Moc1RhcmdldDogc3RyaW5nLCBtZXRhZGF0YUNsYXNzPzogYW55LCBtZXRhZGF0YURlZmluaXRpb24/OiBhbnkpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbj8ucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLnByb3BlcnRpZXMgPSBtZXRhZGF0YURlZmluaXRpb24ucHJvcGVydGllcztcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbj8uZXZlbnRzKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEuZXZlbnRzID0gbWV0YWRhdGFEZWZpbml0aW9uLmV2ZW50cztcblx0XHR9XG5cdFx0ZGVzY3JpYmUoY29uc3RydWN0b3IsIHNUYXJnZXQsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgbWV0YWRhdGFDbGFzcyk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlKGNsYXp6OiBhbnksIG5hbWU6IHN0cmluZywgaW5PYmo6IGFueSwgbWV0YWRhdGFDbGFzcz86IGFueSkge1xuXHRjb25zdCBvYmo6IGFueSA9IHt9O1xuXHRvYmoubWV0YWRhdGEgPSBpbk9iai5tZXRhZGF0YSB8fCB7fTtcblx0b2JqLm92ZXJyaWRlID0gaW5PYmoub3ZlcnJpZGU7XG5cdG9iai5jb25zdHJ1Y3RvciA9IGNsYXp6O1xuXHRvYmoubWV0YWRhdGEuYmFzZVR5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2xhenoucHJvdG90eXBlKVxuXHRcdC5nZXRNZXRhZGF0YSgpXG5cdFx0LmdldE5hbWUoKTtcblx0b2JqLnJlbmRlcmVyID0gaW5PYmoucmVuZGVyZXIgfHwgY2xhenoucmVuZGVyZXI7XG5cdG9iai5tZXRhZGF0YS5pbnRlcmZhY2VzID0gaW5PYmoubWV0YWRhdGE/LmludGVyZmFjZXMgfHwgY2xhenoubWV0YWRhdGE/LmludGVyZmFjZXM7XG5cdGxldCBtZXRhZGF0YTogYW55O1xuXHRpZiAobWV0YWRhdGFDbGFzcykge1xuXHRcdG1ldGFkYXRhID0gbmV3IG1ldGFkYXRhQ2xhc3MobmFtZSwgb2JqKTtcblx0fSBlbHNlIHtcblx0XHRtZXRhZGF0YSA9IG5ldyBFbGVtZW50TWV0YWRhdGEobmFtZSwgb2JqKTtcblx0fVxuXHRjbGF6ei5nZXRNZXRhZGF0YSA9IGNsYXp6LnByb3RvdHlwZS5nZXRNZXRhZGF0YSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBtZXRhZGF0YTtcblx0fTtcblx0Y29uc3QgZm5Jbml0ID0gY2xhenoucHJvdG90eXBlLmluaXQ7XG5cdGNsYXp6LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcblx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoYXQsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoYXQuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhhdC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9O1xuXHRPYmplY3RQYXRoLnNldChuYW1lLCBjbGF6eik7XG59XG4iXX0=
|
|
450
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJtYWNyb0NvbnRleHRzIiwiYWdncmVnYXRpb25zIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsIk92ZXJyaWRlIiwic1RhcmdldCIsInByb3BlcnR5S2V5Iiwib3ZlcnJpZGUiLCJjdXJyZW50VGFyZ2V0IiwiZXh0ZW5zaW9uIiwiRXh0ZW5zaWJsZSIsIm9PdmVycmlkZUV4ZWN1dGlvbiIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiUHVibGljIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdWJsaWMiLCJQcml2YXRlIiwiRmluYWwiLCJmaW5hbCIsIkV2ZW50IiwiZXZlbnRLZXkiLCJFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImNvbnN0cnVjdG9yIiwiZ2V0QVBJIiwiTWFjcm9Db250ZXh0IiwiYk1ldGFNb2RlbE9iamVjdCIsIlByb3BlcnR5IiwidHlwZSIsIm1hY3JvQ29udGV4dCIsIm1ldGFNb2RlbE9iamVjdCIsIlVzaW5nRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uQ2xhc3MiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJpbml0aWFsaXplciIsIm9Qcm9wZXJ0eVBhcmFtcyIsIndyaXRhYmxlIiwiQWdncmVnYXRpb24iLCJvQWdncmVnYXRpb25EZXNjcmlwdG9yIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwiQXNzb2NpYXRpb24iLCJvQXNzb2NpYXRpb25EZXNjcmlwdGlvbiIsIkFQSUNsYXNzIiwiaXNEZXBlbmRlbnRCb3VuZCIsInByb3RvdHlwZSIsImludGVyZmFjZXMiLCJwdXNoIiwicmVuZGVyZXIiLCJhcGlWZXJzaW9uIiwicmVuZGVyIiwib1JtIiwib0NvbnRyb2wiLCJyZW5kZXJDb250cm9sIiwiZ2V0Q29udGVudCIsImRlc2NyaWJlIiwiRWxlbWVudE1ldGFkYXRhIiwiVUk1Q2xhc3MiLCJtZXRhZGF0YUNsYXNzIiwibWV0YWRhdGFEZWZpbml0aW9uIiwidXNlRXh0ZW5kIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjbGF6eiIsIm5hbWUiLCJpbk9iaiIsIkNvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSIsImdldE93blByb3BlcnR5TmFtZXMiLCJvYmpOYW1lIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib2JqIiwiYmFzZVR5cGUiLCJnZXRQcm90b3R5cGVPZiIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInJlbmRlcmVyRGVmaW5pdGlvbiIsInVuZGVmaW5lZCIsImUiLCJsZW5ndGgiLCJjRXh0TmFtZSIsIm91dHB1dCIsImV4dGVuZCIsImZuSW5pdCIsImluaXQiLCJhcmdzIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwidGhhdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwic2V0IiwidiIsInNldFByb3BlcnR5IiwiZ2V0IiwiZ2V0UHJvcGVydHkiLCJhQWdncmVnYXRpb25LZXlzIiwiYWdncmVnYXRpb25LZXkiLCJzZXRBZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwiaXNGaW5hbCIsInNTQ05hbWUiLCJvU0NDbGFzc0luZm8iLCJmblNDTWV0YUltcGwiLCJmbkNsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsIm9FeHRlbnNpb24iLCJwb2wiLCJvQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFTQSxNQUFNQSxjQUFjLEdBQUcsVUFBU0MsTUFBVCxFQUFzQjtBQUM1Q0EsSUFBQUEsTUFBTSxDQUFDQyxRQUFQLEdBQWtCQyxLQUFLLENBQ3RCO0FBQ0NDLE1BQUFBLG9CQUFvQixFQUFFLEVBRHZC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Q0FBYUcsVUFBekIsQ0FBdEIsQ0FENEIsQ0FFNUI7O0FBQ0EsWUFBTTRGLElBQUksR0FBRyxJQUFiO0FBQ0FELFFBQUFBLGFBQWEsQ0FBQ3pCLE9BQWQsQ0FBc0IsVUFBQTFELFdBQVcsRUFBSTtBQUNwQ3dELFVBQUFBLE1BQU0sQ0FBQzZCLGNBQVAsQ0FBc0JELElBQXRCLEVBQTRCcEYsV0FBNUIsRUFBeUM7QUFDeENzRixZQUFBQSxZQUFZLEVBQUUsSUFEMEI7QUFFeENDLFlBQUFBLEdBQUcsRUFBRSxVQUFDQyxDQUFELEVBQVk7QUFDaEIscUJBQU9KLElBQUksQ0FBQ0ssV0FBTCxDQUFpQnpGLFdBQWpCLEVBQThCd0YsQ0FBOUIsQ0FBUDtBQUNBLGFBSnVDO0FBS3hDRSxZQUFBQSxHQUFHLEVBQUUsWUFBTTtBQUNWLHFCQUFPTixJQUFJLENBQUNPLFdBQUwsQ0FBaUIzRixXQUFqQixDQUFQO0FBQ0E7QUFQdUMsV0FBekM7QUFTQSxTQVZEO0FBV0E7QUFDRCxLQWxCRDs7QUFtQkE4RyxJQUFBQSxVQUFVLENBQUN2QixHQUFYLENBQWUxQixJQUFmLEVBQXFCZ0IsTUFBckI7QUFDQSxXQUFPQSxNQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgRWxlbWVudE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50TWV0YWRhdGFcIjtcbmltcG9ydCBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Db250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGFcIjtcbmltcG9ydCBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbih0YXJnZXQ6IGFueSkge1xuXHR0YXJnZXQubWV0YWRhdGEgPSBtZXJnZShcblx0XHR7XG5cdFx0XHRjb250cm9sbGVyRXh0ZW5zaW9uczoge30sXG5cdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdG1hY3JvQ29udGV4dHM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdGFzc29jaWF0aW9uczoge30sXG5cdFx0XHRtZXRob2RzOiB7fSxcblx0XHRcdGV2ZW50czoge31cblx0XHR9LFxuXHRcdHRhcmdldC5tZXRhZGF0YSB8fCB7fVxuXHQpO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBPdmVycmlkZShzVGFyZ2V0Pzogc3RyaW5nKSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGU7XG5cdFx0aWYgKHNUYXJnZXQpIHtcblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb24pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltzVGFyZ2V0XTtcblx0XHR9XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eUtleV0gPSB0YXJnZXRbcHJvcGVydHlLZXldO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIEV4dGVuc2libGUob092ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLm92ZXJyaWRlRXhlY3V0aW9uID0gb092ZXJyaWRlRXhlY3V0aW9uO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIFB1YmxpYyh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogYW55KTogYW55IHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5wdWJsaWMgPSB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIFByaXZhdGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IGFueSkge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLnB1YmxpYyA9IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbmFsKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBhbnkpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5maW5hbCA9IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudCh0YXJnZXQ6IGFueSwgZXZlbnRLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5XSkge1xuXHRcdG1ldGFkYXRhLmV2ZW50c1tldmVudEtleV0gPSB7fTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRIYW5kbGVyKHRhcmdldDogYW55LCBwcm9wZXJ0eWtleTogYW55KSB7XG5cdHRhcmdldC5jb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleV0gPSBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuXHRcdGNvbnN0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQuY29uc3RydWN0b3IuZ2V0QVBJKGFyZ3NbMF0gYXMgVUk1RXZlbnQpO1xuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlrZXldKC4uLmFyZ3MpO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTWFjcm9Db250ZXh0KGJNZXRhTW9kZWxPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdHJldHVybiBQcm9wZXJ0eSh7IHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIiwgbWFjcm9Db250ZXh0OiB0cnVlLCBtZXRhTW9kZWxPYmplY3Q6IGJNZXRhTW9kZWxPYmplY3QgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2luZ0V4dGVuc2lvbihleHRlbnNpb25DbGFzczogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXldID0gZXh0ZW5zaW9uQ2xhc3M7XG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBQcm9wZXJ0eShvUHJvcGVydHlQYXJhbXM6IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAob1Byb3BlcnR5UGFyYW1zPy5tYWNyb0NvbnRleHQpIHtcblx0XHRcdGlmICghbWV0YWRhdGEubWFjcm9Db250ZXh0c1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0bWV0YWRhdGEubWFjcm9Db250ZXh0c1twcm9wZXJ0eUtleV0gPSBvUHJvcGVydHlQYXJhbXM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gb1Byb3BlcnR5UGFyYW1zO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdC8vIH07XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdC8vIH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWdncmVnYXRpb24ob0FnZ3JlZ2F0aW9uRGVzY3JpcHRvcj86IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0gPSBvQWdncmVnYXRpb25EZXNjcmlwdG9yO1xuXHRcdH1cblx0XHRpZiAob0FnZ3JlZ2F0aW9uRGVzY3JpcHRvci5pc0RlZmF1bHQpIHtcblx0XHRcdG1ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiA9IHByb3BlcnR5S2V5O1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXksIHYpO1xuXHRcdC8vIH07XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuZ2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXkpO1xuXHRcdC8vIH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQXNzb2NpYXRpb24ob0Fzc29jaWF0aW9uRGVzY3JpcHRpb24/OiBhbnkpOiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogYW55IHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldID0gb0Fzc29jaWF0aW9uRGVzY3JpcHRpb247XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHQvLyAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuc2V0ID0gZnVuY3Rpb24odjogYW55KSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSwgdik7XG5cdFx0Ly8gfTtcblx0XHQvLyAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuZ2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5nZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSk7XG5cdFx0Ly8gfTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH07XG59XG50eXBlIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZjxUPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+O1xuXG4vKipcbiAqIERlY29yYXRvciB0byBwcm92aWRlIGEgbmV3IEFQSSBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBtYWNyb3MuXG4gKlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtYWNybyBBUElcbiAqIEBwYXJhbSBpc0RlcGVuZGVudEJvdW5kIFdoZXRoZXIgdGhpcyBBUEkgd2lsbCBiZSB1c2VkIGFzIGEgZGVwZW5kZW50IG9yIG5vdFxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBUElDbGFzcyhzVGFyZ2V0OiBzdHJpbmcsIGlzRGVwZW5kZW50Qm91bmQgPSBmYWxzZSkge1xuXHRyZXR1cm4gZnVuY3Rpb24oY29uc3RydWN0b3I6IEZ1bmN0aW9uKSB7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSA9IHt9O1xuXHRcdH1cblxuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLmludGVyZmFjZXMpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzID0gW107XG5cdFx0fVxuXHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzLnB1c2goXCJzYXAudWkuY29yZS5JRm9ybUNvbnRlbnRcIik7XG5cdFx0KGNvbnN0cnVjdG9yIGFzIGFueSkuaXNEZXBlbmRlbnRCb3VuZCA9IGlzRGVwZW5kZW50Qm91bmQ7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyZXIpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXJlciA9IHtcblx0XHRcdFx0YXBpVmVyc2lvbjogMixcblx0XHRcdFx0cmVuZGVyOiBmdW5jdGlvbihvUm06IFJlbmRlck1hbmFnZXIsIG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRvUm0ucmVuZGVyQ29udHJvbChvQ29udHJvbC5nZXRDb250ZW50KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIEVsZW1lbnRNZXRhZGF0YSk7XG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gVUk1Q2xhc3Moc1RhcmdldDogc3RyaW5nLCBtZXRhZGF0YUNsYXNzPzogYW55LCBtZXRhZGF0YURlZmluaXRpb24/OiBhbnksIHVzZUV4dGVuZDogYm9vbGVhbiA9IHRydWUpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0T2JqZWN0LmtleXMobWV0YWRhdGFEZWZpbml0aW9uKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleV07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIG1ldGFkYXRhQ2xhc3MsIHVzZUV4dGVuZCk7XG5cdH07XG59XG5mdW5jdGlvbiBkZXNjcmliZShjbGF6ejogYW55LCBuYW1lOiBzdHJpbmcsIGluT2JqOiBhbnksIG1ldGFkYXRhQ2xhc3M/OiBhbnksIHVzZUV4dGVuZDogYm9vbGVhbiA9IHRydWUpIHtcblx0aWYgKG1ldGFkYXRhQ2xhc3MgPT09IENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKG9iak5hbWUgPT4ge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW5PYmosIG9iak5hbWUpO1xuXHRcdFx0aWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZW51bWVyYWJsZSkge1xuXHRcdFx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdFx0XHQvL1x0XHRMb2cuZXJyb3IoYFByb3BlcnR5ICR7b2JqTmFtZX0gZnJvbSAke25hbWV9IHNob3VsZCBiZSBkZWNvcmF0ZWQgYXMgcHVibGljYCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSlcblx0XHQuZ2V0TWV0YWRhdGEoKVxuXHRcdC5nZXROYW1lKCk7XG5cblx0Y29uc3QgcmVuZGVyZXJEZWZpbml0aW9uID0gaW5PYmoucmVuZGVyZXIgfHwgY2xhenoucmVuZGVyZXI7XG5cdG9iai5yZW5kZXJlciA9IHsgYXBpVmVyc2lvbjogMiB9O1xuXHRpZiAodHlwZW9mIHJlbmRlcmVyRGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0fSBlbHNlIGlmIChyZW5kZXJlckRlZmluaXRpb24gIT0gdW5kZWZpbmVkKSB7XG5cdFx0b2JqLnJlbmRlcmVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHR9XG5cdG9iai5tZXRhZGF0YS5pbnRlcmZhY2VzID0gaW5PYmoubWV0YWRhdGE/LmludGVyZmFjZXMgfHwgY2xhenoubWV0YWRhdGE/LmludGVyZmFjZXM7XG5cdGlmICh1c2VFeHRlbmQpIHtcblx0XHRPYmplY3Qua2V5cyhjbGF6ei5wcm90b3R5cGUpLmZvckVhY2goa2V5ID0+IHtcblx0XHRcdGlmIChrZXkgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKG9iai5tZXRhZGF0YT8uY29udHJvbGxlckV4dGVuc2lvbnMgJiYgT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBjRXh0TmFtZSBpbiBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnMpIHtcblx0XHRcdG9ialtjRXh0TmFtZV0gPSBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbY0V4dE5hbWVdO1xuXHRcdH1cblx0fVxuXHRsZXQgb3V0cHV0ID0gY2xheno7XG5cdGlmICh1c2VFeHRlbmQpIHtcblx0XHRvdXRwdXQgPSBjbGF6ei5leHRlbmQobmFtZSwgb2JqLCBtZXRhZGF0YUNsYXNzKTtcblx0XHRjb25zdCBmbkluaXQgPSBvdXRwdXQucHJvdG90eXBlLmluaXQ7XG5cdFx0b3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdGZuSW5pdCAmJiBmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHR0aGlzLm1ldGFkYXRhID0gb2JqLm1ldGFkYXRhO1xuXG5cdFx0XHRpZiAob2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpIHtcblx0XHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0XHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xuXHRcdFx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0XHRhQWdncmVnYXRpb25LZXlzLmZvckVhY2goYWdncmVnYXRpb25LZXkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBhZ2dyZWdhdGlvbktleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGxldCBtZXRhZGF0YTogYW55O1xuXHRcdGlmIChtZXRhZGF0YUNsYXNzKSB7XG5cdFx0XHRtZXRhZGF0YSA9IG5ldyBtZXRhZGF0YUNsYXNzKG5hbWUsIG9iaik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1ldGFkYXRhID0gbmV3IEVsZW1lbnRNZXRhZGF0YShuYW1lLCBvYmopO1xuXHRcdH1cblx0XHRjbGF6ei5nZXRNZXRhZGF0YSA9IGNsYXp6LnByb3RvdHlwZS5nZXRNZXRhZGF0YSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIG1ldGFkYXRhO1xuXHRcdH07XG5cdFx0aWYgKCFjbGF6ei5nZXRNZXRhZGF0YSgpLmlzRmluYWwoKSkge1xuXHRcdFx0Y2xhenouZXh0ZW5kID0gZnVuY3Rpb24oc1NDTmFtZTogc3RyaW5nLCBvU0NDbGFzc0luZm86IGFueSwgZm5TQ01ldGFJbXBsOiBGdW5jdGlvbikge1xuXHRcdFx0XHQvLyB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVkIGJ5IHVpNSBkb2VzIG5vdCByZXR1cm4gdGhlIHZhbHVlIHdoaWNoIGlzIHByb2JsZW1hdGljIHdpdGggVFNcblx0XHRcdFx0b1NDQ2xhc3NJbmZvLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdFx0XHRyZXR1cm4gY2xhenouYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3QgZm5DbGFzcyA9IChNZXRhZGF0YSBhcyBhbnkpLmNyZWF0ZUNsYXNzKFxuXHRcdFx0XHRcdGNsYXp6LFxuXHRcdFx0XHRcdHNTQ05hbWUsXG5cdFx0XHRcdFx0b1NDQ2xhc3NJbmZvLFxuXHRcdFx0XHRcdGZuU0NNZXRhSW1wbCB8fCBtZXRhZGF0YUNsYXNzIHx8IEVsZW1lbnRNZXRhZGF0YVxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBmbkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdC8vIFx0cmV0dXJuIGNsYXp6LmFwcGx5KHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0XHQvLyB9O1xuXHRcdFx0XHRyZXR1cm4gZm5DbGFzcztcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdGNsYXp6Lm92ZXJyaWRlID0gZnVuY3Rpb24ob0V4dGVuc2lvbjogYW55KSB7XG5cdFx0Y29uc3QgcG9sID0ge307XG5cdFx0KHBvbCBhcyBhbnkpLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzIGFzIGFueSk7XG5cdFx0fTtcblx0XHRjb25zdCBvQ2xhc3MgPSAoTWV0YWRhdGEgYXMgYW55KS5jcmVhdGVDbGFzcyhjbGF6eiwgXCJhbm9ueW1vdXNFeHRlbnNpb25+XCIgKyB1aWQoKSwgcG9sLCBDb250cm9sbGVyTWV0YWRhdGEpO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9zdGF0aWNPdmVycmlkZSA9IG9FeHRlbnNpb247XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX292ZXJyaWRlID0gKGNsYXp6LmdldE1ldGFkYXRhKCkgYXMgYW55KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRjb25zdCBmbkluaXQgPSBjbGF6ei5wcm90b3R5cGUuaW5pdDtcblx0b3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRmbkluaXQgJiYgZm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhhdCwgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhhdC5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGF0LmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRPYmplY3RQYXRoLnNldChuYW1lLCBvdXRwdXQpO1xuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl19
|