@sapui5/sap.fe.macros 1.139.0 → 1.141.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/macros/.library +1 -1
- package/src/sap/fe/macros/Chart.js +53 -2
- package/src/sap/fe/macros/Chart.tsx +55 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
- package/src/sap/fe/macros/CommonHelper.js +59 -15
- package/src/sap/fe/macros/CommonHelper.ts +65 -14
- package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
- package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
- package/src/sap/fe/macros/Field.js +78 -64
- package/src/sap/fe/macros/Field.ts +97 -68
- package/src/sap/fe/macros/FooterContent.js +5 -2
- package/src/sap/fe/macros/FooterContent.tsx +4 -1
- package/src/sap/fe/macros/MacroAPI.js +9 -4
- package/src/sap/fe/macros/MacroAPI.ts +9 -4
- package/src/sap/fe/macros/MessageButton.js +1 -2
- package/src/sap/fe/macros/MessageButton.tsx +0 -1
- package/src/sap/fe/macros/MultiValueField.js +10 -7
- package/src/sap/fe/macros/MultiValueField.tsx +7 -3
- package/src/sap/fe/macros/Page.js +5 -7
- package/src/sap/fe/macros/Page.tsx +4 -6
- package/src/sap/fe/macros/Paginator.js +9 -4
- package/src/sap/fe/macros/Paginator.tsx +12 -3
- package/src/sap/fe/macros/RichTextEditor.js +3 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
- package/src/sap/fe/macros/Share.js +14 -2
- package/src/sap/fe/macros/Share.tsx +13 -0
- package/src/sap/fe/macros/Status.js +251 -0
- package/src/sap/fe/macros/Status.tsx +212 -0
- package/src/sap/fe/macros/ValueHelp.js +4 -28
- package/src/sap/fe/macros/ValueHelp.tsx +2 -42
- package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
- package/src/sap/fe/macros/ai/EasyFilterBar.js +246 -97
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +302 -106
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
- package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
- package/src/sap/fe/macros/chart/Chart.js +2 -2
- package/src/sap/fe/macros/chart/Chart.tsx +1 -1
- package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
- package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
- package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
- package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -5
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -5
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +4 -2
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +3 -1
- package/src/sap/fe/macros/controls/FilterBar.js +14 -5
- package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
- package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
- package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
- package/src/sap/fe/macros/controls/Section.js +4 -3
- package/src/sap/fe/macros/controls/Section.ts +3 -2
- package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
- package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.js +28 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
- package/src/sap/fe/macros/field/Field.js +2 -2
- package/src/sap/fe/macros/field/Field.tsx +1 -1
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
- package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
- package/src/sap/fe/macros/field/FieldHelper.js +2 -2
- package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
- package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
- package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
- package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +233 -5
- package/src/sap/fe/macros/filter/FilterUtils.ts +291 -7
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
- package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
- package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
- package/src/sap/fe/macros/form/Form.block.js +7 -8
- package/src/sap/fe/macros/form/Form.block.ts +4 -6
- package/src/sap/fe/macros/form/Form.js +1 -4
- package/src/sap/fe/macros/form/Form.tsx +0 -3
- package/src/sap/fe/macros/form/FormContainer.block.js +555 -5
- package/src/sap/fe/macros/form/FormContainer.block.ts +665 -7
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
- package/src/sap/fe/macros/form/FormDelegate.js +24 -8
- package/src/sap/fe/macros/form/FormDelegate.ts +29 -7
- package/src/sap/fe/macros/form/FormHelper.js +1 -2
- package/src/sap/fe/macros/form/FormHelper.ts +0 -1
- package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
- package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
- package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
- package/src/sap/fe/macros/internal/DataPoint.js +3 -2
- package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
- package/src/sap/fe/macros/internal/FilterField.block.js +19 -5
- package/src/sap/fe/macros/internal/FilterField.block.ts +16 -4
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +9 -3
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +10 -2
- package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +5 -1
- package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
- package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
- package/src/sap/fe/macros/messagebundle.properties +24 -4
- package/src/sap/fe/macros/messagebundle_ar.properties +8 -2
- package/src/sap/fe/macros/messagebundle_bg.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ca.properties +11 -5
- package/src/sap/fe/macros/messagebundle_cnr.properties +8 -2
- package/src/sap/fe/macros/messagebundle_cs.properties +7 -1
- package/src/sap/fe/macros/messagebundle_cy.properties +9 -3
- package/src/sap/fe/macros/messagebundle_da.properties +8 -2
- package/src/sap/fe/macros/messagebundle_de.properties +13 -7
- package/src/sap/fe/macros/messagebundle_el.properties +7 -1
- package/src/sap/fe/macros/messagebundle_en.properties +11 -5
- package/src/sap/fe/macros/messagebundle_en_GB.properties +9 -3
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +11 -5
- package/src/sap/fe/macros/messagebundle_es.properties +10 -4
- package/src/sap/fe/macros/messagebundle_es_MX.properties +11 -5
- package/src/sap/fe/macros/messagebundle_et.properties +9 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +7 -1
- package/src/sap/fe/macros/messagebundle_fr.properties +9 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -2
- package/src/sap/fe/macros/messagebundle_hi.properties +8 -2
- package/src/sap/fe/macros/messagebundle_hr.properties +8 -2
- package/src/sap/fe/macros/messagebundle_hu.properties +7 -1
- package/src/sap/fe/macros/messagebundle_id.properties +15 -9
- package/src/sap/fe/macros/messagebundle_it.properties +7 -1
- package/src/sap/fe/macros/messagebundle_iw.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ja.properties +13 -7
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -5
- package/src/sap/fe/macros/messagebundle_ko.properties +8 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +9 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +8 -2
- package/src/sap/fe/macros/messagebundle_mk.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ms.properties +7 -1
- package/src/sap/fe/macros/messagebundle_nl.properties +7 -1
- package/src/sap/fe/macros/messagebundle_no.properties +7 -1
- package/src/sap/fe/macros/messagebundle_pl.properties +8 -2
- package/src/sap/fe/macros/messagebundle_pt.properties +7 -1
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +7 -1
- package/src/sap/fe/macros/messagebundle_ro.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ru.properties +10 -4
- package/src/sap/fe/macros/messagebundle_sh.properties +8 -2
- package/src/sap/fe/macros/messagebundle_sk.properties +7 -1
- package/src/sap/fe/macros/messagebundle_sl.properties +7 -1
- package/src/sap/fe/macros/messagebundle_sr.properties +8 -2
- package/src/sap/fe/macros/messagebundle_sv.properties +7 -1
- package/src/sap/fe/macros/messagebundle_th.properties +8 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +7 -1
- package/src/sap/fe/macros/messagebundle_uk.properties +10 -4
- package/src/sap/fe/macros/messagebundle_vi.properties +10 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +7 -1
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +8 -2
- package/src/sap/fe/macros/messages/MessageButton.js +39 -18
- package/src/sap/fe/macros/messages/MessageButton.ts +42 -19
- package/src/sap/fe/macros/messages/MessagePopover.js +4 -2
- package/src/sap/fe/macros/messages/MessagePopover.ts +6 -4
- package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
- package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -3
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -2
- package/src/sap/fe/macros/share/ShareAPI.js +4 -29
- package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
- package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
- package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
- package/src/sap/fe/macros/table/BasicSearch.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
- package/src/sap/fe/macros/table/Column.js +14 -2
- package/src/sap/fe/macros/table/Column.ts +7 -0
- package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
- package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
- package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
- package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +7 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +21 -11
- package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
- package/src/sap/fe/macros/table/Table.block.js +188 -147
- package/src/sap/fe/macros/table/Table.block.tsx +41 -11
- package/src/sap/fe/macros/table/Table.js +16 -10
- package/src/sap/fe/macros/table/Table.tsx +16 -10
- package/src/sap/fe/macros/table/TableAPI.js +224 -184
- package/src/sap/fe/macros/table/TableAPI.ts +63 -19
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
- package/src/sap/fe/macros/table/TableHelper.js +2 -3
- package/src/sap/fe/macros/table/TableHelper.ts +1 -2
- package/src/sap/fe/macros/table/TableRuntime.js +24 -5
- package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
- package/src/sap/fe/macros/table/TreeTable.js +16 -10
- package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
- package/src/sap/fe/macros/table/Utils.js +8 -3
- package/src/sap/fe/macros/table/Utils.ts +12 -3
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -34
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -33
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
- package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
- package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
- package/src/sap/fe/macros/table/mixin/TableSharing.js +4 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +10 -1
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +36 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +44 -9
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -4
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -2
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/controls/Any", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/field/FieldTemplating", "sap/m/MessageBox", "sap/ui/core/Component", "sap/ui/core/Lib", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/model/BindingMode", "./MassEditDialog", "./library"], function (Log, deepClone, BindingToolkit, CommonUtils, Any, MetaModelConverter, DataField, ModelHelper, TypeGuards, DataModelPathHelper, DisplayModeFormatter, FieldControlHelper, PropertyHelper, UIFormatters, FieldTemplating, MessageBox, Component, Library, FieldEditMode, BindingMode, MassEditDialog, library) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/controls/Any", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/field/FieldTemplating", "sap/m/MessageBox", "sap/ui/core/Component", "sap/ui/core/Lib", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/model/BindingMode", "./MassEditDialog", "./library", "sap/fe/base/jsx-runtime/jsx"], function (Log, deepClone, BindingToolkit, CommonUtils, Any, MetaModelConverter, DataField, ModelHelper, ResourceModelHelper, TypeGuards, DataModelPathHelper, DisplayModeFormatter, FieldControlHelper, PropertyHelper, UIFormatters, FieldTemplating, MessageBox, Component, Library, FieldEditMode, BindingMode, MassEditDialog, library, _jsx) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -144,19 +144,19 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
|
|
|
144
144
|
* @returns A promise that resolves the contexts to be finally managed.
|
|
145
145
|
*/;
|
|
146
146
|
_proto.confirmSelection = async function confirmSelection(contexts, selectedContexts) {
|
|
147
|
-
const
|
|
147
|
+
const resourceModel = ResourceModelHelper.getResourceModel(this.table);
|
|
148
148
|
const coreResourceBundle = Library.getResourceBundleFor("sap.fe.core");
|
|
149
149
|
const updatableContexts = contexts.length;
|
|
150
150
|
return new Promise(resolve => {
|
|
151
151
|
try {
|
|
152
152
|
const tableAPI = this.table.getParent();
|
|
153
|
-
const editButton =
|
|
153
|
+
const editButton = resourceModel.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
|
|
154
154
|
cancelButton = coreResourceBundle.getText("C_COMMON_OBJECT_PAGE_CANCEL"),
|
|
155
155
|
metaModel = this.table.getModel().getMetaModel(),
|
|
156
|
-
typeName = this.getResourceText(this.headerInfo?.TypeName) ??
|
|
157
|
-
typeNamePlural = this.getResourceText(this.headerInfo?.TypeNamePlural) ??
|
|
156
|
+
typeName = this.getResourceText(this.headerInfo?.TypeName) ?? resourceModel.getText("C_MASS_EDIT_DIALOG_DEFAULT_TYPENAME"),
|
|
157
|
+
typeNamePlural = this.getResourceText(this.headerInfo?.TypeNamePlural) ?? resourceModel.getText("C_MASS_EDIT_DIALOG_DEFAULT_TYPENAME_PLURAL"),
|
|
158
158
|
messageDetail = ModelHelper.isDraftSupported(metaModel, this.table.data("targetCollectionPath")) && tableAPI.readOnly ? this.getMessageDetailForNonEditable(typeName, typeNamePlural) : "";
|
|
159
|
-
MessageBox.warning(
|
|
159
|
+
MessageBox.warning(resourceModel.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [selectedContexts - updatableContexts, selectedContexts, updatableContexts, typeNamePlural]), {
|
|
160
160
|
details: messageDetail,
|
|
161
161
|
actions: [editButton, cancelButton],
|
|
162
162
|
emphasizedAction: editButton,
|
|
@@ -313,7 +313,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
|
|
|
313
313
|
} else if (expBinding === "false") {
|
|
314
314
|
return true;
|
|
315
315
|
}
|
|
316
|
-
const anyObject =
|
|
316
|
+
const anyObject = _jsx(Any, {
|
|
317
317
|
anyBoolean: expBinding
|
|
318
318
|
});
|
|
319
319
|
anyObject.setModel(this.analyzedContexts[0].getModel());
|
|
@@ -503,7 +503,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
|
|
|
503
503
|
const bindingType = binding.type ?? "any";
|
|
504
504
|
parameters[bindingType] = binding.expression;
|
|
505
505
|
for (const context of analyzedContexts) {
|
|
506
|
-
const control =
|
|
506
|
+
const control = _jsx(Any, {
|
|
507
|
+
...parameters
|
|
508
|
+
});
|
|
507
509
|
control.setModel(model);
|
|
508
510
|
control.setBindingContext(context);
|
|
509
511
|
controls.push(control);
|
|
@@ -537,7 +539,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
|
|
|
537
539
|
return null;
|
|
538
540
|
} else {
|
|
539
541
|
const context = this.contexts[0];
|
|
540
|
-
const anyObject =
|
|
542
|
+
const anyObject = _jsx(Any, {
|
|
541
543
|
any: compileExpression(formatWithTypeInformation(property, pathInModel(propertyPath)))
|
|
542
544
|
});
|
|
543
545
|
anyObject.setModel(context.getModel());
|
|
@@ -574,7 +576,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
|
|
|
574
576
|
if (fieldData.inputType === "CheckBox") {
|
|
575
577
|
return [];
|
|
576
578
|
}
|
|
577
|
-
const anyObject =
|
|
579
|
+
const anyObject = _jsx(Any, {
|
|
578
580
|
anyText: fieldData.textBinding.expression
|
|
579
581
|
});
|
|
580
582
|
anyObject.setModel(this.contexts[0].getModel());
|
|
@@ -652,7 +654,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
|
|
|
652
654
|
} else if (Object.keys(FieldEditMode).includes(expBinding)) {
|
|
653
655
|
return false;
|
|
654
656
|
} else if (expBinding) {
|
|
655
|
-
const anyControl =
|
|
657
|
+
const anyControl = _jsx(Any, {
|
|
656
658
|
any: expBinding
|
|
657
659
|
});
|
|
658
660
|
const model = this.analyzedContexts[0].getModel();
|
|
@@ -701,4 +703,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
|
|
|
701
703
|
_exports = MassEditDialogHelper;
|
|
702
704
|
return _exports;
|
|
703
705
|
}, false);
|
|
704
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdERpYWxvZ0hlbHBlciIsInByb3BzIiwibWF4QW5hbHl6ZWRSb3dzIiwiYW5hbHl6ZWRDb250ZXh0cyIsImZpZWxkUHJvcGVydGllcyIsImVudGl0eVR5cGVQYXRoIiwidGFibGUiLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnRyb2wiLCJtYXNzRWRpdCIsIm9uQ29udGV4dE1lbnUiLCJvbkRpYWxvZ0Nsb3NlIiwib25DbG9zZSIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJjb250ZXh0cyIsImZldGNoQ29udGV4dHNGb3JFZGl0IiwiZGVncmFkZWRNb2RlIiwibGVuZ3RoIiwic2xpY2UiLCJpc0FkYXB0YXRpb24iLCJnZXRBcHBDb21wb25lbnQiLCJpc0FkYXB0YXRpb25Nb2RlIiwiaGVhZGVySW5mbyIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckluZm8iLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsIm9wZW4iLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImludGVybmFsTW9kZWxQcm9wZXJ0eSIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRQcm9wZXJ0eSIsImdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyIsImdldEZpZWxkc0luZm8iLCJzb21lIiwiZmllbGQiLCJ2aXNpYmxlIiwibm9GaWVsZEluZm9ybWF0aW9uIiwiY29uZmlybVNlbGVjdGlvbiIsInJ1bkFzT3duZXIiLCJtYXNzRWRpdERpYWxvZyIsIk1hc3NFZGl0RGlhbG9nIiwiZGlhbG9nIiwiY3JlYXRlIiwiYXR0YWNoQmVmb3JlQ2xvc2UiLCJyZXF1aXJlZERhdGFQcm9taXNlIiwiZ2V0UmVxdWlyZWREYXRhUHJvbWlzZSIsImdldERhdGFBZnRlck9wZW5pbmdEaWFsb2ciLCJyZXNvbHZlIiwiZXJyb3IiLCJMb2ciLCJyZWplY3QiLCJ2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0IiwidmlzaWJsZUZpZWxkcyIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwibWVzc2FnZSIsIm1lc3NhZ2VEZXRhaWwiLCJnZXRUZXh0IiwiZ2V0UmVzb3VyY2VUZXh0IiwiVHlwZU5hbWUiLCJyZWR1Y2UiLCJmaWVsZHMiLCJmaWVsZFByb3BlcnR5IiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUluZm8iLCJyZWxhdGl2ZVBhdGgiLCJwdXNoIiwibGFiZWwiLCJqb2luIiwiTWVzc2FnZUJveCIsImluZm9ybWF0aW9uIiwiZGV0YWlscyIsImNvcmVSZXNvdXJjZUJ1bmRsZSIsInVwZGF0YWJsZUNvbnRleHRzIiwiUHJvbWlzZSIsInRhYmxlQVBJIiwiZWRpdEJ1dHRvbiIsImNhbmNlbEJ1dHRvbiIsInR5cGVOYW1lIiwidHlwZU5hbWVQbHVyYWwiLCJUeXBlTmFtZVBsdXJhbCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImRhdGEiLCJyZWFkT25seSIsImdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSIsIndhcm5pbmciLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsInNlbGVjdGlvbiIsInVuZGVmaW5lZCIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0RW50aXR5RmllbGRzSW5mbyIsImNvbHVtbnNEYXRhIiwiY29sdW1ucyIsInByb3BlcnRpZXNLZXlzIiwiU2V0IiwiY29sdW1uIiwidHlwZSIsIm5hbWUiLCJ0cmFuc2Zvcm1QYXRoc1RvSW5mbyIsImdldENvbHVtbnMiLCJtYXAiLCJnZXRQcm9wZXJ0eUtleSIsImlnbm9yZWRGaWVsZHMiLCJpZ25vcmVkRmllbGQiLCJkZWxldGUiLCJwcm9wZXJ0aWVzUGF0aHMiLCJBcnJheSIsImZyb20iLCJjb2x1bW5JbmZvcyIsInByb3BlcnR5UGF0aCIsImNvbHVtbkluZm8iLCJnZXRGaWVsZEluZm8iLCJlbnRpdHlQYXRoIiwiZ2V0TWV0YVBhdGgiLCJlbnRpdHlTZXREYXRhTW9kZWwiLCJyZWxhdGVkQ29sdW1uSW5mbyIsImZpbmQiLCJmaWVsZEluZm8iLCJhbm5vdGF0aW9uUGF0aCIsInByb3BlcnR5RGF0YU1vZGVsIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJjb252ZXJ0ZWRBbm5vdGF0aW9uIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRQcm9wZXJ0eSIsImdldENvbXBsaWFudFByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImtleSIsInRhcmdldE9iamVjdCIsImlzUHJvcGVydHkiLCJJc0ltYWdlVVJMIiwiaXNEYXRhRmllbGRUeXBlcyIsImhhc093blByb3BlcnR5IiwiVmFsdWUiLCIkdGFyZ2V0IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiaGFzVmFsdWVIZWxwIiwiQ29tbW9uIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiaXNIaWRkZW5Gb3JDb250ZXh0cyIsImV4cEJpbmRpbmciLCJhbnlPYmplY3QiLCJBbnkiLCJhbnlCb29sZWFuIiwic2V0TW9kZWwiLCJpc0hpZGRlbiIsImNvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmciLCJnZXRFeHRlcm5hbFZhbHVlIiwiZGVzdHJveSIsInVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSIsImdldEZpZWxkUHJvcGVydGllcyIsImRlZXBDbG9uZSIsImZpZWxkc0luZm8iLCJkYXRhUHJvcGVydHlQYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJpbnB1dFR5cGUiLCJnZXRJbnB1dFR5cGUiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiZmllbGREYXRhIiwidmlzaWJpbGl0eUJpbmRpbmdzIiwiaXNWaXNpYmxlIiwiZWRpdE1vZGUiLCJnZXRFZGl0TW9kZSIsImNvbnN0YW50IiwiTGFiZWwiLCJpc0ZpZWxkUmVxdWlyZWQiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJkZXNjcmlwdGlvblBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsInRleHRCaW5kaW5nIiwiZXhwcmVzc2lvbiIsImdldFRleHRCaW5kaW5nIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsIklzVGltZXpvbmUiLCJyZWFkT25seUV4cHJlc3Npb24iLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImNsZWFyYWJsZSIsImlzUHJvcGVydHlDbGVhcmFibGUiLCJlbXB0eVZhbHVlIiwiZ2V0RW1wdHlWYWx1ZUZvclByb3BlcnR5Iiwic2VsZWN0SXRlbXMiLCJnZXREYXRhRm9yT3BlbmluZ0RpYWxvZyIsImFsbCIsImlzRmllbGRWaXNpYmxlIiwicnVudGltZVNlbGVjdGlvbiIsImdldFJ1bnRpbWVTZWxlY3Rpb24iLCJnZXREZWZhdWx0U2VsZWN0T3B0aW9ucyIsImdlbmVyYXRlRmllbGRzUHJvcGVydGllcyIsImdlbmVyYXRlRW50aXR5RmllbGRzUHJvcGVydGllcyIsIm1pc3NpbmdDb250ZXh0cyIsImJpbmRpbmdzVG9GZXRjaCIsImNvbmNhdCIsInBhdGhJbk1vZGVsIiwiZ2V0TWlzc2luZ0RhdGEiLCJiaW5kaW5nc1RvUmVzb2x2ZSIsImJpbmRpbmdzIiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiZGlzcGxheWVkUHJvcGVydGllcyIsImV2ZXJ5IiwicHJvbWlzZXMiLCJjb250cm9scyIsIm1vZGVsIiwiYmluZGluZyIsImZpbHRlciIsInN0YXJ0c1dpdGgiLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1R5cGUiLCJjb250cm9sQmluZGluZyIsInNldEJpbmRpbmdNb2RlIiwiQmluZGluZ01vZGUiLCJPbmVUaW1lIiwiaXNBIiwiZ2V0QmluZGluZ3MiLCJuZXN0ZWRCaW5kaW5nIiwicmVxdWVzdFZhbHVlIiwicHJvbWlzZSIsInByb3BlcnR5IiwibnVsbGFibGUiLCJhbnkiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwidmFsdWUiLCJnZXRCaW5kaW5nSW5mbyIsImdldFR5cGUiLCJwYXJzZVZhbHVlIiwiZGlzdGluY3RNYXAiLCJzZWxlY3RPcHRpb25zIiwiYW55VGV4dCIsInNlbGVjdGVkQ29udGV4dCIsInByb3BlcnR5VGV4dCIsImhhcyIsImFkZCIsInRleHQiLCJ1bml0T3JDdXJyZW5jeVZhbHVlIiwiZ2V0T2JqZWN0IiwicHJvcGVydHlWYWx1ZSIsImtlZXBFbnRyeSIsIlNwZWNpZmljU2VsZWN0S2V5cyIsIktlZXBLZXkiLCJkZWZhdWx0T3B0aW9ucyIsIlJlcGxhY2VLZXkiLCJDbGVhckZpZWxkVmFsdWVLZXkiLCJnZXRGaWVsZEVkaXRhYmxlIiwiRmllbGRFZGl0TW9kZSIsIkVkaXRhYmxlIiwiT2JqZWN0Iiwia2V5cyIsImFueUNvbnRyb2wiLCJkYXRhRmllbGRDb252ZXJ0ZWQiLCJkYXRhTW9kZWxQYXRoIiwiZWRpdFN0eWxlUHJvcGVydGllcyIsInNldEVkaXRTdHlsZVByb3BlcnRpZXMiLCJlZGl0U3R5bGUiLCJpc1N0YXRpY0VkaXRNb2RlIiwiaXNFZGl0YWJsZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWFzc0VkaXREaWFsb2dIZWxwZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFGaWVsZCwgRGF0YUZpZWxkRm9yQWN0aW9uLCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uLCBIZWFkZXJJbmZvIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBBbnkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0IHsgY29udmVydE1ldGFNb2RlbENvbnRleHQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNYXNzRWRpdFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCxcblx0aGFzVmFsdWVIZWxwXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRFZGl0TW9kZSwgZ2V0UmVxdWlyZWRFeHByZXNzaW9uLCBpc011bHRpVmFsdWVGaWVsZCwgaXNWaXNpYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBnZXRUZXh0QmluZGluZywgc2V0RWRpdFN0eWxlUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEJsb2NrUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCBCaW5kaW5nTW9kZSBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdNb2RlXCI7XG5pbXBvcnQgdHlwZSBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgTWFzc0VkaXREaWFsb2cgZnJvbSBcIi4vTWFzc0VkaXREaWFsb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ0luZm8sIE1hc3NGaWVsZFByb3BlcnRpZXMsIFNlbGVjdEluZm8gfSBmcm9tIFwiLi9saWJyYXJ5XCI7XG5pbXBvcnQgeyBTcGVjaWZpY1NlbGVjdEtleXMgfSBmcm9tIFwiLi9saWJyYXJ5XCI7XG5cbnR5cGUgRGF0YUZpZWxkVHlwZXMgPSBEYXRhRmllbGQgfCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHwgRGF0YUZpZWxkRm9yQWN0aW9uO1xudHlwZSBGaWVsZEluZm8gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRwcm9wZXJ0eURhdGFNb2RlbDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cdHRhcmdldFByb3BlcnR5OiBQcm9wZXJ0eTtcblx0bGFiZWw6IHN0cmluZztcblx0Y29udmVydGVkQW5ub3RhdGlvbjogRGF0YUZpZWxkVHlwZXM7XG59O1xuXG50eXBlIEJpbmRpbmdUb0ZldGNoID0gQmluZGluZ0luZm8gJiB7IGNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXSB9O1xuXG4vKipcbiAqIERpc3BsYXkgdGhlIG1hc3NFZGl0IGRpYWxvZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFzc0VkaXREaWFsb2dIZWxwZXIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHRhYmxlOiBUYWJsZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG9uQ29udGV4dE1lbnU6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSByZWFkb25seSBvbkRpYWxvZ0Nsb3NlOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSByZWFkb25seSB2aWV3OiBGRVZpZXc7XG5cblx0cHJpdmF0ZSByZWFkb25seSBtYXhBbmFseXplZFJvd3MgPSAzMDtcblxuXHRwcml2YXRlIGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYW5hbHl6ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgZGVncmFkZWRNb2RlOiBib29sZWFuO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWFuaWZlc3RTZXR0aW5nczogTWFzc0VkaXRUYWJsZUNvbmZpZ3VyYXRpb247XG5cblx0cHJpdmF0ZSBmaWVsZFByb3BlcnRpZXM6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgaXNBZGFwdGF0aW9uOiBib29sZWFuO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgaGVhZGVySW5mbzogSGVhZGVySW5mbyB8IHVuZGVmaW5lZDtcblxuXHRtYXNzRWRpdERpYWxvZzogTWFzc0VkaXREaWFsb2cgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IocHJvcHM6IHsgdGFibGU6IFRhYmxlOyBvbkNvbnRleHRNZW51OiBib29sZWFuOyBvbkNsb3NlPzogKCkgPT4gdm9pZCB9KSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSAocHJvcHMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmFubm90YXRpb24uY29sbGVjdGlvbixcblx0XHRcdG1ldGFNb2RlbCA9IChwcm9wcy50YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXG5cdFx0dGhpcy50YWJsZSA9IHByb3BzLnRhYmxlO1xuXHRcdHRoaXMubWFuaWZlc3RTZXR0aW5ncyA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLm1hc3NFZGl0O1xuXHRcdHRoaXMub25Db250ZXh0TWVudSA9IHByb3BzLm9uQ29udGV4dE1lbnU7XG5cdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlID0gcHJvcHMub25DbG9zZTtcblx0XHR0aGlzLnZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMudGFibGUpO1xuXHRcdHRoaXMuY29udGV4dHMgPSB0aGlzLmZldGNoQ29udGV4dHNGb3JFZGl0KCk7XG5cdFx0dGhpcy5kZWdyYWRlZE1vZGUgPSB0aGlzLmNvbnRleHRzLmxlbmd0aCA+IHRoaXMubWF4QW5hbHl6ZWRSb3dzO1xuXHRcdHRoaXMuYW5hbHl6ZWRDb250ZXh0cyA9IHRoaXMuZGVncmFkZWRNb2RlID8gdGhpcy5jb250ZXh0cy5zbGljZSgwLCB0aGlzLm1heEFuYWx5emVkUm93cykgOiB0aGlzLmNvbnRleHRzO1xuXHRcdHRoaXMuaXNBZGFwdGF0aW9uID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMudGFibGUpLmlzQWRhcHRhdGlvbk1vZGUoKTtcblx0XHR0aGlzLmhlYWRlckluZm8gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQoZW50aXR5VHlwZVBhdGgpKS50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBtYXNzIGVkaXQgZGlhbG9nIGlmIGFsbCBzZWxlY3RlZCBjb250ZXh0cyBhcmUgZWRpdGFibGUsXG5cdCAqIG90aGVyd2lzZSBhIG1lc3NhZ2UgYm94IHRvIGNvbmZpcm0gdGhlIHNlbGVjdGlvbi5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb24gb3BlbiBvZiB0aGUgbWFzcyBlZGl0IGRpYWxvZy5cblx0ICovXG5cdGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMudmlldykgYXMgVGVtcGxhdGVDb21wb25lbnQ7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMudGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0aW50ZXJuYWxNb2RlbFByb3BlcnR5ID0gIXRoaXMub25Db250ZXh0TWVudSA/IFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoaW50ZXJuYWxNb2RlbFByb3BlcnR5KSB8fCAwO1xuXHRcdFx0dGhpcy5maWVsZFByb3BlcnRpZXMgPSBhd2FpdCB0aGlzLmdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyh0aGlzLmdldEZpZWxkc0luZm8oKSk7XG5cdFx0XHRpZiAoIXRoaXMuaXNBZGFwdGF0aW9uKSB7XG5cdFx0XHRcdC8vIG5vIGZpZWxkIHRvIGVkaXRcblx0XHRcdFx0aWYgKCF0aGlzLmZpZWxkUHJvcGVydGllcy5zb21lKChmaWVsZCkgPT4gZmllbGQudmlzaWJsZSkpIHtcblx0XHRcdFx0XHR0aGlzLm5vRmllbGRJbmZvcm1hdGlvbigpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL1NvbWUgcm93cyBhcmUgbm90IGVkaXRhYmxlIC0+IGRvIHdlIHdhbnQgdG8gY29udGludWU/XG5cdFx0XHRcdGlmICh0aGlzLmNvbnRleHRzLmxlbmd0aCAhPT0gc2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRcdHRoaXMuY29udGV4dHMgPSBhd2FpdCB0aGlzLmNvbmZpcm1TZWxlY3Rpb24odGhpcy5jb250ZXh0cywgc2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gdGhlIHVzZXIgZG9lc24ndCB3YW50IHRvIGNvbnRpbnVlXG5cdFx0XHRcdFx0XHR0aGlzLm9uRGlhbG9nQ2xvc2U/LigpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YXdhaXQgdGVtcGxhdGVDb21wb25lbnQucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHRoaXMubWFzc0VkaXREaWFsb2cgPSBuZXcgTWFzc0VkaXREaWFsb2coe1xuXHRcdFx0XHRcdHRhYmxlOiB0aGlzLnRhYmxlLFxuXHRcdFx0XHRcdGNvbnRleHRzOiB0aGlzLmNvbnRleHRzLFxuXHRcdFx0XHRcdGZpZWxkUHJvcGVydGllczogdGhpcy5maWVsZFByb3BlcnRpZXNcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IGRpYWxvZyA9IGF3YWl0IHRoaXMubWFzc0VkaXREaWFsb2cuY3JlYXRlKCk7XG5cdFx0XHRcdGRpYWxvZy5hdHRhY2hCZWZvcmVDbG9zZSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlPy4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGRpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdGNvbnN0IHJlcXVpcmVkRGF0YVByb21pc2UgPSB0aGlzLm1hc3NFZGl0RGlhbG9nLmdldFJlcXVpcmVkRGF0YVByb21pc2UoKTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmdldERhdGFBZnRlck9wZW5pbmdEaWFsb2codGhpcy5maWVsZFByb3BlcnRpZXMpO1xuXHRcdFx0XHRcdHJlcXVpcmVkRGF0YVByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIk1hc3MgRWRpdDogU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gbWFzcyBlZGl0IGRpYWxvZyB0byBnZXQgcmVxdWlyZWQgZGF0YS5cIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRyZXF1aXJlZERhdGFQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiTWFzcyBFZGl0OiBTb21ldGhpbmcgd2VudCB3cm9uZyBpbiBtYXNzIGVkaXQgZGlhbG9nIGNyZWF0aW9uLlwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgbWVzc2FnZSBib3ggdG8gbm90aWZ5IG5vIGZpZWxkcyBhcmUgZWRpdGFibGUuXG5cdCAqL1xuXHRwcml2YXRlIG5vRmllbGRJbmZvcm1hdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCB2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0ID0gKHRoaXMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wubWFzc0VkaXQudmlzaWJsZUZpZWxkcztcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdGxldCBtZXNzYWdlID0gXCJcIixcblx0XHRcdG1lc3NhZ2VEZXRhaWw7XG5cdFx0aWYgKHZpc2libGVGaWVsZHNGcm9tTWFuaWZlc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0bWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19FRElUQUJMRV9GSUVMRFNfV0lUSF9NQU5JRkVTVFwiLCBbXG5cdFx0XHRcdHRoaXMuZ2V0UmVzb3VyY2VUZXh0KHRoaXMuaGVhZGVySW5mbz8uVHlwZU5hbWUpID8/IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9ESUFMT0dfREVGQVVMVF9UWVBFTkFNRVwiKVxuXHRcdFx0XSk7XG5cdFx0XHRtZXNzYWdlRGV0YWlsID0gYDx1bD5cblx0XHRcdCR7dGhpcy5maWVsZFByb3BlcnRpZXNcblx0XHRcdFx0LnJlZHVjZSgoZmllbGRzOiBzdHJpbmdbXSwgZmllbGRQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0LmluY2x1ZGVzKGZpZWxkUHJvcGVydHkucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aCkpIHtcblx0XHRcdFx0XHRcdGZpZWxkcy5wdXNoKGA8bGk+JHtmaWVsZFByb3BlcnR5LmxhYmVsfTwvbGk+YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBmaWVsZHM7XG5cdFx0XHRcdH0sIFtdKVxuXHRcdFx0XHQuam9pbihcIlwiKX0gPC91bD5gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX05PX0VESVRBQkxFX0ZJRUxEU19ERUZBVUxUXCIpO1xuXHRcdH1cblxuXHRcdE1lc3NhZ2VCb3guaW5mb3JtYXRpb24obWVzc2FnZSwge1xuXHRcdFx0ZGV0YWlsczogbWVzc2FnZURldGFpbCxcblx0XHRcdG9uQ2xvc2U6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlPy4oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZyB0byB2YWxpZGF0ZSB0aGUgc2VsZWN0ZWQgY29udGV4dHMuXG5cdCAqIEBwYXJhbSBjb250ZXh0cyBUaGUgY29udGV4dHMgc2V0IGFzIHVwZGF0YWJsZVxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0cyAgVGhlIG51bWJlciBvZiBzZWxlY3RlZCBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0aGUgY29udGV4dHMgdG8gYmUgZmluYWxseSBtYW5hZ2VkLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjb25maXJtU2VsZWN0aW9uKGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLCBzZWxlY3RlZENvbnRleHRzOiBudW1iZXIpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0W10+IHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdGNvbnN0IGNvcmVSZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblxuXHRcdGNvbnN0IHVwZGF0YWJsZUNvbnRleHRzID0gY29udGV4dHMubGVuZ3RoO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRjb25zdCBlZGl0QnV0dG9uID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fQlVUVE9OX1RFWFRcIiksXG5cdFx0XHRcdFx0Y2FuY2VsQnV0dG9uID0gY29yZVJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9DQU5DRUxcIiksXG5cdFx0XHRcdFx0bWV0YU1vZGVsID0gKHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHR0eXBlTmFtZSA9XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJlc291cmNlVGV4dCh0aGlzLmhlYWRlckluZm8/LlR5cGVOYW1lKSA/PyByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfRElBTE9HX0RFRkFVTFRfVFlQRU5BTUVcIiksXG5cdFx0XHRcdFx0dHlwZU5hbWVQbHVyYWwgPVxuXHRcdFx0XHRcdFx0dGhpcy5nZXRSZXNvdXJjZVRleHQodGhpcy5oZWFkZXJJbmZvPy5UeXBlTmFtZVBsdXJhbCkgPz9cblx0XHRcdFx0XHRcdHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9ESUFMT0dfREVGQVVMVF9UWVBFTkFNRV9QTFVSQUxcIiksXG5cdFx0XHRcdFx0bWVzc2FnZURldGFpbCA9XG5cdFx0XHRcdFx0XHRNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgdGhpcy50YWJsZS5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikpICYmIHRhYmxlQVBJLnJlYWRPbmx5XG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5nZXRNZXNzYWdlRGV0YWlsRm9yTm9uRWRpdGFibGUodHlwZU5hbWUsIHR5cGVOYW1lUGx1cmFsKVxuXHRcdFx0XHRcdFx0XHQ6IFwiXCI7XG5cblx0XHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKFxuXHRcdFx0XHRcdHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VcIiwgW1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyAtIHVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRcdHVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0dHlwZU5hbWVQbHVyYWxcblx0XHRcdFx0XHRdKSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRkZXRhaWxzOiBtZXNzYWdlRGV0YWlsLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW2VkaXRCdXR0b24sIGNhbmNlbEJ1dHRvbl0sXG5cdFx0XHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiBlZGl0QnV0dG9uLFxuXHRcdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24gKHNlbGVjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoc2VsZWN0aW9uID09PSBlZGl0QnV0dG9uID8gY29udGV4dHMgOiBbXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdGV4dCBhY2NvcmRpbmcgdG8gYW4gYW5ub3RhdGlvbi5cblx0ICogQHBhcmFtIGFubm90YXRpb24gVGhlIGFubm90YXRpb25cblx0ICogQHJldHVybnMgVGhlIHRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdldFJlc291cmNlVGV4dChhbm5vdGF0aW9uOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWFubm90YXRpb24pIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKFxuXHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFubm90YXRpb24pKSBhcyBzdHJpbmcsXG5cdFx0XHR0aGlzLnZpZXdcblx0XHQpPy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1lc3NhZ2UgZGV0YWlsIG9mIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLlxuXHQgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIHR5cGUgbmFtZSBvZiB0aGUgZW50aXR5IHNldFxuXHQgKiBAcGFyYW0gdHlwZU5hbWVQbHVyYWwgVGhlIHR5cGUgbmFtZSBwbHVyYWwgb2YgdGhlIGVudGl0eSBzZXRcblx0ICogQHJldHVybnMgVGhlIHRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSh0eXBlTmFtZTogc3RyaW5nLCB0eXBlTmFtZVBsdXJhbDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdHJldHVybiBgPHA+PHN0cm9uZz4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX0hFQURFUlwiKX08L3N0cm9uZz48L3A+XFxuXG5cdFx0XHQ8cD4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTlwiLCBbdHlwZU5hbWVQbHVyYWxdKX08L3A+XFxuXG5cdFx0XHQ8dWw+XG5cdFx0XHRcdDxsaT4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTl9EUkFGVFwiLCBbdHlwZU5hbWVdKX08L2xpPlxuXHRcdFx0XHQ8bGk+JHtyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9NRVNTQUdFX0RFVEFJTF9SRUFTT05fTk9OX0VESVRBQkxFXCIsIFt0eXBlTmFtZV0pfTwvbGk+XG5cdFx0XHQ8L3VsPmA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW50aXR5IHdoaWNoIGlzIGNvbXBsaWFudCBmb3IgYSBNYXNzIEVkaXQuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHRoZSBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cblx0cHJpdmF0ZSBnZXRFbnRpdHlGaWVsZHNJbmZvKCk6IEZpZWxkSW5mb1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29sdW1uc0RhdGEgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXG5cdFx0Y29uc3QgcHJvcGVydGllc0tleXMgPSBuZXcgU2V0KFxuXHRcdFx0Y29sdW1uc0RhdGEucmVkdWNlKChmaWVsZHM6IHN0cmluZ1tdLCBjb2x1bW4pID0+IHtcblx0XHRcdFx0aWYgKGNvbHVtbi50eXBlID09PSBcIkFubm90YXRpb25cIikge1xuXHRcdFx0XHRcdGZpZWxkcy5wdXNoKGNvbHVtbi5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdFx0fSwgW10pXG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1QYXRoc1RvSW5mbyhwcm9wZXJ0aWVzS2V5cyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvcGVydGllcyBvZiB0aGUgdGFibGUgd2hpY2ggYXJlIGNvbXBsaWFudCBmb3IgYSBNYXNzIEVkaXQuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHRoZSBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRzSW5mbygpOiBGaWVsZEluZm9bXSB7XG5cdFx0Y29uc3QgcHJvcGVydGllc0tleXMgPVxuXHRcdFx0dGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoID4gMFxuXHRcdFx0XHQ/IG5ldyBTZXQodGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMpXG5cdFx0XHRcdDogbmV3IFNldCh0aGlzLnRhYmxlLmdldENvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpKTtcblxuXHRcdGlmICh0aGlzLm1hbmlmZXN0U2V0dGluZ3MuaWdub3JlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGlnbm9yZWRGaWVsZCBvZiB0aGlzLm1hbmlmZXN0U2V0dGluZ3MuaWdub3JlZEZpZWxkcykge1xuXHRcdFx0XHRwcm9wZXJ0aWVzS2V5cy5kZWxldGUoaWdub3JlZEZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNmb3JtUGF0aHNUb0luZm8ocHJvcGVydGllc0tleXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybXMgYSBzZXQgb2YgcHJvcGVydHkgcGF0aHMgdG8gYW4gYXJyYXkgb2YgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzUGF0aHMgVGhlIHNldCBvZiBwcm9wZXJ0eSBwYXRoc1xuXHQgKiBAcmV0dXJucyBBcnJheSBvZiB0aGUgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIHRyYW5zZm9ybVBhdGhzVG9JbmZvKHByb3BlcnRpZXNQYXRoczogU2V0PHN0cmluZz4pOiBGaWVsZEluZm9bXSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllc1BhdGhzKS5yZWR1Y2UoKGNvbHVtbkluZm9zOiBGaWVsZEluZm9bXSwgcHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRGaWVsZEluZm8ocHJvcGVydHlQYXRoKTtcblx0XHRcdGlmIChjb2x1bW5JbmZvKSB7XG5cdFx0XHRcdGNvbHVtbkluZm9zLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29sdW1uSW5mb3M7XG5cdFx0fSwgW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aFxuXHQgKiBAcmV0dXJucyBGaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRJbmZvKHByb3BlcnR5UGF0aDogc3RyaW5nKTogRmllbGRJbmZvIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb2x1bW5zRGF0YSA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0aGlzLnRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0aGlzLnRhYmxlLmRhdGEoXCJtZXRhUGF0aFwiKSk7XG5cdFx0Y29uc3QgZW50aXR5U2V0RGF0YU1vZGVsID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpKTtcblx0XHRjb25zdCByZWxhdGVkQ29sdW1uSW5mbyA9IGNvbHVtbnNEYXRhLmZpbmQoKGZpZWxkSW5mbykgPT4gZmllbGRJbmZvLm5hbWUgPT09IHByb3BlcnR5UGF0aCAmJiBmaWVsZEluZm8udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCIpO1xuXHRcdGlmIChyZWxhdGVkQ29sdW1uSW5mbykge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSAocmVsYXRlZENvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdGlmIChhbm5vdGF0aW9uUGF0aCAmJiBwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWwgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZW50aXR5U2V0RGF0YU1vZGVsLCBwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZWRBbm5vdGF0aW9uID0gY29udmVydE1ldGFNb2RlbENvbnRleHQobWV0YU1vZGVsLmdldENvbnRleHQoYW5ub3RhdGlvblBhdGgpKSBhc1xuXHRcdFx0XHRcdHwgRGF0YUZpZWxkXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBY3Rpb247XG5cdFx0XHRcdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gdGhpcy5nZXRDb21wbGlhbnRQcm9wZXJ0eShwcm9wZXJ0eURhdGFNb2RlbCwgY29udmVydGVkQW5ub3RhdGlvbik7XG5cdFx0XHRcdGlmICh0YXJnZXRQcm9wZXJ0eSAmJiBlbnRpdHlTZXREYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmluY2x1ZGVzKHRhcmdldFByb3BlcnR5KSlcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0a2V5OiByZWxhdGVkQ29sdW1uSW5mby5rZXksXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eURhdGFNb2RlbCxcblx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0bGFiZWw6IHJlbGF0ZWRDb2x1bW5JbmZvLmxhYmVsID8/IHJlbGF0ZWRDb2x1bW5JbmZvLmtleSxcblx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb25cblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgb24gdGhlIERpYWxvZy5cblx0ICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBjb2x1bW5cblx0ICogQHBhcmFtIGFubm90YXRpb24gIFRoZSBjb252ZXJ0ZWQgYW5ub3RhdGlvbiBvZiB0aGUgY29sdW1uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBpZiBpdCBpcyBjb21wbGlhbnQsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgZ2V0Q29tcGxpYW50UHJvcGVydHkocHJvcGVydHlEYXRhTW9kZWw6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBhbm5vdGF0aW9uOiBEYXRhRmllbGRUeXBlcyk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSBwcm9wZXJ0eURhdGFNb2RlbC50YXJnZXRPYmplY3Q7XG5cdFx0bGV0IHRhcmdldFByb3BlcnR5OiBQcm9wZXJ0eTtcblx0XHRpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHR0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldE9iamVjdDtcblx0XHRcdGlmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnMuVUk/LklzSW1hZ2VVUkwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhhbm5vdGF0aW9uKSAmJiAhYW5ub3RhdGlvbi5oYXNPd25Qcm9wZXJ0eShcIkFjdGlvblwiKSkge1xuXHRcdFx0dGFyZ2V0UHJvcGVydHkgPSBhbm5vdGF0aW9uLlZhbHVlLiR0YXJnZXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgZmllbGQgaXMgY29tcGxpYW50IGZvciB0aGUgTWFzc0VkaXRcblx0XHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHRhcmdldFByb3BlcnR5KTtcblx0XHRpZiAoXG5cdFx0XHRpc011bHRpVmFsdWVGaWVsZChwcm9wZXJ0eURhdGFNb2RlbCkgfHxcblx0XHRcdChoYXNWYWx1ZUhlbHAodGFyZ2V0UHJvcGVydHkpICYmIHRhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycykgfHwgLy8gY29udGV4dCBkZXBlbmRlbnQgVkggaXMgbm90IHN1cHBvcnRlZCBmb3IgTWFzcyBFZGl0LlxuXHRcdFx0KHVuaXRQcm9wZXJ0eSAmJiBoYXNWYWx1ZUhlbHAodW5pdFByb3BlcnR5KSAmJiB1bml0UHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0UHJvcGVydHk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBpcyBoaWRkZW4gZm9yIHRoZSBwcm92aWRlZCBjb250ZXh0cy5cblx0ICogQHBhcmFtIGV4cEJpbmRpbmcgVGhlIGV4cHJlc3Npb24gYmluZGluZyBvZiB0aGUgcHJvcGVydHkuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGlzIGhpZGRlbiBmb3IgYWxsIGNvbnRleHRzLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgaXNIaWRkZW5Gb3JDb250ZXh0cyhleHBCaW5kaW5nOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChleHBCaW5kaW5nID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoZXhwQmluZGluZyA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYW55T2JqZWN0ID0gbmV3IEFueSh7IGFueUJvb2xlYW46IGV4cEJpbmRpbmcgfSk7XG5cdFx0YW55T2JqZWN0LnNldE1vZGVsKHRoaXMuYW5hbHl6ZWRDb250ZXh0c1swXS5nZXRNb2RlbCgpKTtcblx0XHRjb25zdCBpc0hpZGRlbiA9ICF0aGlzLmFuYWx5emVkQ29udGV4dHMuZmluZCgoY29udGV4dCkgPT4ge1xuXHRcdFx0YW55T2JqZWN0LnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0cmV0dXJuIChhbnlPYmplY3QuZ2V0QmluZGluZyhcImFueUJvb2xlYW5cIikgYXMgUHJvcGVydHlCaW5kaW5nKS5nZXRFeHRlcm5hbFZhbHVlKCk7XG5cdFx0fSk7XG5cdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHRyZXR1cm4gaXNIaWRkZW47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2VsZWN0ZWQgY29udGV4dCBzZXQgYXMgdXBkYXRhYmxlLlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGV4dHMuXG5cdCAqL1xuXHRwcml2YXRlIGZldGNoQ29udGV4dHNGb3JFZGl0KCk6IE9EYXRhVjRDb250ZXh0W10ge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy50YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLFxuXHRcdFx0dXBkYXRhYmxlQ29udGV4dFByb3BlcnR5ID0gIXRoaXMub25Db250ZXh0TWVudSA/IFwidXBkYXRhYmxlQ29udGV4dHNcIiA6IFwiY29udGV4dG1lbnUvdXBkYXRhYmxlQ29udGV4dHNcIjtcblx0XHRyZXR1cm4gaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KHVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSkgPz8gW107XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkcy5cblx0ICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIG1hc3MgZWRpdCBmaWVsZC5cblx0ICovXG5cdGdldEZpZWxkUHJvcGVydGllcygpOiBNYXNzRmllbGRQcm9wZXJ0aWVzW10ge1xuXHRcdHJldHVybiBkZWVwQ2xvbmUodGhpcy5maWVsZFByb3BlcnRpZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG1hc3MgZWRpdCBmaWVsZHMgZnJvbSBhbiBhcnJheSBvZiBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICogQHBhcmFtIGZpZWxkc0luZm8gVGhlIGZpZWxkIGluZm9ybWF0aW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkcy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0RmllbGRzUHJvcGVydGllc0Zyb21JbmZvKGZpZWxkc0luZm86IEZpZWxkSW5mb1tdKTogUHJvbWlzZTxNYXNzRmllbGRQcm9wZXJ0aWVzW10+IHtcblx0XHRjb25zdCBmaWVsZFByb3BlcnRpZXM6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBmaWVsZEluZm8gb2YgZmllbGRzSW5mbykge1xuXHRcdFx0Y29uc3QgeyB0YXJnZXRQcm9wZXJ0eSwgcHJvcGVydHlEYXRhTW9kZWwsIGNvbnZlcnRlZEFubm90YXRpb24gfSA9IGZpZWxkSW5mbztcblx0XHRcdGNvbnN0IGRhdGFQcm9wZXJ0eVBhdGggPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByb3BlcnR5RGF0YU1vZGVsKTtcblx0XHRcdGlmIChkYXRhUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IHVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoID1cblx0XHRcdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSkgfHwgZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KTtcblx0XHRcdFx0Y29uc3QgaW5wdXRUeXBlID0gdGhpcy5nZXRJbnB1dFR5cGUoY29udmVydGVkQW5ub3RhdGlvbiwgcHJvcGVydHlEYXRhTW9kZWwpO1xuXHRcdFx0XHRpZiAoaW5wdXRUeXBlICYmIHByb3BlcnR5RGF0YU1vZGVsLnRhcmdldE9iamVjdCkge1xuXHRcdFx0XHRcdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMocHJvcGVydHlEYXRhTW9kZWwpO1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkRGF0YSA9IHtcblx0XHRcdFx0XHRcdHZpc2liaWxpdHlCaW5kaW5nczoge1xuXHRcdFx0XHRcdFx0XHRpc1Zpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZShjb252ZXJ0ZWRBbm5vdGF0aW9uKSksXG5cdFx0XHRcdFx0XHRcdGVkaXRNb2RlOiBnZXRFZGl0TW9kZShcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eURhdGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRBbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0YW50KHRydWUpXG5cdFx0XHRcdFx0XHRcdCkgYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLCAvL2J5IGRlZmF1bHQgdGhlIGZpZWxkIGlzIHZpc2libGVcblx0XHRcdFx0XHRcdGxhYmVsOiBmaWVsZEluZm8ubGFiZWwgfHwgKHRhcmdldFByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWwgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSB8fCBkYXRhUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0aXNGaWVsZFJlcXVpcmVkOiBnZXRSZXF1aXJlZEV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRBbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5RGF0YU1vZGVsXG5cdFx0XHRcdFx0XHQpIGFzIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb25QYXRoOiBnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChwcm9wZXJ0eURhdGFNb2RlbC50YXJnZXRPYmplY3QpLFxuXHRcdFx0XHRcdFx0dGV4dEJpbmRpbmc6IHtcblx0XHRcdFx0XHRcdFx0ZXhwcmVzc2lvbjogZ2V0VGV4dEJpbmRpbmcocHJvcGVydHlEYXRhTW9kZWwsIHtcblx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5TW9kZTogZ2V0RGlzcGxheU1vZGUodGFyZ2V0UHJvcGVydHksIHByb3BlcnR5RGF0YU1vZGVsKVxuXHRcdFx0XHRcdFx0XHR9KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0XHRcdFx0XHRcdFx0dHlwZTpcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRQcm9wZXJ0eS50eXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8IHRhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc1RpbWV6b25lXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IFwiYW55VGV4dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IFwiYW55XCJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyZWFkT25seUV4cHJlc3Npb246IGlzUmVhZE9ubHlFeHByZXNzaW9uKHRhcmdldFByb3BlcnR5LCByZWxhdGl2ZVBhdGgpLFxuXHRcdFx0XHRcdFx0aW5wdXRUeXBlLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdGNsZWFyYWJsZTogdGhpcy5pc1Byb3BlcnR5Q2xlYXJhYmxlKHRhcmdldFByb3BlcnR5KSxcblx0XHRcdFx0XHRcdFx0ZW1wdHlWYWx1ZTogdGhpcy5nZXRFbXB0eVZhbHVlRm9yUHJvcGVydHkodGFyZ2V0UHJvcGVydHksIGRhdGFQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGZpZWxkSW5mby5rZXksXG5cdFx0XHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogZGF0YVByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdFx0dW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGhcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRzZWxlY3RJdGVtczogW10gYXMgU2VsZWN0SW5mb1tdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRmaWVsZFByb3BlcnRpZXMucHVzaChmaWVsZERhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuZ2V0RGF0YUZvck9wZW5pbmdEaWFsb2coZmllbGRQcm9wZXJ0aWVzKTtcblx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdGZpZWxkUHJvcGVydGllcy5tYXAoYXN5bmMgKGZpZWxkRGF0YSkgPT4ge1xuXHRcdFx0XHRmaWVsZERhdGEudmlzaWJsZSA9IHRoaXMubWFuaWZlc3RTZXR0aW5ncy52aXNpYmxlRmllbGRzLmxlbmd0aCA9PT0gMCA/IHRoaXMuaXNGaWVsZFZpc2libGUoZmllbGREYXRhKSA6IHRydWU7XG5cdFx0XHRcdGNvbnN0IHJ1bnRpbWVTZWxlY3Rpb24gPSAhdGhpcy5pc0FkYXB0YXRpb24gPyBhd2FpdCB0aGlzLmdldFJ1bnRpbWVTZWxlY3Rpb24oZmllbGREYXRhKSA6IFtdO1xuXHRcdFx0XHRmaWVsZERhdGEuc2VsZWN0SXRlbXMgPSBbLi4udGhpcy5nZXREZWZhdWx0U2VsZWN0T3B0aW9ucyhmaWVsZERhdGEpLCAuLi5ydW50aW1lU2VsZWN0aW9uXTtcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRyZXR1cm4gZmllbGRQcm9wZXJ0aWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgZGlhbG9nIGZpZWxkcy5cblx0ICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMuXG5cdCAqL1xuXHRhc3luYyBnZW5lcmF0ZUZpZWxkc1Byb3BlcnRpZXMoKTogUHJvbWlzZTxNYXNzRmllbGRQcm9wZXJ0aWVzW10+IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRGaWVsZHNQcm9wZXJ0aWVzRnJvbUluZm8odGhpcy5nZXRGaWVsZHNJbmZvKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGVudGl0eS5cblx0ICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMuXG5cdCAqL1xuXHRhc3luYyBnZW5lcmF0ZUVudGl0eUZpZWxkc1Byb3BlcnRpZXMoKTogUHJvbWlzZTxNYXNzRmllbGRQcm9wZXJ0aWVzW10+IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRGaWVsZHNQcm9wZXJ0aWVzRnJvbUluZm8odGhpcy5nZXRFbnRpdHlGaWVsZHNJbmZvKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJlbGV2YW50IGRhdGEgZnJvbSB0aGUgbW9kZWwgbmVlZGVkIGFmdGVyIHRoZSBvcGVuaW5nIG9mIHRoZSBkaWFsb2cuXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmx5IGluIHRoZSBkZWdyYWRlZCBtb2RlIHNpbmNlIHRoZSBkYXRhIGlzIGFscmVhZHkgZmV0Y2hlZCBpbiB0aGUgbm9ybWFsIG1vZGUuXG5cdCAqIHRoZSBkZWdyYWRlZCBtb2RlIGlzIHNldCB3aGVuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgY29udGV4dHMgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXggYW5hbHl6ZWQgcm93cy5cblx0ICogQHBhcmFtIGZpZWxkUHJvcGVydGllcyBUaGUgZmllbGQgcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBkYXRhIGlzIGZldGNoZWQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldERhdGFBZnRlck9wZW5pbmdEaWFsb2coZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5kZWdyYWRlZE1vZGUpIHtcblx0XHRcdGNvbnN0IG1pc3NpbmdDb250ZXh0cyA9IHRoaXMuY29udGV4dHMuc2xpY2UodGhpcy5tYXhBbmFseXplZFJvd3MsIHRoaXMuY29udGV4dHMubGVuZ3RoKTtcblx0XHRcdGNvbnN0IGJpbmRpbmdzVG9GZXRjaCA9IChbXSBhcyBCaW5kaW5nVG9GZXRjaFtdKS5jb25jYXQoXG5cdFx0XHRcdC4uLmZpZWxkUHJvcGVydGllcy5tYXAoKGZpZWxkRGF0YSkgPT4gW1xuXHRcdFx0XHRcdHsgZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24oZmllbGREYXRhLnJlYWRPbmx5RXhwcmVzc2lvbiksIGNvbnRleHRzOiB0aGlzLmNvbnRleHRzIH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24ocGF0aEluTW9kZWwoZmllbGREYXRhLnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGgpKSxcblx0XHRcdFx0XHRcdGNvbnRleHRzOiBtaXNzaW5nQ29udGV4dHMsXG5cdFx0XHRcdFx0XHR0eXBlOiBmaWVsZERhdGEudGV4dEJpbmRpbmcudHlwZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24ocGF0aEluTW9kZWwoZmllbGREYXRhLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aCkpLFxuXHRcdFx0XHRcdFx0Y29udGV4dHM6IG1pc3NpbmdDb250ZXh0c1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSlcblx0XHRcdCk7XG5cdFx0XHRhd2FpdCB0aGlzLmdldE1pc3NpbmdEYXRhKGJpbmRpbmdzVG9GZXRjaCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJlbGV2YW50IGRhdGEgZnJvbSB0aGUgbW9kZWwgbmVlZGVkIHRvIG9wZW4gdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGZpZWxkUHJvcGVydGllcyBUaGUgZmllbGQgcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBkYXRhIGlzIGZldGNoZWQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldERhdGFGb3JPcGVuaW5nRGlhbG9nKGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYmluZGluZ3NUb1Jlc29sdmUgPSAoW10gYXMgQmluZGluZ1RvRmV0Y2hbXSkuY29uY2F0KFxuXHRcdFx0ZmllbGRQcm9wZXJ0aWVzLnJlZHVjZSgoYmluZGluZ3M6IEJpbmRpbmdUb0ZldGNoW10sIGZpZWxkRGF0YSkgPT4ge1xuXHRcdFx0XHRiaW5kaW5ncyA9IGJpbmRpbmdzLmNvbmNhdChbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvbjogZmllbGREYXRhLnRleHRCaW5kaW5nLmV4cHJlc3Npb24sXG5cdFx0XHRcdFx0XHR0eXBlOiBmaWVsZERhdGEudGV4dEJpbmRpbmcudHlwZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24ocGF0aEluTW9kZWwoZmllbGREYXRhLnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGgpKSxcblx0XHRcdFx0XHRcdHR5cGU6IGZpZWxkRGF0YS50ZXh0QmluZGluZy50eXBlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7IGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGgpKSB9XG5cdFx0XHRcdF0pO1xuXHRcdFx0XHRpZiAoIXRoaXMubWFuaWZlc3RTZXR0aW5ncy52aXNpYmxlRmllbGRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGJpbmRpbmdzID0gYmluZGluZ3MuY29uY2F0KFtcblx0XHRcdFx0XHRcdHsgZXhwcmVzc2lvbjogZmllbGREYXRhLnZpc2liaWxpdHlCaW5kaW5ncy5pc1Zpc2libGUgfSxcblx0XHRcdFx0XHRcdHsgZXhwcmVzc2lvbjogZmllbGREYXRhLnZpc2liaWxpdHlCaW5kaW5ncy5lZGl0TW9kZSB9XG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCF0aGlzLmRlZ3JhZGVkTW9kZSkge1xuXHRcdFx0XHRcdGJpbmRpbmdzLnB1c2goeyBleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihmaWVsZERhdGEucmVhZE9ubHlFeHByZXNzaW9uKSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYmluZGluZ3M7XG5cdFx0XHR9LCBbXSlcblx0XHQpO1xuXHRcdGF3YWl0IHRoaXMuZ2V0TWlzc2luZ0RhdGEoYmluZGluZ3NUb1Jlc29sdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1pc3NpbmcgZGF0YSBmb3IgdGhlIGZpZWxkcy5cblx0ICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGNvbnRyb2xzIHdpdGggdGhlIHByb3ZpZGVkIGJpbmRpbmdzIHRvIGZldGNoIHRoZSBtaXNzaW5nIGRhdGEuXG5cdCAqIFRoZSBtb2RlbCByZXF1ZXN0cyB0aGUgZGF0YSB0byB0aGUgYmFja2VuZCB3aGVuIHRoZSBjb250ZXh0cyBkb2Vzbid0IGNvbnRhaW5zIHRoZSByZWxhdGVkIHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBiaW5kaW5nc1RvRmV0Y2ggVGhlIGJpbmRpbmcgdG8gcmVzb2x2ZSBhbmQgaXRzIHByb3BlcnR5IHBhdGggcmVmZXJlbmNlXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRhdGEgaXMgZmV0Y2hlZC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0TWlzc2luZ0RhdGEoYmluZGluZ3NUb0ZldGNoOiBCaW5kaW5nVG9GZXRjaFtdKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRpZiAodGhpcy5pc0FkYXB0YXRpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMudmlldy5nZXRWaWV3RGF0YSgpLmNvbnZlcnRlclR5cGUgPT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRjb25zdCBkaXNwbGF5ZWRQcm9wZXJ0aWVzID0gdGhpcy50YWJsZS5nZXRDb2x1bW5zKCkubWFwKChjb2x1bW4pID0+IGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpKTtcblx0XHRcdGlmICh0aGlzLm1hbmlmZXN0U2V0dGluZ3MudmlzaWJsZUZpZWxkcy5ldmVyeSgoZmllbGQpID0+IGRpc3BsYXllZFByb3BlcnRpZXMuaW5jbHVkZXMoZmllbGQpKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cdFx0Y29uc3QgY29udHJvbHMgPSBbXTtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuY29udGV4dHNbMF0uZ2V0TW9kZWwoKTtcblx0XHRmb3IgKGNvbnN0IGJpbmRpbmcgb2YgYmluZGluZ3NUb0ZldGNoLmZpbHRlcigoYmluZGluZykgPT4gYmluZGluZy5leHByZXNzaW9uPy5zdGFydHNXaXRoKFwie1wiKSkpIHtcblx0XHRcdC8vIEF2b2lkIHRvIGZldGNoIGNvbnN0YW50IGJpbmRpbmdzXG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0ge30gYXMgUmVjb3JkPHN0cmluZywgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24+O1xuXHRcdFx0Y29uc3QgYW5hbHl6ZWRDb250ZXh0cyA9IGJpbmRpbmcuY29udGV4dHMgPz8gdGhpcy5hbmFseXplZENvbnRleHRzO1xuXHRcdFx0Y29uc3QgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGUgPz8gXCJhbnlcIjtcblx0XHRcdHBhcmFtZXRlcnNbYmluZGluZ1R5cGVdID0gYmluZGluZy5leHByZXNzaW9uO1xuXHRcdFx0Zm9yIChjb25zdCBjb250ZXh0IG9mIGFuYWx5emVkQ29udGV4dHMpIHtcblx0XHRcdFx0Y29uc3QgY29udHJvbCA9IG5ldyBBbnkocGFyYW1ldGVycyk7XG5cdFx0XHRcdGNvbnRyb2wuc2V0TW9kZWwobW9kZWwpO1xuXHRcdFx0XHRjb250cm9sLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRjb250cm9scy5wdXNoKGNvbnRyb2wpO1xuXHRcdFx0XHRwcm9taXNlcy5wdXNoKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sQmluZGluZyA9IGNvbnRyb2wuZ2V0QmluZGluZyhiaW5kaW5nVHlwZSkgYXMgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2xCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sQmluZGluZy5zZXRCaW5kaW5nTW9kZShCaW5kaW5nTW9kZS5PbmVUaW1lKTtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sQmluZGluZy5pc0E8Q29tcG9zaXRlQmluZGluZz4oXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiKSkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChjb250cm9sQmluZGluZy5nZXRCaW5kaW5ncygpLm1hcCgobmVzdGVkQmluZGluZykgPT4gbmVzdGVkQmluZGluZy5yZXF1ZXN0VmFsdWU/LigpKSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBjb250cm9sQmluZGluZy5yZXF1ZXN0VmFsdWU/LigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzLm1hcChhc3luYyAocHJvbWlzZSkgPT4gcHJvbWlzZSgpKSk7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG5cdFx0XHRjb250cm9sLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgd2hlbiB0aGUgcmVsYXRlZCBmaWVsZCBpcyBlbXB0eS5cblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHZhbHVlLlxuXHQgKi9cblx0Z2V0RW1wdHlWYWx1ZUZvclByb3BlcnR5KHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcmltaXRpdmVUeXBlIHtcblx0XHRpZiAocHJvcGVydHkubnVsbGFibGUgIT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dHNbMF07XG5cdFx0XHRjb25zdCBhbnlPYmplY3QgPSBuZXcgQW55KHsgYW55OiBjb21waWxlRXhwcmVzc2lvbihmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHByb3BlcnR5LCBwYXRoSW5Nb2RlbChwcm9wZXJ0eVBhdGgpKSkgfSk7XG5cdFx0XHRhbnlPYmplY3Quc2V0TW9kZWwoY29udGV4dC5nZXRNb2RlbCgpKTtcblx0XHRcdGFueU9iamVjdC5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0KTtcblx0XHRcdGNvbnN0IHZhbHVlID0gYW55T2JqZWN0LmdldEJpbmRpbmdJbmZvKFwiYW55XCIpLmJpbmRpbmcuZ2V0VHlwZSgpLnBhcnNlVmFsdWUoXCJcIiwgXCJzdHJpbmdcIik7XG5cdFx0XHRhbnlPYmplY3QuZGVzdHJveSgpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIHByb3BlcnR5IGlzIGNsZWFyYWJsZS5cblx0ICogU29tZSBPRGF0YSB0eXBlcyBkb24ndCBhY2Nlc3MgZW1wdHkgc3RyaW5nIG9yIDAgYXMgYSB2YWxpZCB2YWx1ZSB3aGVuIGl0J3Mgbm90IG51bGxhYmxlLlxuXHQgKiBGb3IgZXhhbXBsZSwgRWRtLkRhdGVUaW1lIGRvZXNuJ3QgYWNjZXB0IGFuIGVtcHR5IHN0cmluZyBhcyBhIHZhbGlkIHZhbHVlLlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIGNsZWFyYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0aXNQcm9wZXJ0eUNsZWFyYWJsZShwcm9wZXJ0eTogUHJvcGVydHkpOiBQcmltaXRpdmVUeXBlIHtcblx0XHRpZiAocHJvcGVydHkubnVsbGFibGUgIT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuICFbXCJFZG0uRGF0ZVRpbWVcIiwgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiwgXCJFZG0uVGltZU9mRGF5XCIsIFwiRWRtLlRpbWVcIiwgXCJFZG0uRGF0ZVwiLCBcIkVkbS5EYXRlVGltZVdpdGhUaW1lem9uZVwiXS5pbmNsdWRlcyhcblx0XHRcdFx0cHJvcGVydHkudHlwZVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2VsZWN0aW9uIG9wdGlvbnMgb2YgYSBmaWVsZCBnZW5lcmF0ZWQgYnkgdGhlIHNlbGVjdGVkIGNvbnRleHRzLlxuXHQgKiBAcGFyYW0gZmllbGREYXRhIERhdGEgb2YgdGhlIGZpZWxkIHVzZWQgYnkgYm90aCB0aGUgc3RhdGljIGFuZCB0aGUgcnVudGltZSBtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgc2VsZWN0IG9wdGlvbnMgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFJ1bnRpbWVTZWxlY3Rpb24oZmllbGREYXRhOiBNYXNzRmllbGRQcm9wZXJ0aWVzKTogUHJvbWlzZTxTZWxlY3RJbmZvW10+IHtcblx0XHRjb25zdCBkaXN0aW5jdE1hcCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGNvbnN0IHNlbGVjdE9wdGlvbnM6IFNlbGVjdEluZm9bXSA9IFtdO1xuXHRcdGlmIChmaWVsZERhdGEuaW5wdXRUeXBlID09PSBcIkNoZWNrQm94XCIpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0Y29uc3QgYW55T2JqZWN0ID0gbmV3IEFueSh7IGFueVRleHQ6IGZpZWxkRGF0YS50ZXh0QmluZGluZy5leHByZXNzaW9uIH0pO1xuXHRcdGFueU9iamVjdC5zZXRNb2RlbCh0aGlzLmNvbnRleHRzWzBdLmdldE1vZGVsKCkpO1xuXHRcdGZvciAoY29uc3Qgc2VsZWN0ZWRDb250ZXh0IG9mIHRoaXMuYW5hbHl6ZWRDb250ZXh0cykge1xuXHRcdFx0YW55T2JqZWN0LnNldEJpbmRpbmdDb250ZXh0KHNlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRjb25zdCB0ZXh0QmluZGluZyA9IGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55VGV4dFwiKTtcblx0XHRcdGlmICh0ZXh0QmluZGluZz8uaXNBPENvbXBvc2l0ZUJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIikpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRleHQgYmluZGluZyBpcyBhIGNvbXBvc2l0ZSBiaW5kaW5nLCB3ZSBuZWVkIHRvIHJlcXVlc3QgdGhlIHZhbHVlIG9mIGVhY2ggYmluZGluZ1xuXHRcdFx0XHQvLyB0byB3YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSBnZXR0aW5nIHRoZSB2YWx1ZSBvZiByZXF1ZXN0VW5pdHNPZk1lYXN1cmUvcmVxdWVzdEN1cnJlbmN5Q29kZXNcblx0XHRcdFx0Ly8gZm9yIHRoZSBjdXN0b20gdW5pdHMgb2YgbWVhc3VyZSBhbmQgY3VycmVuY3kgY29kZXMuXG5cdFx0XHRcdC8vIFdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIG1vZGUgdG8gT25lVGltZSB0byBhdm9pZCB0aGUgYmluZGluZyB0byBiZSB1cGRhdGVkIHdoZW4gdGhlIGNvbnRleHQgY2hhbmdlcy5cblx0XHRcdFx0Ly8gSW5kZWVkIGV2ZW4gaWYgdGhlIHJlcXVlc3RVbml0c09mTWVhc3VyZS9yZXF1ZXN0Q3VycmVuY3lDb2RlcyBkb2Vzbid0IGNoYW5nZSBpdCdzIHRyaWdnZXIgYSBQQVRDSCByZXF1ZXN0XG5cdFx0XHRcdHRleHRCaW5kaW5nLnNldEJpbmRpbmdNb2RlKEJpbmRpbmdNb2RlLk9uZVRpbWUpO1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbCh0ZXh0QmluZGluZy5nZXRCaW5kaW5ncygpLm1hcCgoYmluZGluZykgPT4gYmluZGluZy5yZXF1ZXN0VmFsdWU/LigpKSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRleHQgPSAoYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlUZXh0XCIpIGFzIFByb3BlcnR5QmluZGluZyB8IHVuZGVmaW5lZCk/LmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHRcdGlmIChwcm9wZXJ0eVRleHQgJiYgIWRpc3RpbmN0TWFwLmhhcyhwcm9wZXJ0eVRleHQpKSB7XG5cdFx0XHRcdGRpc3RpbmN0TWFwLmFkZChwcm9wZXJ0eVRleHQpO1xuXHRcdFx0XHRzZWxlY3RPcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdHRleHQ6IHByb3BlcnR5VGV4dCxcblx0XHRcdFx0XHRrZXk6IHByb3BlcnR5VGV4dCxcblx0XHRcdFx0XHR1bml0T3JDdXJyZW5jeVZhbHVlOiBmaWVsZERhdGEucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHQ/IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoZmllbGREYXRhLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aClcblx0XHRcdFx0XHRcdDogXCJcIixcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlOiBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8ucmVsYXRpdmVQYXRoKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHRyZXR1cm4gc2VsZWN0T3B0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvcHRpb25zIG9mIGEgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZERhdGEgVGhlIHByb3BlcnR5IGluZm9ybWF0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHNlbGVjdCBvcHRpb25zLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXREZWZhdWx0U2VsZWN0T3B0aW9ucyhmaWVsZERhdGE6IE1hc3NGaWVsZFByb3BlcnRpZXMpOiBTZWxlY3RJbmZvW10ge1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0Y29uc3Qga2VlcEVudHJ5ID0ge1xuXHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTUJPQk9YX0tFRVBfVkFMVUVTXCIpLFxuXHRcdFx0a2V5OiBTcGVjaWZpY1NlbGVjdEtleXMuS2VlcEtleVxuXHRcdH07XG5cdFx0Y29uc3QgZGVmYXVsdE9wdGlvbnM6IFNlbGVjdEluZm9bXSA9IFtdO1xuXHRcdGRlZmF1bHRPcHRpb25zLnB1c2goa2VlcEVudHJ5KTtcblx0XHRpZiAoZmllbGREYXRhLmlucHV0VHlwZSA9PT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRkZWZhdWx0T3B0aW9ucy5wdXNoKHsgdGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcInllc1wiKSwga2V5OiBcInRydWVcIiB9LCB7IHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJub1wiKSwga2V5OiBcImZhbHNlXCIgfSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlZmF1bHRPcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09NQk9CT1hfUkVQTEFDRV9WQUxVRVNcIiksXG5cdFx0XHRcdGtleTogU3BlY2lmaWNTZWxlY3RLZXlzLlJlcGxhY2VLZXlcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGZpZWxkRGF0YS5pc0ZpZWxkUmVxdWlyZWQgIT09IFwidHJ1ZVwiICYmIGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8uY2xlYXJhYmxlKSB7XG5cdFx0XHRcdGRlZmF1bHRPcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT01CT0JPWF9DTEVBUl9WQUxVRVNcIiksXG5cdFx0XHRcdFx0a2V5OiBTcGVjaWZpY1NlbGVjdEtleXMuQ2xlYXJGaWVsZFZhbHVlS2V5XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSB0aGUgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqIEBwYXJhbSBleHBCaW5kaW5nIFRoZSBleHByZXNzaW9uIGJpbmRpbmcgb2YgdGhlIHByb3BlcnR5LlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hc3MgZWRpdCBmaWVsZCBpcyBlZGl0YWJsZS5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRFZGl0YWJsZShleHBCaW5kaW5nOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChleHBCaW5kaW5nID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKE9iamVjdC5rZXlzKEZpZWxkRWRpdE1vZGUpLmluY2x1ZGVzKGV4cEJpbmRpbmcgYXMgRmllbGRFZGl0TW9kZSkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKGV4cEJpbmRpbmcpIHtcblx0XHRcdGNvbnN0IGFueUNvbnRyb2wgPSBuZXcgQW55KHsgYW55OiBleHBCaW5kaW5nIH0pO1xuXHRcdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmFuYWx5emVkQ29udGV4dHNbMF0uZ2V0TW9kZWwoKTtcblx0XHRcdGFueUNvbnRyb2wuc2V0TW9kZWwobW9kZWwpO1xuXHRcdFx0Y29uc3QgdmlzaWJsZSA9IHRoaXMuYW5hbHl6ZWRDb250ZXh0cy5zb21lKChjb250ZXh0KSA9PiB7XG5cdFx0XHRcdGFueUNvbnRyb2wuc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdHJldHVybiAoYW55Q29udHJvbC5nZXRCaW5kaW5nKFwiYW55XCIpIGFzIFByb3BlcnR5QmluZGluZykuZ2V0RXh0ZXJuYWxWYWx1ZSgpID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlO1xuXHRcdFx0fSk7XG5cdFx0XHRhbnlDb250cm9sLmRlc3Ryb3koKTtcblx0XHRcdHJldHVybiB2aXNpYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaW5wdXQgdHlwZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRDb252ZXJ0ZWQgVGhlIGNvbnZlcnRlZCBhbm5vdGF0aW9uIGZvIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsUGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aCBvZiB0aGUgcHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIGlucHV0IHR5cGUuXG5cdCAqL1xuXHRwcml2YXRlIGdldElucHV0VHlwZShkYXRhRmllbGRDb252ZXJ0ZWQ6IERhdGFGaWVsZFR5cGVzLCBkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuXHRcdGNvbnN0IGVkaXRTdHlsZVByb3BlcnRpZXMgPSB7fSBhcyBGaWVsZEJsb2NrUHJvcGVydGllcztcblx0XHRzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzKGVkaXRTdHlsZVByb3BlcnRpZXMsIGRhdGFGaWVsZENvbnZlcnRlZCwgZGF0YU1vZGVsUGF0aCwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGVkaXRTdHlsZVByb3BlcnRpZXM/LmVkaXRTdHlsZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmaWVsZFxuXHQgKiBUaGlzIHZpc2liaWxpdHkgaXMgbm90IGRlcGVuZGVudCBvbiB0aGUgY29udGV4dCB3aGVuXG5cdCAqICAtIGVpdGhlciB0aGUgYWRhcHRhdGlvbiBtb2RlIGlzIHNldC5cblx0ICogIC0gb3IgdGhlIGZpZWxkIGlzIHZpc2libGUgaW4gdGhlIG1hbmlmZXN0IGFuZCB0aGUgZGVncmFkZWQgbW9kZSBpcyBzZXQuXG5cdCAqIEBwYXJhbSBmaWVsZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIG1hc3MgZWRpdCBmaWVsZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZCBpcyB2aXNpYmxlLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgaXNGaWVsZFZpc2libGUoZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuaXNBZGFwdGF0aW9uIHx8ICh0aGlzLm1hbmlmZXN0U2V0dGluZ3MudmlzaWJsZUZpZWxkcy5sZW5ndGggJiYgdGhpcy5kZWdyYWRlZE1vZGUpKSB7XG5cdFx0XHRjb25zdCBpc1N0YXRpY0VkaXRNb2RlID0gT2JqZWN0LmtleXMoRmllbGRFZGl0TW9kZSkuaW5jbHVkZXMoZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5lZGl0TW9kZSBhcyBGaWVsZEVkaXRNb2RlKTtcblx0XHRcdGNvbnN0IGlzRWRpdGFibGUgPVxuXHRcdFx0XHQhaXNTdGF0aWNFZGl0TW9kZSB8fCAoaXNTdGF0aWNFZGl0TW9kZSAmJiBmaWVsZFByb3BlcnRpZXMudmlzaWJpbGl0eUJpbmRpbmdzLmVkaXRNb2RlID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKTtcblx0XHRcdHJldHVybiBpc0VkaXRhYmxlICYmIGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuaXNWaXNpYmxlICE9PSBcImZhbHNlXCI7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLmdldEZpZWxkRWRpdGFibGUoZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5lZGl0TW9kZSkgJiZcblx0XHRcdCF0aGlzLmlzSGlkZGVuRm9yQ29udGV4dHMoZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5pc1Zpc2libGUpXG5cdFx0KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUVBO0FBQ0E7QUFDQTtFQUZBLElBR3FCQSxvQkFBb0I7SUEyQnhDLFNBQUFBLHFCQUFZQyxLQUFxRSxFQUFFO01BQUEsS0FsQmxFQyxlQUFlLEdBQUcsRUFBRTtNQUFBLEtBSXBCQyxnQkFBZ0IsR0FBcUIsRUFBRTtNQUFBLEtBTWhEQyxlQUFlLEdBQTBCLEVBQUU7TUFTbEQsTUFBTUMsY0FBYyxHQUFJSixLQUFLLENBQUNLLEtBQUssQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBY0Msa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxVQUFVLENBQUNDLFVBQVU7UUFDdEdDLFNBQVMsR0FBSVYsS0FBSyxDQUFDSyxLQUFLLENBQUNNLFFBQVEsQ0FBQyxDQUFDLENBQWdCQyxZQUFZLENBQUMsQ0FBQztNQUVsRSxJQUFJLENBQUNQLEtBQUssR0FBR0wsS0FBSyxDQUFDSyxLQUFLO01BQ3hCLElBQUksQ0FBQ1EsZ0JBQWdCLEdBQUksSUFBSSxDQUFDUixLQUFLLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQWNDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ08sT0FBTyxDQUFDQyxRQUFRO01BQ2xH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
|
|
706
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdERpYWxvZ0hlbHBlciIsInByb3BzIiwibWF4QW5hbHl6ZWRSb3dzIiwiYW5hbHl6ZWRDb250ZXh0cyIsImZpZWxkUHJvcGVydGllcyIsImVudGl0eVR5cGVQYXRoIiwidGFibGUiLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnRyb2wiLCJtYXNzRWRpdCIsIm9uQ29udGV4dE1lbnUiLCJvbkRpYWxvZ0Nsb3NlIiwib25DbG9zZSIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJjb250ZXh0cyIsImZldGNoQ29udGV4dHNGb3JFZGl0IiwiZGVncmFkZWRNb2RlIiwibGVuZ3RoIiwic2xpY2UiLCJpc0FkYXB0YXRpb24iLCJnZXRBcHBDb21wb25lbnQiLCJpc0FkYXB0YXRpb25Nb2RlIiwiaGVhZGVySW5mbyIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckluZm8iLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsIm9wZW4iLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImludGVybmFsTW9kZWxQcm9wZXJ0eSIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRQcm9wZXJ0eSIsImdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyIsImdldEZpZWxkc0luZm8iLCJzb21lIiwiZmllbGQiLCJ2aXNpYmxlIiwibm9GaWVsZEluZm9ybWF0aW9uIiwiY29uZmlybVNlbGVjdGlvbiIsInJ1bkFzT3duZXIiLCJtYXNzRWRpdERpYWxvZyIsIk1hc3NFZGl0RGlhbG9nIiwiZGlhbG9nIiwiY3JlYXRlIiwiYXR0YWNoQmVmb3JlQ2xvc2UiLCJyZXF1aXJlZERhdGFQcm9taXNlIiwiZ2V0UmVxdWlyZWREYXRhUHJvbWlzZSIsImdldERhdGFBZnRlck9wZW5pbmdEaWFsb2ciLCJyZXNvbHZlIiwiZXJyb3IiLCJMb2ciLCJyZWplY3QiLCJ2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0IiwidmlzaWJsZUZpZWxkcyIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwibWVzc2FnZSIsIm1lc3NhZ2VEZXRhaWwiLCJnZXRUZXh0IiwiZ2V0UmVzb3VyY2VUZXh0IiwiVHlwZU5hbWUiLCJyZWR1Y2UiLCJmaWVsZHMiLCJmaWVsZFByb3BlcnR5IiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUluZm8iLCJyZWxhdGl2ZVBhdGgiLCJwdXNoIiwibGFiZWwiLCJqb2luIiwiTWVzc2FnZUJveCIsImluZm9ybWF0aW9uIiwiZGV0YWlscyIsInJlc291cmNlTW9kZWwiLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImNvcmVSZXNvdXJjZUJ1bmRsZSIsInVwZGF0YWJsZUNvbnRleHRzIiwiUHJvbWlzZSIsInRhYmxlQVBJIiwiZWRpdEJ1dHRvbiIsImNhbmNlbEJ1dHRvbiIsInR5cGVOYW1lIiwidHlwZU5hbWVQbHVyYWwiLCJUeXBlTmFtZVBsdXJhbCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImRhdGEiLCJyZWFkT25seSIsImdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSIsIndhcm5pbmciLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsInNlbGVjdGlvbiIsInVuZGVmaW5lZCIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0RW50aXR5RmllbGRzSW5mbyIsImNvbHVtbnNEYXRhIiwiY29sdW1ucyIsInByb3BlcnRpZXNLZXlzIiwiU2V0IiwiY29sdW1uIiwidHlwZSIsIm5hbWUiLCJ0cmFuc2Zvcm1QYXRoc1RvSW5mbyIsImdldENvbHVtbnMiLCJtYXAiLCJnZXRQcm9wZXJ0eUtleSIsImlnbm9yZWRGaWVsZHMiLCJpZ25vcmVkRmllbGQiLCJkZWxldGUiLCJwcm9wZXJ0aWVzUGF0aHMiLCJBcnJheSIsImZyb20iLCJjb2x1bW5JbmZvcyIsInByb3BlcnR5UGF0aCIsImNvbHVtbkluZm8iLCJnZXRGaWVsZEluZm8iLCJlbnRpdHlQYXRoIiwiZ2V0TWV0YVBhdGgiLCJlbnRpdHlTZXREYXRhTW9kZWwiLCJyZWxhdGVkQ29sdW1uSW5mbyIsImZpbmQiLCJmaWVsZEluZm8iLCJhbm5vdGF0aW9uUGF0aCIsInByb3BlcnR5RGF0YU1vZGVsIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJjb252ZXJ0ZWRBbm5vdGF0aW9uIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRQcm9wZXJ0eSIsImdldENvbXBsaWFudFByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImtleSIsInRhcmdldE9iamVjdCIsImlzUHJvcGVydHkiLCJJc0ltYWdlVVJMIiwiaXNEYXRhRmllbGRUeXBlcyIsImhhc093blByb3BlcnR5IiwiVmFsdWUiLCIkdGFyZ2V0IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiaGFzVmFsdWVIZWxwIiwiQ29tbW9uIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiaXNIaWRkZW5Gb3JDb250ZXh0cyIsImV4cEJpbmRpbmciLCJhbnlPYmplY3QiLCJfanN4IiwiQW55IiwiYW55Qm9vbGVhbiIsInNldE1vZGVsIiwiaXNIaWRkZW4iLCJjb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nIiwiZ2V0RXh0ZXJuYWxWYWx1ZSIsImRlc3Ryb3kiLCJ1cGRhdGFibGVDb250ZXh0UHJvcGVydHkiLCJnZXRGaWVsZFByb3BlcnRpZXMiLCJkZWVwQ2xvbmUiLCJmaWVsZHNJbmZvIiwiZGF0YVByb3BlcnR5UGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJ1bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoIiwiaW5wdXRUeXBlIiwiZ2V0SW5wdXRUeXBlIiwiZ2V0UmVsYXRpdmVQYXRocyIsImZpZWxkRGF0YSIsInZpc2liaWxpdHlCaW5kaW5ncyIsImlzVmlzaWJsZSIsImVkaXRNb2RlIiwiZ2V0RWRpdE1vZGUiLCJjb25zdGFudCIsIkxhYmVsIiwiaXNGaWVsZFJlcXVpcmVkIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwiZGVzY3JpcHRpb25QYXRoIiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJ0ZXh0QmluZGluZyIsImV4cHJlc3Npb24iLCJnZXRUZXh0QmluZGluZyIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJJc1RpbWV6b25lIiwicmVhZE9ubHlFeHByZXNzaW9uIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJjbGVhcmFibGUiLCJpc1Byb3BlcnR5Q2xlYXJhYmxlIiwiZW1wdHlWYWx1ZSIsImdldEVtcHR5VmFsdWVGb3JQcm9wZXJ0eSIsInNlbGVjdEl0ZW1zIiwiZ2V0RGF0YUZvck9wZW5pbmdEaWFsb2ciLCJhbGwiLCJpc0ZpZWxkVmlzaWJsZSIsInJ1bnRpbWVTZWxlY3Rpb24iLCJnZXRSdW50aW1lU2VsZWN0aW9uIiwiZ2V0RGVmYXVsdFNlbGVjdE9wdGlvbnMiLCJnZW5lcmF0ZUZpZWxkc1Byb3BlcnRpZXMiLCJnZW5lcmF0ZUVudGl0eUZpZWxkc1Byb3BlcnRpZXMiLCJtaXNzaW5nQ29udGV4dHMiLCJiaW5kaW5nc1RvRmV0Y2giLCJjb25jYXQiLCJwYXRoSW5Nb2RlbCIsImdldE1pc3NpbmdEYXRhIiwiYmluZGluZ3NUb1Jlc29sdmUiLCJiaW5kaW5ncyIsImdldFZpZXdEYXRhIiwiY29udmVydGVyVHlwZSIsImRpc3BsYXllZFByb3BlcnRpZXMiLCJldmVyeSIsInByb21pc2VzIiwiY29udHJvbHMiLCJtb2RlbCIsImJpbmRpbmciLCJmaWx0ZXIiLCJzdGFydHNXaXRoIiwicGFyYW1ldGVycyIsImJpbmRpbmdUeXBlIiwiY29udHJvbEJpbmRpbmciLCJzZXRCaW5kaW5nTW9kZSIsIkJpbmRpbmdNb2RlIiwiT25lVGltZSIsImlzQSIsImdldEJpbmRpbmdzIiwibmVzdGVkQmluZGluZyIsInJlcXVlc3RWYWx1ZSIsInByb21pc2UiLCJwcm9wZXJ0eSIsIm51bGxhYmxlIiwiYW55IiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsInZhbHVlIiwiZ2V0QmluZGluZ0luZm8iLCJnZXRUeXBlIiwicGFyc2VWYWx1ZSIsImRpc3RpbmN0TWFwIiwic2VsZWN0T3B0aW9ucyIsImFueVRleHQiLCJzZWxlY3RlZENvbnRleHQiLCJwcm9wZXJ0eVRleHQiLCJoYXMiLCJhZGQiLCJ0ZXh0IiwidW5pdE9yQ3VycmVuY3lWYWx1ZSIsImdldE9iamVjdCIsInByb3BlcnR5VmFsdWUiLCJrZWVwRW50cnkiLCJTcGVjaWZpY1NlbGVjdEtleXMiLCJLZWVwS2V5IiwiZGVmYXVsdE9wdGlvbnMiLCJSZXBsYWNlS2V5IiwiQ2xlYXJGaWVsZFZhbHVlS2V5IiwiZ2V0RmllbGRFZGl0YWJsZSIsIkZpZWxkRWRpdE1vZGUiLCJFZGl0YWJsZSIsIk9iamVjdCIsImtleXMiLCJhbnlDb250cm9sIiwiZGF0YUZpZWxkQ29udmVydGVkIiwiZGF0YU1vZGVsUGF0aCIsImVkaXRTdHlsZVByb3BlcnRpZXMiLCJzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzIiwiZWRpdFN0eWxlIiwiaXNTdGF0aWNFZGl0TW9kZSIsImlzRWRpdGFibGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1hc3NFZGl0RGlhbG9nSGVscGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5LCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIERhdGFGaWVsZEZvckFjdGlvbiwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiwgSGVhZGVySW5mbyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQW55IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9BbnlcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkVHlwZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgTWFzc0VkaXRUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRhYmxlQ29sdW1uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsIGdldFJlbGF0aXZlUGF0aHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBpc1JlYWRPbmx5RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgsXG5cdGhhc1ZhbHVlSGVscFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0RWRpdE1vZGUsIGdldFJlcXVpcmVkRXhwcmVzc2lvbiwgaXNNdWx0aVZhbHVlRmllbGQsIGlzVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0VGV4dEJpbmRpbmcsIHNldEVkaXRTdHlsZVByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgQmluZGluZ01vZGUgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nTW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIFByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL1Byb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IE1hc3NFZGl0RGlhbG9nIGZyb20gXCIuL01hc3NFZGl0RGlhbG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdJbmZvLCBNYXNzRmllbGRQcm9wZXJ0aWVzLCBTZWxlY3RJbmZvIH0gZnJvbSBcIi4vbGlicmFyeVwiO1xuaW1wb3J0IHsgU3BlY2lmaWNTZWxlY3RLZXlzIH0gZnJvbSBcIi4vbGlicmFyeVwiO1xuXG50eXBlIERhdGFGaWVsZFR5cGVzID0gRGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbjtcbnR5cGUgRmllbGRJbmZvID0ge1xuXHRrZXk6IHN0cmluZztcblx0cHJvcGVydHlEYXRhTW9kZWw6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+O1xuXHR0YXJnZXRQcm9wZXJ0eTogUHJvcGVydHk7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGNvbnZlcnRlZEFubm90YXRpb246IERhdGFGaWVsZFR5cGVzO1xufTtcblxudHlwZSBCaW5kaW5nVG9GZXRjaCA9IEJpbmRpbmdJbmZvICYgeyBjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W10gfTtcblxuLyoqXG4gKiBEaXNwbGF5IHRoZSBtYXNzRWRpdCBkaWFsb2cuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hc3NFZGl0RGlhbG9nSGVscGVyIHtcblx0cHJpdmF0ZSByZWFkb25seSB0YWJsZTogVGFibGU7XG5cblx0cHJpdmF0ZSByZWFkb25seSBvbkNvbnRleHRNZW51OiBib29sZWFuO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgb25EaWFsb2dDbG9zZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgdmlldzogRkVWaWV3O1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWF4QW5hbHl6ZWRSb3dzID0gMzA7XG5cblx0cHJpdmF0ZSBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFuYWx5emVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGRlZ3JhZGVkTW9kZTogYm9vbGVhbjtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG1hbmlmZXN0U2V0dGluZ3M6IE1hc3NFZGl0VGFibGVDb25maWd1cmF0aW9uO1xuXG5cdHByaXZhdGUgZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzW10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGlzQWRhcHRhdGlvbjogYm9vbGVhbjtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGhlYWRlckluZm86IEhlYWRlckluZm8gfCB1bmRlZmluZWQ7XG5cblx0bWFzc0VkaXREaWFsb2c6IE1hc3NFZGl0RGlhbG9nIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiB7IHRhYmxlOiBUYWJsZTsgb25Db250ZXh0TWVudTogYm9vbGVhbjsgb25DbG9zZT86ICgpID0+IHZvaWQgfSkge1xuXHRcdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gKHByb3BzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLmNvbGxlY3Rpb24sXG5cdFx0XHRtZXRhTW9kZWwgPSAocHJvcHMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdHRoaXMudGFibGUgPSBwcm9wcy50YWJsZTtcblx0XHR0aGlzLm1hbmlmZXN0U2V0dGluZ3MgPSAodGhpcy50YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5tYXNzRWRpdDtcblx0XHR0aGlzLm9uQ29udGV4dE1lbnUgPSBwcm9wcy5vbkNvbnRleHRNZW51O1xuXHRcdHRoaXMub25EaWFsb2dDbG9zZSA9IHByb3BzLm9uQ2xvc2U7XG5cdFx0dGhpcy52aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzLnRhYmxlKTtcblx0XHR0aGlzLmNvbnRleHRzID0gdGhpcy5mZXRjaENvbnRleHRzRm9yRWRpdCgpO1xuXHRcdHRoaXMuZGVncmFkZWRNb2RlID0gdGhpcy5jb250ZXh0cy5sZW5ndGggPiB0aGlzLm1heEFuYWx5emVkUm93cztcblx0XHR0aGlzLmFuYWx5emVkQ29udGV4dHMgPSB0aGlzLmRlZ3JhZGVkTW9kZSA/IHRoaXMuY29udGV4dHMuc2xpY2UoMCwgdGhpcy5tYXhBbmFseXplZFJvd3MpIDogdGhpcy5jb250ZXh0cztcblx0XHR0aGlzLmlzQWRhcHRhdGlvbiA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLnRhYmxlKS5pc0FkYXB0YXRpb25Nb2RlKCk7XG5cdFx0dGhpcy5oZWFkZXJJbmZvID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVR5cGVQYXRoKSkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uSGVhZGVySW5mbztcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgbWFzcyBlZGl0IGRpYWxvZyBpZiBhbGwgc2VsZWN0ZWQgY29udGV4dHMgYXJlIGVkaXRhYmxlLFxuXHQgKiBvdGhlcndpc2UgYSBtZXNzYWdlIGJveCB0byBjb25maXJtIHRoZSBzZWxlY3Rpb24uXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uIG9wZW4gb2YgdGhlIG1hc3MgZWRpdCBkaWFsb2cuXG5cdCAqL1xuXHRhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLnZpZXcpIGFzIFRlbXBsYXRlQ29tcG9uZW50O1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLnRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdGludGVybmFsTW9kZWxQcm9wZXJ0eSA9ICF0aGlzLm9uQ29udGV4dE1lbnUgPyBcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIixcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGludGVybmFsTW9kZWxQcm9wZXJ0eSkgfHwgMDtcblx0XHRcdHRoaXMuZmllbGRQcm9wZXJ0aWVzID0gYXdhaXQgdGhpcy5nZXRGaWVsZHNQcm9wZXJ0aWVzRnJvbUluZm8odGhpcy5nZXRGaWVsZHNJbmZvKCkpO1xuXHRcdFx0aWYgKCF0aGlzLmlzQWRhcHRhdGlvbikge1xuXHRcdFx0XHQvLyBubyBmaWVsZCB0byBlZGl0XG5cdFx0XHRcdGlmICghdGhpcy5maWVsZFByb3BlcnRpZXMuc29tZSgoZmllbGQpID0+IGZpZWxkLnZpc2libGUpKSB7XG5cdFx0XHRcdFx0dGhpcy5ub0ZpZWxkSW5mb3JtYXRpb24oKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9Tb21lIHJvd3MgYXJlIG5vdCBlZGl0YWJsZSAtPiBkbyB3ZSB3YW50IHRvIGNvbnRpbnVlP1xuXHRcdFx0XHRpZiAodGhpcy5jb250ZXh0cy5sZW5ndGggIT09IHNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdFx0XHR0aGlzLmNvbnRleHRzID0gYXdhaXQgdGhpcy5jb25maXJtU2VsZWN0aW9uKHRoaXMuY29udGV4dHMsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRcdGlmICghdGhpcy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIHRoZSB1c2VyIGRvZXNuJ3Qgd2FudCB0byBjb250aW51ZVxuXHRcdFx0XHRcdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlPy4oKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGF3YWl0IHRlbXBsYXRlQ29tcG9uZW50LnJ1bkFzT3duZXIoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLm1hc3NFZGl0RGlhbG9nID0gbmV3IE1hc3NFZGl0RGlhbG9nKHtcblx0XHRcdFx0XHR0YWJsZTogdGhpcy50YWJsZSxcblx0XHRcdFx0XHRjb250ZXh0czogdGhpcy5jb250ZXh0cyxcblx0XHRcdFx0XHRmaWVsZFByb3BlcnRpZXM6IHRoaXMuZmllbGRQcm9wZXJ0aWVzXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBkaWFsb2cgPSBhd2FpdCB0aGlzLm1hc3NFZGl0RGlhbG9nLmNyZWF0ZSgpO1xuXHRcdFx0XHRkaWFsb2cuYXR0YWNoQmVmb3JlQ2xvc2UoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub25EaWFsb2dDbG9zZT8uKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRkaWFsb2cub3BlbigpO1xuXHRcdFx0XHRjb25zdCByZXF1aXJlZERhdGFQcm9taXNlID0gdGhpcy5tYXNzRWRpdERpYWxvZy5nZXRSZXF1aXJlZERhdGFQcm9taXNlKCk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5nZXREYXRhQWZ0ZXJPcGVuaW5nRGlhbG9nKHRoaXMuZmllbGRQcm9wZXJ0aWVzKTtcblx0XHRcdFx0XHRyZXF1aXJlZERhdGFQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJNYXNzIEVkaXQ6IFNvbWV0aGluZyB3ZW50IHdyb25nIGluIG1hc3MgZWRpdCBkaWFsb2cgdG8gZ2V0IHJlcXVpcmVkIGRhdGEuXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0cmVxdWlyZWREYXRhUHJvbWlzZS5yZWplY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIk1hc3MgRWRpdDogU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gbWFzcyBlZGl0IGRpYWxvZyBjcmVhdGlvbi5cIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIG1lc3NhZ2UgYm94IHRvIG5vdGlmeSBubyBmaWVsZHMgYXJlIGVkaXRhYmxlLlxuXHQgKi9cblx0cHJpdmF0ZSBub0ZpZWxkSW5mb3JtYXRpb24oKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlzaWJsZUZpZWxkc0Zyb21NYW5pZmVzdCA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLm1hc3NFZGl0LnZpc2libGVGaWVsZHM7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRsZXQgbWVzc2FnZSA9IFwiXCIsXG5cdFx0XHRtZXNzYWdlRGV0YWlsO1xuXHRcdGlmICh2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdG1lc3NhZ2UgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfTk9fRURJVEFCTEVfRklFTERTX1dJVEhfTUFOSUZFU1RcIiwgW1xuXHRcdFx0XHR0aGlzLmdldFJlc291cmNlVGV4dCh0aGlzLmhlYWRlckluZm8/LlR5cGVOYW1lKSA/PyByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfRElBTE9HX0RFRkFVTFRfVFlQRU5BTUVcIilcblx0XHRcdF0pO1xuXHRcdFx0bWVzc2FnZURldGFpbCA9IGA8dWw+XG5cdFx0XHQke3RoaXMuZmllbGRQcm9wZXJ0aWVzXG5cdFx0XHRcdC5yZWR1Y2UoKGZpZWxkczogc3RyaW5nW10sIGZpZWxkUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRpZiAodmlzaWJsZUZpZWxkc0Zyb21NYW5pZmVzdC5pbmNsdWRlcyhmaWVsZFByb3BlcnR5LnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGgpKSB7XG5cdFx0XHRcdFx0XHRmaWVsZHMucHVzaChgPGxpPiR7ZmllbGRQcm9wZXJ0eS5sYWJlbH08L2xpPmApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdFx0XHR9LCBbXSlcblx0XHRcdFx0LmpvaW4oXCJcIil9IDwvdWw+YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19FRElUQUJMRV9GSUVMRFNfREVGQVVMVFwiKTtcblx0XHR9XG5cblx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKG1lc3NhZ2UsIHtcblx0XHRcdGRldGFpbHM6IG1lc3NhZ2VEZXRhaWwsXG5cdFx0XHRvbkNsb3NlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMub25EaWFsb2dDbG9zZT8uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdmFsaWRhdGUgdGhlIHNlbGVjdGVkIGNvbnRleHRzLlxuXHQgKiBAcGFyYW0gY29udGV4dHMgVGhlIGNvbnRleHRzIHNldCBhcyB1cGRhdGFibGVcblx0ICogQHBhcmFtIHNlbGVjdGVkQ29udGV4dHMgIFRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgY29udGV4dHNcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdGhlIGNvbnRleHRzIHRvIGJlIGZpbmFsbHkgbWFuYWdlZC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY29uZmlybVNlbGVjdGlvbihjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSwgc2VsZWN0ZWRDb250ZXh0czogbnVtYmVyKTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dFtdPiB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnRhYmxlKTtcblx0XHRjb25zdCBjb3JlUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cblx0XHRjb25zdCB1cGRhdGFibGVDb250ZXh0cyA9IGNvbnRleHRzLmxlbmd0aDtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy50YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Y29uc3QgZWRpdEJ1dHRvbiA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fQlVUVE9OX1RFWFRcIiksXG5cdFx0XHRcdFx0Y2FuY2VsQnV0dG9uID0gY29yZVJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9DQU5DRUxcIiksXG5cdFx0XHRcdFx0bWV0YU1vZGVsID0gKHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHR0eXBlTmFtZSA9XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJlc291cmNlVGV4dCh0aGlzLmhlYWRlckluZm8/LlR5cGVOYW1lKSA/PyByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX01BU1NfRURJVF9ESUFMT0dfREVGQVVMVF9UWVBFTkFNRVwiKSxcblx0XHRcdFx0XHR0eXBlTmFtZVBsdXJhbCA9XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJlc291cmNlVGV4dCh0aGlzLmhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsKSA/P1xuXHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19NQVNTX0VESVRfRElBTE9HX0RFRkFVTFRfVFlQRU5BTUVfUExVUkFMXCIpLFxuXHRcdFx0XHRcdG1lc3NhZ2VEZXRhaWwgPVxuXHRcdFx0XHRcdFx0TW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwsIHRoaXMudGFibGUuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpKSAmJiB0YWJsZUFQSS5yZWFkT25seVxuXHRcdFx0XHRcdFx0XHQ/IHRoaXMuZ2V0TWVzc2FnZURldGFpbEZvck5vbkVkaXRhYmxlKHR5cGVOYW1lLCB0eXBlTmFtZVBsdXJhbClcblx0XHRcdFx0XHRcdFx0OiBcIlwiO1xuXG5cdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhcblx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VcIiwgW1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyAtIHVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRcdHVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0dHlwZU5hbWVQbHVyYWxcblx0XHRcdFx0XHRdKSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRkZXRhaWxzOiBtZXNzYWdlRGV0YWlsLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW2VkaXRCdXR0b24sIGNhbmNlbEJ1dHRvbl0sXG5cdFx0XHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiBlZGl0QnV0dG9uLFxuXHRcdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24gKHNlbGVjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoc2VsZWN0aW9uID09PSBlZGl0QnV0dG9uID8gY29udGV4dHMgOiBbXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdGV4dCBhY2NvcmRpbmcgdG8gYW4gYW5ub3RhdGlvbi5cblx0ICogQHBhcmFtIGFubm90YXRpb24gVGhlIGFubm90YXRpb25cblx0ICogQHJldHVybnMgVGhlIHRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdldFJlc291cmNlVGV4dChhbm5vdGF0aW9uOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWFubm90YXRpb24pIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKFxuXHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFubm90YXRpb24pKSBhcyBzdHJpbmcsXG5cdFx0XHR0aGlzLnZpZXdcblx0XHQpPy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1lc3NhZ2UgZGV0YWlsIG9mIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLlxuXHQgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIHR5cGUgbmFtZSBvZiB0aGUgZW50aXR5IHNldFxuXHQgKiBAcGFyYW0gdHlwZU5hbWVQbHVyYWwgVGhlIHR5cGUgbmFtZSBwbHVyYWwgb2YgdGhlIGVudGl0eSBzZXRcblx0ICogQHJldHVybnMgVGhlIHRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSh0eXBlTmFtZTogc3RyaW5nLCB0eXBlTmFtZVBsdXJhbDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdHJldHVybiBgPHA+PHN0cm9uZz4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX0hFQURFUlwiKX08L3N0cm9uZz48L3A+XFxuXG5cdFx0XHQ8cD4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTlwiLCBbdHlwZU5hbWVQbHVyYWxdKX08L3A+XFxuXG5cdFx0XHQ8dWw+XG5cdFx0XHRcdDxsaT4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTl9EUkFGVFwiLCBbdHlwZU5hbWVdKX08L2xpPlxuXHRcdFx0XHQ8bGk+JHtyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9NRVNTQUdFX0RFVEFJTF9SRUFTT05fTk9OX0VESVRBQkxFXCIsIFt0eXBlTmFtZV0pfTwvbGk+XG5cdFx0XHQ8L3VsPmA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW50aXR5IHdoaWNoIGlzIGNvbXBsaWFudCBmb3IgYSBNYXNzIEVkaXQuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHRoZSBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cblx0cHJpdmF0ZSBnZXRFbnRpdHlGaWVsZHNJbmZvKCk6IEZpZWxkSW5mb1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29sdW1uc0RhdGEgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXG5cdFx0Y29uc3QgcHJvcGVydGllc0tleXMgPSBuZXcgU2V0KFxuXHRcdFx0Y29sdW1uc0RhdGEucmVkdWNlKChmaWVsZHM6IHN0cmluZ1tdLCBjb2x1bW4pID0+IHtcblx0XHRcdFx0aWYgKGNvbHVtbi50eXBlID09PSBcIkFubm90YXRpb25cIikge1xuXHRcdFx0XHRcdGZpZWxkcy5wdXNoKGNvbHVtbi5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdFx0fSwgW10pXG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1QYXRoc1RvSW5mbyhwcm9wZXJ0aWVzS2V5cyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvcGVydGllcyBvZiB0aGUgdGFibGUgd2hpY2ggYXJlIGNvbXBsaWFudCBmb3IgYSBNYXNzIEVkaXQuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHRoZSBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRzSW5mbygpOiBGaWVsZEluZm9bXSB7XG5cdFx0Y29uc3QgcHJvcGVydGllc0tleXMgPVxuXHRcdFx0dGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoID4gMFxuXHRcdFx0XHQ/IG5ldyBTZXQodGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMpXG5cdFx0XHRcdDogbmV3IFNldCh0aGlzLnRhYmxlLmdldENvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpKTtcblxuXHRcdGlmICh0aGlzLm1hbmlmZXN0U2V0dGluZ3MuaWdub3JlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGlnbm9yZWRGaWVsZCBvZiB0aGlzLm1hbmlmZXN0U2V0dGluZ3MuaWdub3JlZEZpZWxkcykge1xuXHRcdFx0XHRwcm9wZXJ0aWVzS2V5cy5kZWxldGUoaWdub3JlZEZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNmb3JtUGF0aHNUb0luZm8ocHJvcGVydGllc0tleXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybXMgYSBzZXQgb2YgcHJvcGVydHkgcGF0aHMgdG8gYW4gYXJyYXkgb2YgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzUGF0aHMgVGhlIHNldCBvZiBwcm9wZXJ0eSBwYXRoc1xuXHQgKiBAcmV0dXJucyBBcnJheSBvZiB0aGUgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIHRyYW5zZm9ybVBhdGhzVG9JbmZvKHByb3BlcnRpZXNQYXRoczogU2V0PHN0cmluZz4pOiBGaWVsZEluZm9bXSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllc1BhdGhzKS5yZWR1Y2UoKGNvbHVtbkluZm9zOiBGaWVsZEluZm9bXSwgcHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRGaWVsZEluZm8ocHJvcGVydHlQYXRoKTtcblx0XHRcdGlmIChjb2x1bW5JbmZvKSB7XG5cdFx0XHRcdGNvbHVtbkluZm9zLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29sdW1uSW5mb3M7XG5cdFx0fSwgW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aFxuXHQgKiBAcmV0dXJucyBGaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRJbmZvKHByb3BlcnR5UGF0aDogc3RyaW5nKTogRmllbGRJbmZvIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb2x1bW5zRGF0YSA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0aGlzLnRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0aGlzLnRhYmxlLmRhdGEoXCJtZXRhUGF0aFwiKSk7XG5cdFx0Y29uc3QgZW50aXR5U2V0RGF0YU1vZGVsID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpKTtcblx0XHRjb25zdCByZWxhdGVkQ29sdW1uSW5mbyA9IGNvbHVtbnNEYXRhLmZpbmQoKGZpZWxkSW5mbykgPT4gZmllbGRJbmZvLm5hbWUgPT09IHByb3BlcnR5UGF0aCAmJiBmaWVsZEluZm8udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCIpO1xuXHRcdGlmIChyZWxhdGVkQ29sdW1uSW5mbykge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSAocmVsYXRlZENvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdGlmIChhbm5vdGF0aW9uUGF0aCAmJiBwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWwgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZW50aXR5U2V0RGF0YU1vZGVsLCBwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZWRBbm5vdGF0aW9uID0gY29udmVydE1ldGFNb2RlbENvbnRleHQobWV0YU1vZGVsLmdldENvbnRleHQoYW5ub3RhdGlvblBhdGgpKSBhc1xuXHRcdFx0XHRcdHwgRGF0YUZpZWxkXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBY3Rpb247XG5cdFx0XHRcdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gdGhpcy5nZXRDb21wbGlhbnRQcm9wZXJ0eShwcm9wZXJ0eURhdGFNb2RlbCwgY29udmVydGVkQW5ub3RhdGlvbik7XG5cdFx0XHRcdGlmICh0YXJnZXRQcm9wZXJ0eSAmJiBlbnRpdHlTZXREYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmluY2x1ZGVzKHRhcmdldFByb3BlcnR5KSlcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0a2V5OiByZWxhdGVkQ29sdW1uSW5mby5rZXksXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eURhdGFNb2RlbCxcblx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0bGFiZWw6IHJlbGF0ZWRDb2x1bW5JbmZvLmxhYmVsID8/IHJlbGF0ZWRDb2x1bW5JbmZvLmtleSxcblx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb25cblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgb24gdGhlIERpYWxvZy5cblx0ICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBjb2x1bW5cblx0ICogQHBhcmFtIGFubm90YXRpb24gIFRoZSBjb252ZXJ0ZWQgYW5ub3RhdGlvbiBvZiB0aGUgY29sdW1uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBpZiBpdCBpcyBjb21wbGlhbnQsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgZ2V0Q29tcGxpYW50UHJvcGVydHkocHJvcGVydHlEYXRhTW9kZWw6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBhbm5vdGF0aW9uOiBEYXRhRmllbGRUeXBlcyk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSBwcm9wZXJ0eURhdGFNb2RlbC50YXJnZXRPYmplY3Q7XG5cdFx0bGV0IHRhcmdldFByb3BlcnR5OiBQcm9wZXJ0eTtcblx0XHRpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHR0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldE9iamVjdDtcblx0XHRcdGlmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnMuVUk/LklzSW1hZ2VVUkwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhhbm5vdGF0aW9uKSAmJiAhYW5ub3RhdGlvbi5oYXNPd25Qcm9wZXJ0eShcIkFjdGlvblwiKSkge1xuXHRcdFx0dGFyZ2V0UHJvcGVydHkgPSBhbm5vdGF0aW9uLlZhbHVlLiR0YXJnZXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgZmllbGQgaXMgY29tcGxpYW50IGZvciB0aGUgTWFzc0VkaXRcblx0XHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHRhcmdldFByb3BlcnR5KTtcblx0XHRpZiAoXG5cdFx0XHRpc011bHRpVmFsdWVGaWVsZChwcm9wZXJ0eURhdGFNb2RlbCkgfHxcblx0XHRcdChoYXNWYWx1ZUhlbHAodGFyZ2V0UHJvcGVydHkpICYmIHRhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycykgfHwgLy8gY29udGV4dCBkZXBlbmRlbnQgVkggaXMgbm90IHN1cHBvcnRlZCBmb3IgTWFzcyBFZGl0LlxuXHRcdFx0KHVuaXRQcm9wZXJ0eSAmJiBoYXNWYWx1ZUhlbHAodW5pdFByb3BlcnR5KSAmJiB1bml0UHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0UHJvcGVydHk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBpcyBoaWRkZW4gZm9yIHRoZSBwcm92aWRlZCBjb250ZXh0cy5cblx0ICogQHBhcmFtIGV4cEJpbmRpbmcgVGhlIGV4cHJlc3Npb24gYmluZGluZyBvZiB0aGUgcHJvcGVydHkuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGlzIGhpZGRlbiBmb3IgYWxsIGNvbnRleHRzLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgaXNIaWRkZW5Gb3JDb250ZXh0cyhleHBCaW5kaW5nOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChleHBCaW5kaW5nID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoZXhwQmluZGluZyA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYW55T2JqZWN0ID0gPEFueSBhbnlCb29sZWFuPXtleHBCaW5kaW5nfSAvPjtcblx0XHRhbnlPYmplY3Quc2V0TW9kZWwodGhpcy5hbmFseXplZENvbnRleHRzWzBdLmdldE1vZGVsKCkpO1xuXHRcdGNvbnN0IGlzSGlkZGVuID0gIXRoaXMuYW5hbHl6ZWRDb250ZXh0cy5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRyZXR1cm4gKGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55Qm9vbGVhblwiKSBhcyBQcm9wZXJ0eUJpbmRpbmcpLmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHR9KTtcblx0XHRhbnlPYmplY3QuZGVzdHJveSgpO1xuXHRcdHJldHVybiBpc0hpZGRlbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzZWxlY3RlZCBjb250ZXh0IHNldCBhcyB1cGRhdGFibGUuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0cy5cblx0ICovXG5cdHByaXZhdGUgZmV0Y2hDb250ZXh0c0ZvckVkaXQoKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLnRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIiksXG5cdFx0XHR1cGRhdGFibGVDb250ZXh0UHJvcGVydHkgPSAhdGhpcy5vbkNvbnRleHRNZW51ID8gXCJ1cGRhdGFibGVDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS91cGRhdGFibGVDb250ZXh0c1wiO1xuXHRcdHJldHVybiBpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkodXBkYXRhYmxlQ29udGV4dFByb3BlcnR5KSA/PyBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkLlxuXHQgKi9cblx0Z2V0RmllbGRQcm9wZXJ0aWVzKCk6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSB7XG5cdFx0cmV0dXJuIGRlZXBDbG9uZSh0aGlzLmZpZWxkUHJvcGVydGllcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkcyBmcm9tIGFuIGFycmF5IG9mIGZpZWxkIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gZmllbGRzSW5mbyBUaGUgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRGaWVsZHNQcm9wZXJ0aWVzRnJvbUluZm8oZmllbGRzSW5mbzogRmllbGRJbmZvW10pOiBQcm9taXNlPE1hc3NGaWVsZFByb3BlcnRpZXNbXT4ge1xuXHRcdGNvbnN0IGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGZpZWxkSW5mbyBvZiBmaWVsZHNJbmZvKSB7XG5cdFx0XHRjb25zdCB7IHRhcmdldFByb3BlcnR5LCBwcm9wZXJ0eURhdGFNb2RlbCwgY29udmVydGVkQW5ub3RhdGlvbiB9ID0gZmllbGRJbmZvO1xuXHRcdFx0Y29uc3QgZGF0YVByb3BlcnR5UGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocHJvcGVydHlEYXRhTW9kZWwpO1xuXHRcdFx0aWYgKGRhdGFQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGggPVxuXHRcdFx0XHRcdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpO1xuXHRcdFx0XHRjb25zdCBpbnB1dFR5cGUgPSB0aGlzLmdldElucHV0VHlwZShjb252ZXJ0ZWRBbm5vdGF0aW9uLCBwcm9wZXJ0eURhdGFNb2RlbCk7XG5cdFx0XHRcdGlmIChpbnB1dFR5cGUgJiYgcHJvcGVydHlEYXRhTW9kZWwudGFyZ2V0T2JqZWN0KSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhwcm9wZXJ0eURhdGFNb2RlbCk7XG5cdFx0XHRcdFx0Y29uc3QgZmllbGREYXRhID0ge1xuXHRcdFx0XHRcdFx0dmlzaWJpbGl0eUJpbmRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdGlzVmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlKGNvbnZlcnRlZEFubm90YXRpb24pKSxcblx0XHRcdFx0XHRcdFx0ZWRpdE1vZGU6IGdldEVkaXRNb2RlKFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5RGF0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3RhbnQodHJ1ZSlcblx0XHRcdFx0XHRcdFx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsIC8vYnkgZGVmYXVsdCB0aGUgZmllbGQgaXMgdmlzaWJsZVxuXHRcdFx0XHRcdFx0bGFiZWw6IGZpZWxkSW5mby5sYWJlbCB8fCAodGFyZ2V0UHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbCBhcyBzdHJpbmcgfCB1bmRlZmluZWQpIHx8IGRhdGFQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRpc0ZpZWxkUmVxdWlyZWQ6IGdldFJlcXVpcmVkRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0dGFyZ2V0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlEYXRhTW9kZWxcblx0XHRcdFx0XHRcdCkgYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvblBhdGg6IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHByb3BlcnR5RGF0YU1vZGVsLnRhcmdldE9iamVjdCksXG5cdFx0XHRcdFx0XHR0ZXh0QmluZGluZzoge1xuXHRcdFx0XHRcdFx0XHRleHByZXNzaW9uOiBnZXRUZXh0QmluZGluZyhwcm9wZXJ0eURhdGFNb2RlbCwge1xuXHRcdFx0XHRcdFx0XHRcdGRpc3BsYXlNb2RlOiBnZXREaXNwbGF5TW9kZSh0YXJnZXRQcm9wZXJ0eSwgcHJvcGVydHlEYXRhTW9kZWwpXG5cdFx0XHRcdFx0XHRcdH0pIGFzIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0XHR0eXBlOlxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIgfHwgdGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmVcblx0XHRcdFx0XHRcdFx0XHRcdD8gXCJhbnlUZXh0XCJcblx0XHRcdFx0XHRcdFx0XHRcdDogXCJhbnlcIlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHJlYWRPbmx5RXhwcmVzc2lvbjogaXNSZWFkT25seUV4cHJlc3Npb24odGFyZ2V0UHJvcGVydHksIHJlbGF0aXZlUGF0aCksXG5cdFx0XHRcdFx0XHRpbnB1dFR5cGUsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm86IHtcblx0XHRcdFx0XHRcdFx0Y2xlYXJhYmxlOiB0aGlzLmlzUHJvcGVydHlDbGVhcmFibGUodGFyZ2V0UHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0XHRlbXB0eVZhbHVlOiB0aGlzLmdldEVtcHR5VmFsdWVGb3JQcm9wZXJ0eSh0YXJnZXRQcm9wZXJ0eSwgZGF0YVByb3BlcnR5UGF0aCksXG5cdFx0XHRcdFx0XHRcdGtleTogZmllbGRJbmZvLmtleSxcblx0XHRcdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiBkYXRhUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0XHR1bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNlbGVjdEl0ZW1zOiBbXSBhcyBTZWxlY3RJbmZvW11cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGZpZWxkUHJvcGVydGllcy5wdXNoKGZpZWxkRGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5nZXREYXRhRm9yT3BlbmluZ0RpYWxvZyhmaWVsZFByb3BlcnRpZXMpO1xuXHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0ZmllbGRQcm9wZXJ0aWVzLm1hcChhc3luYyAoZmllbGREYXRhKSA9PiB7XG5cdFx0XHRcdGZpZWxkRGF0YS52aXNpYmxlID0gdGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoID09PSAwID8gdGhpcy5pc0ZpZWxkVmlzaWJsZShmaWVsZERhdGEpIDogdHJ1ZTtcblx0XHRcdFx0Y29uc3QgcnVudGltZVNlbGVjdGlvbiA9ICF0aGlzLmlzQWRhcHRhdGlvbiA/IGF3YWl0IHRoaXMuZ2V0UnVudGltZVNlbGVjdGlvbihmaWVsZERhdGEpIDogW107XG5cdFx0XHRcdGZpZWxkRGF0YS5zZWxlY3RJdGVtcyA9IFsuLi50aGlzLmdldERlZmF1bHRTZWxlY3RPcHRpb25zKGZpZWxkRGF0YSksIC4uLnJ1bnRpbWVTZWxlY3Rpb25dO1xuXHRcdFx0fSlcblx0XHQpO1xuXHRcdHJldHVybiBmaWVsZFByb3BlcnRpZXM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiBkaWFsb2cgZmllbGRzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcy5cblx0ICovXG5cdGFzeW5jIGdlbmVyYXRlRmllbGRzUHJvcGVydGllcygpOiBQcm9taXNlPE1hc3NGaWVsZFByb3BlcnRpZXNbXT4ge1xuXHRcdHJldHVybiB0aGlzLmdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyh0aGlzLmdldEZpZWxkc0luZm8oKSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgZW50aXR5LlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcy5cblx0ICovXG5cdGFzeW5jIGdlbmVyYXRlRW50aXR5RmllbGRzUHJvcGVydGllcygpOiBQcm9taXNlPE1hc3NGaWVsZFByb3BlcnRpZXNbXT4ge1xuXHRcdHJldHVybiB0aGlzLmdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyh0aGlzLmdldEVudGl0eUZpZWxkc0luZm8oKSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcmVsZXZhbnQgZGF0YSBmcm9tIHRoZSBtb2RlbCBuZWVkZWQgYWZ0ZXIgdGhlIG9wZW5pbmcgb2YgdGhlIGRpYWxvZy5cblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9ubHkgaW4gdGhlIGRlZ3JhZGVkIG1vZGUgc2luY2UgdGhlIGRhdGEgaXMgYWxyZWFkeSBmZXRjaGVkIGluIHRoZSBub3JtYWwgbW9kZS5cblx0ICogdGhlIGRlZ3JhZGVkIG1vZGUgaXMgc2V0IHdoZW4gdGhlIG51bWJlciBvZiBzZWxlY3RlZCBjb250ZXh0cyBpcyBncmVhdGVyIHRoYW4gdGhlIG1heCBhbmFseXplZCByb3dzLlxuXHQgKiBAcGFyYW0gZmllbGRQcm9wZXJ0aWVzIFRoZSBmaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRhdGEgaXMgZmV0Y2hlZC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0RGF0YUFmdGVyT3BlbmluZ0RpYWxvZyhmaWVsZFByb3BlcnRpZXM6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmRlZ3JhZGVkTW9kZSkge1xuXHRcdFx0Y29uc3QgbWlzc2luZ0NvbnRleHRzID0gdGhpcy5jb250ZXh0cy5zbGljZSh0aGlzLm1heEFuYWx5emVkUm93cywgdGhpcy5jb250ZXh0cy5sZW5ndGgpO1xuXHRcdFx0Y29uc3QgYmluZGluZ3NUb0ZldGNoID0gKFtdIGFzIEJpbmRpbmdUb0ZldGNoW10pLmNvbmNhdChcblx0XHRcdFx0Li4uZmllbGRQcm9wZXJ0aWVzLm1hcCgoZmllbGREYXRhKSA9PiBbXG5cdFx0XHRcdFx0eyBleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihmaWVsZERhdGEucmVhZE9ubHlFeHByZXNzaW9uKSwgY29udGV4dHM6IHRoaXMuY29udGV4dHMgfSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihwYXRoSW5Nb2RlbChmaWVsZERhdGEucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aCkpLFxuXHRcdFx0XHRcdFx0Y29udGV4dHM6IG1pc3NpbmdDb250ZXh0cyxcblx0XHRcdFx0XHRcdHR5cGU6IGZpZWxkRGF0YS50ZXh0QmluZGluZy50eXBlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihwYXRoSW5Nb2RlbChmaWVsZERhdGEucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoKSksXG5cdFx0XHRcdFx0XHRjb250ZXh0czogbWlzc2luZ0NvbnRleHRzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdKVxuXHRcdFx0KTtcblx0XHRcdGF3YWl0IHRoaXMuZ2V0TWlzc2luZ0RhdGEoYmluZGluZ3NUb0ZldGNoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcmVsZXZhbnQgZGF0YSBmcm9tIHRoZSBtb2RlbCBuZWVkZWQgdG8gb3BlbiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gZmllbGRQcm9wZXJ0aWVzIFRoZSBmaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRhdGEgaXMgZmV0Y2hlZC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0RGF0YUZvck9wZW5pbmdEaWFsb2coZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBiaW5kaW5nc1RvUmVzb2x2ZSA9IChbXSBhcyBCaW5kaW5nVG9GZXRjaFtdKS5jb25jYXQoXG5cdFx0XHRmaWVsZFByb3BlcnRpZXMucmVkdWNlKChiaW5kaW5nczogQmluZGluZ1RvRmV0Y2hbXSwgZmllbGREYXRhKSA9PiB7XG5cdFx0XHRcdGJpbmRpbmdzID0gYmluZGluZ3MuY29uY2F0KFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRleHByZXNzaW9uOiBmaWVsZERhdGEudGV4dEJpbmRpbmcuZXhwcmVzc2lvbixcblx0XHRcdFx0XHRcdHR5cGU6IGZpZWxkRGF0YS50ZXh0QmluZGluZy50eXBlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihwYXRoSW5Nb2RlbChmaWVsZERhdGEucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aCkpLFxuXHRcdFx0XHRcdFx0dHlwZTogZmllbGREYXRhLnRleHRCaW5kaW5nLnR5cGVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHsgZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24ocGF0aEluTW9kZWwoZmllbGREYXRhLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aCkpIH1cblx0XHRcdFx0XSk7XG5cdFx0XHRcdGlmICghdGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0YmluZGluZ3MgPSBiaW5kaW5ncy5jb25jYXQoW1xuXHRcdFx0XHRcdFx0eyBleHByZXNzaW9uOiBmaWVsZERhdGEudmlzaWJpbGl0eUJpbmRpbmdzLmlzVmlzaWJsZSB9LFxuXHRcdFx0XHRcdFx0eyBleHByZXNzaW9uOiBmaWVsZERhdGEudmlzaWJpbGl0eUJpbmRpbmdzLmVkaXRNb2RlIH1cblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRoaXMuZGVncmFkZWRNb2RlKSB7XG5cdFx0XHRcdFx0YmluZGluZ3MucHVzaCh7IGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKGZpZWxkRGF0YS5yZWFkT25seUV4cHJlc3Npb24pIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBiaW5kaW5ncztcblx0XHRcdH0sIFtdKVxuXHRcdCk7XG5cdFx0YXdhaXQgdGhpcy5nZXRNaXNzaW5nRGF0YShiaW5kaW5nc1RvUmVzb2x2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbWlzc2luZyBkYXRhIGZvciB0aGUgZmllbGRzLlxuXHQgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgY29udHJvbHMgd2l0aCB0aGUgcHJvdmlkZWQgYmluZGluZ3MgdG8gZmV0Y2ggdGhlIG1pc3NpbmcgZGF0YS5cblx0ICogVGhlIG1vZGVsIHJlcXVlc3RzIHRoZSBkYXRhIHRvIHRoZSBiYWNrZW5kIHdoZW4gdGhlIGNvbnRleHRzIGRvZXNuJ3QgY29udGFpbnMgdGhlIHJlbGF0ZWQgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIGJpbmRpbmdzVG9GZXRjaCBUaGUgYmluZGluZyB0byByZXNvbHZlIGFuZCBpdHMgcHJvcGVydHkgcGF0aCByZWZlcmVuY2Vcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGF0YSBpcyBmZXRjaGVkLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRNaXNzaW5nRGF0YShiaW5kaW5nc1RvRmV0Y2g6IEJpbmRpbmdUb0ZldGNoW10pOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuXHRcdGlmICh0aGlzLmlzQWRhcHRhdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy52aWV3LmdldFZpZXdEYXRhKCkuY29udmVydGVyVHlwZSA9PT0gXCJPYmplY3RQYWdlXCIpIHtcblx0XHRcdGNvbnN0IGRpc3BsYXllZFByb3BlcnRpZXMgPSB0aGlzLnRhYmxlLmdldENvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpO1xuXHRcdFx0aWYgKHRoaXMubWFuaWZlc3RTZXR0aW5ncy52aXNpYmxlRmllbGRzLmV2ZXJ5KChmaWVsZCkgPT4gZGlzcGxheWVkUHJvcGVydGllcy5pbmNsdWRlcyhmaWVsZCkpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvbWlzZXMgPSBbXTtcblx0XHRjb25zdCBjb250cm9scyA9IFtdO1xuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5jb250ZXh0c1swXS5nZXRNb2RlbCgpO1xuXHRcdGZvciAoY29uc3QgYmluZGluZyBvZiBiaW5kaW5nc1RvRmV0Y2guZmlsdGVyKChiaW5kaW5nKSA9PiBiaW5kaW5nLmV4cHJlc3Npb24/LnN0YXJ0c1dpdGgoXCJ7XCIpKSkge1xuXHRcdFx0Ly8gQXZvaWQgdG8gZmV0Y2ggY29uc3RhbnQgYmluZGluZ3Ncblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbj47XG5cdFx0XHRjb25zdCBhbmFseXplZENvbnRleHRzID0gYmluZGluZy5jb250ZXh0cyA/PyB0aGlzLmFuYWx5emVkQ29udGV4dHM7XG5cdFx0XHRjb25zdCBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZSA/PyBcImFueVwiO1xuXHRcdFx0cGFyYW1ldGVyc1tiaW5kaW5nVHlwZV0gPSBiaW5kaW5nLmV4cHJlc3Npb247XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnRleHQgb2YgYW5hbHl6ZWRDb250ZXh0cykge1xuXHRcdFx0XHRjb25zdCBjb250cm9sID0gPEFueSB7Li4ucGFyYW1ldGVyc30gLz47XG5cdFx0XHRcdGNvbnRyb2wuc2V0TW9kZWwobW9kZWwpO1xuXHRcdFx0XHRjb250cm9sLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRjb250cm9scy5wdXNoKGNvbnRyb2wpO1xuXHRcdFx0XHRwcm9taXNlcy5wdXNoKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sQmluZGluZyA9IGNvbnRyb2wuZ2V0QmluZGluZyhiaW5kaW5nVHlwZSkgYXMgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2xCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sQmluZGluZy5zZXRCaW5kaW5nTW9kZShCaW5kaW5nTW9kZS5PbmVUaW1lKTtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sQmluZGluZy5pc0E8Q29tcG9zaXRlQmluZGluZz4oXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiKSkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChjb250cm9sQmluZGluZy5nZXRCaW5kaW5ncygpLm1hcCgobmVzdGVkQmluZGluZykgPT4gbmVzdGVkQmluZGluZy5yZXF1ZXN0VmFsdWU/LigpKSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBjb250cm9sQmluZGluZy5yZXF1ZXN0VmFsdWU/LigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzLm1hcChhc3luYyAocHJvbWlzZSkgPT4gcHJvbWlzZSgpKSk7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG5cdFx0XHRjb250cm9sLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgd2hlbiB0aGUgcmVsYXRlZCBmaWVsZCBpcyBlbXB0eS5cblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHZhbHVlLlxuXHQgKi9cblx0Z2V0RW1wdHlWYWx1ZUZvclByb3BlcnR5KHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcmltaXRpdmVUeXBlIHtcblx0XHRpZiAocHJvcGVydHkubnVsbGFibGUgIT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dHNbMF07XG5cdFx0XHRjb25zdCBhbnlPYmplY3QgPSA8QW55IGFueT17Y29tcGlsZUV4cHJlc3Npb24oZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihwcm9wZXJ0eSwgcGF0aEluTW9kZWwocHJvcGVydHlQYXRoKSkpfSAvPjtcblx0XHRcdGFueU9iamVjdC5zZXRNb2RlbChjb250ZXh0LmdldE1vZGVsKCkpO1xuXHRcdFx0YW55T2JqZWN0LnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBhbnlPYmplY3QuZ2V0QmluZGluZ0luZm8oXCJhbnlcIikuYmluZGluZy5nZXRUeXBlKCkucGFyc2VWYWx1ZShcIlwiLCBcInN0cmluZ1wiKTtcblx0XHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgcHJvcGVydHkgaXMgY2xlYXJhYmxlLlxuXHQgKiBTb21lIE9EYXRhIHR5cGVzIGRvbid0IGFjY2VzcyBlbXB0eSBzdHJpbmcgb3IgMCBhcyBhIHZhbGlkIHZhbHVlIHdoZW4gaXQncyBub3QgbnVsbGFibGUuXG5cdCAqIEZvciBleGFtcGxlLCBFZG0uRGF0ZVRpbWUgZG9lc24ndCBhY2NlcHQgYW4gZW1wdHkgc3RyaW5nIGFzIGEgdmFsaWQgdmFsdWUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHlcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgY2xlYXJhYmxlLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRpc1Byb3BlcnR5Q2xlYXJhYmxlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IFByaW1pdGl2ZVR5cGUge1xuXHRcdGlmIChwcm9wZXJ0eS5udWxsYWJsZSAhPT0gZmFsc2UpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gIVtcIkVkbS5EYXRlVGltZVwiLCBcIkVkbS5EYXRlVGltZU9mZnNldFwiLCBcIkVkbS5UaW1lT2ZEYXlcIiwgXCJFZG0uVGltZVwiLCBcIkVkbS5EYXRlXCIsIFwiRWRtLkRhdGVUaW1lV2l0aFRpbWV6b25lXCJdLmluY2x1ZGVzKFxuXHRcdFx0XHRwcm9wZXJ0eS50eXBlXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzZWxlY3Rpb24gb3B0aW9ucyBvZiBhIGZpZWxkIGdlbmVyYXRlZCBieSB0aGUgc2VsZWN0ZWQgY29udGV4dHMuXG5cdCAqIEBwYXJhbSBmaWVsZERhdGEgRGF0YSBvZiB0aGUgZmllbGQgdXNlZCBieSBib3RoIHRoZSBzdGF0aWMgYW5kIHRoZSBydW50aW1lIG1vZGVsXG5cdCAqIEByZXR1cm5zIFRoZSBzZWxlY3Qgb3B0aW9ucyBvZiB0aGUgZmllbGRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0UnVudGltZVNlbGVjdGlvbihmaWVsZERhdGE6IE1hc3NGaWVsZFByb3BlcnRpZXMpOiBQcm9taXNlPFNlbGVjdEluZm9bXT4ge1xuXHRcdGNvbnN0IGRpc3RpbmN0TWFwID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0Y29uc3Qgc2VsZWN0T3B0aW9uczogU2VsZWN0SW5mb1tdID0gW107XG5cdFx0aWYgKGZpZWxkRGF0YS5pbnB1dFR5cGUgPT09IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRjb25zdCBhbnlPYmplY3QgPSAoPEFueSBhbnlUZXh0PXtmaWVsZERhdGEudGV4dEJpbmRpbmcuZXhwcmVzc2lvbn0gLz4pIGFzIHR5cGVvZiBBbnk7XG5cdFx0YW55T2JqZWN0LnNldE1vZGVsKHRoaXMuY29udGV4dHNbMF0uZ2V0TW9kZWwoKSk7XG5cdFx0Zm9yIChjb25zdCBzZWxlY3RlZENvbnRleHQgb2YgdGhpcy5hbmFseXplZENvbnRleHRzKSB7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdGNvbnN0IHRleHRCaW5kaW5nID0gYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlUZXh0XCIpO1xuXHRcdFx0aWYgKHRleHRCaW5kaW5nPy5pc0E8Q29tcG9zaXRlQmluZGluZz4oXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiKSkge1xuXHRcdFx0XHQvLyBJZiB0aGUgdGV4dCBiaW5kaW5nIGlzIGEgY29tcG9zaXRlIGJpbmRpbmcsIHdlIG5lZWQgdG8gcmVxdWVzdCB0aGUgdmFsdWUgb2YgZWFjaCBiaW5kaW5nXG5cdFx0XHRcdC8vIHRvIHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGdldHRpbmcgdGhlIHZhbHVlIG9mIHJlcXVlc3RVbml0c09mTWVhc3VyZS9yZXF1ZXN0Q3VycmVuY3lDb2Rlc1xuXHRcdFx0XHQvLyBmb3IgdGhlIGN1c3RvbSB1bml0cyBvZiBtZWFzdXJlIGFuZCBjdXJyZW5jeSBjb2Rlcy5cblx0XHRcdFx0Ly8gV2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgbW9kZSB0byBPbmVUaW1lIHRvIGF2b2lkIHRoZSBiaW5kaW5nIHRvIGJlIHVwZGF0ZWQgd2hlbiB0aGUgY29udGV4dCBjaGFuZ2VzLlxuXHRcdFx0XHQvLyBJbmRlZWQgZXZlbiBpZiB0aGUgcmVxdWVzdFVuaXRzT2ZNZWFzdXJlL3JlcXVlc3RDdXJyZW5jeUNvZGVzIGRvZXNuJ3QgY2hhbmdlIGl0J3MgdHJpZ2dlciBhIFBBVENIIHJlcXVlc3Rcblx0XHRcdFx0dGV4dEJpbmRpbmcuc2V0QmluZGluZ01vZGUoQmluZGluZ01vZGUuT25lVGltZSk7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHRleHRCaW5kaW5nLmdldEJpbmRpbmdzKCkubWFwKChiaW5kaW5nKSA9PiBiaW5kaW5nLnJlcXVlc3RWYWx1ZT8uKCkpKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHByb3BlcnR5VGV4dCA9IChhbnlPYmplY3QuZ2V0QmluZGluZyhcImFueVRleHRcIikgYXMgUHJvcGVydHlCaW5kaW5nIHwgdW5kZWZpbmVkKT8uZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdFx0aWYgKHByb3BlcnR5VGV4dCAmJiAhZGlzdGluY3RNYXAuaGFzKHByb3BlcnR5VGV4dCkpIHtcblx0XHRcdFx0ZGlzdGluY3RNYXAuYWRkKHByb3BlcnR5VGV4dCk7XG5cdFx0XHRcdHNlbGVjdE9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dGV4dDogcHJvcGVydHlUZXh0LFxuXHRcdFx0XHRcdGtleTogcHJvcGVydHlUZXh0LFxuXHRcdFx0XHRcdHVuaXRPckN1cnJlbmN5VmFsdWU6IGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGhcblx0XHRcdFx0XHRcdD8gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChmaWVsZERhdGEucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoKVxuXHRcdFx0XHRcdFx0OiBcIlwiLFxuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWU6IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoZmllbGREYXRhLnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhbnlPYmplY3QuZGVzdHJveSgpO1xuXHRcdHJldHVybiBzZWxlY3RPcHRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9wdGlvbnMgb2YgYSBmaWVsZC5cblx0ICogQHBhcmFtIGZpZWxkRGF0YSBUaGUgcHJvcGVydHkgaW5mb3JtYXRpb25cblx0ICogQHJldHVybnMgVGhlIGRlZmF1bHQgc2VsZWN0IG9wdGlvbnMuXG5cdCAqL1xuXHRwcml2YXRlIGdldERlZmF1bHRTZWxlY3RPcHRpb25zKGZpZWxkRGF0YTogTWFzc0ZpZWxkUHJvcGVydGllcyk6IFNlbGVjdEluZm9bXSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRjb25zdCBrZWVwRW50cnkgPSB7XG5cdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09NQk9CT1hfS0VFUF9WQUxVRVNcIiksXG5cdFx0XHRrZXk6IFNwZWNpZmljU2VsZWN0S2V5cy5LZWVwS2V5XG5cdFx0fTtcblx0XHRjb25zdCBkZWZhdWx0T3B0aW9uczogU2VsZWN0SW5mb1tdID0gW107XG5cdFx0ZGVmYXVsdE9wdGlvbnMucHVzaChrZWVwRW50cnkpO1xuXHRcdGlmIChmaWVsZERhdGEuaW5wdXRUeXBlID09PSBcIkNoZWNrQm94XCIpIHtcblx0XHRcdGRlZmF1bHRPcHRpb25zLnB1c2goeyB0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwieWVzXCIpLCBrZXk6IFwidHJ1ZVwiIH0sIHsgdGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIm5vXCIpLCBrZXk6IFwiZmFsc2VcIiB9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVmYXVsdE9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT01CT0JPWF9SRVBMQUNFX1ZBTFVFU1wiKSxcblx0XHRcdFx0a2V5OiBTcGVjaWZpY1NlbGVjdEtleXMuUmVwbGFjZUtleVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoZmllbGREYXRhLmlzRmllbGRSZXF1aXJlZCAhPT0gXCJ0cnVlXCIgJiYgZmllbGREYXRhLnByb3BlcnR5SW5mby5jbGVhcmFibGUpIHtcblx0XHRcdFx0ZGVmYXVsdE9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTUJPQk9YX0NMRUFSX1ZBTFVFU1wiKSxcblx0XHRcdFx0XHRrZXk6IFNwZWNpZmljU2VsZWN0S2V5cy5DbGVhckZpZWxkVmFsdWVLZXlcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBkZWZhdWx0T3B0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIHRoZSBmaWVsZCBpcyBlZGl0YWJsZS5cblx0ICogQHBhcmFtIGV4cEJpbmRpbmcgVGhlIGV4cHJlc3Npb24gYmluZGluZyBvZiB0aGUgcHJvcGVydHkuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFzcyBlZGl0IGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaWVsZEVkaXRhYmxlKGV4cEJpbmRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGV4cEJpbmRpbmcgPT09IEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoRmllbGRFZGl0TW9kZSkuaW5jbHVkZXMoZXhwQmluZGluZyBhcyBGaWVsZEVkaXRNb2RlKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoZXhwQmluZGluZykge1xuXHRcdFx0Y29uc3QgYW55Q29udHJvbCA9IDxBbnkgYW55PXtleHBCaW5kaW5nfSAvPjtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5hbmFseXplZENvbnRleHRzWzBdLmdldE1vZGVsKCk7XG5cdFx0XHRhbnlDb250cm9sLnNldE1vZGVsKG1vZGVsKTtcblx0XHRcdGNvbnN0IHZpc2libGUgPSB0aGlzLmFuYWx5emVkQ29udGV4dHMuc29tZSgoY29udGV4dCkgPT4ge1xuXHRcdFx0XHRhbnlDb250cm9sLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRyZXR1cm4gKGFueUNvbnRyb2wuZ2V0QmluZGluZyhcImFueVwiKSBhcyBQcm9wZXJ0eUJpbmRpbmcpLmdldEV4dGVybmFsVmFsdWUoKSA9PT0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZTtcblx0XHRcdH0pO1xuXHRcdFx0YW55Q29udHJvbC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gdmlzaWJsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGlucHV0IHR5cGUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQ29udmVydGVkIFRoZSBjb252ZXJ0ZWQgYW5ub3RhdGlvbiBmbyB0aGUgZmllbGRcblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGggVGhlIGRhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIFRoZSBpbnB1dCB0eXBlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRJbnB1dFR5cGUoZGF0YUZpZWxkQ29udmVydGVkOiBEYXRhRmllbGRUeXBlcywgZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHtcblx0XHRjb25zdCBlZGl0U3R5bGVQcm9wZXJ0aWVzID0ge30gYXMgRmllbGRCbG9ja1Byb3BlcnRpZXM7XG5cdFx0c2V0RWRpdFN0eWxlUHJvcGVydGllcyhlZGl0U3R5bGVQcm9wZXJ0aWVzLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbFBhdGgsIHRydWUpO1xuXHRcdHJldHVybiBlZGl0U3R5bGVQcm9wZXJ0aWVzPy5lZGl0U3R5bGU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmllbGRcblx0ICogVGhpcyB2aXNpYmlsaXR5IGlzIG5vdCBkZXBlbmRlbnQgb24gdGhlIGNvbnRleHQgd2hlblxuXHQgKiAgLSBlaXRoZXIgdGhlIGFkYXB0YXRpb24gbW9kZSBpcyBzZXQuXG5cdCAqICAtIG9yIHRoZSBmaWVsZCBpcyB2aXNpYmxlIGluIHRoZSBtYW5pZmVzdCBhbmQgdGhlIGRlZ3JhZGVkIG1vZGUgaXMgc2V0LlxuXHQgKiBAcGFyYW0gZmllbGRQcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGQgaXMgdmlzaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzRmllbGRWaXNpYmxlKGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllcyk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLmlzQWRhcHRhdGlvbiB8fCAodGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoICYmIHRoaXMuZGVncmFkZWRNb2RlKSkge1xuXHRcdFx0Y29uc3QgaXNTdGF0aWNFZGl0TW9kZSA9IE9iamVjdC5rZXlzKEZpZWxkRWRpdE1vZGUpLmluY2x1ZGVzKGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuZWRpdE1vZGUgYXMgRmllbGRFZGl0TW9kZSk7XG5cdFx0XHRjb25zdCBpc0VkaXRhYmxlID1cblx0XHRcdFx0IWlzU3RhdGljRWRpdE1vZGUgfHwgKGlzU3RhdGljRWRpdE1vZGUgJiYgZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5lZGl0TW9kZSA9PT0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdFx0XHRyZXR1cm4gaXNFZGl0YWJsZSAmJiBmaWVsZFByb3BlcnRpZXMudmlzaWJpbGl0eUJpbmRpbmdzLmlzVmlzaWJsZSAhPT0gXCJmYWxzZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5nZXRGaWVsZEVkaXRhYmxlKGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuZWRpdE1vZGUpICYmXG5cdFx0XHQhdGhpcy5pc0hpZGRlbkZvckNvbnRleHRzKGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuaXNWaXNpYmxlKVxuXHRcdCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtFQTtBQUNBO0FBQ0E7RUFGQSxJQUdxQkEsb0JBQW9CO0lBMkJ4QyxTQUFBQSxxQkFBWUMsS0FBcUUsRUFBRTtNQUFBLEtBbEJsRUMsZUFBZSxHQUFHLEVBQUU7TUFBQSxLQUlwQkMsZ0JBQWdCLEdBQXFCLEVBQUU7TUFBQSxLQU1oREMsZUFBZSxHQUEwQixFQUFFO01BU2xELE1BQU1DLGNBQWMsR0FBSUosS0FBSyxDQUFDSyxLQUFLLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQWNDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsVUFBVSxDQUFDQyxVQUFVO1FBQ3RHQyxTQUFTLEdBQUlWLEtBQUssQ0FBQ0ssS0FBSyxDQUFDTSxRQUFRLENBQUMsQ0FBQyxDQUFnQkMsWUFBWSxDQUFDLENBQUM7TUFFbEUsSUFBSSxDQUFDUCxLQUFLLEdBQUdMLEtBQUssQ0FB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
|
|
@@ -21,6 +21,7 @@ import type { MassEditTableConfiguration } from "sap/fe/core/converters/controls
|
|
|
21
21
|
import type { AnnotationTableColumn } from "sap/fe/core/converters/controls/Common/table/Columns";
|
|
22
22
|
import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
|
|
23
23
|
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
24
|
+
import ResourceModelHelper from "sap/fe/core/helpers/ResourceModelHelper";
|
|
24
25
|
import { isProperty } from "sap/fe/core/helpers/TypeGuards";
|
|
25
26
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
26
27
|
import { enhanceDataModelPath, getContextRelativeTargetObjectPath, getRelativePaths } from "sap/fe/core/templating/DataModelPathHelper";
|
|
@@ -202,28 +203,28 @@ export default class MassEditDialogHelper {
|
|
|
202
203
|
* @returns A promise that resolves the contexts to be finally managed.
|
|
203
204
|
*/
|
|
204
205
|
private async confirmSelection(contexts: ODataV4Context[], selectedContexts: number): Promise<ODataV4Context[]> {
|
|
205
|
-
const
|
|
206
|
+
const resourceModel = ResourceModelHelper.getResourceModel(this.table);
|
|
206
207
|
const coreResourceBundle = Library.getResourceBundleFor("sap.fe.core") as ResourceBundle;
|
|
207
208
|
|
|
208
209
|
const updatableContexts = contexts.length;
|
|
209
210
|
return new Promise((resolve) => {
|
|
210
211
|
try {
|
|
211
212
|
const tableAPI = this.table.getParent() as TableAPI;
|
|
212
|
-
const editButton =
|
|
213
|
+
const editButton = resourceModel.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
|
|
213
214
|
cancelButton = coreResourceBundle.getText("C_COMMON_OBJECT_PAGE_CANCEL"),
|
|
214
215
|
metaModel = (this.table.getModel() as ODataModel).getMetaModel(),
|
|
215
216
|
typeName =
|
|
216
|
-
this.getResourceText(this.headerInfo?.TypeName) ??
|
|
217
|
+
this.getResourceText(this.headerInfo?.TypeName) ?? resourceModel.getText("C_MASS_EDIT_DIALOG_DEFAULT_TYPENAME"),
|
|
217
218
|
typeNamePlural =
|
|
218
219
|
this.getResourceText(this.headerInfo?.TypeNamePlural) ??
|
|
219
|
-
|
|
220
|
+
resourceModel.getText("C_MASS_EDIT_DIALOG_DEFAULT_TYPENAME_PLURAL"),
|
|
220
221
|
messageDetail =
|
|
221
222
|
ModelHelper.isDraftSupported(metaModel, this.table.data("targetCollectionPath")) && tableAPI.readOnly
|
|
222
223
|
? this.getMessageDetailForNonEditable(typeName, typeNamePlural)
|
|
223
224
|
: "";
|
|
224
225
|
|
|
225
226
|
MessageBox.warning(
|
|
226
|
-
|
|
227
|
+
resourceModel.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [
|
|
227
228
|
selectedContexts - updatableContexts,
|
|
228
229
|
selectedContexts,
|
|
229
230
|
updatableContexts,
|
|
@@ -404,7 +405,7 @@ export default class MassEditDialogHelper {
|
|
|
404
405
|
} else if (expBinding === "false") {
|
|
405
406
|
return true;
|
|
406
407
|
}
|
|
407
|
-
const anyObject =
|
|
408
|
+
const anyObject = <Any anyBoolean={expBinding} />;
|
|
408
409
|
anyObject.setModel(this.analyzedContexts[0].getModel());
|
|
409
410
|
const isHidden = !this.analyzedContexts.find((context) => {
|
|
410
411
|
anyObject.setBindingContext(context);
|
|
@@ -612,7 +613,7 @@ export default class MassEditDialogHelper {
|
|
|
612
613
|
const bindingType = binding.type ?? "any";
|
|
613
614
|
parameters[bindingType] = binding.expression;
|
|
614
615
|
for (const context of analyzedContexts) {
|
|
615
|
-
const control =
|
|
616
|
+
const control = <Any {...parameters} />;
|
|
616
617
|
control.setModel(model);
|
|
617
618
|
control.setBindingContext(context);
|
|
618
619
|
controls.push(control);
|
|
@@ -646,7 +647,7 @@ export default class MassEditDialogHelper {
|
|
|
646
647
|
return null;
|
|
647
648
|
} else {
|
|
648
649
|
const context = this.contexts[0];
|
|
649
|
-
const anyObject =
|
|
650
|
+
const anyObject = <Any any={compileExpression(formatWithTypeInformation(property, pathInModel(propertyPath)))} />;
|
|
650
651
|
anyObject.setModel(context.getModel());
|
|
651
652
|
anyObject.setBindingContext(context);
|
|
652
653
|
const value = anyObject.getBindingInfo("any").binding.getType().parseValue("", "string");
|
|
@@ -683,7 +684,7 @@ export default class MassEditDialogHelper {
|
|
|
683
684
|
if (fieldData.inputType === "CheckBox") {
|
|
684
685
|
return [];
|
|
685
686
|
}
|
|
686
|
-
const anyObject =
|
|
687
|
+
const anyObject = (<Any anyText={fieldData.textBinding.expression} />) as typeof Any;
|
|
687
688
|
anyObject.setModel(this.contexts[0].getModel());
|
|
688
689
|
for (const selectedContext of this.analyzedContexts) {
|
|
689
690
|
anyObject.setBindingContext(selectedContext);
|
|
@@ -755,7 +756,7 @@ export default class MassEditDialogHelper {
|
|
|
755
756
|
} else if (Object.keys(FieldEditMode).includes(expBinding as FieldEditMode)) {
|
|
756
757
|
return false;
|
|
757
758
|
} else if (expBinding) {
|
|
758
|
-
const anyControl =
|
|
759
|
+
const anyControl = <Any any={expBinding} />;
|
|
759
760
|
const model = this.analyzedContexts[0].getModel();
|
|
760
761
|
anyControl.setModel(model);
|
|
761
762
|
const visible = this.analyzedContexts.some((context) => {
|