@sapui5/sap.fe.core 1.124.2 → 1.126.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +5 -1
- package/src/sap/fe/core/ActionRuntime.js +2 -2
- package/src/sap/fe/core/ActionRuntime.ts +4 -4
- package/src/sap/fe/core/AppComponent.js +2 -2
- package/src/sap/fe/core/AppComponent.ts +1 -1
- package/src/sap/fe/core/AppStateHandler.js +2 -2
- package/src/sap/fe/core/AppStateHandler.ts +1 -1
- package/src/sap/fe/core/BaseController.js +2 -2
- package/src/sap/fe/core/BaseController.ts +1 -1
- package/src/sap/fe/core/CommonUtils.js +3 -3
- package/src/sap/fe/core/CommonUtils.ts +12 -15
- package/src/sap/fe/core/ExtensionAPI.js +2 -2
- package/src/sap/fe/core/ExtensionAPI.ts +4 -3
- package/src/sap/fe/core/PageController.js +2 -2
- package/src/sap/fe/core/PageController.ts +1 -1
- package/src/sap/fe/core/ResourceModel.js +2 -2
- package/src/sap/fe/core/ResourceModel.ts +1 -1
- package/src/sap/fe/core/ReuseComponent.js +172 -0
- package/src/sap/fe/core/ReuseComponent.ts +165 -0
- package/src/sap/fe/core/TemplateComponent.js +2 -2
- package/src/sap/fe/core/TemplateComponent.ts +5 -1
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +92 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +90 -10
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +30 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +28 -4
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +10 -16
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +19 -16
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +5 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +2 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +17 -5
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +14 -6
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +2 -2
- package/src/sap/fe/core/controllerextensions/ContextSharing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +57 -43
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +61 -46
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -11
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +8 -16
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +10 -7
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +5 -5
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +22 -18
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +28 -23
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +4 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +21 -15
- package/src/sap/fe/core/controllerextensions/PageReady.ts +29 -20
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +12 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +15 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +26 -8
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +29 -3
- package/src/sap/fe/core/controllerextensions/Routing.js +5 -7
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/Share.js +4 -4
- package/src/sap/fe/core/controllerextensions/Share.ts +10 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.js +20 -5
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -2
- package/src/sap/fe/core/controllerextensions/Telemetry.js +2 -2
- package/src/sap/fe/core/controllerextensions/Telemetry.ts +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +79 -81
- package/src/sap/fe/core/controllerextensions/ViewState.ts +117 -105
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +3 -3
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +2 -2
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +17 -8
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +8 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +10 -9
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +15 -10
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +130 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +240 -275
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +46 -28
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +60 -32
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +2 -2
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +2 -2
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +27 -3
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/CommandExecution.ts +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.js +3 -3
- package/src/sap/fe/core/controls/ComponentLoader.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +2 -2
- package/src/sap/fe/core/controls/EventDelegateHook.js +2 -2
- package/src/sap/fe/core/controls/EventDelegateHook.ts +2 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +51 -6
- package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +3 -3
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +3 -3
- package/src/sap/fe/core/converters/ConverterContext.js +4 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +5 -2
- package/src/sap/fe/core/converters/ManifestSettings.js +8 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +25 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +12 -3
- package/src/sap/fe/core/converters/ManifestWrapper.ts +11 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +7 -6
- package/src/sap/fe/core/converters/MetaModelConverter.ts +6 -2
- package/src/sap/fe/core/converters/annotations/DataField.js +56 -16
- package/src/sap/fe/core/converters/annotations/DataField.ts +74 -25
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +19 -18
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.js +40 -7
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +56 -20
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +8 -11
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +23 -27
- package/src/sap/fe/core/converters/controls/Common/Form.js +10 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +6 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +137 -48
- package/src/sap/fe/core/converters/controls/Common/Table.ts +174 -52
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +73 -21
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +91 -20
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +4 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -16
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +18 -17
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +2 -2
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +9 -9
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +12 -12
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -7
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +9 -73
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +4 -74
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +5 -10
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +3 -12
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +4 -7
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FiscalFormat.js +5 -3
- package/src/sap/fe/core/formatters/FiscalFormat.ts +4 -2
- package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
- package/src/sap/fe/core/fpm/Component.js +3 -3
- package/src/sap/fe/core/fpm/Component.ts +3 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +2 -2
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +1 -1
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +2 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +2 -2
- package/src/sap/fe/core/helpers/DeleteHelper.js +7 -4
- package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.js +5 -5
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +2 -2
- package/src/sap/fe/core/helpers/MetaPath.js +9 -3
- package/src/sap/fe/core/helpers/MetaPath.ts +8 -2
- package/src/sap/fe/core/helpers/ModelHelper.js +149 -3
- package/src/sap/fe/core/helpers/ModelHelper.ts +202 -6
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +3 -3
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +2 -2
- package/src/sap/fe/core/helpers/TitleHelper.js +4 -4
- package/src/sap/fe/core/helpers/TitleHelper.ts +4 -4
- package/src/sap/fe/core/library.js +4 -4
- package/src/sap/fe/core/library.ts +2 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +11 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +10 -2
- package/src/sap/fe/core/messagebundle.properties +8 -57
- package/src/sap/fe/core/messagebundle_ar.properties +2 -0
- package/src/sap/fe/core/messagebundle_bg.properties +2 -0
- package/src/sap/fe/core/messagebundle_ca.properties +2 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
- package/src/sap/fe/core/messagebundle_cs.properties +2 -0
- package/src/sap/fe/core/messagebundle_cy.properties +4 -2
- package/src/sap/fe/core/messagebundle_da.properties +2 -0
- package/src/sap/fe/core/messagebundle_de.properties +2 -0
- package/src/sap/fe/core/messagebundle_el.properties +2 -0
- package/src/sap/fe/core/messagebundle_en.properties +6 -57
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -36
- package/src/sap/fe/core/messagebundle_es.properties +2 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
- package/src/sap/fe/core/messagebundle_et.properties +2 -0
- package/src/sap/fe/core/messagebundle_fi.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -0
- package/src/sap/fe/core/messagebundle_hr.properties +2 -0
- package/src/sap/fe/core/messagebundle_hu.properties +3 -1
- package/src/sap/fe/core/messagebundle_id.properties +2 -0
- package/src/sap/fe/core/messagebundle_it.properties +2 -0
- package/src/sap/fe/core/messagebundle_iw.properties +3 -1
- package/src/sap/fe/core/messagebundle_ja.properties +2 -0
- package/src/sap/fe/core/messagebundle_kk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ko.properties +2 -0
- package/src/sap/fe/core/messagebundle_lt.properties +2 -0
- package/src/sap/fe/core/messagebundle_lv.properties +2 -0
- package/src/sap/fe/core/messagebundle_mk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ms.properties +2 -0
- package/src/sap/fe/core/messagebundle_nl.properties +2 -0
- package/src/sap/fe/core/messagebundle_no.properties +2 -0
- package/src/sap/fe/core/messagebundle_pl.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
- package/src/sap/fe/core/messagebundle_ro.properties +2 -0
- package/src/sap/fe/core/messagebundle_ru.properties +2 -0
- package/src/sap/fe/core/messagebundle_sh.properties +64 -62
- package/src/sap/fe/core/messagebundle_sk.properties +2 -0
- package/src/sap/fe/core/messagebundle_sl.properties +2 -0
- package/src/sap/fe/core/messagebundle_sr.properties +2 -0
- package/src/sap/fe/core/messagebundle_sv.properties +2 -0
- package/src/sap/fe/core/messagebundle_th.properties +2 -0
- package/src/sap/fe/core/messagebundle_tr.properties +2 -0
- package/src/sap/fe/core/messagebundle_uk.properties +3 -1
- package/src/sap/fe/core/messagebundle_vi.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
- package/src/sap/fe/core/operationsHelper.js +3 -3
- package/src/sap/fe/core/operationsHelper.ts +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.js +3 -3
- package/src/sap/fe/core/rootView/Fcl.controller.ts +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +114 -92
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +120 -106
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js +6 -4
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +12 -2
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -2
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +7 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +16 -9
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +22 -11
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +2 -2
- package/src/sap/fe/core/templating/ActionHelper.ts +2 -2
- package/src/sap/fe/core/templating/CommonFormatters.js +2 -2
- package/src/sap/fe/core/templating/CommonFormatters.ts +3 -3
- package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +4 -4
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +2 -2
- package/src/sap/fe/core/templating/EntityTypeHelper.js +2 -2
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +2 -2
- package/src/sap/fe/core/templating/FieldControlHelper.js +2 -2
- package/src/sap/fe/core/templating/FieldControlHelper.ts +2 -2
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -2
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +2 -2
- package/src/sap/fe/core/templating/UIFormatters.js +7 -7
- package/src/sap/fe/core/templating/UIFormatters.ts +6 -6
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +1 -1
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.ts +1 -1
- package/src/sap/fe/core/type/InputMask.js +124 -0
- package/src/sap/fe/core/type/InputMask.ts +131 -0
- package/ui5.yaml +19 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +0 -81
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +0 -117
- package/src/sap/fe/core/helpers/AnnotationEnum.js +0 -33
- package/src/sap/fe/core/helpers/AnnotationEnum.ts +0 -21
- package/src/sap/fe/core/helpers/BindingToolkit.js +0 -1813
- package/src/sap/fe/core/helpers/BindingToolkit.ts +0 -2450
- package/src/sap/fe/core/helpers/ClassSupport.js +0 -584
- package/src/sap/fe/core/helpers/ClassSupport.ts +0 -697
- package/src/sap/fe/core/jsx-runtime/Fragment.js +0 -14
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +0 -3
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +0 -93
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +0 -86
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +0 -177
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +0 -197
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +0 -237
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +0 -246
- package/src/sap/fe/core/jsx-runtime/jsx.js +0 -47
- package/src/sap/fe/core/jsx-runtime/jsx.ts +0 -71
- package/src/sap/fe/core/jsx-runtime/jsxs.js +0 -10
- package/src/sap/fe/core/jsx-runtime/jsxs.ts +0 -3
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +0 -172
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +0 -194
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseController", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/ManifestHelper", "sap/fe/core/helpers/SizeHelper", "sap/ui/base/BindingParser", "sap/ui/core/Element", "sap/ui/core/routing/HashChanger", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/thirdparty/URI", "../controls/Any"], function (Log, ClassSupport, BaseController, CommonUtils, Placeholder, ViewState, ManifestHelper, SizeHelper, BindingParser, Element, HashChanger, JSONModel, AnnotationHelper, URI, Any) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
|
|
@@ -175,7 +175,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/BaseController", "sap/fe/core/Common
|
|
|
175
175
|
const oAppComponent = this.getAppComponent();
|
|
176
176
|
this._scrollTablesToLastNavigatedItems();
|
|
177
177
|
if (oAppComponent.getEnvironmentCapabilities().getCapabilities().UShell) {
|
|
178
|
-
this.
|
|
178
|
+
this.computeTitleHierarchy(oView);
|
|
179
179
|
}
|
|
180
180
|
const bForceFocus = oAppComponent.getRouterProxy().isFocusForced();
|
|
181
181
|
oAppComponent.getRouterProxy().setFocusForced(false); // reset
|
|
@@ -261,68 +261,86 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/BaseController", "sap/fe/core/Common
|
|
|
261
261
|
/**
|
|
262
262
|
* Fetches the value of the HeaderInfo title for a given path.
|
|
263
263
|
*
|
|
264
|
-
* @param
|
|
264
|
+
* @param path The path to the entity
|
|
265
265
|
* @returns A promise containing the formatted title, or an empty string if no HeaderInfo title annotation is available
|
|
266
266
|
*/;
|
|
267
|
-
_proto._fetchTitleValue = async function _fetchTitleValue(
|
|
268
|
-
const
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
267
|
+
_proto._fetchTitleValue = async function _fetchTitleValue(path) {
|
|
268
|
+
const appComponent = this.getAppComponent(),
|
|
269
|
+
model = this.getView().getModel(),
|
|
270
|
+
metaModel = appComponent.getMetaModel(),
|
|
271
|
+
metaPath = metaModel.getMetaPath(path),
|
|
272
|
+
bindingViewContext = model.createBindingContext(path),
|
|
273
|
+
headerInfoTitleValueAnnotation = metaModel.getObject(`${metaPath}/@com.sap.vocabularies.UI.v1.HeaderInfo/Title/Value`),
|
|
274
|
+
valueExpression = AnnotationHelper.format(headerInfoTitleValueAnnotation, {
|
|
275
|
+
context: metaModel.createBindingContext("/")
|
|
275
276
|
});
|
|
276
|
-
if (!
|
|
277
|
+
if (!valueExpression) {
|
|
277
278
|
return Promise.resolve("");
|
|
278
279
|
}
|
|
279
|
-
|
|
280
|
-
|
|
280
|
+
if (headerInfoTitleValueAnnotation.$Function === "odata.concat") {
|
|
281
|
+
const anyObject = new Any({
|
|
282
|
+
any: valueExpression
|
|
283
|
+
});
|
|
284
|
+
anyObject.setModel(model);
|
|
285
|
+
anyObject.setBindingContext(bindingViewContext);
|
|
286
|
+
const textBinding = anyObject.getBinding("any");
|
|
287
|
+
if (textBinding !== null && textBinding !== void 0 && textBinding.isA("sap.ui.model.CompositeBinding")) {
|
|
288
|
+
await Promise.all(textBinding.getBindings().map(binding => {
|
|
289
|
+
var _binding$requestValue;
|
|
290
|
+
return (_binding$requestValue = binding.requestValue) === null || _binding$requestValue === void 0 ? void 0 : _binding$requestValue.call(binding);
|
|
291
|
+
}));
|
|
292
|
+
}
|
|
293
|
+
const infoTitle = anyObject.getAny();
|
|
294
|
+
anyObject.destroy();
|
|
295
|
+
return Promise.resolve(infoTitle);
|
|
296
|
+
}
|
|
297
|
+
const textExpression = AnnotationHelper.format(metaModel.getObject(`${metaPath}/@com.sap.vocabularies.UI.v1.HeaderInfo/Title/Value/$Path@com.sap.vocabularies.Common.v1.Text`), {
|
|
298
|
+
context: metaModel.createBindingContext("/")
|
|
281
299
|
}),
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
const displayMode = CommonUtils.computeDisplayMode(
|
|
300
|
+
propertyContext = metaModel.getObject(`${metaPath}/@com.sap.vocabularies.UI.v1.HeaderInfo/Title/Value/$Path@`),
|
|
301
|
+
promises = [],
|
|
302
|
+
parsedvalueExpression = BindingParser.complexParser(valueExpression),
|
|
303
|
+
promiseForDisplayMode = new Promise(function (resolve) {
|
|
304
|
+
const displayMode = CommonUtils.computeDisplayMode(propertyContext);
|
|
287
305
|
resolve(displayMode);
|
|
288
306
|
});
|
|
289
|
-
|
|
290
|
-
const
|
|
291
|
-
fnValueFormatter =
|
|
292
|
-
|
|
307
|
+
promises.push(promiseForDisplayMode);
|
|
308
|
+
const valuePath = parsedvalueExpression.parts ? parsedvalueExpression.parts[0].path : parsedvalueExpression.path,
|
|
309
|
+
fnValueFormatter = parsedvalueExpression.formatter,
|
|
310
|
+
valueBinding = model.bindProperty(valuePath, bindingViewContext, {
|
|
293
311
|
$$groupId: "$auto.Heroes"
|
|
294
312
|
});
|
|
295
|
-
|
|
296
|
-
const
|
|
297
|
-
const fnChange = function (
|
|
298
|
-
const
|
|
299
|
-
|
|
300
|
-
resolve(
|
|
313
|
+
valueBinding.initialize();
|
|
314
|
+
const promiseForTitleValue = new Promise(function (resolve) {
|
|
315
|
+
const fnChange = function (event) {
|
|
316
|
+
const targetValue = fnValueFormatter ? fnValueFormatter(event.getSource().getValue()) : event.getSource().getValue();
|
|
317
|
+
valueBinding.detachChange(fnChange);
|
|
318
|
+
resolve(targetValue);
|
|
301
319
|
};
|
|
302
|
-
|
|
320
|
+
valueBinding.attachChange(fnChange);
|
|
303
321
|
});
|
|
304
|
-
|
|
305
|
-
if (
|
|
306
|
-
const
|
|
307
|
-
let
|
|
308
|
-
|
|
309
|
-
const fnTextFormatter =
|
|
310
|
-
|
|
322
|
+
promises.push(promiseForTitleValue);
|
|
323
|
+
if (textExpression) {
|
|
324
|
+
const parsedTextExpression = BindingParser.complexParser(textExpression);
|
|
325
|
+
let textPath = parsedTextExpression.parts ? parsedTextExpression.parts[0].path : parsedTextExpression.path;
|
|
326
|
+
textPath = valuePath.lastIndexOf("/") > -1 ? `${valuePath.slice(0, valuePath.lastIndexOf("/"))}/${textPath}` : textPath;
|
|
327
|
+
const fnTextFormatter = parsedTextExpression.formatter,
|
|
328
|
+
textBinding = model.bindProperty(textPath, bindingViewContext, {
|
|
311
329
|
$$groupId: "$auto.Heroes"
|
|
312
330
|
});
|
|
313
|
-
|
|
314
|
-
const
|
|
315
|
-
const fnChange = function (
|
|
316
|
-
const
|
|
317
|
-
|
|
318
|
-
resolve(
|
|
331
|
+
textBinding.initialize();
|
|
332
|
+
const promiseForTitleText = new Promise(function (resolve) {
|
|
333
|
+
const fnChange = function (event) {
|
|
334
|
+
const targetText = fnTextFormatter ? fnTextFormatter(event.getSource().getValue()) : event.getSource().getValue();
|
|
335
|
+
textBinding.detachChange(fnChange);
|
|
336
|
+
resolve(targetText);
|
|
319
337
|
};
|
|
320
|
-
|
|
338
|
+
textBinding.attachChange(fnChange);
|
|
321
339
|
});
|
|
322
|
-
|
|
340
|
+
promises.push(promiseForTitleText);
|
|
323
341
|
}
|
|
324
342
|
try {
|
|
325
|
-
const titleInfo = await Promise.all(
|
|
343
|
+
const titleInfo = await Promise.all(promises);
|
|
326
344
|
let formattedTitle = "";
|
|
327
345
|
if (typeof titleInfo !== "string") {
|
|
328
346
|
formattedTitle = this._formatTitle(titleInfo[0], titleInfo[1], titleInfo[2]);
|
|
@@ -339,7 +357,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/BaseController", "sap/fe/core/Common
|
|
|
339
357
|
*
|
|
340
358
|
* @returns Decoded application-specific hash
|
|
341
359
|
*/;
|
|
342
|
-
_proto.
|
|
360
|
+
_proto.getAppSpecificHash = function getAppSpecificHash() {
|
|
343
361
|
// HashChanged isShellNavigationHashChanger
|
|
344
362
|
const hashChanger = HashChanger.getInstance();
|
|
345
363
|
return hashChanger.hrefForAppSpecificHash ? URI.decode(hashChanger.hrefForAppSpecificHash("")) : "#/";
|
|
@@ -364,7 +382,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/BaseController", "sap/fe/core/Common
|
|
|
364
382
|
const oMetaModel = this.getAppComponent().getMetaModel();
|
|
365
383
|
const sEntityPath = oMetaModel.getMetaPath(sPath);
|
|
366
384
|
const sTypeName = oMetaModel.getObject(`${sEntityPath}/@com.sap.vocabularies.UI.v1.HeaderInfo/TypeName`);
|
|
367
|
-
const sAppSpecificHash = this.
|
|
385
|
+
const sAppSpecificHash = this.getAppSpecificHash();
|
|
368
386
|
const sIntent = sAppSpecificHash + sPath.slice(1);
|
|
369
387
|
return this._fetchTitleValue(sPath).then(sTitle => {
|
|
370
388
|
const oTitleInfo = this._computeTitleInfo(sTypeName, sTitle, sIntent);
|
|
@@ -417,70 +435,74 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/BaseController", "sap/fe/core/Common
|
|
|
417
435
|
/**
|
|
418
436
|
* This function updates the shell title after each navigation.
|
|
419
437
|
*
|
|
420
|
-
* @param
|
|
438
|
+
* @param view The current view
|
|
421
439
|
* @returns A Promise that is resolved when the menu is filled properly
|
|
440
|
+
* @private
|
|
422
441
|
*/;
|
|
423
|
-
_proto.
|
|
424
|
-
const
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
manifestAppSettings =
|
|
430
|
-
|
|
431
|
-
|
|
442
|
+
_proto.computeTitleHierarchy = async function computeTitleHierarchy(view) {
|
|
443
|
+
const appComponent = this.getAppComponent(),
|
|
444
|
+
context = view.getBindingContext(),
|
|
445
|
+
currentPage = view.getParent(),
|
|
446
|
+
titleInformationPromises = [],
|
|
447
|
+
appSpecificHash = this.getAppSpecificHash(),
|
|
448
|
+
manifestAppSettings = appComponent.getManifestEntry("sap.app"),
|
|
449
|
+
appTitle = manifestAppSettings.title || "",
|
|
450
|
+
appSubTitle = manifestAppSettings.subTitle || "",
|
|
432
451
|
appIcon = manifestAppSettings.icon || "";
|
|
433
|
-
let
|
|
434
|
-
if (
|
|
435
|
-
if (
|
|
452
|
+
let pageTitleInformation, newPath;
|
|
453
|
+
if (currentPage && currentPage._getPageTitleInformation) {
|
|
454
|
+
if (context) {
|
|
436
455
|
// If the first page of the application is a LR, use the title and subtitle from the manifest
|
|
437
456
|
if (this._getTargetTypeFromHash("") === "sap.fe.templates.ListReport") {
|
|
438
|
-
|
|
457
|
+
titleInformationPromises.push(Promise.resolve(this._computeTitleInfo(appTitle, appSubTitle, appSpecificHash, appIcon)));
|
|
439
458
|
}
|
|
440
459
|
|
|
441
460
|
// Then manage other pages
|
|
442
|
-
|
|
443
|
-
const
|
|
444
|
-
let
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
461
|
+
newPath = context.getPath();
|
|
462
|
+
const pathParts = newPath.split("/");
|
|
463
|
+
let path = "";
|
|
464
|
+
pathParts.shift(); // Remove the first segment (empty string) as it has been managed above
|
|
465
|
+
pathParts.pop(); // Remove the last segment as it corresponds to the current page and shouldn't appear in the menu
|
|
466
|
+
pathParts.forEach(pathPart => {
|
|
467
|
+
path += `/${pathPart}`;
|
|
468
|
+
//if the associated target is not declared in the routes, we skip it
|
|
469
|
+
if (!appComponent.getRouter().getRouteInfoByHash(path)) {
|
|
470
|
+
return;
|
|
471
|
+
}
|
|
472
|
+
const metaModel = appComponent.getMetaModel(),
|
|
473
|
+
parameterPath = metaModel.getMetaPath(path),
|
|
474
|
+
isParameterized = metaModel.getObject(`${parameterPath}/@com.sap.vocabularies.Common.v1.ResultContext`);
|
|
475
|
+
if (!isParameterized) {
|
|
476
|
+
titleInformationPromises.push(this.getTitleInfoFromPath(path));
|
|
455
477
|
}
|
|
456
478
|
});
|
|
457
479
|
}
|
|
458
480
|
|
|
459
481
|
// Current page
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
if (
|
|
463
|
-
this._getTitleHierarchyCache()[
|
|
482
|
+
pageTitleInformation = currentPage._getPageTitleInformation();
|
|
483
|
+
pageTitleInformation = this._computeTitleInfo(pageTitleInformation.title ?? "", pageTitleInformation.subtitle ?? "", appSpecificHash + this._getHash());
|
|
484
|
+
if (context && newPath) {
|
|
485
|
+
this._getTitleHierarchyCache()[newPath] = pageTitleInformation;
|
|
464
486
|
} else {
|
|
465
|
-
this._getTitleHierarchyCache()[
|
|
487
|
+
this._getTitleHierarchyCache()[appSpecificHash] = pageTitleInformation;
|
|
466
488
|
}
|
|
467
489
|
} else {
|
|
468
|
-
|
|
490
|
+
titleInformationPromises.push(Promise.reject("Title information missing in HeaderInfo"));
|
|
469
491
|
}
|
|
470
|
-
return Promise.all(
|
|
492
|
+
return Promise.all(titleInformationPromises).then(titleInfoHierarchy => {
|
|
471
493
|
// workaround for shell which is expecting all elements being of type string
|
|
472
|
-
const
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
this._setShellMenuTitle(
|
|
494
|
+
const titleInfoHierarchyShell = this._ensureHierarchyElementsAreStrings(titleInfoHierarchy),
|
|
495
|
+
title = pageTitleInformation.title ?? "";
|
|
496
|
+
titleInfoHierarchyShell.reverse();
|
|
497
|
+
appComponent.getShellServices().setHierarchy(titleInfoHierarchyShell);
|
|
498
|
+
this._setShellMenuTitle(appComponent, title, appTitle);
|
|
477
499
|
return;
|
|
478
|
-
}).catch(function (
|
|
479
|
-
Log.error(
|
|
500
|
+
}).catch(function (errorMessage) {
|
|
501
|
+
Log.error(errorMessage);
|
|
480
502
|
}).finally(() => {
|
|
481
503
|
this.bIsComputingTitleHierachy = false;
|
|
482
|
-
}).catch(function (
|
|
483
|
-
Log.error(
|
|
504
|
+
}).catch(function (errorMessage) {
|
|
505
|
+
Log.error(errorMessage);
|
|
484
506
|
});
|
|
485
507
|
}
|
|
486
508
|
|
|
@@ -565,4 +587,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/BaseController", "sap/fe/core/Common
|
|
|
565
587
|
})), _class2)) || _class);
|
|
566
588
|
return RootViewBaseController;
|
|
567
589
|
}, false);
|
|
568
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb290Vmlld0Jhc2VDb250cm9sbGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiVmlld1N0YXRlIiwiYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSIsIm9uSW5pdCIsIlNpemVIZWxwZXIiLCJpbml0IiwiX2FIZWxwZXJNb2RlbHMiLCJnZXRQbGFjZWhvbGRlciIsIm9QbGFjZWhvbGRlciIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0aW5nU2VydmljZSIsImF0dGFjaEFmdGVyUm91dGVNYXRjaGVkIiwiX29uQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJvbkV4aXQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsIm9Sb3V0ZXIiLCJ1bmRlZmluZWQiLCJleGl0IiwiZm9yRWFjaCIsIm9Nb2RlbCIsImRlc3Ryb3kiLCJnZXRWaWV3RnJvbUNvbnRhaW5lciIsImNvbnRhaW5lciIsInJlc3VsdCIsImlzQSIsImdldENvbXBvbmVudEluc3RhbmNlIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRWaWV3c0Zyb21QYWdlcyIsInBhZ2VzIiwidmlld3MiLCJwYWdlIiwidmlldyIsInB1c2giLCJnZXRSZXNvdXJjZUJ1bmRsZSIsImdldE93bmVyQ29tcG9uZW50IiwiZ2V0TW9kZWwiLCJnZXRSb3V0ZXIiLCJfY3JlYXRlSGVscGVyTW9kZWwiLCJKU09OTW9kZWwiLCJyb3V0aW5nSXNDb21wbGV0ZSIsIl9vUm91dGVNYXRjaGVkUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwid2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeSIsIm9FdmVudCIsImFDb250YWluZXJzIiwiZ2V0UGFyYW1ldGVyIiwiYUZFQ29udGFpbmVycyIsIm9Db250YWluZXIiLCJvVmlldyIsIm9Db21wb25lbnRJbnN0YW5jZSIsImdldENvbnRyb2xsZXIiLCJwYWdlUmVhZHkiLCJvUmlnaHRNb3N0RkVWaWV3IiwibGVuZ3RoIiwiaXNQYWdlUmVhZHkiLCJhdHRhY2hFdmVudE9uY2UiLCJyZXN0b3JlRm9jdXNGcm9tSGlzdG9yeSIsImhpc3RvcnkiLCJzdGF0ZSIsImZvY3VzSW5mbyIsInR5cGUiLCJ0YWJsZSIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInRhYmxlSWQiLCJwb3MiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZmluZEluZGV4IiwiY29udGV4dCIsImdldFBhdGgiLCJjb250ZXh0UGF0aEZvY3VzIiwiZm9jdXNSb3ciLCJjb250cm9sSWQiLCJmb2N1cyIsInJlcGxhY2VTdGF0ZSIsIk9iamVjdCIsImFzc2lnbiIsInRoZW4iLCJvUm9vdENvbnRyb2wiLCJnZXRWaWV3IiwiZ2V0Q29udGVudCIsImdldEF1dG9Gb2N1cyIsInNldFByb3BlcnR5Iiwib0FwcENvbXBvbmVudCIsIl9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiVVNoZWxsIiwiX2NvbXB1dGVUaXRsZUhpZXJhcmNoeSIsImJGb3JjZUZvY3VzIiwiZ2V0Um91dGVyUHJveHkiLCJpc0ZvY3VzRm9yY2VkIiwic2V0Rm9jdXNGb3JjZWQiLCJvblBhZ2VSZWFkeSIsImdldFBhcmVudCIsImZvcmNlRm9jdXMiLCJyZXN0b3JlRm9jdXNGb3JDdXJyZW50SGFzaCIsIm9uQ29udGFpbmVyUmVhZHkiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiZmluYWxseSIsIl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlIiwib1RpdGxlSGllcmFyY2h5Q2FjaGUiLCJfY29tcHV0ZVRpdGxlSW5mbyIsInRpdGxlIiwic3VidGl0bGUiLCJzSW50ZW50IiwiaWNvbiIsImFQYXJ0cyIsInNwbGl0IiwiaW5jbHVkZXMiLCJpbnRlbnQiLCJfZm9ybWF0VGl0bGUiLCJkaXNwbGF5TW9kZSIsInRpdGxlVmFsdWUiLCJ0aXRsZURlc2NyaXB0aW9uIiwiZm9ybWF0dGVkVGl0bGUiLCJfZmV0Y2hUaXRsZVZhbHVlIiwic1BhdGgiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJvQmluZGluZ1ZpZXdDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJzVmFsdWVFeHByZXNzaW9uIiwiQW5ub3RhdGlvbkhlbHBlciIsImZvcm1hdCIsImdldE9iamVjdCIsInNUZXh0RXhwcmVzc2lvbiIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJhUHJvbWlzZXMiLCJvVmFsdWVFeHByZXNzaW9uIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJvUHJvbWlzZUZvckRpc3BsYXlNb2RlIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJzVmFsdWVQYXRoIiwicGFydHMiLCJwYXRoIiwiZm5WYWx1ZUZvcm1hdHRlciIsImZvcm1hdHRlciIsIm9WYWx1ZUJpbmRpbmciLCJiaW5kUHJvcGVydHkiLCIkJGdyb3VwSWQiLCJpbml0aWFsaXplIiwib1Byb21pc2VGb3JUaXRsZVZhbHVlIiwiZm5DaGFuZ2UiLCJzVGFyZ2V0VmFsdWUiLCJnZXRTb3VyY2UiLCJnZXRWYWx1ZSIsImRldGFjaENoYW5nZSIsImF0dGFjaENoYW5nZSIsIm9UZXh0RXhwcmVzc2lvbiIsInNUZXh0UGF0aCIsImxhc3RJbmRleE9mIiwic2xpY2UiLCJmblRleHRGb3JtYXR0ZXIiLCJvVGV4dEJpbmRpbmciLCJvUHJvbWlzZUZvclRpdGxlVGV4dCIsInNUYXJnZXRUZXh0IiwidGl0bGVJbmZvIiwiYWxsIiwiX2dldEFwcFNwZWNpZmljSGFzaCIsImhhc2hDaGFuZ2VyIiwiSGFzaENoYW5nZXIiLCJnZXRJbnN0YW5jZSIsImhyZWZGb3JBcHBTcGVjaWZpY0hhc2giLCJVUkkiLCJkZWNvZGUiLCJfZ2V0SGFzaCIsImdldEhhc2giLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInNFbnRpdHlQYXRoIiwic1R5cGVOYW1lIiwic0FwcFNwZWNpZmljSGFzaCIsInNUaXRsZSIsIm9UaXRsZUluZm8iLCJfZW5zdXJlSGllcmFyY2h5RWxlbWVudHNBcmVTdHJpbmdzIiwiYUhpZXJhcmNoeSIsImFIaWVyYXJjaHlTaGVsbCIsImxldmVsIiwib0hpZXJhcmNoeSIsIm9TaGVsbEhpZXJhcmNoeSIsImtleSIsIlN0cmluZyIsIl9nZXRUYXJnZXRUeXBlRnJvbUhhc2giLCJzSGFzaCIsInNUYXJnZXRUeXBlIiwiYVJvdXRlcyIsImdldE1hbmlmZXN0RW50cnkiLCJyb3V0aW5nIiwicm91dGVzIiwicm91dGUiLCJvUm91dGUiLCJnZXRSb3V0ZSIsIm5hbWUiLCJtYXRjaCIsInNUYXJnZXQiLCJnZXRSb3V0ZVRhcmdldE5hbWVzIiwidGFyZ2V0IiwiZ2V0VGFyZ2V0IiwiX29PcHRpb25zIiwib0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9DdXJyZW50UGFnZSIsImFUaXRsZUluZm9ybWF0aW9uUHJvbWlzZXMiLCJtYW5pZmVzdEFwcFNldHRpbmdzIiwic0FwcFRpdGxlIiwic0FwcFN1YlRpdGxlIiwic3ViVGl0bGUiLCJhcHBJY29uIiwib1BhZ2VUaXRsZUluZm9ybWF0aW9uIiwic05ld1BhdGgiLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJhUGF0aFBhcnRzIiwic2hpZnQiLCJwb3AiLCJzUGF0aFBhcnQiLCJzUGFyYW1ldGVyUGF0aCIsImJJc1BhcmFtZXRlcml6ZWQiLCJyZWplY3QiLCJhVGl0bGVJbmZvSGllcmFyY2h5IiwiYVRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsIiwicmV2ZXJzZSIsImdldFNoZWxsU2VydmljZXMiLCJzZXRIaWVyYXJjaHkiLCJfc2V0U2hlbGxNZW51VGl0bGUiLCJzRXJyb3JNZXNzYWdlIiwiY2FsY3VsYXRlTGF5b3V0IiwiaU5leHRGQ0xMZXZlbCIsInNQcm9wb3NlZExheW91dCIsImtlZXBDdXJyZW50TGF5b3V0Iiwib25Db250ZXh0Qm91bmRUb1ZpZXciLCJzRGVlcGVzdFBhdGgiLCJnZXRQcm9wZXJ0eSIsInNWaWV3Q29udGV4dFBhdGgiLCJpbmRleE9mIiwiZGlzcGxheUVycm9yUGFnZSIsIl9lcnJvck1lc3NhZ2UiLCJfcGFyYW1ldGVycyIsIl9GQ0xMZXZlbCIsInVwZGF0ZVVJU3RhdGVGb3JWaWV3IiwiRkNMTGV2ZWwiLCJnZXRJbnN0YW5jZWRWaWV3cyIsImdldFZpc2libGVWaWV3cyIsImlzRmNsRW5hYmxlZCIsInNldFRpdGxlIiwiZ2V0QXBwQ29udGVudENvbnRhaW5lciIsImFwcENvbnRlbnRJZCIsImNvbmZpZyIsImJ5SWQiLCJCYXNlQ29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUm9vdFZpZXdCYXNlQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgdHlwZSBGbGV4aWJsZUNvbHVtbkxheW91dCBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHsgdHlwZSBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBnZXRSb3V0ZVRhcmdldE5hbWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWFuaWZlc3RIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBIYXNoQ2hhbmdlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9IYXNoQ2hhbmdlclwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZSRNYXRjaGVkRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZVwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YVByb3BlcnR5QmluZGluZyRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgVVJJIGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9VUklcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwiLi4vQXBwQ29tcG9uZW50XCI7XG5cbmV4cG9ydCB0eXBlIFRpdGxlSW5mb3JtYXRpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRzdWJ0aXRsZT86IHN0cmluZztcblx0aWNvbj86IHN0cmluZztcblx0aW50ZW50Pzogc3RyaW5nO1xufTtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUucm9vdFZpZXcuUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiKVxuY2xhc3MgUm9vdFZpZXdCYXNlQ29udHJvbGxlciBleHRlbmRzIEJhc2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRvUGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0cHJpdmF0ZSBfYUhlbHBlck1vZGVscyE6IEpTT05Nb2RlbFtdO1xuXG5cdHByaXZhdGUgb1JvdXRlcj86IFJvdXRlcjtcblxuXHRwcml2YXRlIF9vUm91dGVNYXRjaGVkUHJvbWlzZT86IFByb21pc2U8dm9pZD47XG5cblx0cHJpdmF0ZSBvVGl0bGVIaWVyYXJjaHlDYWNoZT86IFJlY29yZDxzdHJpbmcsIFRpdGxlSW5mb3JtYXRpb24+O1xuXG5cdHByaXZhdGUgYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSA9IGZhbHNlO1xuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRTaXplSGVscGVyLmluaXQoKTtcblxuXHRcdHRoaXMuX2FIZWxwZXJNb2RlbHMgPSBbXTtcblx0fVxuXG5cdGdldFBsYWNlaG9sZGVyKCk6IFBsYWNlaG9sZGVyIHtcblx0XHRyZXR1cm4gdGhpcy5vUGxhY2Vob2xkZXI7XG5cdH1cblxuXHRhdHRhY2hSb3V0ZU1hdGNoZXJzKCk6IHZvaWQge1xuXHRcdHRoaXMub1BsYWNlaG9sZGVyLmF0dGFjaFJvdXRlTWF0Y2hlcnMoKTtcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQoe30sIHRoaXMuX29uQWZ0ZXJSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5kZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCh0aGlzLl9vbkFmdGVyUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLm9Sb3V0ZXIgPSB1bmRlZmluZWQ7XG5cblx0XHRTaXplSGVscGVyLmV4aXQoKTtcblxuXHRcdC8vIERlc3Ryb3kgYWxsIEpTT04gbW9kZWxzIGNyZWF0ZWQgZHluYW1pY2FsbHkgZm9yIHRoZSB2aWV3c1xuXHRcdHRoaXMuX2FIZWxwZXJNb2RlbHMuZm9yRWFjaChmdW5jdGlvbiAob01vZGVsOiBKU09OTW9kZWwpIHtcblx0XHRcdG9Nb2RlbC5kZXN0cm95KCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZ2V0Vmlld0Zyb21Db250YWluZXIoY29udGFpbmVyOiBDb250cm9sKTogVmlldyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gY29udGFpbmVyLmlzQTxDb21wb25lbnRDb250YWluZXI+KFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCIpXG5cdFx0XHQ/IGNvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpLmdldFJvb3RDb250cm9sKClcblx0XHRcdDogY29udGFpbmVyO1xuXG5cdFx0cmV0dXJuIHJlc3VsdD8uaXNBPFZpZXc+KFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIikgPyByZXN1bHQgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQW5hbHl6ZSB0aGUgcGFnZXMgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2aWV3cy5cblx0ICpcblx0ICogQHBhcmFtIHBhZ2VzIFRoZSBwYWdlcyB0byBiZSBhbmFseXplZC5cblx0ICogQHJldHVybnMgVGhlIHZpZXdzXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0Vmlld3NGcm9tUGFnZXMocGFnZXM6IENvbnRyb2xbXSk6IFZpZXdbXSB7XG5cdFx0Y29uc3Qgdmlld3M6IFZpZXdbXSA9IFtdO1xuXG5cdFx0cGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuXHRcdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0Vmlld0Zyb21Db250YWluZXIocGFnZSk7XG5cblx0XHRcdGlmICh2aWV3ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmlld3MucHVzaCh2aWV3KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB2aWV3cztcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGdldHRpbmcgdGhlIHJlc291cmNlIGJ1bmRsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgcmVzb3VyY2VNb2RlbCBvZiB0aGUgY29tcG9uZW50XG5cdCAqL1xuXHRnZXRSZXNvdXJjZUJ1bmRsZSgpOiBSZXNvdXJjZUJ1bmRsZSB8IFByb21pc2U8UmVzb3VyY2VCdW5kbGU+IHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcImkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTtcblx0fVxuXG5cdGdldFJvdXRlcigpOiBSb3V0ZXIge1xuXHRcdGlmICghdGhpcy5vUm91dGVyKSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlcigpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLm9Sb3V0ZXI7XG5cdH1cblxuXHRfY3JlYXRlSGVscGVyTW9kZWwoKTogSlNPTk1vZGVsIHtcblx0XHQvLyBXZSBrZWVwIGEgcmVmZXJlbmNlIG9uIHRoZSBtb2RlbHMgY3JlYXRlZCBkeW5hbWljYWxseSwgYXMgdGhleSBkb24ndCBnZXQgZGVzdHJveWVkXG5cdFx0Ly8gYXV0b21hdGljYWxseSB3aGVuIHRoZSB2aWV3IGlzIGRlc3Ryb3llZC5cblx0XHQvLyBUaGlzIGlzIGRvbmUgZHVyaW5nIG9uRXhpdFxuXHRcdGNvbnN0IG9Nb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzLnB1c2gob01vZGVsKTtcblxuXHRcdHJldHVybiBvTW9kZWw7XG5cdH1cblxuXHRhc3luYyByb3V0aW5nSXNDb21wbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCAodGhpcy5fb1JvdXRlTWF0Y2hlZFByb21pc2UgfHwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHdhaXRpbmcgZm9yIHRoZSBSaWdodCBtb3N0IHZpZXcgdG8gYmUgcmVhZHkuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRXZlbnQgUmVmZXJlbmNlIGFuIEV2ZW50IHBhcmFtZXRlciBjb21pbmcgZnJvbSByb3V0ZU1hdGNoZWQgZXZlbnRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGluZGljYXRpbmcgd2hlbiB0aGUgcmlnaHQgbW9zdCB2aWV3IGlzIHJlYWR5XG5cdCAqL1xuXHRhc3luYyB3YWl0Rm9yUmlnaHRNb3N0Vmlld1JlYWR5KG9FdmVudDogUm91dGUkTWF0Y2hlZEV2ZW50KTogUHJvbWlzZTxGRVZpZXc+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogRkVWaWV3KSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBhQ29udGFpbmVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKSA/PyBbXSxcblx0XHRcdFx0Ly8gVGhlcmUgY2FuIGFsc28gYmUgcmV1c2UgY29tcG9uZW50cyBpbiB0aGUgdmlldywgcmVtb3ZlIHRoZW0gYmVmb3JlIHByb2Nlc3NpbmcuXG5cdFx0XHRcdGFGRUNvbnRhaW5lcnM6IEZFVmlld1tdID0gW107XG5cdFx0XHRhQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGFpbmVyOiBWaWV3IHwgQ29tcG9uZW50Q29udGFpbmVyIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGxldCBvVmlldyA9IG9Db250YWluZXIgYXMgRkVWaWV3IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAob0NvbnRhaW5lciAmJiAob0NvbnRhaW5lciBhcyBDb21wb25lbnRDb250YWluZXIpLmdldENvbXBvbmVudEluc3RhbmNlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbXBvbmVudEluc3RhbmNlID0gKG9Db250YWluZXIgYXMgQ29tcG9uZW50Q29udGFpbmVyKS5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0XHRcdG9WaWV3ID0gb0NvbXBvbmVudEluc3RhbmNlLmdldFJvb3RDb250cm9sKCkgYXMgRkVWaWV3O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvVmlldyAmJiBvVmlldy5nZXRDb250cm9sbGVyKCkgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeSkge1xuXHRcdFx0XHRcdGFGRUNvbnRhaW5lcnMucHVzaChvVmlldyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgb1JpZ2h0TW9zdEZFVmlldyA9IGFGRUNvbnRhaW5lcnNbYUZFQ29udGFpbmVycy5sZW5ndGggLSAxXTtcblx0XHRcdGlmIChvUmlnaHRNb3N0RkVWaWV3ICYmIG9SaWdodE1vc3RGRVZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeS5pc1BhZ2VSZWFkeSgpKSB7XG5cdFx0XHRcdHJlc29sdmUob1JpZ2h0TW9zdEZFVmlldyk7XG5cdFx0XHR9IGVsc2UgaWYgKG9SaWdodE1vc3RGRVZpZXcpIHtcblx0XHRcdFx0b1JpZ2h0TW9zdEZFVmlldy5nZXRDb250cm9sbGVyKCkucGFnZVJlYWR5LmF0dGFjaEV2ZW50T25jZShcInBhZ2VSZWFkeVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShvUmlnaHRNb3N0RkVWaWV3KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJlc3RvcmUgdGhlIGZvY3VzSW5mb3JtYXRpb24gZnJvbSB0aGUgaGlzdG9yeSBPYmplY3QuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVzdG9yZUZvY3VzRnJvbUhpc3RvcnkoKTogdm9pZCB7XG5cdFx0c3dpdGNoIChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby50eXBlKSB7XG5cdFx0XHRjYXNlIFwiUm93XCI6XG5cdFx0XHRcdGNvbnN0IHRhYmxlID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby50YWJsZUlkKSBhcyBUYWJsZTtcblx0XHRcdFx0Y29uc3QgcG9zID0gdGFibGVcblx0XHRcdFx0XHQuZ2V0Um93QmluZGluZygpXG5cdFx0XHRcdFx0LmdldEN1cnJlbnRDb250ZXh0cygpXG5cdFx0XHRcdFx0LmZpbmRJbmRleCgoY29udGV4dCkgPT4gY29udGV4dC5nZXRQYXRoKCkgPT09IGhpc3Rvcnkuc3RhdGUuZm9jdXNJbmZvLmNvbnRleHRQYXRoRm9jdXMpO1xuXHRcdFx0XHRpZiAocG9zICE9PSAtMSkge1xuXHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KHBvcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRFbGVtZW50LmdldEVsZW1lbnRCeUlkKGhpc3Rvcnkuc3RhdGUuZm9jdXNJbmZvLmNvbnRyb2xJZCk/LmZvY3VzKCk7XG5cdFx0fVxuXHRcdC8vb25jZSBhcHBsaWVkLCB0aGUgZm9jdXMgaW5mbyBpcyByZW1vdmVkIHRvIHByZXZlbnQgZm9jdXNpbmcgb24gaXQgZWFjaCB0aW1lIHRoZSB1c2VyIGRvIGEgYmFjayBuYXZpZ2F0aW9uIHRvIHRoaXMgcGFnZVxuXHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oaGlzdG9yeS5zdGF0ZSwgeyBmb2N1c0luZm86IG51bGwgfSksIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZG9uZS5cblx0ICogIC0gdXBkYXRlIHRoZSBzaGVsbCB0aXRsZS5cblx0ICogIC0gdXBkYXRlIHRhYmxlIHNjcm9sbC5cblx0ICogIC0gY2FsbCBvblBhZ2VSZWFkeSBvbiB0aGUgcmlnaHRNb3N0Vmlldy5cblx0ICpcblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0X29uQWZ0ZXJSb3V0ZU1hdGNoZWQob0V2ZW50OiBSb3V0ZSRNYXRjaGVkRXZlbnQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlKSB7XG5cdFx0XHR0aGlzLl9vUm91dGVNYXRjaGVkUHJvbWlzZSA9IHRoaXMud2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeShvRXZlbnQpXG5cdFx0XHRcdC50aGVuKChvVmlldzogVmlldykgPT4ge1xuXHRcdFx0XHRcdC8vIFRoZSBhdXRvRm9jdXMgaXMgaW5pdGlhbGx5IGRpc2FibGVkIG9uIHRoZSBuYXZDb250YWluZXIgb3IgdGhlIEZDTCwgc28gdGhhdCB0aGUgZm9jdXMgc3RheXMgb24gdGhlIFNoZWxsIG1lbnVcblx0XHRcdFx0XHQvLyBldmVuIGlmIHRoZSBhcHAgdGFrZXMgYSBsb25nIHRpbWUgdG8gbGF1bmNoXG5cdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IHRpbWUgdGhlIHZpZXcgaXMgZGlzcGxheWVkLCB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgYXV0b2ZvY3VzIHNvIHRoYXQgaXQncyBtYW5hZ2VkIHByb3Blcmx5IGR1cmluZyBuYXZpZ2F0aW9uXG5cdFx0XHRcdFx0Y29uc3Qgb1Jvb3RDb250cm9sID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG9Sb290Q29udHJvbCAmJlxuXHRcdFx0XHRcdFx0KG9Sb290Q29udHJvbCBhcyBGbGV4aWJsZUNvbHVtbkxheW91dCkuZ2V0QXV0b0ZvY3VzICYmXG5cdFx0XHRcdFx0XHQhKG9Sb290Q29udHJvbCBhcyBGbGV4aWJsZUNvbHVtbkxheW91dCkuZ2V0QXV0b0ZvY3VzKClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9Sb290Q29udHJvbC5zZXRQcm9wZXJ0eShcImF1dG9Gb2N1c1wiLCB0cnVlLCB0cnVlKTsgLy8gRG8gbm90IG1hcmsgdGhlIGNvbnRhaW5lciBhcyBpbnZhbGlkLCBvdGhlcndpc2UgaXQncyByZS1yZW5kZXJlZFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0XHRcdHRoaXMuX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zKCk7XG5cdFx0XHRcdFx0aWYgKG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5VU2hlbGwpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2NvbXB1dGVUaXRsZUhpZXJhcmNoeShvVmlldyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGJGb3JjZUZvY3VzID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmlzRm9jdXNGb3JjZWQoKTtcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuc2V0Rm9jdXNGb3JjZWQoZmFsc2UpOyAvLyByZXNldFxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG9WaWV3LmdldENvbnRyb2xsZXIoKSAmJlxuXHRcdFx0XHRcdFx0KG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikub25QYWdlUmVhZHkgJiZcblx0XHRcdFx0XHRcdChvVmlldy5nZXRQYXJlbnQoKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkub25QYWdlUmVhZHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdChvVmlldy5nZXRQYXJlbnQoKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkub25QYWdlUmVhZHkoeyBmb3JjZUZvY3VzOiBiRm9yY2VGb2N1cyB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGhpc3Rvcnkuc3RhdGUuZm9jdXNJbmZvKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlc3RvcmVGb2N1c0Zyb21IaXN0b3J5KCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghYkZvcmNlRm9jdXMpIHtcblx0XHRcdFx0XHRcdC8vIFRyeSB0byByZXN0b3JlIHRoZSBmb2N1cyBvbiB3aGVyZSBpdCB3YXMgd2hlbiB3ZSBsYXN0IHZpc2l0ZWQgdGhlIGN1cnJlbnQgaGFzaFxuXHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLnJlc3RvcmVGb2N1c0ZvckN1cnJlbnRIYXNoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0aGlzLm9uQ29udGFpbmVyUmVhZHkpIHtcblx0XHRcdFx0XHRcdHRoaXMub25Db250YWluZXJSZWFkeSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyB0aGUgdGl0bGUgaGllcmFyY2h5IGFuZCBjYWxsaW5nIGZvY3VzIG1ldGhvZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBUaXRsZUhpZXJhcmNoeSBjYWNoZSAoIG9yIGluaXRpYWxpemVzIGl0IGlmIHVuZGVmaW5lZCkuXG5cdCAqXG5cdCAqIEByZXR1cm5zICBUaGUgVGl0bGVIaWVyYXJjaHkgY2FjaGVcblx0ICovXG5cdF9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk6IFJlY29yZDxzdHJpbmcsIFRpdGxlSW5mb3JtYXRpb24+IHtcblx0XHRpZiAoIXRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGUpIHtcblx0XHRcdHRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdGl0bGVJbmZvIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHRpdGxlIFRoZSBhcHBsaWNhdGlvbidzIHRpdGxlXG5cdCAqIEBwYXJhbSBzdWJ0aXRsZSBUaGUgYXBwbGljYXRpb24ncyBzdWJUaXRsZVxuXHQgKiBAcGFyYW0gc0ludGVudCBUaGUgaW50ZW50IHBhdGggdG8gYmUgcmVkaXJlY3RlZCB0b1xuXHQgKiBAcGFyYW0gaWNvbiBUaGUgYXBwbGljYXRpb24ncyBpY29uXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKi9cblx0X2NvbXB1dGVUaXRsZUluZm8odGl0bGU6IHN0cmluZywgc3VidGl0bGU6IHN0cmluZywgc0ludGVudDogc3RyaW5nLCBpY29uID0gXCJcIik6IFRpdGxlSW5mb3JtYXRpb24ge1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNJbnRlbnQuc3BsaXQoXCIvXCIpO1xuXHRcdGlmICghYVBhcnRzW2FQYXJ0cy5sZW5ndGggLSAxXS5pbmNsdWRlcyhcIj9cIikpIHtcblx0XHRcdHNJbnRlbnQgKz0gXCI/cmVzdG9yZUhpc3Rvcnk9dHJ1ZVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzSW50ZW50ICs9IFwiJnJlc3RvcmVIaXN0b3J5PXRydWVcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiB0aXRsZSxcblx0XHRcdHN1YnRpdGxlOiBzdWJ0aXRsZSxcblx0XHRcdGludGVudDogc0ludGVudCxcblx0XHRcdGljb246IGljb25cblx0XHR9O1xuXHR9XG5cblx0X2Zvcm1hdFRpdGxlKGRpc3BsYXlNb2RlOiBzdHJpbmcsIHRpdGxlVmFsdWU6IHN0cmluZywgdGl0bGVEZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgZm9ybWF0dGVkVGl0bGUgPSBcIlwiO1xuXHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdGNhc2UgXCJWYWx1ZVwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlVmFsdWV9YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlVmFsdWV9ICgke3RpdGxlRGVzY3JpcHRpb259KWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZURlc2NyaXB0aW9ufSAoJHt0aXRsZVZhbHVlfSlgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlRGVzY3JpcHRpb259YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdH1cblx0XHRyZXR1cm4gZm9ybWF0dGVkVGl0bGU7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgdmFsdWUgb2YgdGhlIEhlYWRlckluZm8gdGl0bGUgZm9yIGEgZ2l2ZW4gcGF0aC5cblx0ICpcblx0ICogQHBhcmFtIHNQYXRoIFRoZSBwYXRoIHRvIHRoZSBlbnRpdHlcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCB0aXRsZSwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIG5vIEhlYWRlckluZm8gdGl0bGUgYW5ub3RhdGlvbiBpcyBhdmFpbGFibGVcblx0ICovXG5cdGFzeW5jIF9mZXRjaFRpdGxlVmFsdWUoc1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKSxcblx0XHRcdG9CaW5kaW5nVmlld0NvbnRleHQgPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGgpLFxuXHRcdFx0c1ZhbHVlRXhwcmVzc2lvbiA9IEFubm90YXRpb25IZWxwZXIuZm9ybWF0KFxuXHRcdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlYCksXG5cdFx0XHRcdHsgY29udGV4dDogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgfVxuXHRcdFx0KTtcblx0XHRpZiAoIXNWYWx1ZUV4cHJlc3Npb24pIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdFx0fVxuXHRcdGNvbnN0IHNUZXh0RXhwcmVzc2lvbiA9IEFubm90YXRpb25IZWxwZXIuZm9ybWF0KFxuXHRcdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRgJHtzTWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR7IGNvbnRleHQ6IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIH1cblx0XHRcdCksXG5cdFx0XHRvUHJvcGVydHlDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UaXRsZS9WYWx1ZS8kUGF0aEBgKSxcblx0XHRcdGFQcm9taXNlczogUHJvbWlzZTxzdHJpbmc+W10gPSBbXSxcblx0XHRcdG9WYWx1ZUV4cHJlc3Npb24gPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoc1ZhbHVlRXhwcmVzc2lvbiksXG5cdFx0XHRvUHJvbWlzZUZvckRpc3BsYXlNb2RlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKG9Qcm9wZXJ0eUNvbnRleHQpO1xuXHRcdFx0XHRyZXNvbHZlKGRpc3BsYXlNb2RlKTtcblx0XHRcdH0pO1xuXHRcdGFQcm9taXNlcy5wdXNoKG9Qcm9taXNlRm9yRGlzcGxheU1vZGUpO1xuXHRcdGNvbnN0IHNWYWx1ZVBhdGggPSBvVmFsdWVFeHByZXNzaW9uLnBhcnRzID8gb1ZhbHVlRXhwcmVzc2lvbi5wYXJ0c1swXS5wYXRoIDogb1ZhbHVlRXhwcmVzc2lvbi5wYXRoLFxuXHRcdFx0Zm5WYWx1ZUZvcm1hdHRlciA9IG9WYWx1ZUV4cHJlc3Npb24uZm9ybWF0dGVyLFxuXHRcdFx0b1ZhbHVlQmluZGluZyA9IG9Nb2RlbC5iaW5kUHJvcGVydHkoc1ZhbHVlUGF0aCwgb0JpbmRpbmdWaWV3Q29udGV4dCwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCIgfSk7XG5cdFx0b1ZhbHVlQmluZGluZy5pbml0aWFsaXplKCk7XG5cdFx0Y29uc3Qgb1Byb21pc2VGb3JUaXRsZVZhbHVlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uIChvRXZlbnQ6IE9EYXRhUHJvcGVydHlCaW5kaW5nJENoYW5nZUV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdGNvbnN0IHNUYXJnZXRWYWx1ZSA9IGZuVmFsdWVGb3JtYXR0ZXIgPyBmblZhbHVlRm9ybWF0dGVyKG9FdmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpKSA6IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpO1xuXG5cdFx0XHRcdG9WYWx1ZUJpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHRcdFx0cmVzb2x2ZShzVGFyZ2V0VmFsdWUpO1xuXHRcdFx0fTtcblx0XHRcdG9WYWx1ZUJpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHR9KTtcblx0XHRhUHJvbWlzZXMucHVzaChvUHJvbWlzZUZvclRpdGxlVmFsdWUpO1xuXG5cdFx0aWYgKHNUZXh0RXhwcmVzc2lvbikge1xuXHRcdFx0Y29uc3Qgb1RleHRFeHByZXNzaW9uID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHNUZXh0RXhwcmVzc2lvbik7XG5cdFx0XHRsZXQgc1RleHRQYXRoID0gb1RleHRFeHByZXNzaW9uLnBhcnRzID8gb1RleHRFeHByZXNzaW9uLnBhcnRzWzBdLnBhdGggOiBvVGV4dEV4cHJlc3Npb24ucGF0aDtcblx0XHRcdHNUZXh0UGF0aCA9IHNWYWx1ZVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID4gLTEgPyBgJHtzVmFsdWVQYXRoLnNsaWNlKDAsIHNWYWx1ZVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKX0vJHtzVGV4dFBhdGh9YCA6IHNUZXh0UGF0aDtcblxuXHRcdFx0Y29uc3QgZm5UZXh0Rm9ybWF0dGVyID0gb1RleHRFeHByZXNzaW9uLmZvcm1hdHRlcixcblx0XHRcdFx0b1RleHRCaW5kaW5nID0gb01vZGVsLmJpbmRQcm9wZXJ0eShzVGV4dFBhdGgsIG9CaW5kaW5nVmlld0NvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pO1xuXHRcdFx0b1RleHRCaW5kaW5nLmluaXRpYWxpemUoKTtcblx0XHRcdGNvbnN0IG9Qcm9taXNlRm9yVGl0bGVUZXh0ID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IChkZXNjcmlwdGlvbjogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0XHRcdGNvbnN0IGZuQ2hhbmdlID0gZnVuY3Rpb24gKG9FdmVudDogT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRjb25zdCBzVGFyZ2V0VGV4dCA9IGZuVGV4dEZvcm1hdHRlciA/IGZuVGV4dEZvcm1hdHRlcihvRXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKSkgOiBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKTtcblxuXHRcdFx0XHRcdG9UZXh0QmluZGluZy5kZXRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdFx0XHRcdHJlc29sdmUoc1RhcmdldFRleHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdG9UZXh0QmluZGluZy5hdHRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdFx0fSk7XG5cdFx0XHRhUHJvbWlzZXMucHVzaChvUHJvbWlzZUZvclRpdGxlVGV4dCk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB0aXRsZUluZm86IHN0cmluZ1tdID0gYXdhaXQgUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0XHRcdGxldCBmb3JtYXR0ZWRUaXRsZSA9IFwiXCI7XG5cdFx0XHRpZiAodHlwZW9mIHRpdGxlSW5mbyAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IHRoaXMuX2Zvcm1hdFRpdGxlKHRpdGxlSW5mb1swXSwgdGl0bGVJbmZvWzFdLCB0aXRsZUluZm9bMl0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZvcm1hdHRlZFRpdGxlO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBmZXRjaGluZyB0aGUgdGl0bGUgZnJvbSB0aGUgaGVhZGVyIGluZm8gOlwiICsgZXJyb3IpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiByZXR1cm5pbmcgdGhlIGRlY29kZWQgYXBwbGljYXRpb24tc3BlY2lmaWMgaGFzaC5cblx0ICpcblx0ICogQHJldHVybnMgRGVjb2RlZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBoYXNoXG5cdCAqL1xuXHRfZ2V0QXBwU3BlY2lmaWNIYXNoKCk6IHN0cmluZyB7XG5cdFx0Ly8gSGFzaENoYW5nZWQgaXNTaGVsbE5hdmlnYXRpb25IYXNoQ2hhbmdlclxuXHRcdGNvbnN0IGhhc2hDaGFuZ2VyID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRyZXR1cm4gaGFzaENoYW5nZXIuaHJlZkZvckFwcFNwZWNpZmljSGFzaCA/IFVSSS5kZWNvZGUoaGFzaENoYW5nZXIuaHJlZkZvckFwcFNwZWNpZmljSGFzaChcIlwiKSkgOiBcIiMvXCI7XG5cdH1cblxuXHRfZ2V0SGFzaCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGl0bGVJbmZvcm1hdGlvbiBmcm9tIGEgcGF0aC5cblx0ICogSXQgdXBkYXRlcyB0aGUgY2FjaGUgdG8gc3RvcmUgdGl0bGUgaW5mb3JtYXRpb24gaWYgbmVjZXNzYXJ5XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gc1BhdGggcGF0aCBvZiB0aGUgY29udGV4dCB0byByZXRyaWV2ZSB0aXRsZSBpbmZvcm1hdGlvbiBmcm9tIE1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gIG9UaXRsZWluZm9ybWF0aW9uIHJldHVybmVkIGFzIHByb21pc2Vcblx0ICovXG5cblx0YXN5bmMgZ2V0VGl0bGVJbmZvRnJvbVBhdGgoc1BhdGg6IHN0cmluZyk6IFByb21pc2U8VGl0bGVJbmZvcm1hdGlvbj4ge1xuXHRcdGNvbnN0IG9UaXRsZUhpZXJhcmNoeUNhY2hlID0gdGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpO1xuXG5cdFx0aWYgKG9UaXRsZUhpZXJhcmNoeUNhY2hlW3NQYXRoXSkge1xuXHRcdFx0Ly8gVGhlIHRpdGxlIGluZm8gaXMgYWxyZWFkeSBzdG9yZWQgaW4gdGhlIGNhY2hlXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9UaXRsZUhpZXJhcmNoeUNhY2hlW3NQYXRoXSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRjb25zdCBzVHlwZU5hbWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm8vVHlwZU5hbWVgKTtcblx0XHRjb25zdCBzQXBwU3BlY2lmaWNIYXNoID0gdGhpcy5fZ2V0QXBwU3BlY2lmaWNIYXNoKCk7XG5cdFx0Y29uc3Qgc0ludGVudCA9IHNBcHBTcGVjaWZpY0hhc2ggKyBzUGF0aC5zbGljZSgxKTtcblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hUaXRsZVZhbHVlKHNQYXRoKS50aGVuKChzVGl0bGU6IHN0cmluZykgPT4ge1xuXHRcdFx0Y29uc3Qgb1RpdGxlSW5mbyA9IHRoaXMuX2NvbXB1dGVUaXRsZUluZm8oc1R5cGVOYW1lLCBzVGl0bGUsIHNJbnRlbnQpO1xuXHRcdFx0b1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdID0gb1RpdGxlSW5mbztcblx0XHRcdHJldHVybiBvVGl0bGVJbmZvO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuc3VyZSB0aGF0IHRoZSB1c2hlbGwgc2VydmljZSByZWNlaXZlcyBhbGwgZWxlbWVudHNcblx0ICogKHRpdGxlLCBzdWJ0aXRsZSwgaW50ZW50LCBpY29uKSBhcyBzdHJpbmdzLlxuXHQgKlxuXHQgKiBBbm5vdGF0aW9uIEhlYWRlckluZm8gYWxsb3dzIGZvciBiaW5kaW5nIG9mIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxuXHQgKiAod2hpY2ggYXJlIHVzZWQgaGVyZSBhcyB0aXRsZSBhbmQgc3VidGl0bGUpIHRvIGFueSBlbGVtZW50IGluIHRoZSBlbnRpdHlcblx0ICogKGJlaW5nIHBvc3NpYmx5IHR5cGVzIGxpa2UgYm9vbGVhbiwgdGltZXN0YW1wLCBkb3VibGUsIGV0Yy4pXG5cdCAqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaGllcmFyY2h5IGFuZCBjb252ZXJ0cyBub24tc3RyaW5nIHR5cGVzIHRvIHN0cmluZy5cblx0ICpcblx0ICogQHBhcmFtIGFIaWVyYXJjaHkgU2hlbGwgdGl0bGUgaGllcmFyY2h5XG5cdCAqIEByZXR1cm5zIENvcHkgb2Ygc2hlbGwgdGl0bGUgaGllcmFyY2h5IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIGFzIHN0cmluZ3Ncblx0ICovXG5cdF9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3MoYUhpZXJhcmNoeTogVGl0bGVJbmZvcm1hdGlvbltdKTogb2JqZWN0W10ge1xuXHRcdGNvbnN0IGFIaWVyYXJjaHlTaGVsbCA9IFtdO1xuXHRcdGZvciAoY29uc3QgbGV2ZWwgaW4gYUhpZXJhcmNoeSkge1xuXHRcdFx0Y29uc3Qgb0hpZXJhcmNoeSA9IGFIaWVyYXJjaHlbbGV2ZWxdO1xuXHRcdFx0Y29uc3Qgb1NoZWxsSGllcmFyY2h5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBvSGllcmFyY2h5KSB7XG5cdFx0XHRcdG9TaGVsbEhpZXJhcmNoeVtrZXldID0gKFxuXHRcdFx0XHRcdHR5cGVvZiBvSGllcmFyY2h5W2tleSBhcyBrZXlvZiBUaXRsZUluZm9ybWF0aW9uXSAhPT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0PyBTdHJpbmcob0hpZXJhcmNoeVtrZXkgYXMga2V5b2YgVGl0bGVJbmZvcm1hdGlvbl0pXG5cdFx0XHRcdFx0XHQ6IG9IaWVyYXJjaHlba2V5IGFzIGtleW9mIFRpdGxlSW5mb3JtYXRpb25dXG5cdFx0XHRcdCkgYXMgc3RyaW5nO1xuXHRcdFx0fVxuXHRcdFx0YUhpZXJhcmNoeVNoZWxsLnB1c2gob1NoZWxsSGllcmFyY2h5KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFIaWVyYXJjaHlTaGVsbDtcblx0fVxuXG5cdF9nZXRUYXJnZXRUeXBlRnJvbUhhc2goc0hhc2g6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0bGV0IHNUYXJnZXRUeXBlID0gXCJcIjtcblxuXHRcdGNvbnN0IGFSb3V0ZXMgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvdXRpbmc/LnJvdXRlcyA/PyBbXTtcblx0XHRmb3IgKGNvbnN0IHJvdXRlIG9mIGFSb3V0ZXMpIHtcblx0XHRcdGNvbnN0IG9Sb3V0ZSA9IG9BcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0Um91dGUocm91dGUubmFtZSk7XG5cdFx0XHRpZiAob1JvdXRlPy5tYXRjaChzSGFzaCkpIHtcblx0XHRcdFx0Y29uc3Qgc1RhcmdldCA9IGdldFJvdXRlVGFyZ2V0TmFtZXMocm91dGUudGFyZ2V0KVswXTtcblx0XHRcdFx0c1RhcmdldFR5cGUgPSAob0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRUYXJnZXQoc1RhcmdldCkgYXMgdW5rbm93biBhcyB7IF9vT3B0aW9uczogeyBuYW1lOiBzdHJpbmcgfSB9KS5fb09wdGlvbnMubmFtZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNUYXJnZXRUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgc2hlbGwgdGl0bGUgYWZ0ZXIgZWFjaCBuYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZpZXcgVGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBtZW51IGlzIGZpbGxlZCBwcm9wZXJseVxuXHQgKi9cblx0YXN5bmMgX2NvbXB1dGVUaXRsZUhpZXJhcmNoeShvVmlldzogVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0b0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b0N1cnJlbnRQYWdlID0gb1ZpZXcuZ2V0UGFyZW50KCksXG5cdFx0XHRhVGl0bGVJbmZvcm1hdGlvblByb21pc2VzID0gW10sXG5cdFx0XHRzQXBwU3BlY2lmaWNIYXNoID0gdGhpcy5fZ2V0QXBwU3BlY2lmaWNIYXNoKCksXG5cdFx0XHRtYW5pZmVzdEFwcFNldHRpbmdzID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKSxcblx0XHRcdHNBcHBUaXRsZSA9IG1hbmlmZXN0QXBwU2V0dGluZ3MudGl0bGUgfHwgXCJcIixcblx0XHRcdHNBcHBTdWJUaXRsZSA9IG1hbmlmZXN0QXBwU2V0dGluZ3Muc3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGFwcEljb24gPSBtYW5pZmVzdEFwcFNldHRpbmdzLmljb24gfHwgXCJcIjtcblx0XHRsZXQgb1BhZ2VUaXRsZUluZm9ybWF0aW9uOiBUaXRsZUluZm9ybWF0aW9uLCBzTmV3UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKG9DdXJyZW50UGFnZSAmJiAob0N1cnJlbnRQYWdlIGFzIFRlbXBsYXRlQ29tcG9uZW50KS5fZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24pIHtcblx0XHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0XHQvLyBJZiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgYXBwbGljYXRpb24gaXMgYSBMUiwgdXNlIHRoZSB0aXRsZSBhbmQgc3VidGl0bGUgZnJvbSB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0aWYgKHRoaXMuX2dldFRhcmdldFR5cGVGcm9tSGFzaChcIlwiKSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRcdGFUaXRsZUluZm9ybWF0aW9uUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdFByb21pc2UucmVzb2x2ZSh0aGlzLl9jb21wdXRlVGl0bGVJbmZvKHNBcHBUaXRsZSwgc0FwcFN1YlRpdGxlLCBzQXBwU3BlY2lmaWNIYXNoLCBhcHBJY29uKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVGhlbiBtYW5hZ2Ugb3RoZXIgcGFnZXNcblx0XHRcdFx0c05ld1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IGFQYXRoUGFydHMgPSBzTmV3UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cblx0XHRcdFx0YVBhdGhQYXJ0cy5zaGlmdCgpOyAvLyBSZW1vdmUgdGhlIGZpcnN0IHNlZ21lbnQgKGVtcHR5IHN0cmluZykgYXMgaXQgaGFzIGJlZW4gbWFuYWdlZCBhYm92ZVxuXHRcdFx0XHRhUGF0aFBhcnRzLnBvcCgpOyAvLyBSZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBhcyBpdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBwYWdlIGFuZCBzaG91bGRuJ3QgYXBwZWFyIGluIHRoZSBtZW51XG5cblx0XHRcdFx0YVBhdGhQYXJ0cy5mb3JFYWNoKChzUGF0aFBhcnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHNQYXRoICs9IGAvJHtzUGF0aFBhcnR9YDtcblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdHNQYXJhbWV0ZXJQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCksXG5cdFx0XHRcdFx0XHRiSXNQYXJhbWV0ZXJpemVkID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhcmFtZXRlclBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdFx0XHRcdGlmICghYklzUGFyYW1ldGVyaXplZCkge1xuXHRcdFx0XHRcdFx0YVRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZ2V0VGl0bGVJbmZvRnJvbVBhdGgoc1BhdGgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDdXJyZW50IHBhZ2Vcblx0XHRcdG9QYWdlVGl0bGVJbmZvcm1hdGlvbiA9IChvQ3VycmVudFBhZ2UgYXMgVGVtcGxhdGVDb21wb25lbnQpLl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpO1xuXHRcdFx0b1BhZ2VUaXRsZUluZm9ybWF0aW9uID0gdGhpcy5fY29tcHV0ZVRpdGxlSW5mbyhcblx0XHRcdFx0b1BhZ2VUaXRsZUluZm9ybWF0aW9uLnRpdGxlID8/IFwiXCIsXG5cdFx0XHRcdG9QYWdlVGl0bGVJbmZvcm1hdGlvbi5zdWJ0aXRsZSA/PyBcIlwiLFxuXHRcdFx0XHRzQXBwU3BlY2lmaWNIYXNoICsgdGhpcy5fZ2V0SGFzaCgpXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAob0NvbnRleHQgJiYgc05ld1BhdGgpIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpW3NOZXdQYXRoXSA9IG9QYWdlVGl0bGVJbmZvcm1hdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKVtzQXBwU3BlY2lmaWNIYXNoXSA9IG9QYWdlVGl0bGVJbmZvcm1hdGlvbjtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YVRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcy5wdXNoKFByb21pc2UucmVqZWN0KFwiVGl0bGUgaW5mb3JtYXRpb24gbWlzc2luZyBpbiBIZWFkZXJJbmZvXCIpKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFUaXRsZUluZm9ybWF0aW9uUHJvbWlzZXMpXG5cdFx0XHQudGhlbigoYVRpdGxlSW5mb0hpZXJhcmNoeTogVGl0bGVJbmZvcm1hdGlvbltdKTogdm9pZCA9PiB7XG5cdFx0XHRcdC8vIHdvcmthcm91bmQgZm9yIHNoZWxsIHdoaWNoIGlzIGV4cGVjdGluZyBhbGwgZWxlbWVudHMgYmVpbmcgb2YgdHlwZSBzdHJpbmdcblx0XHRcdFx0Y29uc3QgYVRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsID0gdGhpcy5fZW5zdXJlSGllcmFyY2h5RWxlbWVudHNBcmVTdHJpbmdzKGFUaXRsZUluZm9IaWVyYXJjaHkpLFxuXHRcdFx0XHRcdHNUaXRsZSA9IG9QYWdlVGl0bGVJbmZvcm1hdGlvbi50aXRsZSA/PyBcIlwiO1xuXHRcdFx0XHRhVGl0bGVJbmZvSGllcmFyY2h5U2hlbGwucmV2ZXJzZSgpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRIaWVyYXJjaHkoYVRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsKTtcblxuXHRcdFx0XHR0aGlzLl9zZXRTaGVsbE1lbnVUaXRsZShvQXBwQ29tcG9uZW50LCBzVGl0bGUsIHNBcHBUaXRsZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvck1lc3NhZ2U6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKHNFcnJvck1lc3NhZ2UgYXMgc3RyaW5nKTtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSA9IGZhbHNlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoc0Vycm9yTWVzc2FnZTogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yTWVzc2FnZSBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGNhbGN1bGF0ZUxheW91dChpTmV4dEZDTExldmVsOiBudW1iZXIsIHNIYXNoOiBzdHJpbmcsIHNQcm9wb3NlZExheW91dDogc3RyaW5nIHwgdW5kZWZpbmVkLCBrZWVwQ3VycmVudExheW91dCA9IGZhbHNlKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayBhZnRlciBhIHZpZXcgaGFzIGJlZW4gYm91bmQgdG8gYSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBoYXMgYmVlbiBib3VuZCB0byBhIHZpZXdcblx0ICovXG5cdG9uQ29udGV4dEJvdW5kVG9WaWV3KG9Db250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkIHwgbnVsbCk6IHZvaWQge1xuXHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0Y29uc3Qgc0RlZXBlc3RQYXRoID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5nZXRQcm9wZXJ0eShcIi9kZWVwZXN0UGF0aFwiKSxcblx0XHRcdFx0c1ZpZXdDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKCFzRGVlcGVzdFBhdGggfHwgc0RlZXBlc3RQYXRoLmluZGV4T2Yoc1ZpZXdDb250ZXh0UGF0aCkgIT09IDApIHtcblx0XHRcdFx0Ly8gVGhlcmUgd2FzIG5vIHByZXZpb3VzIHZhbHVlIGZvciB0aGUgZGVlcGVzdCByZWFjaGVkIHBhdGgsIG9yIHRoZSBwYXRoXG5cdFx0XHRcdC8vIGZvciB0aGUgdmlldyBpc24ndCBhIHN1YnBhdGggb2YgdGhlIHByZXZpb3VzIGRlZXBlc3QgcGF0aCAtLT4gdXBkYXRlXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvZGVlcGVzdFBhdGhcIiwgc1ZpZXdDb250ZXh0UGF0aCwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBkaXNwbGF5RXJyb3JQYWdlKF9lcnJvck1lc3NhZ2U6IHN0cmluZywgX3BhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCwgX0ZDTExldmVsID0gMCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRkZW5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHR1cGRhdGVVSVN0YXRlRm9yVmlldyhvVmlldzogRkVWaWV3LCBGQ0xMZXZlbDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRnZXRJbnN0YW5jZWRWaWV3cygpOiBWaWV3W10ge1xuXHRcdHJldHVybiBbXTtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm4gYWxsIHZpc2libGUgdmlld3MuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSB2aXNpYmxlIHZpZXdzXG5cdCAqL1xuXHRnZXRWaXNpYmxlVmlld3MoKTogVmlld1tdIHtcblx0XHRyZXR1cm4gW107XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRfc2Nyb2xsVGFibGVzVG9MYXN0TmF2aWdhdGVkSXRlbXMoKTogdm9pZCB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRpc0ZjbEVuYWJsZWQoKTogdGhpcyBpcyBGY2xDb250cm9sbGVyIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdF9zZXRTaGVsbE1lbnVUaXRsZShvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIHNUaXRsZTogc3RyaW5nLCBzQXBwVGl0bGU6IHN0cmluZyk6IHZvaWQge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlbiBieSBGY2xDb250cm9sbGVyXG5cdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0VGl0bGUoc1RpdGxlKTtcblx0fVxuXG5cdGdldEFwcENvbnRlbnRDb250YWluZXIoKTogTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IGFwcENvbnRlbnRJZCA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIikucm91dGluZz8uY29uZmlnPy5jb250cm9sSWQgPz8gXCJhcHBDb250ZW50XCI7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoYXBwQ29udGVudElkKSBhcyBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dDtcblx0fVxufVxuaW50ZXJmYWNlIFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIge1xuXHRvbkNvbnRhaW5lclJlYWR5PygpOiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBSb290Vmlld0Jhc2VDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7OztNQXlDTUEsc0JBQXNCLFdBRDNCQyxjQUFjLENBQUMsNkNBQTZDLENBQUMsVUFFNURDLGNBQWMsQ0FBQ0MsV0FBVyxDQUFDLFVBRzNCRCxjQUFjLENBQUNFLFNBQVMsQ0FBQztJQUFBO0lBQUE7TUFBQTtNQUFBO1FBQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBLE1BV2xCQyx5QkFBeUIsR0FBRyxLQUFLO01BQUE7SUFBQTtJQUFBO0lBQUEsT0FFekNDLE1BQU0sR0FBTixrQkFBZTtNQUNkQyxVQUFVLENBQUNDLElBQUksRUFBRTtNQUVqQixJQUFJLENBQUNDLGNBQWMsR0FBRyxFQUFFO0lBQ3pCLENBQUM7SUFBQSxPQUVEQyxjQUFjLEdBQWQsMEJBQThCO01BQzdCLE9BQU8sSUFBSSxDQUFDQyxZQUFZO0lBQ3pCLENBQUM7SUFBQSxPQUVEQyxtQkFBbUIsR0FBbkIsK0JBQTRCO01BQzNCLElBQUksQ0FBQ0QsWUFBWSxDQUFDQyxtQkFBbUIsRUFBRTtNQUN2QyxJQUFJLENBQUNDLGVBQWUsRUFBRSxDQUFDQyxpQkFBaUIsRUFB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
|
|
590
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb290Vmlld0Jhc2VDb250cm9sbGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiVmlld1N0YXRlIiwiYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSIsIm9uSW5pdCIsIlNpemVIZWxwZXIiLCJpbml0IiwiX2FIZWxwZXJNb2RlbHMiLCJnZXRQbGFjZWhvbGRlciIsIm9QbGFjZWhvbGRlciIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0aW5nU2VydmljZSIsImF0dGFjaEFmdGVyUm91dGVNYXRjaGVkIiwiX29uQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJvbkV4aXQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsIm9Sb3V0ZXIiLCJ1bmRlZmluZWQiLCJleGl0IiwiZm9yRWFjaCIsIm9Nb2RlbCIsImRlc3Ryb3kiLCJnZXRWaWV3RnJvbUNvbnRhaW5lciIsImNvbnRhaW5lciIsInJlc3VsdCIsImlzQSIsImdldENvbXBvbmVudEluc3RhbmNlIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRWaWV3c0Zyb21QYWdlcyIsInBhZ2VzIiwidmlld3MiLCJwYWdlIiwidmlldyIsInB1c2giLCJnZXRSZXNvdXJjZUJ1bmRsZSIsImdldE93bmVyQ29tcG9uZW50IiwiZ2V0TW9kZWwiLCJnZXRSb3V0ZXIiLCJfY3JlYXRlSGVscGVyTW9kZWwiLCJKU09OTW9kZWwiLCJyb3V0aW5nSXNDb21wbGV0ZSIsIl9vUm91dGVNYXRjaGVkUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwid2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeSIsIm9FdmVudCIsImFDb250YWluZXJzIiwiZ2V0UGFyYW1ldGVyIiwiYUZFQ29udGFpbmVycyIsIm9Db250YWluZXIiLCJvVmlldyIsIm9Db21wb25lbnRJbnN0YW5jZSIsImdldENvbnRyb2xsZXIiLCJwYWdlUmVhZHkiLCJvUmlnaHRNb3N0RkVWaWV3IiwibGVuZ3RoIiwiaXNQYWdlUmVhZHkiLCJhdHRhY2hFdmVudE9uY2UiLCJyZXN0b3JlRm9jdXNGcm9tSGlzdG9yeSIsImhpc3RvcnkiLCJzdGF0ZSIsImZvY3VzSW5mbyIsInR5cGUiLCJ0YWJsZSIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInRhYmxlSWQiLCJwb3MiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZmluZEluZGV4IiwiY29udGV4dCIsImdldFBhdGgiLCJjb250ZXh0UGF0aEZvY3VzIiwiZm9jdXNSb3ciLCJjb250cm9sSWQiLCJmb2N1cyIsInJlcGxhY2VTdGF0ZSIsIk9iamVjdCIsImFzc2lnbiIsInRoZW4iLCJvUm9vdENvbnRyb2wiLCJnZXRWaWV3IiwiZ2V0Q29udGVudCIsImdldEF1dG9Gb2N1cyIsInNldFByb3BlcnR5Iiwib0FwcENvbXBvbmVudCIsIl9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiVVNoZWxsIiwiY29tcHV0ZVRpdGxlSGllcmFyY2h5IiwiYkZvcmNlRm9jdXMiLCJnZXRSb3V0ZXJQcm94eSIsImlzRm9jdXNGb3JjZWQiLCJzZXRGb2N1c0ZvcmNlZCIsIm9uUGFnZVJlYWR5IiwiZ2V0UGFyZW50IiwiZm9yY2VGb2N1cyIsInJlc3RvcmVGb2N1c0ZvckN1cnJlbnRIYXNoIiwib25Db250YWluZXJSZWFkeSIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJmaW5hbGx5IiwiX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUiLCJvVGl0bGVIaWVyYXJjaHlDYWNoZSIsIl9jb21wdXRlVGl0bGVJbmZvIiwidGl0bGUiLCJzdWJ0aXRsZSIsInNJbnRlbnQiLCJpY29uIiwiYVBhcnRzIiwic3BsaXQiLCJpbmNsdWRlcyIsImludGVudCIsIl9mb3JtYXRUaXRsZSIsImRpc3BsYXlNb2RlIiwidGl0bGVWYWx1ZSIsInRpdGxlRGVzY3JpcHRpb24iLCJmb3JtYXR0ZWRUaXRsZSIsIl9mZXRjaFRpdGxlVmFsdWUiLCJwYXRoIiwiYXBwQ29tcG9uZW50IiwibW9kZWwiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiYmluZGluZ1ZpZXdDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJoZWFkZXJJbmZvVGl0bGVWYWx1ZUFubm90YXRpb24iLCJnZXRPYmplY3QiLCJ2YWx1ZUV4cHJlc3Npb24iLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0IiwiJEZ1bmN0aW9uIiwiYW55T2JqZWN0IiwiQW55IiwiYW55Iiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsInRleHRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImFsbCIsImdldEJpbmRpbmdzIiwibWFwIiwiYmluZGluZyIsInJlcXVlc3RWYWx1ZSIsImluZm9UaXRsZSIsImdldEFueSIsInRleHRFeHByZXNzaW9uIiwicHJvcGVydHlDb250ZXh0IiwicHJvbWlzZXMiLCJwYXJzZWR2YWx1ZUV4cHJlc3Npb24iLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsInByb21pc2VGb3JEaXNwbGF5TW9kZSIsIkNvbW1vblV0aWxzIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwidmFsdWVQYXRoIiwicGFydHMiLCJmblZhbHVlRm9ybWF0dGVyIiwiZm9ybWF0dGVyIiwidmFsdWVCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwiJCRncm91cElkIiwiaW5pdGlhbGl6ZSIsInByb21pc2VGb3JUaXRsZVZhbHVlIiwiZm5DaGFuZ2UiLCJldmVudCIsInRhcmdldFZhbHVlIiwiZ2V0U291cmNlIiwiZ2V0VmFsdWUiLCJkZXRhY2hDaGFuZ2UiLCJhdHRhY2hDaGFuZ2UiLCJwYXJzZWRUZXh0RXhwcmVzc2lvbiIsInRleHRQYXRoIiwibGFzdEluZGV4T2YiLCJzbGljZSIsImZuVGV4dEZvcm1hdHRlciIsInByb21pc2VGb3JUaXRsZVRleHQiLCJ0YXJnZXRUZXh0IiwidGl0bGVJbmZvIiwiZ2V0QXBwU3BlY2lmaWNIYXNoIiwiaGFzaENoYW5nZXIiLCJIYXNoQ2hhbmdlciIsImdldEluc3RhbmNlIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsIlVSSSIsImRlY29kZSIsIl9nZXRIYXNoIiwiZ2V0SGFzaCIsImdldFRpdGxlSW5mb0Zyb21QYXRoIiwic1BhdGgiLCJvTWV0YU1vZGVsIiwic0VudGl0eVBhdGgiLCJzVHlwZU5hbWUiLCJzQXBwU3BlY2lmaWNIYXNoIiwic1RpdGxlIiwib1RpdGxlSW5mbyIsIl9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3MiLCJhSGllcmFyY2h5IiwiYUhpZXJhcmNoeVNoZWxsIiwibGV2ZWwiLCJvSGllcmFyY2h5Iiwib1NoZWxsSGllcmFyY2h5Iiwia2V5IiwiU3RyaW5nIiwiX2dldFRhcmdldFR5cGVGcm9tSGFzaCIsInNIYXNoIiwic1RhcmdldFR5cGUiLCJhUm91dGVzIiwiZ2V0TWFuaWZlc3RFbnRyeSIsInJvdXRpbmciLCJyb3V0ZXMiLCJyb3V0ZSIsIm9Sb3V0ZSIsImdldFJvdXRlIiwibmFtZSIsIm1hdGNoIiwic1RhcmdldCIsImdldFJvdXRlVGFyZ2V0TmFtZXMiLCJ0YXJnZXQiLCJnZXRUYXJnZXQiLCJfb09wdGlvbnMiLCJnZXRCaW5kaW5nQ29udGV4dCIsImN1cnJlbnRQYWdlIiwidGl0bGVJbmZvcm1hdGlvblByb21pc2VzIiwiYXBwU3BlY2lmaWNIYXNoIiwibWFuaWZlc3RBcHBTZXR0aW5ncyIsImFwcFRpdGxlIiwiYXBwU3ViVGl0bGUiLCJzdWJUaXRsZSIsImFwcEljb24iLCJwYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm5ld1BhdGgiLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJwYXRoUGFydHMiLCJzaGlmdCIsInBvcCIsInBhdGhQYXJ0IiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwicGFyYW1ldGVyUGF0aCIsImlzUGFyYW1ldGVyaXplZCIsInJlamVjdCIsInRpdGxlSW5mb0hpZXJhcmNoeSIsInRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsIiwicmV2ZXJzZSIsImdldFNoZWxsU2VydmljZXMiLCJzZXRIaWVyYXJjaHkiLCJfc2V0U2hlbGxNZW51VGl0bGUiLCJlcnJvck1lc3NhZ2UiLCJjYWxjdWxhdGVMYXlvdXQiLCJpTmV4dEZDTExldmVsIiwic1Byb3Bvc2VkTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJvbkNvbnRleHRCb3VuZFRvVmlldyIsIm9Db250ZXh0Iiwic0RlZXBlc3RQYXRoIiwiZ2V0UHJvcGVydHkiLCJzVmlld0NvbnRleHRQYXRoIiwiaW5kZXhPZiIsImRpc3BsYXlFcnJvclBhZ2UiLCJfZXJyb3JNZXNzYWdlIiwiX3BhcmFtZXRlcnMiLCJfRkNMTGV2ZWwiLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsIkZDTExldmVsIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJnZXRWaXNpYmxlVmlld3MiLCJpc0ZjbEVuYWJsZWQiLCJzQXBwVGl0bGUiLCJzZXRUaXRsZSIsImdldEFwcENvbnRlbnRDb250YWluZXIiLCJhcHBDb250ZW50SWQiLCJjb25maWciLCJieUlkIiwiQmFzZUNvbnRyb2xsZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJvb3RWaWV3QmFzZUNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB7IHR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGdldFJvdXRlVGFyZ2V0TmFtZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NYW5pZmVzdEhlbHBlclwiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmNsQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvRmNsLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50Q29udGFpbmVyIGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IEhhc2hDaGFuZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL0hhc2hDaGFuZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlJE1hdGNoZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YVByb3BlcnR5QmluZGluZyRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgVVJJIGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9VUklcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwiLi4vQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQW55IGZyb20gXCIuLi9jb250cm9scy9BbnlcIjtcblxuZXhwb3J0IHR5cGUgVGl0bGVJbmZvcm1hdGlvbiA9IHtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdHN1YnRpdGxlPzogc3RyaW5nO1xuXHRpY29uPzogc3RyaW5nO1xuXHRpbnRlbnQ/OiBzdHJpbmc7XG59O1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5yb290Vmlldy5Sb290Vmlld0Jhc2VDb250cm9sbGVyXCIpXG5jbGFzcyBSb290Vmlld0Jhc2VDb250cm9sbGVyIGV4dGVuZHMgQmFzZUNvbnRyb2xsZXIge1xuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdG9QbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRwcml2YXRlIF9hSGVscGVyTW9kZWxzITogSlNPTk1vZGVsW107XG5cblx0cHJpdmF0ZSBvUm91dGVyPzogUm91dGVyO1xuXG5cdHByaXZhdGUgX29Sb3V0ZU1hdGNoZWRQcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcblxuXHRwcml2YXRlIG9UaXRsZUhpZXJhcmNoeUNhY2hlPzogUmVjb3JkPHN0cmluZywgVGl0bGVJbmZvcm1hdGlvbj47XG5cblx0cHJpdmF0ZSBiSXNDb21wdXRpbmdUaXRsZUhpZXJhY2h5ID0gZmFsc2U7XG5cblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdFNpemVIZWxwZXIuaW5pdCgpO1xuXG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscyA9IFtdO1xuXHR9XG5cblx0Z2V0UGxhY2Vob2xkZXIoKTogUGxhY2Vob2xkZXIge1xuXHRcdHJldHVybiB0aGlzLm9QbGFjZWhvbGRlcjtcblx0fVxuXG5cdGF0dGFjaFJvdXRlTWF0Y2hlcnMoKTogdm9pZCB7XG5cdFx0dGhpcy5vUGxhY2Vob2xkZXIuYXR0YWNoUm91dGVNYXRjaGVycygpO1xuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5hdHRhY2hBZnRlclJvdXRlTWF0Y2hlZCh7fSwgdGhpcy5fb25BZnRlclJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmRldGFjaEFmdGVyUm91dGVNYXRjaGVkKHRoaXMuX29uQWZ0ZXJSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMub1JvdXRlciA9IHVuZGVmaW5lZDtcblxuXHRcdFNpemVIZWxwZXIuZXhpdCgpO1xuXG5cdFx0Ly8gRGVzdHJveSBhbGwgSlNPTiBtb2RlbHMgY3JlYXRlZCBkeW5hbWljYWxseSBmb3IgdGhlIHZpZXdzXG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscy5mb3JFYWNoKGZ1bmN0aW9uIChvTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdFx0b01vZGVsLmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXG5cdHByb3RlY3RlZCBnZXRWaWV3RnJvbUNvbnRhaW5lcihjb250YWluZXI6IENvbnRyb2wpOiBWaWV3IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCByZXN1bHQgPSBjb250YWluZXIuaXNBPENvbXBvbmVudENvbnRhaW5lcj4oXCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIilcblx0XHRcdD8gY29udGFpbmVyLmdldENvbXBvbmVudEluc3RhbmNlKCkuZ2V0Um9vdENvbnRyb2woKVxuXHRcdFx0OiBjb250YWluZXI7XG5cblx0XHRyZXR1cm4gcmVzdWx0Py5pc0E8Vmlldz4oXCJzYXAudWkuY29yZS5tdmMuVmlld1wiKSA/IHJlc3VsdCA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbmFseXplIHRoZSBwYWdlcyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHZpZXdzLlxuXHQgKlxuXHQgKiBAcGFyYW0gcGFnZXMgVGhlIHBhZ2VzIHRvIGJlIGFuYWx5emVkLlxuXHQgKiBAcmV0dXJucyBUaGUgdmlld3Ncblx0ICovXG5cdHByb3RlY3RlZCBnZXRWaWV3c0Zyb21QYWdlcyhwYWdlczogQ29udHJvbFtdKTogVmlld1tdIHtcblx0XHRjb25zdCB2aWV3czogVmlld1tdID0gW107XG5cblx0XHRwYWdlcy5mb3JFYWNoKChwYWdlKSA9PiB7XG5cdFx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3RnJvbUNvbnRhaW5lcihwYWdlKTtcblxuXHRcdFx0aWYgKHZpZXcgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR2aWV3cy5wdXNoKHZpZXcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHZpZXdzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZ2V0dGluZyB0aGUgcmVzb3VyY2UgYnVuZGxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIFRoZSByZXNvdXJjZU1vZGVsIG9mIHRoZSBjb21wb25lbnRcblx0ICovXG5cdGdldFJlc291cmNlQnVuZGxlKCk6IFJlc291cmNlQnVuZGxlIHwgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4ge1xuXHRcdHJldHVybiAodGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldE1vZGVsKFwiaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpO1xuXHR9XG5cblx0Z2V0Um91dGVyKCk6IFJvdXRlciB7XG5cdFx0aWYgKCF0aGlzLm9Sb3V0ZXIpIHtcblx0XHRcdHRoaXMub1JvdXRlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMub1JvdXRlcjtcblx0fVxuXG5cdF9jcmVhdGVIZWxwZXJNb2RlbCgpOiBKU09OTW9kZWwge1xuXHRcdC8vIFdlIGtlZXAgYSByZWZlcmVuY2Ugb24gdGhlIG1vZGVscyBjcmVhdGVkIGR5bmFtaWNhbGx5LCBhcyB0aGV5IGRvbid0IGdldCBkZXN0cm95ZWRcblx0XHQvLyBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHZpZXcgaXMgZGVzdHJveWVkLlxuXHRcdC8vIFRoaXMgaXMgZG9uZSBkdXJpbmcgb25FeGl0XG5cdFx0Y29uc3Qgb01vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdHRoaXMuX2FIZWxwZXJNb2RlbHMucHVzaChvTW9kZWwpO1xuXG5cdFx0cmV0dXJuIG9Nb2RlbDtcblx0fVxuXG5cdGFzeW5jIHJvdXRpbmdJc0NvbXBsZXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0ICh0aGlzLl9vUm91dGVNYXRjaGVkUHJvbWlzZSB8fCBQcm9taXNlLnJlc29sdmUoKSk7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gd2FpdGluZyBmb3IgdGhlIFJpZ2h0IG1vc3QgdmlldyB0byBiZSByZWFkeS5cblx0ICpcblx0ICogQHBhcmFtIG9FdmVudCBSZWZlcmVuY2UgYW4gRXZlbnQgcGFyYW1ldGVyIGNvbWluZyBmcm9tIHJvdXRlTWF0Y2hlZCBldmVudFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgaW5kaWNhdGluZyB3aGVuIHRoZSByaWdodCBtb3N0IHZpZXcgaXMgcmVhZHlcblx0ICovXG5cdGFzeW5jIHdhaXRGb3JSaWdodE1vc3RWaWV3UmVhZHkob0V2ZW50OiBSb3V0ZSRNYXRjaGVkRXZlbnQpOiBQcm9taXNlPEZFVmlldz4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBGRVZpZXcpID0+IHZvaWQpIHtcblx0XHRcdGNvbnN0IGFDb250YWluZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInZpZXdzXCIpID8/IFtdLFxuXHRcdFx0XHQvLyBUaGVyZSBjYW4gYWxzbyBiZSByZXVzZSBjb21wb25lbnRzIGluIHRoZSB2aWV3LCByZW1vdmUgdGhlbSBiZWZvcmUgcHJvY2Vzc2luZy5cblx0XHRcdFx0YUZFQ29udGFpbmVyczogRkVWaWV3W10gPSBbXTtcblx0XHRcdGFDb250YWluZXJzLmZvckVhY2goZnVuY3Rpb24gKG9Db250YWluZXI6IFZpZXcgfCBDb21wb25lbnRDb250YWluZXIgfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0bGV0IG9WaWV3ID0gb0NvbnRhaW5lciBhcyBGRVZpZXcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChvQ29udGFpbmVyICYmIChvQ29udGFpbmVyIGFzIENvbXBvbmVudENvbnRhaW5lcikuZ2V0Q29tcG9uZW50SW5zdGFuY2UpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29tcG9uZW50SW5zdGFuY2UgPSAob0NvbnRhaW5lciBhcyBDb21wb25lbnRDb250YWluZXIpLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0XHRcdFx0b1ZpZXcgPSBvQ29tcG9uZW50SW5zdGFuY2UuZ2V0Um9vdENvbnRyb2woKSBhcyBGRVZpZXc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9WaWV3ICYmIG9WaWV3LmdldENvbnRyb2xsZXIoKSAmJiBvVmlldy5nZXRDb250cm9sbGVyKCkucGFnZVJlYWR5KSB7XG5cdFx0XHRcdFx0YUZFQ29udGFpbmVycy5wdXNoKG9WaWV3KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBvUmlnaHRNb3N0RkVWaWV3ID0gYUZFQ29udGFpbmVyc1thRkVDb250YWluZXJzLmxlbmd0aCAtIDFdO1xuXHRcdFx0aWYgKG9SaWdodE1vc3RGRVZpZXcgJiYgb1JpZ2h0TW9zdEZFVmlldy5nZXRDb250cm9sbGVyKCkucGFnZVJlYWR5LmlzUGFnZVJlYWR5KCkpIHtcblx0XHRcdFx0cmVzb2x2ZShvUmlnaHRNb3N0RkVWaWV3KTtcblx0XHRcdH0gZWxzZSBpZiAob1JpZ2h0TW9zdEZFVmlldykge1xuXHRcdFx0XHRvUmlnaHRNb3N0RkVWaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkuYXR0YWNoRXZlbnRPbmNlKFwicGFnZVJlYWR5XCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXNvbHZlKG9SaWdodE1vc3RGRVZpZXcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmVzdG9yZSB0aGUgZm9jdXNJbmZvcm1hdGlvbiBmcm9tIHRoZSBoaXN0b3J5IE9iamVjdC5cblx0ICovXG5cdHByb3RlY3RlZCByZXN0b3JlRm9jdXNGcm9tSGlzdG9yeSgpOiB2b2lkIHtcblx0XHRzd2l0Y2ggKGhpc3Rvcnkuc3RhdGUuZm9jdXNJbmZvLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJSb3dcIjpcblx0XHRcdFx0Y29uc3QgdGFibGUgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKGhpc3Rvcnkuc3RhdGUuZm9jdXNJbmZvLnRhYmxlSWQpIGFzIFRhYmxlO1xuXHRcdFx0XHRjb25zdCBwb3MgPSB0YWJsZVxuXHRcdFx0XHRcdC5nZXRSb3dCaW5kaW5nKClcblx0XHRcdFx0XHQuZ2V0Q3VycmVudENvbnRleHRzKClcblx0XHRcdFx0XHQuZmluZEluZGV4KChjb250ZXh0KSA9PiBjb250ZXh0LmdldFBhdGgoKSA9PT0gaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8uY29udGV4dFBhdGhGb2N1cyk7XG5cdFx0XHRcdGlmIChwb3MgIT09IC0xKSB7XG5cdFx0XHRcdFx0dGFibGUuZm9jdXNSb3cocG9zKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8uY29udHJvbElkKT8uZm9jdXMoKTtcblx0XHR9XG5cdFx0Ly9vbmNlIGFwcGxpZWQsIHRoZSBmb2N1cyBpbmZvIGlzIHJlbW92ZWQgdG8gcHJldmVudCBmb2N1c2luZyBvbiBpdCBlYWNoIHRpbWUgdGhlIHVzZXIgZG8gYSBiYWNrIG5hdmlnYXRpb24gdG8gdGhpcyBwYWdlXG5cdFx0aGlzdG9yeS5yZXBsYWNlU3RhdGUoT2JqZWN0LmFzc2lnbihoaXN0b3J5LnN0YXRlLCB7IGZvY3VzSW5mbzogbnVsbCB9KSwgXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGJhY2sgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBkb25lLlxuXHQgKiAgLSB1cGRhdGUgdGhlIHNoZWxsIHRpdGxlLlxuXHQgKiAgLSB1cGRhdGUgdGFibGUgc2Nyb2xsLlxuXHQgKiAgLSBjYWxsIG9uUGFnZVJlYWR5IG9uIHRoZSByaWdodE1vc3RWaWV3LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRfb25BZnRlclJvdXRlTWF0Y2hlZChvRXZlbnQ6IFJvdXRlJE1hdGNoZWRFdmVudCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5fb1JvdXRlTWF0Y2hlZFByb21pc2UpIHtcblx0XHRcdHRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlID0gdGhpcy53YWl0Rm9yUmlnaHRNb3N0Vmlld1JlYWR5KG9FdmVudClcblx0XHRcdFx0LnRoZW4oKG9WaWV3OiBWaWV3KSA9PiB7XG5cdFx0XHRcdFx0Ly8gVGhlIGF1dG9Gb2N1cyBpcyBpbml0aWFsbHkgZGlzYWJsZWQgb24gdGhlIG5hdkNvbnRhaW5lciBvciB0aGUgRkNMLCBzbyB0aGF0IHRoZSBmb2N1cyBzdGF5cyBvbiB0aGUgU2hlbGwgbWVudVxuXHRcdFx0XHRcdC8vIGV2ZW4gaWYgdGhlIGFwcCB0YWtlcyBhIGxvbmcgdGltZSB0byBsYXVuY2hcblx0XHRcdFx0XHQvLyBUaGUgZmlyc3QgdGltZSB0aGUgdmlldyBpcyBkaXNwbGF5ZWQsIHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBhdXRvZm9jdXMgc28gdGhhdCBpdCdzIG1hbmFnZWQgcHJvcGVybHkgZHVyaW5nIG5hdmlnYXRpb25cblx0XHRcdFx0XHRjb25zdCBvUm9vdENvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF07XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0b1Jvb3RDb250cm9sICYmXG5cdFx0XHRcdFx0XHQob1Jvb3RDb250cm9sIGFzIEZsZXhpYmxlQ29sdW1uTGF5b3V0KS5nZXRBdXRvRm9jdXMgJiZcblx0XHRcdFx0XHRcdCEob1Jvb3RDb250cm9sIGFzIEZsZXhpYmxlQ29sdW1uTGF5b3V0KS5nZXRBdXRvRm9jdXMoKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b1Jvb3RDb250cm9sLnNldFByb3BlcnR5KFwiYXV0b0ZvY3VzXCIsIHRydWUsIHRydWUpOyAvLyBEbyBub3QgbWFyayB0aGUgY29udGFpbmVyIGFzIGludmFsaWQsIG90aGVyd2lzZSBpdCdzIHJlLXJlbmRlcmVkXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRcdFx0dGhpcy5fc2Nyb2xsVGFibGVzVG9MYXN0TmF2aWdhdGVkSXRlbXMoKTtcblx0XHRcdFx0XHRpZiAob0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLlVTaGVsbCkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb21wdXRlVGl0bGVIaWVyYXJjaHkob1ZpZXcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBiRm9yY2VGb2N1cyA9IG9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5pc0ZvY3VzRm9yY2VkKCk7XG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLnNldEZvY3VzRm9yY2VkKGZhbHNlKTsgLy8gcmVzZXRcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRvVmlldy5nZXRDb250cm9sbGVyKCkgJiZcblx0XHRcdFx0XHRcdChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLm9uUGFnZVJlYWR5ICYmXG5cdFx0XHRcdFx0XHQob1ZpZXcuZ2V0UGFyZW50KCkgYXMgVGVtcGxhdGVDb21wb25lbnQpLm9uUGFnZVJlYWR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHQob1ZpZXcuZ2V0UGFyZW50KCkgYXMgVGVtcGxhdGVDb21wb25lbnQpLm9uUGFnZVJlYWR5KHsgZm9yY2VGb2N1czogYkZvcmNlRm9jdXMgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mbykge1xuXHRcdFx0XHRcdFx0dGhpcy5yZXN0b3JlRm9jdXNGcm9tSGlzdG9yeSgpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIWJGb3JjZUZvY3VzKSB7XG5cdFx0XHRcdFx0XHQvLyBUcnkgdG8gcmVzdG9yZSB0aGUgZm9jdXMgb24gd2hlcmUgaXQgd2FzIHdoZW4gd2UgbGFzdCB2aXNpdGVkIHRoZSBjdXJyZW50IGhhc2hcblx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5yZXN0b3JlRm9jdXNGb3JDdXJyZW50SGFzaCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGhpcy5vbkNvbnRhaW5lclJlYWR5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9uQ29udGFpbmVyUmVhZHkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkFuIGVycm9yIG9jY3VycyB3aGlsZSBjb21wdXRpbmcgdGhlIHRpdGxlIGhpZXJhcmNoeSBhbmQgY2FsbGluZyBmb2N1cyBtZXRob2RcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl9vUm91dGVNYXRjaGVkUHJvbWlzZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgVGl0bGVIaWVyYXJjaHkgY2FjaGUgKCBvciBpbml0aWFsaXplcyBpdCBpZiB1bmRlZmluZWQpLlxuXHQgKlxuXHQgKiBAcmV0dXJucyAgVGhlIFRpdGxlSGllcmFyY2h5IGNhY2hlXG5cdCAqL1xuXHRfZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpOiBSZWNvcmQ8c3RyaW5nLCBUaXRsZUluZm9ybWF0aW9uPiB7XG5cdFx0aWYgKCF0aGlzLm9UaXRsZUhpZXJhcmNoeUNhY2hlKSB7XG5cdFx0XHR0aGlzLm9UaXRsZUhpZXJhcmNoeUNhY2hlID0ge307XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm9UaXRsZUhpZXJhcmNoeUNhY2hlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHRpdGxlSW5mbyBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB0aXRsZSBUaGUgYXBwbGljYXRpb24ncyB0aXRsZVxuXHQgKiBAcGFyYW0gc3VidGl0bGUgVGhlIGFwcGxpY2F0aW9uJ3Mgc3ViVGl0bGVcblx0ICogQHBhcmFtIHNJbnRlbnQgVGhlIGludGVudCBwYXRoIHRvIGJlIHJlZGlyZWN0ZWQgdG9cblx0ICogQHBhcmFtIGljb24gVGhlIGFwcGxpY2F0aW9uJ3MgaWNvblxuXHQgKiBAcmV0dXJucyBUaGUgdGl0bGUgaW5mb3JtYXRpb25cblx0ICovXG5cdF9jb21wdXRlVGl0bGVJbmZvKHRpdGxlOiBzdHJpbmcsIHN1YnRpdGxlOiBzdHJpbmcsIHNJbnRlbnQ6IHN0cmluZywgaWNvbiA9IFwiXCIpOiBUaXRsZUluZm9ybWF0aW9uIHtcblx0XHRjb25zdCBhUGFydHMgPSBzSW50ZW50LnNwbGl0KFwiL1wiKTtcblx0XHRpZiAoIWFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0uaW5jbHVkZXMoXCI/XCIpKSB7XG5cdFx0XHRzSW50ZW50ICs9IFwiP3Jlc3RvcmVIaXN0b3J5PXRydWVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0ludGVudCArPSBcIiZyZXN0b3JlSGlzdG9yeT10cnVlXCI7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogdGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogc3VidGl0bGUsXG5cdFx0XHRpbnRlbnQ6IHNJbnRlbnQsXG5cdFx0XHRpY29uOiBpY29uXG5cdFx0fTtcblx0fVxuXG5cdF9mb3JtYXRUaXRsZShkaXNwbGF5TW9kZTogc3RyaW5nLCB0aXRsZVZhbHVlOiBzdHJpbmcsIHRpdGxlRGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IGZvcm1hdHRlZFRpdGxlID0gXCJcIjtcblx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZVZhbHVlfWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZVZhbHVlfSAoJHt0aXRsZURlc2NyaXB0aW9ufSlgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gYCR7dGl0bGVEZXNjcmlwdGlvbn0gKCR7dGl0bGVWYWx1ZX0pYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZURlc2NyaXB0aW9ufWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdHRlZFRpdGxlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIHZhbHVlIG9mIHRoZSBIZWFkZXJJbmZvIHRpdGxlIGZvciBhIGdpdmVuIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHRoZSBlbnRpdHlcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCB0aXRsZSwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIG5vIEhlYWRlckluZm8gdGl0bGUgYW5ub3RhdGlvbiBpcyBhdmFpbGFibGVcblx0ICovXG5cdGFzeW5jIF9mZXRjaFRpdGxlVmFsdWUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0bW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLFxuXHRcdFx0bWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0bWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCksXG5cdFx0XHRiaW5kaW5nVmlld0NvbnRleHQgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChwYXRoKSxcblx0XHRcdGhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbiA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7bWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlYCksXG5cdFx0XHR2YWx1ZUV4cHJlc3Npb24gPSBBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChoZWFkZXJJbmZvVGl0bGVWYWx1ZUFubm90YXRpb24sIHsgY29udGV4dDogbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSB9KTtcblx0XHRpZiAoIXZhbHVlRXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0XHR9XG5cdFx0aWYgKGhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbi4kRnVuY3Rpb24gPT09IFwib2RhdGEuY29uY2F0XCIpIHtcblx0XHRcdGNvbnN0IGFueU9iamVjdCA9IG5ldyBBbnkoeyBhbnk6IHZhbHVlRXhwcmVzc2lvbiB9KTtcblx0XHRcdGFueU9iamVjdC5zZXRNb2RlbChtb2RlbCk7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoYmluZGluZ1ZpZXdDb250ZXh0KTtcblx0XHRcdGNvbnN0IHRleHRCaW5kaW5nID0gYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlcIik7XG5cdFx0XHRpZiAodGV4dEJpbmRpbmc/LmlzQTxDb21wb3NpdGVCaW5kaW5nPihcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHRleHRCaW5kaW5nLmdldEJpbmRpbmdzKCkubWFwKChiaW5kaW5nKSA9PiBiaW5kaW5nLnJlcXVlc3RWYWx1ZT8uKCkpKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluZm9UaXRsZSA9IGFueU9iamVjdC5nZXRBbnkoKTtcblx0XHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGluZm9UaXRsZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0XHRjb25zdCB0ZXh0RXhwcmVzc2lvbiA9IEFubm90YXRpb25IZWxwZXIuZm9ybWF0KFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke21ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UaXRsZS9WYWx1ZS8kUGF0aEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGBcblx0XHRcdFx0KSxcblx0XHRcdFx0eyBjb250ZXh0OiBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIH1cblx0XHRcdCksXG5cdFx0XHRwcm9wZXJ0eUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke21ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UaXRsZS9WYWx1ZS8kUGF0aEBgKSxcblx0XHRcdHByb21pc2VzOiBQcm9taXNlPHN0cmluZz5bXSA9IFtdLFxuXHRcdFx0cGFyc2VkdmFsdWVFeHByZXNzaW9uID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHZhbHVlRXhwcmVzc2lvbiksXG5cdFx0XHRwcm9taXNlRm9yRGlzcGxheU1vZGUgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpIHtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUocHJvcGVydHlDb250ZXh0KTtcblx0XHRcdFx0cmVzb2x2ZShkaXNwbGF5TW9kZSk7XG5cdFx0XHR9KTtcblx0XHRwcm9taXNlcy5wdXNoKHByb21pc2VGb3JEaXNwbGF5TW9kZSk7XG5cdFx0Y29uc3QgdmFsdWVQYXRoID0gcGFyc2VkdmFsdWVFeHByZXNzaW9uLnBhcnRzID8gcGFyc2VkdmFsdWVFeHByZXNzaW9uLnBhcnRzWzBdLnBhdGggOiBwYXJzZWR2YWx1ZUV4cHJlc3Npb24ucGF0aCxcblx0XHRcdGZuVmFsdWVGb3JtYXR0ZXIgPSBwYXJzZWR2YWx1ZUV4cHJlc3Npb24uZm9ybWF0dGVyLFxuXHRcdFx0dmFsdWVCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHZhbHVlUGF0aCwgYmluZGluZ1ZpZXdDb250ZXh0LCB7ICQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIiB9KTtcblx0XHR2YWx1ZUJpbmRpbmcuaW5pdGlhbGl6ZSgpO1xuXHRcdGNvbnN0IHByb21pc2VGb3JUaXRsZVZhbHVlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uIChldmVudDogT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBmblZhbHVlRm9ybWF0dGVyID8gZm5WYWx1ZUZvcm1hdHRlcihldmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpKSA6IGV2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCk7XG5cblx0XHRcdFx0dmFsdWVCaW5kaW5nLmRldGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHRcdHJlc29sdmUodGFyZ2V0VmFsdWUpO1xuXHRcdFx0fTtcblx0XHRcdHZhbHVlQmluZGluZy5hdHRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdH0pO1xuXHRcdHByb21pc2VzLnB1c2gocHJvbWlzZUZvclRpdGxlVmFsdWUpO1xuXG5cdFx0aWYgKHRleHRFeHByZXNzaW9uKSB7XG5cdFx0XHRjb25zdCBwYXJzZWRUZXh0RXhwcmVzc2lvbiA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcih0ZXh0RXhwcmVzc2lvbik7XG5cdFx0XHRsZXQgdGV4dFBhdGggPSBwYXJzZWRUZXh0RXhwcmVzc2lvbi5wYXJ0cyA/IHBhcnNlZFRleHRFeHByZXNzaW9uLnBhcnRzWzBdLnBhdGggOiBwYXJzZWRUZXh0RXhwcmVzc2lvbi5wYXRoO1xuXHRcdFx0dGV4dFBhdGggPSB2YWx1ZVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID4gLTEgPyBgJHt2YWx1ZVBhdGguc2xpY2UoMCwgdmFsdWVQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSl9LyR7dGV4dFBhdGh9YCA6IHRleHRQYXRoO1xuXG5cdFx0XHRjb25zdCBmblRleHRGb3JtYXR0ZXIgPSBwYXJzZWRUZXh0RXhwcmVzc2lvbi5mb3JtYXR0ZXIsXG5cdFx0XHRcdHRleHRCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHRleHRQYXRoLCBiaW5kaW5nVmlld0NvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pO1xuXHRcdFx0dGV4dEJpbmRpbmcuaW5pdGlhbGl6ZSgpO1xuXHRcdFx0Y29uc3QgcHJvbWlzZUZvclRpdGxlVGV4dCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAoZGVzY3JpcHRpb246IHN0cmluZykgPT4gdm9pZCkge1xuXHRcdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uIChldmVudDogT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRUZXh0ID0gZm5UZXh0Rm9ybWF0dGVyID8gZm5UZXh0Rm9ybWF0dGVyKGV2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCkpIDogZXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKTtcblxuXHRcdFx0XHRcdHRleHRCaW5kaW5nLmRldGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0YXJnZXRUZXh0KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0ZXh0QmluZGluZy5hdHRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdFx0fSk7XG5cdFx0XHRwcm9taXNlcy5wdXNoKHByb21pc2VGb3JUaXRsZVRleHQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdGl0bGVJbmZvOiBzdHJpbmdbXSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdGxldCBmb3JtYXR0ZWRUaXRsZSA9IFwiXCI7XG5cdFx0XHRpZiAodHlwZW9mIHRpdGxlSW5mbyAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IHRoaXMuX2Zvcm1hdFRpdGxlKHRpdGxlSW5mb1swXSwgdGl0bGVJbmZvWzFdLCB0aXRsZUluZm9bMl0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZvcm1hdHRlZFRpdGxlO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBmZXRjaGluZyB0aGUgdGl0bGUgZnJvbSB0aGUgaGVhZGVyIGluZm8gOlwiICsgZXJyb3IpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiByZXR1cm5pbmcgdGhlIGRlY29kZWQgYXBwbGljYXRpb24tc3BlY2lmaWMgaGFzaC5cblx0ICpcblx0ICogQHJldHVybnMgRGVjb2RlZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBoYXNoXG5cdCAqL1xuXHRnZXRBcHBTcGVjaWZpY0hhc2goKTogc3RyaW5nIHtcblx0XHQvLyBIYXNoQ2hhbmdlZCBpc1NoZWxsTmF2aWdhdGlvbkhhc2hDaGFuZ2VyXG5cdFx0Y29uc3QgaGFzaENoYW5nZXIgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdHJldHVybiBoYXNoQ2hhbmdlci5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoID8gVVJJLmRlY29kZShoYXNoQ2hhbmdlci5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoKFwiXCIpKSA6IFwiIy9cIjtcblx0fVxuXG5cdF9nZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aXRsZUluZm9ybWF0aW9uIGZyb20gYSBwYXRoLlxuXHQgKiBJdCB1cGRhdGVzIHRoZSBjYWNoZSB0byBzdG9yZSB0aXRsZSBpbmZvcm1hdGlvbiBpZiBuZWNlc3Nhcnlcblx0ICpcblx0ICogQHBhcmFtIHsqfSBzUGF0aCBwYXRoIG9mIHRoZSBjb250ZXh0IHRvIHJldHJpZXZlIHRpdGxlIGluZm9ybWF0aW9uIGZyb20gTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSAgb1RpdGxlaW5mb3JtYXRpb24gcmV0dXJuZWQgYXMgcHJvbWlzZVxuXHQgKi9cblxuXHRhc3luYyBnZXRUaXRsZUluZm9Gcm9tUGF0aChzUGF0aDogc3RyaW5nKTogUHJvbWlzZTxUaXRsZUluZm9ybWF0aW9uPiB7XG5cdFx0Y29uc3Qgb1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk7XG5cblx0XHRpZiAob1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdKSB7XG5cdFx0XHQvLyBUaGUgdGl0bGUgaW5mbyBpcyBhbHJlYWR5IHN0b3JlZCBpbiB0aGUgY2FjaGVcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUob1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdKTtcblx0XHR9XG5cblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdGNvbnN0IHNUeXBlTmFtZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UeXBlTmFtZWApO1xuXHRcdGNvbnN0IHNBcHBTcGVjaWZpY0hhc2ggPSB0aGlzLmdldEFwcFNwZWNpZmljSGFzaCgpO1xuXHRcdGNvbnN0IHNJbnRlbnQgPSBzQXBwU3BlY2lmaWNIYXNoICsgc1BhdGguc2xpY2UoMSk7XG5cdFx0cmV0dXJuIHRoaXMuX2ZldGNoVGl0bGVWYWx1ZShzUGF0aCkudGhlbigoc1RpdGxlOiBzdHJpbmcpID0+IHtcblx0XHRcdGNvbnN0IG9UaXRsZUluZm8gPSB0aGlzLl9jb21wdXRlVGl0bGVJbmZvKHNUeXBlTmFtZSwgc1RpdGxlLCBzSW50ZW50KTtcblx0XHRcdG9UaXRsZUhpZXJhcmNoeUNhY2hlW3NQYXRoXSA9IG9UaXRsZUluZm87XG5cdFx0XHRyZXR1cm4gb1RpdGxlSW5mbztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbnN1cmUgdGhhdCB0aGUgdXNoZWxsIHNlcnZpY2UgcmVjZWl2ZXMgYWxsIGVsZW1lbnRzXG5cdCAqICh0aXRsZSwgc3VidGl0bGUsIGludGVudCwgaWNvbikgYXMgc3RyaW5ncy5cblx0ICpcblx0ICogQW5ub3RhdGlvbiBIZWFkZXJJbmZvIGFsbG93cyBmb3IgYmluZGluZyBvZiB0aXRsZSBhbmQgZGVzY3JpcHRpb25cblx0ICogKHdoaWNoIGFyZSB1c2VkIGhlcmUgYXMgdGl0bGUgYW5kIHN1YnRpdGxlKSB0byBhbnkgZWxlbWVudCBpbiB0aGUgZW50aXR5XG5cdCAqIChiZWluZyBwb3NzaWJseSB0eXBlcyBsaWtlIGJvb2xlYW4sIHRpbWVzdGFtcCwgZG91YmxlLCBldGMuKVxuXHQgKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGhpZXJhcmNoeSBhbmQgY29udmVydHMgbm9uLXN0cmluZyB0eXBlcyB0byBzdHJpbmcuXG5cdCAqXG5cdCAqIEBwYXJhbSBhSGllcmFyY2h5IFNoZWxsIHRpdGxlIGhpZXJhcmNoeVxuXHQgKiBAcmV0dXJucyBDb3B5IG9mIHNoZWxsIHRpdGxlIGhpZXJhcmNoeSBjb250YWluaW5nIGFsbCBlbGVtZW50cyBhcyBzdHJpbmdzXG5cdCAqL1xuXHRfZW5zdXJlSGllcmFyY2h5RWxlbWVudHNBcmVTdHJpbmdzKGFIaWVyYXJjaHk6IFRpdGxlSW5mb3JtYXRpb25bXSk6IG9iamVjdFtdIHtcblx0XHRjb25zdCBhSGllcmFyY2h5U2hlbGwgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGxldmVsIGluIGFIaWVyYXJjaHkpIHtcblx0XHRcdGNvbnN0IG9IaWVyYXJjaHkgPSBhSGllcmFyY2h5W2xldmVsXTtcblx0XHRcdGNvbnN0IG9TaGVsbEhpZXJhcmNoeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gb0hpZXJhcmNoeSkge1xuXHRcdFx0XHRvU2hlbGxIaWVyYXJjaHlba2V5XSA9IChcblx0XHRcdFx0XHR0eXBlb2Ygb0hpZXJhcmNoeVtrZXkgYXMga2V5b2YgVGl0bGVJbmZvcm1hdGlvbl0gIT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHRcdD8gU3RyaW5nKG9IaWVyYXJjaHlba2V5IGFzIGtleW9mIFRpdGxlSW5mb3JtYXRpb25dKVxuXHRcdFx0XHRcdFx0OiBvSGllcmFyY2h5W2tleSBhcyBrZXlvZiBUaXRsZUluZm9ybWF0aW9uXVxuXHRcdFx0XHQpIGFzIHN0cmluZztcblx0XHRcdH1cblx0XHRcdGFIaWVyYXJjaHlTaGVsbC5wdXNoKG9TaGVsbEhpZXJhcmNoeSk7XG5cdFx0fVxuXHRcdHJldHVybiBhSGllcmFyY2h5U2hlbGw7XG5cdH1cblxuXHRfZ2V0VGFyZ2V0VHlwZUZyb21IYXNoKHNIYXNoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGxldCBzVGFyZ2V0VHlwZSA9IFwiXCI7XG5cblx0XHRjb25zdCBhUm91dGVzID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nPy5yb3V0ZXMgPz8gW107XG5cdFx0Zm9yIChjb25zdCByb3V0ZSBvZiBhUm91dGVzKSB7XG5cdFx0XHRjb25zdCBvUm91dGUgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlcigpLmdldFJvdXRlKHJvdXRlLm5hbWUpO1xuXHRcdFx0aWYgKG9Sb3V0ZT8ubWF0Y2goc0hhc2gpKSB7XG5cdFx0XHRcdGNvbnN0IHNUYXJnZXQgPSBnZXRSb3V0ZVRhcmdldE5hbWVzKHJvdXRlLnRhcmdldClbMF07XG5cdFx0XHRcdHNUYXJnZXRUeXBlID0gKG9BcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0VGFyZ2V0KHNUYXJnZXQpIGFzIHVua25vd24gYXMgeyBfb09wdGlvbnM6IHsgbmFtZTogc3RyaW5nIH0gfSkuX29PcHRpb25zLm5hbWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzVGFyZ2V0VHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIHNoZWxsIHRpdGxlIGFmdGVyIGVhY2ggbmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHZpZXcgVGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBtZW51IGlzIGZpbGxlZCBwcm9wZXJseVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgY29tcHV0ZVRpdGxlSGllcmFyY2h5KHZpZXc6IFZpZXcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0Y29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdGN1cnJlbnRQYWdlID0gdmlldy5nZXRQYXJlbnQoKSxcblx0XHRcdHRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcyA9IFtdLFxuXHRcdFx0YXBwU3BlY2lmaWNIYXNoID0gdGhpcy5nZXRBcHBTcGVjaWZpY0hhc2goKSxcblx0XHRcdG1hbmlmZXN0QXBwU2V0dGluZ3MgPSBhcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIiksXG5cdFx0XHRhcHBUaXRsZSA9IG1hbmlmZXN0QXBwU2V0dGluZ3MudGl0bGUgfHwgXCJcIixcblx0XHRcdGFwcFN1YlRpdGxlID0gbWFuaWZlc3RBcHBTZXR0aW5ncy5zdWJUaXRsZSB8fCBcIlwiLFxuXHRcdFx0YXBwSWNvbiA9IG1hbmlmZXN0QXBwU2V0dGluZ3MuaWNvbiB8fCBcIlwiO1xuXHRcdGxldCBwYWdlVGl0bGVJbmZvcm1hdGlvbjogVGl0bGVJbmZvcm1hdGlvbiwgbmV3UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGN1cnJlbnRQYWdlICYmIChjdXJyZW50UGFnZSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkuX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKSB7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHQvLyBJZiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgYXBwbGljYXRpb24gaXMgYSBMUiwgdXNlIHRoZSB0aXRsZSBhbmQgc3VidGl0bGUgZnJvbSB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0aWYgKHRoaXMuX2dldFRhcmdldFR5cGVGcm9tSGFzaChcIlwiKSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRcdHRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcy5wdXNoKFByb21pc2UucmVzb2x2ZSh0aGlzLl9jb21wdXRlVGl0bGVJbmZvKGFwcFRpdGxlLCBhcHBTdWJUaXRsZSwgYXBwU3BlY2lmaWNIYXNoLCBhcHBJY29uKSkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVGhlbiBtYW5hZ2Ugb3RoZXIgcGFnZXNcblx0XHRcdFx0bmV3UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBwYXRoUGFydHMgPSBuZXdQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0bGV0IHBhdGggPSBcIlwiO1xuXG5cdFx0XHRcdHBhdGhQYXJ0cy5zaGlmdCgpOyAvLyBSZW1vdmUgdGhlIGZpcnN0IHNlZ21lbnQgKGVtcHR5IHN0cmluZykgYXMgaXQgaGFzIGJlZW4gbWFuYWdlZCBhYm92ZVxuXHRcdFx0XHRwYXRoUGFydHMucG9wKCk7IC8vIFJlbW92ZSB0aGUgbGFzdCBzZWdtZW50IGFzIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHBhZ2UgYW5kIHNob3VsZG4ndCBhcHBlYXIgaW4gdGhlIG1lbnVcblx0XHRcdFx0cGF0aFBhcnRzLmZvckVhY2goKHBhdGhQYXJ0OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRwYXRoICs9IGAvJHtwYXRoUGFydH1gO1xuXHRcdFx0XHRcdC8vaWYgdGhlIGFzc29jaWF0ZWQgdGFyZ2V0IGlzIG5vdCBkZWNsYXJlZCBpbiB0aGUgcm91dGVzLCB3ZSBza2lwIGl0XG5cdFx0XHRcdFx0aWYgKCFhcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0Um91dGVJbmZvQnlIYXNoKHBhdGgpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IGFwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdHBhcmFtZXRlclBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCksXG5cdFx0XHRcdFx0XHRpc1BhcmFtZXRlcml6ZWQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3BhcmFtZXRlclBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdFx0XHRcdGlmICghaXNQYXJhbWV0ZXJpemVkKSB7XG5cdFx0XHRcdFx0XHR0aXRsZUluZm9ybWF0aW9uUHJvbWlzZXMucHVzaCh0aGlzLmdldFRpdGxlSW5mb0Zyb21QYXRoKHBhdGgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDdXJyZW50IHBhZ2Vcblx0XHRcdHBhZ2VUaXRsZUluZm9ybWF0aW9uID0gKGN1cnJlbnRQYWdlIGFzIFRlbXBsYXRlQ29tcG9uZW50KS5fZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTtcblx0XHRcdHBhZ2VUaXRsZUluZm9ybWF0aW9uID0gdGhpcy5fY29tcHV0ZVRpdGxlSW5mbyhcblx0XHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24udGl0bGUgPz8gXCJcIixcblx0XHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24uc3VidGl0bGUgPz8gXCJcIixcblx0XHRcdFx0YXBwU3BlY2lmaWNIYXNoICsgdGhpcy5fZ2V0SGFzaCgpXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoY29udGV4dCAmJiBuZXdQYXRoKSB7XG5cdFx0XHRcdHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKVtuZXdQYXRoXSA9IHBhZ2VUaXRsZUluZm9ybWF0aW9uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpW2FwcFNwZWNpZmljSGFzaF0gPSBwYWdlVGl0bGVJbmZvcm1hdGlvbjtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGl0bGVJbmZvcm1hdGlvblByb21pc2VzLnB1c2goUHJvbWlzZS5yZWplY3QoXCJUaXRsZSBpbmZvcm1hdGlvbiBtaXNzaW5nIGluIEhlYWRlckluZm9cIikpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwodGl0bGVJbmZvcm1hdGlvblByb21pc2VzKVxuXHRcdFx0LnRoZW4oKHRpdGxlSW5mb0hpZXJhcmNoeTogVGl0bGVJbmZvcm1hdGlvbltdKTogdm9pZCA9PiB7XG5cdFx0XHRcdC8vIHdvcmthcm91bmQgZm9yIHNoZWxsIHdoaWNoIGlzIGV4cGVjdGluZyBhbGwgZWxlbWVudHMgYmVpbmcgb2YgdHlwZSBzdHJpbmdcblx0XHRcdFx0Y29uc3QgdGl0bGVJbmZvSGllcmFyY2h5U2hlbGwgPSB0aGlzLl9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3ModGl0bGVJbmZvSGllcmFyY2h5KSxcblx0XHRcdFx0XHR0aXRsZSA9IHBhZ2VUaXRsZUluZm9ybWF0aW9uLnRpdGxlID8/IFwiXCI7XG5cdFx0XHRcdHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsLnJldmVyc2UoKTtcblx0XHRcdFx0YXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRIaWVyYXJjaHkodGl0bGVJbmZvSGllcmFyY2h5U2hlbGwpO1xuXG5cdFx0XHRcdHRoaXMuX3NldFNoZWxsTWVudVRpdGxlKGFwcENvbXBvbmVudCwgdGl0bGUsIGFwcFRpdGxlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3JNZXNzYWdlOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvck1lc3NhZ2UgYXMgc3RyaW5nKTtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSA9IGZhbHNlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3JNZXNzYWdlOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvck1lc3NhZ2UgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRjYWxjdWxhdGVMYXlvdXQoaU5leHRGQ0xMZXZlbDogbnVtYmVyLCBzSGFzaDogc3RyaW5nLCBzUHJvcG9zZWRMYXlvdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCwga2VlcEN1cnJlbnRMYXlvdXQgPSBmYWxzZSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGJhY2sgYWZ0ZXIgYSB2aWV3IGhhcyBiZWVuIGJvdW5kIHRvIGEgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gYm91bmQgdG8gYSB2aWV3XG5cdCAqL1xuXHRvbkNvbnRleHRCb3VuZFRvVmlldyhvQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGwpOiB2b2lkIHtcblx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IHNEZWVwZXN0UGF0aCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikuZ2V0UHJvcGVydHkoXCIvZGVlcGVzdFBhdGhcIiksXG5cdFx0XHRcdHNWaWV3Q29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cblx0XHRcdGlmICghc0RlZXBlc3RQYXRoIHx8IHNEZWVwZXN0UGF0aC5pbmRleE9mKHNWaWV3Q29udGV4dFBhdGgpICE9PSAwKSB7XG5cdFx0XHRcdC8vIFRoZXJlIHdhcyBubyBwcmV2aW91cyB2YWx1ZSBmb3IgdGhlIGRlZXBlc3QgcmVhY2hlZCBwYXRoLCBvciB0aGUgcGF0aFxuXHRcdFx0XHQvLyBmb3IgdGhlIHZpZXcgaXNuJ3QgYSBzdWJwYXRoIG9mIHRoZSBwcmV2aW91cyBkZWVwZXN0IHBhdGggLS0+IHVwZGF0ZVxuXHRcdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwiL2RlZXBlc3RQYXRoXCIsIHNWaWV3Q29udGV4dFBhdGgsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgZGlzcGxheUVycm9yUGFnZShfZXJyb3JNZXNzYWdlOiBzdHJpbmcsIF9wYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQsIF9GQ0xMZXZlbCA9IDApOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZGVuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0dXBkYXRlVUlTdGF0ZUZvclZpZXcob1ZpZXc6IEZFVmlldywgRkNMTGV2ZWw6IG51bWJlcik6IHZvaWQge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0Z2V0SW5zdGFuY2VkVmlld3MoKTogVmlld1tdIHtcblx0XHRyZXR1cm4gW107XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJuIGFsbCB2aXNpYmxlIHZpZXdzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgdmlzaWJsZSB2aWV3c1xuXHQgKi9cblx0Z2V0VmlzaWJsZVZpZXdzKCk6IFZpZXdbXSB7XG5cdFx0cmV0dXJuIFtdO1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0X3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zKCk6IHZvaWQge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0aXNGY2xFbmFibGVkKCk6IHRoaXMgaXMgRmNsQ29udHJvbGxlciB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfc2V0U2hlbGxNZW51VGl0bGUob0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBzVGl0bGU6IHN0cmluZywgc0FwcFRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW4gYnkgRmNsQ29udHJvbGxlclxuXHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldFRpdGxlKHNUaXRsZSk7XG5cdH1cblxuXHRnZXRBcHBDb250ZW50Q29udGFpbmVyKCk6IE5hdkNvbnRhaW5lciB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0IHtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRjb25zdCBhcHBDb250ZW50SWQgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvdXRpbmc/LmNvbmZpZz8uY29udHJvbElkID8/IFwiYXBwQ29udGVudFwiO1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKGFwcENvbnRlbnRJZCkgYXMgTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cdH1cbn1cbmludGVyZmFjZSBSb290Vmlld0Jhc2VDb250cm9sbGVyIHtcblx0b25Db250YWluZXJSZWFkeT8oKTogdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm9vdFZpZXdCYXNlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7TUEyQ01BLHNCQUFzQixXQUQzQkMsY0FBYyxDQUFDLDZDQUE2QyxDQUFDLFVBRTVEQyxjQUFjLENBQUNDLFdBQVcsQ0FBQyxVQUczQkQsY0FBYyxDQUFDRSxTQUFTLENBQUM7SUFBQTtJQUFBO01BQUE7TUFBQTtRQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQSxNQVdsQkMseUJBQXlCLEdBQUcsS0FBSztNQUFBO0lBQUE7SUFBQTtJQUFBLE9BRXpDQyxNQUFNLEdBQU4sa0JBQWU7TUFDZEMsVUFBVSxDQUFDQyxJQUFJLEVBQUU7TUFFakIsSUFBSSxDQUFDQyxjQUFjLEdBQUcsRUFBRTtJQUN6QixDQUFDO0lBQUEs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
|