@sapui5/sap.fe.macros 1.140.0 → 1.141.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +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 +14 -10
- package/src/sap/fe/macros/Field.ts +15 -12
- package/src/sap/fe/macros/MacroAPI.js +9 -4
- package/src/sap/fe/macros/MacroAPI.ts +9 -4
- package/src/sap/fe/macros/MultiValueField.js +10 -5
- package/src/sap/fe/macros/MultiValueField.tsx +7 -1
- 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/Status.js +38 -13
- package/src/sap/fe/macros/Status.tsx +26 -6
- 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 +195 -55
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
- 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/chart/Chart.js +2 -2
- package/src/sap/fe/macros/chart/Chart.tsx +1 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
- 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 +2 -2
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -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/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/field/Field.js +2 -2
- package/src/sap/fe/macros/field/Field.tsx +1 -1
- 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/FieldTemplating.js +3 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
- package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
- 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/FormContainer.block.js +555 -4
- package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
- package/src/sap/fe/macros/form/FormDelegate.js +6 -9
- package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
- 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 +16 -8
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
- 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 +4 -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/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 +20 -2
- package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
- package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
- package/src/sap/fe/macros/messagebundle_da.properties +1 -1
- package/src/sap/fe/macros/messagebundle_de.properties +4 -4
- package/src/sap/fe/macros/messagebundle_el.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_es.properties +2 -2
- package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
- package/src/sap/fe/macros/messagebundle_et.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
- package/src/sap/fe/macros/messagebundle_id.properties +5 -5
- package/src/sap/fe/macros/messagebundle_it.properties +1 -1
- package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
- package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
- package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_no.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_th.properties +1 -1
- package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
- package/src/sap/fe/macros/messages/MessageButton.js +1 -1
- package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
- package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
- 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/MicroChartHelper.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
- 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 +5 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
- 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 -2
- package/src/sap/fe/macros/table/TableHelper.ts +1 -1
- 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 +3 -2
- package/src/sap/fe/macros/table/Utils.ts +7 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
- 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/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
|
@@ -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/deepEqual", "sap/base/util/deepExtend", "sap/fe/base/BindingToolkit", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/controllerextensions/cards/CollaborationManager", "sap/fe/core/converters/controls/Common/table/Columns", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/DeleteHelper", "sap/fe/core/helpers/ExcelFormatHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/SizeHelper", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/type/EDM", "sap/fe/macros/CollectionBindingInfo", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/filterBar/FilterBarDelegate", "sap/fe/macros/table/MdcTableTemplate", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/TableRuntime", "sap/fe/macros/table/TableSizeHelper", "sap/fe/macros/table/Utils", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageType", "sap/ui/core/Fragment", "sap/ui/core/util/XMLPreprocessor", "sap/ui/mdc/odata/v4/TableDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/model/Filter", "sap/ui/model/Sorter", "sap/ui/model/json/JSONModel", "../TableEventHandlerProvider"], function (Log, deepEqual, deepExtend, BindingToolkit, jsx, ActionRuntime, CommonUtils, MetaModelConverter, CollaborationManager, Columns, ValueFormatter, DeleteHelper, ExcelFormat, ModelHelper, PromiseKeeper, ResourceModelHelper, SizeHelper, DataModelPathHelper, EDM, CollectionBindingInfoAPI, CommonHelper, DelegateUtil, FilterBarDelegate, MdcTableTemplate, TableHelper, TableRuntime, TableSizeHelper, TableUtils, IllustratedMessage, IllustratedMessageType, Fragment, XMLPreprocessor, TableDelegateBase, TypeMap, Filter, Sorter, JSONModel, TableEventHandlerProvider) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExtend", "sap/fe/base/BindingToolkit", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/controllerextensions/cards/CollaborationManager", "sap/fe/core/converters/controls/Common/table/Columns", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/DeleteHelper", "sap/fe/core/helpers/ExcelFormatHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/SizeHelper", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/type/EDM", "sap/fe/macros/CollectionBindingInfo", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/filterBar/FilterBarDelegate", "sap/fe/macros/table/MdcTableTemplate", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/TableRuntime", "sap/fe/macros/table/TableSizeHelper", "sap/fe/macros/table/Utils", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageType", "sap/ui/core/Element", "sap/ui/core/Fragment", "sap/ui/core/util/XMLPreprocessor", "sap/ui/mdc/odata/v4/TableDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/model/Filter", "sap/ui/model/Sorter", "sap/ui/model/json/JSONModel", "../TableEventHandlerProvider"], function (Log, deepEqual, deepExtend, BindingToolkit, jsx, ActionRuntime, CommonUtils, MetaModelConverter, CollaborationManager, Columns, ValueFormatter, DeleteHelper, ExcelFormat, ModelHelper, PromiseKeeper, ResourceModelHelper, SizeHelper, DataModelPathHelper, EDM, CollectionBindingInfoAPI, CommonHelper, DelegateUtil, FilterBarDelegate, MdcTableTemplate, TableHelper, TableRuntime, TableSizeHelper, TableUtils, IllustratedMessage, IllustratedMessageType, UI5Element, Fragment, XMLPreprocessor, TableDelegateBase, TypeMap, Filter, Sorter, JSONModel, TableEventHandlerProvider) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var getSlotColumn = MdcTableTemplate.getSlotColumn;
|
|
@@ -86,7 +86,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
86
86
|
}
|
|
87
87
|
},
|
|
88
88
|
_computeVisualSettingsForPropertyWithValueHelp: function (table, property) {
|
|
89
|
-
const tableAPI =
|
|
89
|
+
const tableAPI = this._getTableAPI(table);
|
|
90
90
|
if (!property.propertyInfos) {
|
|
91
91
|
const metaModel = table.getModel().getMetaModel();
|
|
92
92
|
if (property.annotationPath && metaModel) {
|
|
@@ -102,7 +102,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
104
|
_computeVisualSettingsForPropertyWithUnit: function (table, propertyInfo, unit, unitText, timezoneText) {
|
|
105
|
-
const oTableAPI = table ?
|
|
105
|
+
const oTableAPI = table ? this._getTableAPI(table) : null;
|
|
106
106
|
// update gap for properties with string unit
|
|
107
107
|
const text = unitText || timezoneText;
|
|
108
108
|
if (text) {
|
|
@@ -167,8 +167,16 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
167
167
|
});
|
|
168
168
|
return properties;
|
|
169
169
|
},
|
|
170
|
+
_getTableAPI(table) {
|
|
171
|
+
let tableAPI = table.getParent();
|
|
172
|
+
if (!tableAPI) {
|
|
173
|
+
tableAPI = UI5Element.getElementById(table.getId() + "::Table");
|
|
174
|
+
}
|
|
175
|
+
return tableAPI;
|
|
176
|
+
},
|
|
170
177
|
getColumnsFor: function (table) {
|
|
171
|
-
|
|
178
|
+
const tableAPI = this._getTableAPI(table);
|
|
179
|
+
return tableAPI.getTableDefinition().columns;
|
|
172
180
|
},
|
|
173
181
|
/**
|
|
174
182
|
* Returns the export capabilities for the given sap.ui.mdc.Table instance.
|
|
@@ -450,7 +458,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
450
458
|
return;
|
|
451
459
|
}).then(() => {
|
|
452
460
|
fetchedProperties = this._updatePropertyInfo(table, fetchedProperties);
|
|
453
|
-
const tableAPI =
|
|
461
|
+
const tableAPI = this._getTableAPI(table);
|
|
454
462
|
tableAPI.setEnhancedFetchedPropertyInfos(fetchedProperties);
|
|
455
463
|
fetchedProperties = tableAPI.getPropertyInfos();
|
|
456
464
|
return;
|
|
@@ -461,7 +469,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
461
469
|
});
|
|
462
470
|
},
|
|
463
471
|
_getCachedOrFetchPropertiesForEntity: async function (table, entityTypePath, metaModel, appComponent) {
|
|
464
|
-
const tableAPI =
|
|
472
|
+
const tableAPI = this._getTableAPI(table);
|
|
465
473
|
const fetchedProperties = tableAPI.getCachedPropertyInfos();
|
|
466
474
|
if (fetchedProperties.length) {
|
|
467
475
|
return Promise.resolve(fetchedProperties);
|
|
@@ -541,7 +549,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
541
549
|
};
|
|
542
550
|
}
|
|
543
551
|
}
|
|
544
|
-
|
|
552
|
+
const tableAPI = this._getTableAPI(table);
|
|
553
|
+
illustratedInformation.illustrationSize = tableAPI.getNoDataMessageMode();
|
|
545
554
|
if (illustratedInformation.illustrationSize === "text") {
|
|
546
555
|
const currentNoData = table.getNoData();
|
|
547
556
|
if (typeof currentNoData === "string" && currentNoData === illustratedInformation.description) {
|
|
@@ -553,6 +562,30 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
553
562
|
this.setNoDataInformation(table, illustratedInformation);
|
|
554
563
|
}
|
|
555
564
|
},
|
|
565
|
+
/**
|
|
566
|
+
* Handles the dataRequested event for the table binding to set up table defaults.
|
|
567
|
+
* @param oTable The MDC table instance
|
|
568
|
+
* @param oInternalModelContext The internal model context for the table
|
|
569
|
+
*/
|
|
570
|
+
handleTableDataRequested: function (oTable, oInternalModelContext) {
|
|
571
|
+
const oBinding = oTable && oTable.getRowBinding(),
|
|
572
|
+
bDataRequestedAttached = oInternalModelContext && oInternalModelContext.getProperty("dataRequestedAttached");
|
|
573
|
+
if (oInternalModelContext && !bDataRequestedAttached) {
|
|
574
|
+
oBinding.attachDataRequested(() => {
|
|
575
|
+
if (!oInternalModelContext.getProperty("dataRequestedTimeoutSet")) {
|
|
576
|
+
oInternalModelContext.setProperty("dataRequestedTimeoutSet", true);
|
|
577
|
+
setTimeout(() => {
|
|
578
|
+
oInternalModelContext.setProperty("dataRequestedTimeoutSet", false);
|
|
579
|
+
const oTableAPI = oTable ? oTable.getParent() : null;
|
|
580
|
+
if (oTableAPI) {
|
|
581
|
+
oTableAPI.tableDefaultsPromise = oTableAPI.getTableDefaults(oTable) ?? Promise.resolve({});
|
|
582
|
+
}
|
|
583
|
+
}, 0);
|
|
584
|
+
}
|
|
585
|
+
});
|
|
586
|
+
oInternalModelContext.setProperty("dataRequestedAttached", true);
|
|
587
|
+
}
|
|
588
|
+
},
|
|
556
589
|
handleTableDataReceived: function (oTable, oInternalModelContext) {
|
|
557
590
|
const oBinding = oTable && oTable.getRowBinding(),
|
|
558
591
|
bDataReceivedAttached = oInternalModelContext && oInternalModelContext.getProperty("dataReceivedAttached");
|
|
@@ -561,21 +594,21 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
561
594
|
// as the dataReceived event is fired multiple times, we need to ensure that the event is only handled once
|
|
562
595
|
if (!oInternalModelContext.getProperty("dataReceivedTimeoutSet")) {
|
|
563
596
|
oInternalModelContext.setProperty("dataReceivedTimeoutSet", true);
|
|
564
|
-
setTimeout(() => {
|
|
597
|
+
setTimeout(async () => {
|
|
565
598
|
oInternalModelContext.setProperty("dataReceivedTimeoutSet", false);
|
|
566
599
|
// Refresh the selected contexts to trigger re-calculation of enabled state of actions.
|
|
567
600
|
oInternalModelContext.setProperty("selectedContexts", []);
|
|
568
601
|
const aSelectedContexts = oTable.getSelectedContexts();
|
|
569
602
|
oInternalModelContext.setProperty("selectedContexts", aSelectedContexts);
|
|
570
603
|
oInternalModelContext.setProperty("numberOfSelectedContexts", aSelectedContexts.length);
|
|
571
|
-
const tableAPI =
|
|
604
|
+
const tableAPI = this._getTableAPI(oTable);
|
|
572
605
|
const oActionOperationAvailableMap = JSON.parse(tableAPI.tableDefinition.operationAvailableMap);
|
|
573
606
|
ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, aSelectedContexts, "table");
|
|
574
607
|
// Refresh enablement of delete button
|
|
575
608
|
DeleteHelper.updateDeleteInfoForSelectedContexts(oInternalModelContext, aSelectedContexts);
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
609
|
+
if (tableAPI) {
|
|
610
|
+
const tableDefaultData = await tableAPI.tableDefaultsPromise?.catch(() => undefined);
|
|
611
|
+
await tableAPI.setUpEmptyRows(oTable, false, tableDefaultData);
|
|
579
612
|
}
|
|
580
613
|
this._updateAvailableCards(oTable);
|
|
581
614
|
}, 0);
|
|
@@ -603,7 +636,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
603
636
|
*/
|
|
604
637
|
enableOptimisticBatchMode: function (controller, table) {
|
|
605
638
|
const filtersPropertiesAsPotentiallySensitiveDataOrDateType = table && TableUtils.isFilterEligibleForOptimisticBatch(table, controller._getFilterBarControl());
|
|
606
|
-
|
|
639
|
+
const tableAPI = this._getTableAPI(table);
|
|
640
|
+
tableAPI.getOptimisticBatchEnablerPromise()?.resolve(!filtersPropertiesAsPotentiallySensitiveDataOrDateType);
|
|
607
641
|
},
|
|
608
642
|
/**
|
|
609
643
|
* Setter for the optimistic batch enabler callback function.
|
|
@@ -622,14 +656,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
622
656
|
}
|
|
623
657
|
},
|
|
624
658
|
rebind: async function (oTable, oBindingInfo) {
|
|
625
|
-
const
|
|
626
|
-
const bIsSuspended =
|
|
627
|
-
|
|
659
|
+
const tableAPI = this._getTableAPI(oTable);
|
|
660
|
+
const bIsSuspended = tableAPI?.getProperty("bindingSuspended");
|
|
661
|
+
tableAPI?.setProperty("outDatedBinding", bIsSuspended);
|
|
628
662
|
if (!bIsSuspended) {
|
|
629
663
|
TableRuntime.clearSelection(oTable);
|
|
630
664
|
TableDelegateBase.rebind.apply(this, [oTable, oBindingInfo]);
|
|
631
665
|
TableUtils.onTableBound(oTable);
|
|
632
666
|
return TableUtils.whenBound(oTable).then(table => {
|
|
667
|
+
this.handleTableDataRequested(table, table.getBindingContext("internal"));
|
|
633
668
|
this.handleTableDataReceived(table, table.getBindingContext("internal"));
|
|
634
669
|
return;
|
|
635
670
|
}).catch(function (oError) {
|
|
@@ -668,7 +703,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
668
703
|
},
|
|
669
704
|
updateBindingInfo: function (table, bindingInfo) {
|
|
670
705
|
const internalBindingContext = table.getBindingContext("internal");
|
|
671
|
-
const tableAPI =
|
|
706
|
+
const tableAPI = this._getTableAPI(table);
|
|
707
|
+
const quickFilter = table.getQuickFilter();
|
|
672
708
|
const collectionBindingInfoAPI = new CollectionBindingInfoAPI(bindingInfo);
|
|
673
709
|
internalBindingContext?.setProperty("isInsightsEnabled", true);
|
|
674
710
|
TableDelegateBase.updateBindingInfo.apply(this, [table, bindingInfo]);
|
|
@@ -678,8 +714,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
678
714
|
this.setTableNoDataIllustratedMessage(table, bindingInfo);
|
|
679
715
|
this._handleRecommendationOutputFields(table, bindingInfo);
|
|
680
716
|
this._handleFiltersForExternalID(table, bindingInfo);
|
|
681
|
-
|
|
682
|
-
collectionBindingInfo: collectionBindingInfoAPI
|
|
717
|
+
tableAPI?.fireEvent("beforeRebindTable", {
|
|
718
|
+
collectionBindingInfo: collectionBindingInfoAPI,
|
|
719
|
+
quickFilterKey: quickFilter?.getSelectedKey()
|
|
683
720
|
});
|
|
684
721
|
const attachedEvents = collectionBindingInfoAPI.getAttachedEvents();
|
|
685
722
|
/**
|
|
@@ -703,7 +740,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
703
740
|
const sorters = bindingInfo.sorter;
|
|
704
741
|
const newSortersToBeApplied = [];
|
|
705
742
|
if (sorters?.length) {
|
|
706
|
-
const tableAPI =
|
|
743
|
+
const tableAPI = this._getTableAPI(table);
|
|
707
744
|
const tableProperties = tableAPI.getCachedPropertyInfos();
|
|
708
745
|
for (const sorter of sorters) {
|
|
709
746
|
const tableProperty = tableProperties?.find(property => property.path === sorter.getPath());
|
|
@@ -728,7 +765,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
728
765
|
}
|
|
729
766
|
},
|
|
730
767
|
_handleRecommendationOutputFields: function (table, oBindingInfo) {
|
|
731
|
-
const tableAPI =
|
|
768
|
+
const tableAPI = this._getTableAPI(table);
|
|
732
769
|
const controller = tableAPI?.getPageController();
|
|
733
770
|
if (controller?.recommendations.isRecommendationEnabled()) {
|
|
734
771
|
const appComponent = controller.getAppComponent();
|
|
@@ -744,7 +781,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
744
781
|
* @param table The mdc table control.
|
|
745
782
|
*/
|
|
746
783
|
_updateAvailableCards: async function (table) {
|
|
747
|
-
const tableAPI =
|
|
784
|
+
const tableAPI = this._getTableAPI(table);
|
|
748
785
|
if (tableAPI.getPageController().getView().getViewData()?.converterType === "ListReport") {
|
|
749
786
|
const appComponent = tableAPI?.getPageController()?.getAppComponent();
|
|
750
787
|
const cards = [];
|
|
@@ -752,7 +789,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
752
789
|
const collaborationManager = new CollaborationManager();
|
|
753
790
|
const cardObject = collaborationManager.updateCards(cards);
|
|
754
791
|
const parentAppId = appComponent.getId();
|
|
755
|
-
appComponent.getCollaborationManagerService().addCardsToCollaborationManager(cardObject, parentAppId);
|
|
792
|
+
appComponent.getCollaborationManagerService().addCardsToCollaborationManager(cardObject, parentAppId, tableAPI.getPageController().getView().getId());
|
|
756
793
|
appComponent.getCollaborationManagerService().shareAvailableCards();
|
|
757
794
|
}
|
|
758
795
|
},
|
|
@@ -763,7 +800,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
763
800
|
* @returns An array of property name to be requested.
|
|
764
801
|
*/
|
|
765
802
|
getInResultPropertyKeys: function (table) {
|
|
766
|
-
const tableAPI =
|
|
803
|
+
const tableAPI = this._getTableAPI(table);
|
|
767
804
|
if (tableAPI.tableDefinition.control.analyticalConfiguration?.aggregationOnLeafLevel) {
|
|
768
805
|
const allKkeysRequested = this.checkAllKeysAreRequested(tableAPI);
|
|
769
806
|
const internalBindingContext = table.getBindingContext("internal");
|
|
@@ -835,7 +872,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
835
872
|
return binding.getQueryOptionsFromParameters().$search;
|
|
836
873
|
},
|
|
837
874
|
updateBinding: function (table, bindingInfo, binding) {
|
|
838
|
-
const tableAPI =
|
|
875
|
+
const tableAPI = this._getTableAPI(table);
|
|
839
876
|
const bIsSuspended = tableAPI?.getProperty("bindingSuspended");
|
|
840
877
|
if (!bIsSuspended) {
|
|
841
878
|
// if the rowBindingInfo has a $$getKeepAliveContext parameter we need to check it is the only Table with such a
|
|
@@ -928,7 +965,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
928
965
|
tableAPI?.setProperty("outDatedBinding", bIsSuspended);
|
|
929
966
|
},
|
|
930
967
|
_computeRowBindingInfoFromTemplate: function (oTable) {
|
|
931
|
-
const tableAPI =
|
|
968
|
+
const tableAPI = this._getTableAPI(oTable);
|
|
932
969
|
const rowBindingInfo = tableAPI.getTableTemplateBindingInfo();
|
|
933
970
|
const bindingContext = oTable.getBindingContext();
|
|
934
971
|
let tableCanBeInInlineEdit = false;
|
|
@@ -1178,8 +1215,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1178
1215
|
},
|
|
1179
1216
|
/**
|
|
1180
1217
|
* Invoked when a column is added using the table personalization dialog.
|
|
1181
|
-
* @param
|
|
1182
|
-
* @param
|
|
1218
|
+
* @param table Instance of table control
|
|
1219
|
+
* @param propertyInfoName Name of the property for which the column is added
|
|
1183
1220
|
* @param mPropertyBag Instance of property bag from the flexibility API
|
|
1184
1221
|
* @param mPropertyBag.modifier Instance of the control tree modifier
|
|
1185
1222
|
* @param mPropertyBag.appComponent Instance of the app component
|
|
@@ -1191,7 +1228,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1191
1228
|
oModifier = mPropertyBag.modifier,
|
|
1192
1229
|
sTableId = oModifier.getId(table),
|
|
1193
1230
|
aColumns = table.isA ? this.getColumnsFor(table) : null,
|
|
1194
|
-
tableAPI =
|
|
1231
|
+
tableAPI = this._getTableAPI(table);
|
|
1195
1232
|
if (!aColumns) {
|
|
1196
1233
|
// We return null here because everything should apply at runtime
|
|
1197
1234
|
return Promise.resolve(null);
|
|
@@ -1223,7 +1260,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1223
1260
|
return this._templateSlotColumnFragment(columnInfo, view, oModifier, sTableId);
|
|
1224
1261
|
}
|
|
1225
1262
|
if (columnInfo.type === "Computed") {
|
|
1226
|
-
const enableAnalytics =
|
|
1263
|
+
const enableAnalytics = this._getTableAPI(table).getTableDefinition().enableAnalytics;
|
|
1227
1264
|
return getComputedColumn(sTableId, columnInfo, oTableContext, enableAnalytics);
|
|
1228
1265
|
}
|
|
1229
1266
|
|
|
@@ -1257,7 +1294,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1257
1294
|
if (bDisplayMode !== undefined && typeof bDisplayMode !== "boolean") {
|
|
1258
1295
|
bDisplayMode = bDisplayMode === "true";
|
|
1259
1296
|
}
|
|
1260
|
-
const tableAPI = table.getParent();
|
|
1261
1297
|
const oThis = new JSONModel({
|
|
1262
1298
|
enableAutoColumnWidth: tableAPI.getTableDefinition().control.enableAutoColumnWidth,
|
|
1263
1299
|
readOnly: bDisplayMode,
|
|
@@ -1339,7 +1375,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1339
1375
|
* @returns Formatted title of the group header.
|
|
1340
1376
|
*/
|
|
1341
1377
|
formatGroupHeader(table, context, property) {
|
|
1342
|
-
const propertyInfos =
|
|
1378
|
+
const propertyInfos = this._getTableAPI(table).getEnhancedFetchedPropertyInfos();
|
|
1343
1379
|
const propertyInfo = propertyInfos?.find(obj => {
|
|
1344
1380
|
return obj.name === property;
|
|
1345
1381
|
});
|
|
@@ -1376,4 +1412,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1376
1412
|
}
|
|
1377
1413
|
});
|
|
1378
1414
|
}, false);
|
|
1379
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiT2JqZWN0IiwiYXNzaWduIiwiVGFibGVEZWxlZ2F0ZUJhc2UiLCJhcGlWZXJzaW9uIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAiLCJ0YWJsZSIsInByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb3MiLCJrZXkiLCJpbmRleE9mIiwiY29sdW1uIiwiZ2V0Q29sdW1ucyIsImZpbmQiLCJjb2wiLCJnZXRQcm9wZXJ0eUtleSIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkTWV0YURhdGEiLCJjb252ZXJ0ZWRUeXBlcyIsIm9EYXRhRmllbGQiLCJ0YXJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJhRmllbGRXaWR0aCIsIkRhdGEiLCJmb3JFYWNoIiwib0RhdGEiLCJvRGF0YUZpZWxkV2lkdGgiLCIkVHlwZSIsIlRhYmxlU2l6ZUhlbHBlciIsImdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImdldFdpZHRoRm9yRGF0YUZpZWxkIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsInRvU3RyaW5nIiwicHVzaCIsIm5XaWRlc3QiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIk1hdGgiLCJtYXgiLCJ2aXN1YWxTZXR0aW5ncyIsImRlZXBFeHRlbmQiLCJ3aWR0aENhbGN1bGF0aW9uIiwidmVydGljYWxBcnJhbmdlbWVudCIsIm1pbldpZHRoIiwiY2VpbCIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJwcm9wZXJ0eSIsInRhYmxlQVBJIiwiZ2V0UGFyZW50IiwibWV0YU1vZGVsIiwiZGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwiZ2FwIiwiZ2V0UHJvcGVydHkiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCIsInVuaXQiLCJ1bml0VGV4dCIsInRpbWV6b25lVGV4dCIsIm9UYWJsZUFQSSIsInRleHQiLCJnZXRSZWFkT25seSIsIl9jb21wdXRlTGFiZWwiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSIsInNvbWUiLCJwcm9wIiwicGF0aCIsIm1vZGUiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImFkZGl0aW9uYWxMYWJlbHMiLCJmaWx0ZXJhYmxlIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0aWVzIiwicDEzbk1vZGUiLCJnZXRQMTNuTW9kZSIsInNvcnRhYmxlIiwiZ3JvdXBhYmxlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwiZGF0YVR5cGUiLCJ2aXNpYmxlIiwiZ2V0Q29sdW1uc0ZvciIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJmZXRjaEV4cG9ydENhcGFiaWxpdGllcyIsIm9UYWJsZSIsIm9DYXBhYmlsaXRpZXMiLCJYTFNYIiwib01vZGVsIiwiRGVsZWdhdGVVdGlsIiwiZmV0Y2hNb2RlbCIsInRoZW4iLCJtb2RlbCIsImFTdXBwb3J0ZWRGb3JtYXRzIiwiYUxvd2VyRm9ybWF0cyIsIm1hcCIsImVsZW1lbnQiLCJ0b0xvd2VyQ2FzZSIsIm9Bbm5vdGF0aW9uIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJjb2x1bW5JbmZvIiwiY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRmlsdGVyYWJsZSIsImlzUGF0aEZpbHRlcmFibGUiLCJyZWxhdGl2ZVBhdGgiLCJpc1BhcnRPZkxpbmVJdGVtIiwiaXNQYXJ0T2ZDdXN0b21Db2x1bW4iLCJpc0NvbnN0YW50IiwiX2ZldGNoUHJvcGVydHlJbmZvIiwiYXBwQ29tcG9uZW50Iiwic0Fic29sdXRlTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImlzQ29tcGxleFR5cGUiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiYkZpbHRlcmFibGUiLCJDb21tb25IZWxwZXIiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsImJJc0FuYWx5dGljYWxUYWJsZSIsImdldEN1c3RvbURhdGEiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidG9vbHRpcCIsIl9nZXRUeXBlQ29uZmlnIiwibmFtZSIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsInN0YXJ0c1dpdGgiLCJNb2RlbEhlbHBlciIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbkluZm8iLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZW50aXR5VHlwZVBhdGgiLCJiaW5kaW5nUGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJmZXRjaGVkUHJvcGVydGllcyIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIlByb21pc2UiLCJyZXNvbHZlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZSIsIkVycm9yIiwic2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsImdldFByb3BlcnR5SW5mb3MiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJnZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic3ViRmV0Y2hlZFByb3BlcnRpZXMiLCJzZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic2V0Tm9EYXRhSW5mb3JtYXRpb24iLCJpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbiIsIm5vRGF0YUFnZ3JlZ2F0aW9uIiwiZ2V0Tm9EYXRhIiwiaXNBIiwiY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSIsInNldFRpdGxlIiwidGl0bGUiLCJzZXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0SWxsdXN0cmF0aW9uVHlwZSIsImlsbHVzdHJhdGlvblR5cGUiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGVkTWVzc2FnZSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsInNldE5vRGF0YSIsInNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlIiwiYmluZGluZ0luZm8iLCJ0YWJsZUZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdWJzdHJpbmciLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMiLCJnZXRRdWlja0ZpbHRlciIsImdldFRleHQiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9TZWFyY2hSZXN1bHRzIiwiZmlsdGVyQXNzb2NpYXRpb24iLCJnZXRGaWx0ZXIiLCJoYXNGaWx0ZXJPclNlYXJjaCIsInNlYXJjaCIsImZpbHRlcnMiLCJ0ZXN0IiwiTm9EYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJnZXROb0RhdGFNZXNzYWdlTW9kZSIsImN1cnJlbnROb0RhdGEiLCJoYW5kbGVUYWJsZURhdGFSZWNlaXZlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVjZWl2ZWRBdHRhY2hlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNldFRpbWVvdXQiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJEZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsInNldFVwRW1wdHlSb3dzIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwic2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsIiwiY29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsIiwiZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZSIsImZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlIiwiaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJkYXRhTW9kZWwiLCJpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsImlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQiLCJvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIiLCJwcm9taXNlIiwicmViaW5kIiwib0JpbmRpbmdJbmZvIiwiYklzU3VzcGVuZGVkIiwiVGFibGVSdW50aW1lIiwiY2xlYXJTZWxlY3Rpb24iLCJhcHBseSIsIm9uVGFibGVCb3VuZCIsIndoZW5Cb3VuZCIsIm9FcnJvciIsImZldGNoUHJvcGVydGllcyIsInByZUluaXQiLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwidXBkYXRlQmluZGluZ0luZm8iLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSIsIl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvIiwiX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzIiwiX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZmlyZUV2ZW50IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvIiwiYXR0YWNoZWRFdmVudHMiLCJnZXRBdHRhY2hlZEV2ZW50cyIsImNvbnRleHQiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsInNldEF0dGFjaEV2ZW50cyIsImUiLCJzb3J0ZXJzIiwic29ydGVyIiwibmV3U29ydGVyc1RvQmVBcHBsaWVkIiwidGFibGVQcm9wZXJ0aWVzIiwidGFibGVQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsInVuaXRTb3J0ZXJBdmFpbGFibGUiLCJzb3J0IiwiU29ydGVyIiwiZ2V0RmlsdGVycyIsInVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCIsInRhYmxlRGVmIiwicmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHMiLCJhbm5vdGF0aW9uIiwiZW50aXR5VHlwZU5hbWUiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImdldFZpZXciLCJjb252ZXJ0ZXJUeXBlIiwiY2FyZHMiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCIkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJjb2xsZWN0aW9uUGF0aCIsImludGVybmFsTW9kZWwiLCJrZXB0QWxpdmVMaXN0cyIsIm5lZWRNYW51YWxSZWZyZXNoIiwidmlldyIsIm1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5IiwicGVuZGluZ01hbnVhbFVwZGF0ZSIsIm5ld1NvcnRlcnMiLCJzdHJpbmdpZnkiLCJ2aWV3RGF0YSIsIm9sZEZpbHRlcnMiLCJwcmV2aW91c1NvcnRlcnMiLCJmaWx0ZXJOb3RDaGFuZ2VkIiwiZGVlcEVxdWFsIiwiTFJNdWx0aVZpZXdFbmFibGVkIiwidmlld3MiLCJlbmFibGVBbmFseXRpY3MiLCJzZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwic2V0R3JvdXBDb25kaXRpb25zIiwic2V0VGFibGVCaW5kaW5nSW5mbyIsInNldERvd25sb2FkVXJsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsInN0b3JlZEV2ZW50cyIsIl9yZWYiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZSIsInJvd0JpbmRpbmdJbmZvIiwiZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvIiwiYmluZGluZ0NvbnRleHQiLCJ0YWJsZUNhbkJlSW5JbmxpbmVFZGl0IiwiZ2V0QmluZGluZyIsImdldFVwZGF0ZUdyb3VwSWQiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJ1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeSIsImFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJJbmZvIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInBheWxvYWQiLCJnZXRQYXlsb2FkIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsImZpbHRlck9uQWN0aXZlIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQiLCJtb2RpZmllciIsInRhYmxlSWQiLCJzbG90Q29sdW1uc1hNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0U2xvdENvbHVtbiIsInNsb3RYTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm9UZW1wbGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwibm9kZU5hbWUiLCJyZXBsYWNlV2l0aCIsInJlbW92ZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJtb2RlbHMiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwidGFyZ2V0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJFeGNlbEZvcm1hdCIsImdldEV4Y2VsRGF0ZWZyb21KU0RhdGUiLCJnZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwiX2dldFZIUmVsZXZhbnRGaWVsZHMiLCJzTWV0YWRhdGFQYXRoIiwic0JpbmRpbmdQYXRoIiwiYUZpZWxkcyIsIm9EYXRhRmllbGREYXRhIiwiJGtpbmQiLCJvVmFsdWUiLCJpSW5kZXgiLCJnZXROYXZpZ2F0aW9uUGF0aCIsIl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbiIsImFDb2x1bW5zIiwiYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uIiwic0FkZFZpc2libGVDb2x1bW5OYW1lIiwic1Zpc2libGVDb2x1bW5OYW1lIiwiYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCIsInNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yIiwiaSIsImoiLCJyZW1vdmVJdGVtIiwib1Byb3BlcnR5SW5mb05hbWUiLCJtUHJvcGVydHlCYWciLCJkb1JlbW92ZUl0ZW0iLCJvTW9kaWZpZXIiLCJzRGF0YVByb3BlcnR5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMiLCJfZ2V0TWV0YU1vZGVsIiwiX2dldEdyb3VwSWQiLCJzUmV0cmlldmVkR3JvdXBJZCIsIl9pbnNlcnRBZ2dyZWdhdGlvbiIsIm9WYWx1ZUhlbHAiLCJhZGRJdGVtIiwicHJvcGVydHlJbmZvTmFtZSIsInNUYWJsZUlkIiwid2FybmluZyIsInNQYXRoIiwiZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllciIsIm9UYWJsZUNvbnRleHQiLCJnZXRDdXJyZW50UGFnZVZpZXciLCJnZXRDb21wdXRlZENvbHVtbiIsImdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJwcm9wSW5mbyIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJmblRlbXBsYXRlRnJhZ21lbnQiLCJvSW5Qcm9wZXJ0eUluZm8iLCJvVmlldyIsImJEaXNwbGF5TW9kZSIsInNUYWJsZVR5cGVDdXN0b21EYXRhIiwic0NyZWF0aW9uTW9kZUN1c3RvbURhdGEiLCJhbGwiLCJhQ3VzdG9tRGF0YSIsIm9UaGlzIiwiSlNPTk1vZGVsIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwicmVhZE9ubHkiLCJ0YWJsZVR5cGUiLCJpZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJjb2xsZWN0aW9uIiwiY3JlYXRpb25Nb2RlIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJ0aGlzIiwidGFibGVDb2xsZWN0aW9uIiwiaGFuZGxlclByb3ZpZGVyIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsImNvbGxlY3Rpb25FbnRpdHkiLCJjb21wdXRlZENvbHVtblhNTCIsImdldENvbHVtblRlbXBsYXRlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJkZXN0cm95IiwiZ2V0RmlsdGVyRGVsZWdhdGUiLCJGaWx0ZXJCYXJEZWxlZ2F0ZSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJyZXBsYWNlIiwiZ2V0VHlwZU1hcCIsImZvcm1hdEdyb3VwSGVhZGVyIiwib2JqIiwiZGF0YUJhc2VUeXBlIiwiZXh0ZXJuYWxGb3JtYXQiLCJWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFdpdGhCcmFja2V0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIERhdGFGaWVsZEZvckFubm90YXRpb24sIEZpZWxkR3JvdXBUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEV4dGVuZFwiO1xuaW1wb3J0IHsgaXNDb25zdGFudCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuXG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Q29sdW1uRXhwb3J0U2V0dGluZ3MsXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sXG5cdFRhYmxlQ29sdW1uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgVmFsdWVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBEZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRXhjZWxGb3JtYXQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRXhjZWxGb3JtYXRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGl6ZWRUZXh0LCBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVHlwZUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyQmFyRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgeyBnZXRDb2x1bW5UZW1wbGF0ZSwgZ2V0Q29tcHV0ZWRDb2x1bW4sIGdldFNsb3RDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9NZGNUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWVcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgeyBKc0NvbnRyb2xUcmVlTW9kaWZpZXIgfSBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENUYWJsZSwgTURDVGFibGVQcm9wZXJ0eUluZm8gYXMgUHJvcGVydHlJbmZvLCBkZWZhdWx0IGFzIFRhYmxlLCBWaXN1YWxTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IFRhYmxlRGVsZWdhdGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0LCBkZWZhdWx0IGFzIHY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciBmcm9tIFwiLi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG5jb25zdCBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IgPSBcIi9zZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yXCI7XG5jb25zdCBTRUFSQ0hfSEFTX0JFRU5fRklSRUQgPSBcInNlYXJjaEZpcmVkXCI7XG5jb25zdCBDT0xVTU5fSEFTX0JFRU5fQURERUQgPSBcImNvbHVtbkFkZGVkXCI7XG5jb25zdCBQUkVWSU9VU19TT1JURVJTID0gXCJwcmV2aW91c1NvcnRlcnNcIjtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHNhcC51aS5tZGMuVGFibGUuXG4gKiA8aDM+PGI+Tm90ZTo8L2I+PC9oMz5cbiAqIFRoZSBjbGFzcyBpcyBleHBlcmltZW50YWwgYW5kIHRoZSBBUEkgYW5kIHRoZSBiZWhhdmlvciBhcmUgbm90IGZpbmFsaXplZC4gVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgZm9yIHByb2R1Y3RpdmUgdXNhZ2UuXG4gKiBAYXV0aG9yIFNBUCBTRVxuICogQHByaXZhdGVcbiAqIEBzaW5jZSAxLjY5LjBcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlRGVsZWdhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgT2JqZWN0LmFzc2lnbih7fSwgVGFibGVEZWxlZ2F0ZUJhc2UsIHtcblx0YXBpVmVyc2lvbjogMixcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgYSBGaWVsZEdyb3VwIGNvbHVtbi5cblx0ICogVGhlIHdpZHRoIG9mIHRoZSBGaWVsZEdyb3VwIGlzIHRoZSB3aWR0aCBvZiB0aGUgd2lkZXN0IHByb3BlcnR5IGNvbnRhaW5lZCBpbiB0aGUgRmllbGRHcm91cCAoaW5jbHVkaW5nIHRoZSBsYWJlbCBpZiBzaG93RGF0YUZpZWxkc0xhYmVsIGlzIHRydWUpXG5cdCAqIFRoZSByZXN1bHQgb2YgdGhpcyBjYWxjdWxhdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24ubWluV2lkdGggcHJvcGVydHksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIE1EQ3RhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gQ3VycmVudCBwcm9wZXJ0eUluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb3MgQXJyYXkgb2YgcHJvcGVydGllc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG5cdCAqL1xuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yRmllbGRHcm91cDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sXG5cdFx0cHJvcGVydHlJbmZvczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdXG5cdCkge1xuXHRcdGlmIChwcm9wZXJ0eUluZm8ua2V5LmluZGV4T2YoXCJEYXRhRmllbGRGb3JBbm5vdGF0aW9uOjpGaWVsZEdyb3VwOjpcIikgPT09IDApIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IHRhYmxlLmdldENvbHVtbnMoKS5maW5kKChjb2wpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbC5nZXRQcm9wZXJ0eUtleSgpID09PSBwcm9wZXJ0eUluZm8ua2V5O1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsID0gY29sdW1uID8gY29sdW1uLmRhdGEoXCJzaG93RGF0YUZpZWxkc0xhYmVsXCIpID09PSBcInRydWVcIiA6IGZhbHNlO1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWwuZ2V0Q29udGV4dChwcm9wZXJ0eUluZm8uYW5ub3RhdGlvblBhdGgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFEYXRhID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLmNvbnZlcnRlZFR5cGVzO1xuXHRcdFx0Y29uc3Qgb0RhdGFGaWVsZCA9IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjtcblx0XHRcdGNvbnN0IG9GaWVsZEdyb3VwID0gb0RhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdGNvbnN0IGFGaWVsZFdpZHRoOiBudW1iZXJbXSA9IFtdO1xuXHRcdFx0b0ZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChvRGF0YTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHRsZXQgb0RhdGFGaWVsZFdpZHRoOiB7IGxhYmVsV2lkdGg6IG51bWJlcjsgcHJvcGVydHlXaWR0aDogbnVtYmVyIH07XG5cdFx0XHRcdHN3aXRjaCAob0RhdGEuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSxcblx0XHRcdFx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZChcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWwsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IHtcblx0XHRcdFx0XHRcdFx0bGFiZWxXaWR0aDogMCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlXaWR0aDogU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChvRGF0YS5MYWJlbD8udG9TdHJpbmcoKSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkV2lkdGghKSB7XG5cdFx0XHRcdFx0YUZpZWxkV2lkdGgucHVzaChvRGF0YUZpZWxkV2lkdGgubGFiZWxXaWR0aCArIG9EYXRhRmllbGRXaWR0aC5wcm9wZXJ0eVdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBuV2lkZXN0ID0gYUZpZWxkV2lkdGgucmVkdWNlKGZ1bmN0aW9uIChhY2M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoYWNjLCB2YWx1ZSk7XG5cdFx0XHR9LCAwKTtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIG9iamVjdCwge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBcnJhbmdlbWVudDogdHJ1ZSxcblx0XHRcdFx0XHRtaW5XaWR0aDogTWF0aC5jZWlsKG5XaWRlc3QpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBwcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbykge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKCFwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCAmJiBtZXRhTW9kZWwpIHtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aH1AYCk7XG5cdFx0XHRcdGlmIChkYXRhRmllbGQgJiYgZGF0YUZpZWxkW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0pIHtcblx0XHRcdFx0XHRwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHkudmlzdWFsU2V0dGluZ3MgfHwge30sIHtcblx0XHRcdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHRcdFx0Z2FwOiB0YWJsZUFQSS5nZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIpID8gMCA6IDRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyxcblx0XHR1bml0Pzogc3RyaW5nLFxuXHRcdHVuaXRUZXh0Pzogc3RyaW5nLFxuXHRcdHRpbWV6b25lVGV4dD86IHN0cmluZ1xuXHQpIHtcblx0XHRjb25zdCBvVGFibGVBUEk6IEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPiB8IG51bGwgPSB0YWJsZSA/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4pIDogbnVsbDtcblx0XHQvLyB1cGRhdGUgZ2FwIGZvciBwcm9wZXJ0aWVzIHdpdGggc3RyaW5nIHVuaXRcblx0XHRjb25zdCB0ZXh0ID0gdW5pdFRleHQgfHwgdGltZXpvbmVUZXh0O1xuXHRcdGlmICh0ZXh0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Z2FwOiBNYXRoLmNlaWwoU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0ZXh0KSlcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh1bml0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Ly8gRm9yIHByb3BlcnRpZXMgd2l0aCB1bml0LCBhIGdhcCBuZWVkcyB0byBiZSBhZGRlZCB0byBwcm9wZXJseSByZW5kZXIgdGhlIGNvbHVtbiB3aWR0aCBvbiBlZGl0IG1vZGVcblx0XHRcdFx0XHRnYXA6IG9UYWJsZUFQSSAmJiBvVGFibGVBUEkuZ2V0UmVhZE9ubHkoKSA/IDAgOiA2XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZUxhYmVsOiBmdW5jdGlvbiAocHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0pIHtcblx0XHRpZiAocHJvcGVydHkubGFiZWwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsID0gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdO1xuXHRcdFx0Ly8gVGhpcyBjb21wdXRhdGlvbiBpcyBvbmx5IGZvciBkdXBsaWNhdGUgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0XHRcdC8vIEV4Y2x1ZGUgdGV4dCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyB0ZXh0IG9uIGEgcHJvcGVydHkgYW5ub3RhdGVkIHdpdGggdGV4dCBhcnJhbmdlbWVudCBzZXQgYXMgVGV4dE9ubHkuXG5cdFx0XHQvLyBFeGNsdWRlIG5hdmlnYXRpb24gcHJvcGVydGllcyBjcmVhdGVkIG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3NlcyB3aXRoIGEgdGV4dCBhcnJhbmdlbWVudCBzZXQgdG8gVGV4dE9ubHkuXG5cdFx0XHRjb25zdCBpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSA9IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5zb21lKFxuXHRcdFx0XHQocHJvcCkgPT4gcHJvcC50ZXh0ID09PSBwcm9wZXJ0eS5wYXRoICYmIHByb3A/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIlxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydGllc1dpdGhTYW1lTGFiZWw/Lmxlbmd0aCA+IDEgJiZcblx0XHRcdFx0cHJvcGVydHkucGF0aD8uaW5jbHVkZXMoXCIvXCIpICYmXG5cdFx0XHRcdHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMgJiZcblx0XHRcdFx0IWlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ICYmXG5cdFx0XHRcdCEocHJvcGVydHk/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5LmxhYmVsID0gcHJvcGVydHkubGFiZWwgKyBcIiAoXCIgKyBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzLmpvaW4oXCIgLyBcIikgKyBcIilcIjtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzO1xuXHRcdH1cblx0fSxcblx0Ly9VcGRhdGUgVmlzdWFsU2V0dGluZyBmb3IgY29sdW1uV2lkdGggY2FsY3VsYXRpb24gYW5kIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0X3VwZGF0ZVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKSB7XG5cdFx0Y29uc3QgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSA9IHt9O1xuXHRcdC8vIENoZWNrIGF2YWlsYWJsZSBwMTNuIG1vZGVzXG5cdFx0Y29uc3QgcDEzbk1vZGUgPSB0YWJsZS5nZXRQMTNuTW9kZSgpO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0XHQvLyBPbmx5IGZvciBub24tY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiU29ydFwiKSAmJiBwcm9wZXJ0eS5zb3J0YWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiRmlsdGVyXCIpICYmIHByb3BlcnR5LmZpbHRlcmFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkdyb3VwXCIpICYmIHByb3BlcnR5Lmdyb3VwYWJsZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdID1cblx0XHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSAhPT0gdW5kZWZpbmVkID8gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdLmNvbmNhdChbcHJvcGVydHldKSA6IFtwcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdC8vIEFkZCB0aGUgJGVkaXRTdGF0ZSBwcm9wZXJ0eVxuXHRcdHByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRrZXk6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdFx0Z3JvdXA6IFwiXCIsXG5cdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2Vcblx0XHR9IGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdGdldENvbHVtbnNGb3I6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBUYWJsZUNvbHVtbltdIHtcblx0XHRyZXR1cm4gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBleHBvcnQgY2FwYWJpbGl0aWVzIGZvciB0aGUgZ2l2ZW4gc2FwLnVpLm1kYy5UYWJsZSBpbnN0YW5jZS5cblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiB0aGUgdGFibGVcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXByZXNlbnRpbmcgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhYmxlIGluc3RhbmNlXG5cdCAqL1xuXHRmZXRjaEV4cG9ydENhcGFiaWxpdGllczogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiBQcm9taXNlPHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfT4ge1xuXHRcdGNvbnN0IG9DYXBhYmlsaXRpZXM6IHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfSA9IHsgWExTWDoge30gfTtcblx0XHRsZXQgb01vZGVsITogT0RhdGFNb2RlbDtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwob1RhYmxlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdFx0XHRvTW9kZWwgPSBtb2RlbCBhcyBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU3VwcG9ydGVkRm9ybWF0c1wiKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGFMb3dlckZvcm1hdHMgPSAoYVN1cHBvcnRlZEZvcm1hdHMgfHwgW10pLm1hcCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYUxvd2VyRm9ybWF0cy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL3BkZlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAY29tLnNhcC52b2NhYnVsYXJpZXMuUERGLnYxLkZlYXR1cmVzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9Bbm5vdGF0aW9uOiB1bmtub3duKSB7XG5cdFx0XHRcdGlmIChvQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNbXCJQREZcIl0gPSBPYmplY3QuYXNzaWduKHt9LCBvQW5ub3RhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyBleHBvcnQgY2FwYWJpbGl0aWVzOiAke2Vycn1gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBvQ2FwYWJpbGl0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIExpbmVJdGVtIGFubm90YXRpb24gbm9yIG9mIHRoZSBjdXN0b20gY29sdW1ucyBpcyBmb3JiaWRkZW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvXG5cdCAqIEBwYXJhbSBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBmaWx0ZXJpbmcgaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNGaWx0ZXJhYmxlID0gaXNQYXRoRmlsdGVyYWJsZShjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0IWNvbHVtbkluZm8ucmVsYXRpdmVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fFxuXHRcdFx0KChjb2x1bW5JbmZvLmlzUGFydE9mTGluZUl0ZW0gPT09IHRydWUgfHwgY29sdW1uSW5mby5pc1BhcnRPZkN1c3RvbUNvbHVtbiA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IShpc0NvbnN0YW50KGlzRmlsdGVyYWJsZSkgJiYgaXNGaWx0ZXJhYmxlLnZhbHVlID09PSBmYWxzZSkpXG5cdFx0KTtcblx0fSxcblxuXHRfZmV0Y2hQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChcblx0XHRtZXRhTW9kZWw6IE1ldGFNb2RlbCxcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8ge1xuXHRcdGNvbnN0IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoID0gY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdG9EYXRhRmllbGQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoKSxcblx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCkgYXMgQ29udGV4dCxcblx0XHRcdGlzQ29tcGxleFR5cGUgPSBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiBjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lPy5pbmRleE9mKFwiRWRtLlwiKSAhPT0gMCxcblx0XHRcdGJGaWx0ZXJhYmxlID0gQ29tbW9uSGVscGVyLmlzUHJvcGVydHlGaWx0ZXJhYmxlKG9OYXZpZ2F0aW9uQ29udGV4dCwgb0RhdGFGaWVsZCksXG5cdFx0XHRiSXNBbmFseXRpY2FsVGFibGUgPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YSh0YWJsZSwgXCJlbmFibGVBbmFseXRpY3NcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8ubGFiZWwgPz8gXCJcIiwgYXBwQ29tcG9uZW50ID8/IHRhYmxlKSxcblx0XHRcdHRvb2x0aXAgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8udG9vbHRpcCA/PyBcIlwiLCBhcHBDb21wb25lbnQgPz8gdGFibGUpLFxuXHRcdFx0dHlwZUNvbmZpZyA9IHRoaXMuX2dldFR5cGVDb25maWcoY29sdW1uSW5mbywgaXNDb21wbGV4VHlwZSksXG5cdFx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdG5hbWU6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogY29sdW1uSW5mby5ncm91cExhYmVsLFxuXHRcdFx0XHRncm91cDogY29sdW1uSW5mby5ncm91cCxcblx0XHRcdFx0bGFiZWw6IGxhYmVsLFxuXHRcdFx0XHR0b29sdGlwOiB0b29sdGlwLFxuXHRcdFx0XHRkYXRhVHlwZTogdHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6XG5cdFx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnPy5iYXNlVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0XHRcdFx0PyB7IHN0eWxlOiBcIm1lZGl1bS9zaG9ydFwiIH0gLyogVGhpcyBjb25kaXRpb24gZG9lc24ndCBoYXZlIGFueSBpbXBhY3QsIHRvIGJlIHJldmlld2VkICovXG5cdFx0XHRcdFx0XHQ6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y29uc3RyYWludHM6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY29uc3RyYWludHMsXG5cdFx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiICYmICFpc0NvbXBsZXhUeXBlLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogdGhpcy5fc2V0UHJvcGVydHlJbmZvRXhwb3J0U2V0dGluZ3MoY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncywgY29sdW1uSW5mbyksXG5cdFx0XHRcdHVuaXQ6IGNvbHVtbkluZm8udW5pdCxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGg6IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoXG5cdFx0XHR9O1xuXHRcdGlmIChwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2xpcGJvYXJkU2V0dGluZ3MgPSB7IHRlbXBsYXRlOiBwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgfTtcblx0XHRcdC8vIGlmIEkgc2V0IHRoaXMgY2xpcEJvYXJkU2V0dGluZ3MgdGhlIGNvcHkgcHJvdmlkZXIgZXh0cmFjdCB0aGUgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlIGluIHRoZSBodG1sIHByb3BlcnR5IGFuZCBpdCBpcyBwcm9wZXJseSBjb3BpZWQgaW4gZXhjZWxcblx0XHRcdC8vIGJ1dCB3aGVuIHdlIGNvcHkgZWxzZXdoZXJlIHdlIG9ubHkgZ2V0IHRoZSByYXcgZGF0YSBhbmQgbm90IHRoZSB0ZW1wbGF0ZWQgZGF0YVxuXHRcdH1cblxuXHRcdC8vIFNldCB2aXN1YWxTZXR0aW5ncyBvbmx5IGlmIGl0IGV4aXN0c1xuXHRcdGlmIChjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzICYmIE9iamVjdC5rZXlzKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3M7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0fVxuXG5cdFx0Ly8gTURDIGV4cGVjdHMgICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcz8ubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXG5cdFx0XHQvL2dldCB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBmb3IgdGhlIGNvbHVtblxuXHRcdFx0Y29uc3QgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRDb250ZXh0KERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcIm1ldGFQYXRoXCIpISlcblx0XHRcdCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0Ly8gVE9ETyB3aXRoIHRoZSBuZXcgY29tcGxleCBwcm9wZXJ0eSBpbmZvLCBhIGxvdCBvZiBcIkRlc2NyaXB0aW9uXCIgZmllbGRzIGFyZSBhZGRlZCBhcyBmaWx0ZXIvc29ydCBmaWVsZHNcblx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGNvbHVtbkluZm8uc29ydGFibGU7XG5cdFx0XHRpZiAoYklzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9XG5cdFx0XHRcdGNvbHVtbkluZm8uZmlsdGVyYWJsZSAhPT0gZmFsc2UgJiZcblx0XHRcdFx0ISFiRmlsdGVyYWJsZSAmJlxuXHRcdFx0XHR0aGlzLl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoY29sdW1uSW5mbywgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uaXNLZXkgPSBjb2x1bW5JbmZvLmlzS2V5O1xuXHRcdFx0cHJvcGVydHlJbmZvLmdyb3VwYWJsZSA9IGNvbHVtbkluZm8uaXNHcm91cGFibGU7XG5cdFx0XHRpZiAoY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0VGV4dEFycmFuZ2VtZW50SW5mbyhwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8sIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eUluZm8uaXNLZXkpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmV4dGVuc2lvbiA9IHtcblx0XHRcdFx0XHQvLyBNREMgbmVlZHMgdG8gZml4IHRoaXMsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgYSBub24gQW5hbHl0aWNhbCBUYWJsZVxuXHRcdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNvbHVtbkluZm8uY2FzZVNlbnNpdGl2ZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmFkZGl0aW9uYWxMYWJlbHMgPSBjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMubWFwKChhZGRpdGlvbmFsTGFiZWw6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBnZXRMb2NhbGl6ZWRUZXh0KGFkZGl0aW9uYWxMYWJlbCwgYXBwQ29tcG9uZW50IHx8IHRhYmxlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCh0YWJsZSwgcHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvLnVuaXQsIGNvbHVtbkluZm8udW5pdFRleHQsIGNvbHVtbkluZm8udGltZXpvbmVUZXh0KTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgZXhwb3J0IHNldHRpbmdzIGJhc2VkIG9uIHRoZSBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSBleHBvcnQgc2V0dGluZ3MgdG8gYmUgZXh0ZW5kZWRcblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBleHRlbmRlZCBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdF9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5nczogZnVuY3Rpb24gKFxuXHRcdGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IHVuZGVmaW5lZCB8IG51bGwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uXG5cdCk6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG5cdFx0Y29uc3QgZXhwb3J0Rm9ybWF0ID0gdGhpcy5fZ2V0RXhwb3J0Rm9ybWF0KGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lKTtcblx0XHRpZiAoZXhwb3J0Rm9ybWF0ICYmIGV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5mb3JtYXQgPSBleHBvcnRGb3JtYXQ7XG5cdFx0fVxuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBjb25maWcgZm9yIHRoZSBnaXZlbiBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gaXNDb21wbGV4VHlwZSBJbmRpY2F0ZXMgaWYgdGhlIGRhdGFUeXBlIGlzIGNvbXBsZXguXG5cdCAqIEByZXR1cm5zIFRoZSBNREMgdHlwZSBjb25maWcuXG5cdCAqL1xuXHRfZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGlzQ29tcGxleFR5cGU/OiBib29sZWFuKTogVHlwZUNvbmZpZyB7XG5cdFx0bGV0IHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIik7IC8vIE1EQyBleHBlY3RzIGFsd2F5cyBhIGRhdGFUeXBlXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGlzVHlwZUZpbHRlcmFibGUoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSkpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiAhaXNDb21wbGV4VHlwZSkge1xuXHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR5cGVDb25maWc7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHRleHQgYXJyYW5nZW1lbnQgaW5mbyBmb3IgdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIFRoZSBjdXJyZW50IHByb3BlcnR5SW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQ29sdW1uID0gdGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKS5maW5kKGZ1bmN0aW9uIChvQ29sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbC5uYW1lID09PSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudD8udGV4dFByb3BlcnR5O1xuXHRcdH0pO1xuXHRcdGlmIChkZXNjcmlwdGlvbkNvbHVtbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLm1vZGUgPSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCEubW9kZTtcblx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA9IChkZXNjcmlwdGlvbkNvbHVtbiBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKS5yZWxhdGl2ZVBhdGg7XG5cdFx0fVxuXHRcdHByb3BlcnR5SW5mby50ZXh0ID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0fSxcblxuXHRfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMocHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sIGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbikge1xuXHRcdGlmIChjb2x1bW5JbmZvLmFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmFnZ3JlZ2F0YWJsZSA9IGNvbHVtbkluZm8uYWdncmVnYXRhYmxlO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby5leHRlbnNpb24pIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHRlbnNpb24gPSBjb2x1bW5JbmZvLmV4dGVuc2lvbjtcblx0XHR9XG5cdH0sXG5cblx0X2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUpIHtcblx0XHRjb25zdCBsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5sYWJlbCwgdGFibGUpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0bGFiZWw6IGxhYmVsLnRvU3RyaW5nKCksXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRjbGlwYm9hcmRTZXR0aW5nczogY29sdW1uSW5mby5jbGlwYm9hcmRTZXR0aW5ncyBhcyBQcm9wZXJ0eUluZm9bXCJjbGlwYm9hcmRTZXR0aW5nc1wiXVxuXHRcdH07XG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblxuXHRfZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0bGV0IGxhYmVsO1xuXHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlcikge1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uaGVhZGVyLnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0XHRsYWJlbCA9IE1vZGVsSGVscGVyLmZldGNoVGV4dEZyb21NZXRhTW9kZWwoY29sdW1uSW5mby5oZWFkZXIsIHVuZGVmaW5lZCwgKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8uaGVhZGVyLCBhcHBDb21wb25lbnQpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGdyb3VwTGFiZWw6IHVuZGVmaW5lZCxcblx0XHRcdGdyb3VwOiB1bmRlZmluZWQsXG5cdFx0XHRsYWJlbDogbGFiZWwgPz8gXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdHZpc3VhbFNldHRpbmdzOiBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcInZpc3VhbFNldHRpbmdzXCJdXG5cdFx0fTtcblxuXHRcdC8vIE1EQyBleHBlY3RzICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAmJiBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRwcm9wZXJ0eUluZm8uc29ydGFibGUgPSBmYWxzZTtcblx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cdF9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3I6IGZ1bmN0aW9uIChvQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISEoXG5cdFx0XHQob0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyAmJiBvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zLmhhc0RyYWZ0SW5kaWNhdG9yKSB8fFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgpXG5cdFx0KTtcblx0fSxcblx0X3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWw6IGZ1bmN0aW9uIChfb1RhYmxlOiBUYWJsZSwgX29Db2x1bW5JbmZvOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IF9vVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gX29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKGFWaXNpYmxlQ29sdW1ucyAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Zm9yIChjb25zdCBpbmRleCBpbiBhVmlzaWJsZUNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihfb0NvbHVtbkluZm8pICYmXG5cdFx0XHRcdFx0X29Db2x1bW5JbmZvLm5hbWUgPT09IGFWaXNpYmxlQ29sdW1uc1tpbmRleF0uZ2V0UHJvcGVydHlLZXkoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAob0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUikgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgX29Db2x1bW5JbmZvLm5hbWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Ly8gd2hlbiBmZXRjaGluZyBwcm9wZXJ0aWVzLCB0aGlzIGJpbmRpbmcgY29udGV4dCBpcyBuZWVkZWQgLSBzbyBsZXRzIGNyZWF0ZSBpdCBvbmx5IG9uY2UgYW5kIHVzZSBpZiBmb3IgYWxsIHByb3BlcnRpZXMvZGF0YS1maWVsZHMvbGluZS1pdGVtc1xuXHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChlbnRpdHlUeXBlUGF0aCk7XG5cdFx0bGV0IGZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGJpbmRpbmdQYXRoLCBtZXRhTW9kZWwpLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKSlcblx0XHRcdC50aGVuKChjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSA9PiB7XG5cdFx0XHRcdC8vIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIGRvZXMgbm90IHdvcmsgdmlhICdlbnRpdHlTZXQvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEnXG5cdFx0XHRcdGlmIChjb2x1bW5zKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5SW5mbztcblx0XHRcdFx0XHRjb2x1bW5zLmZvckVhY2goKGNvbHVtbkluZm8pID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWwodGFibGUsIGNvbHVtbkluZm8pO1xuXHRcdFx0XHRcdFx0c3dpdGNoIChjb2x1bW5JbmZvLnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaFByb3BlcnR5SW5mbyhtZXRhTW9kZWwsIGNvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlJbmZvICYmICFub25GaWx0ZXJhYmxlUHJvcGVydGllcy5pbmNsdWRlcygocHJvcGVydHlJbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5tYXhDb25kaXRpb25zID0gRGVsZWdhdGVVdGlsLmlzTXVsdGlWYWx1ZShwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKSA/IC0xIDogMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJDb21wdXRlZFwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJTbG90XCI6XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBzd2l0Y2ggY2FzZSAke2NvbHVtbkluZm8udHlwZX1gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGhpcy5fdXBkYXRlUHJvcGVydHlJbmZvKHRhYmxlLCBmZXRjaGVkUHJvcGVydGllcyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHR0YWJsZUFQSS5zZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0UHJvcGVydHlJbmZvcygpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgdXBkYXRpbmcgZmV0Y2hlZCBwcm9wZXJ0aWVzOiAke2VyciBhcyBzdHJpbmd9YCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gZmV0Y2hlZFByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0ZW50aXR5VHlwZVBhdGg6IHN0cmluZyxcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGlmIChmZXRjaGVkUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHRhYmxlLCBlbnRpdHlUeXBlUGF0aCwgbWV0YU1vZGVsLCBhcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKFxuXHRcdFx0c3ViRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRDYWNoZWRQcm9wZXJ0eUluZm9zKHN1YkZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHRcdHJldHVybiBzdWJGZXRjaGVkUHJvcGVydGllcztcblx0XHR9KTtcblx0fSxcblx0c2V0Tm9EYXRhSW5mb3JtYXRpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MpOiB2b2lkIHtcblx0XHRjb25zdCBub0RhdGFBZ2dyZWdhdGlvbiA9IHRhYmxlLmdldE5vRGF0YSgpO1xuXHRcdGlmICh0eXBlb2Ygbm9EYXRhQWdncmVnYXRpb24gIT0gXCJzdHJpbmdcIiAmJiAobm9EYXRhQWdncmVnYXRpb24gYXMgQ29udHJvbCk/LmlzQShcInNhcC5tLklsbHVzdHJhdGVkTWVzc2FnZVwiKSkge1xuXHRcdFx0Y29uc3QgY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSA9IG5vRGF0YUFnZ3JlZ2F0aW9uIGFzIElsbHVzdHJhdGVkTWVzc2FnZTtcblx0XHRcdC8vIFdlIG92ZXJyaWRlIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgSWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldFRpdGxlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLnRpdGxlKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24oaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25UeXBlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblR5cGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25TaXplKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpbGx1c3RyYXRlZE1lc3NhZ2UgPSBuZXcgSWxsdXN0cmF0ZWRNZXNzYWdlKHtcblx0XHRcdFx0Li4uaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb25cblx0XHRcdH0pO1xuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkTWVzc2FnZSk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgdGFibGVGaWx0ZXJJbmZvID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKHRhYmxlKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBiaW5kaW5nSW5mby5wYXRoPy5zdGFydHNXaXRoKFwiL1wiKSA/IGJpbmRpbmdJbmZvLnBhdGguc3Vic3RyaW5nKDEpIDogYmluZGluZ0luZm8ucGF0aDtcblx0XHRsZXQgaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbjogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzO1xuXG5cdFx0Y29uc3QgZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKTogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIHtcblx0XHRcdGlmICh0YWJsZS5kYXRhKFwiaGlkZGVuRmlsdGVyc1wiKSB8fCB0YWJsZS5nZXRRdWlja0ZpbHRlcigpKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9NVUxUSV9WSUVXXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdGNvbnN0IGZpbHRlckFzc29jaWF0aW9uID0gdGFibGUuZ2V0RmlsdGVyKCk7XG5cdFx0Y29uc3QgaGFzRmlsdGVyT3JTZWFyY2ggPSB0YWJsZUZpbHRlckluZm8uc2VhcmNoIHx8IHRhYmxlRmlsdGVySW5mby5maWx0ZXJzPy5sZW5ndGg7XG5cdFx0aWYgKGZpbHRlckFzc29jaWF0aW9uICYmICEvQmFzaWNTZWFyY2gkLy50ZXN0KGZpbHRlckFzc29jaWF0aW9uKSkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgYSBGaWx0ZXJCYXIgaXMgYXNzb2NpYXRlZCB0byB0aGUgVGFibGUgKGJhc2ljIHNlYXJjaCBvbiB0b29sQmFyIGlzIGV4Y2x1ZGVkKVxuXHRcdFx0aWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHRcdC8vIGNoZWNrIGlmIHRhYmxlIGhhcyBhbnkgRmlsdGVyYmFyIGZpbHRlcnMgb3IgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRhYmxlIGhhcyBhbnkgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PREFUQVwiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0ZJTFRFUlNfTk9fREFUQV9URVhUXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRGF0YVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpLmdldFZpZXdEYXRhKCkubGl2ZU1vZGUpIHtcblx0XHRcdGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0ZJTFRFUlNfTk9fREFUQV9URVhUXCIpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uU2l6ZSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0Tm9EYXRhTWVzc2FnZU1vZGUoKTtcblxuXHRcdGlmIChpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPT09IFwidGV4dFwiKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Tm9EYXRhID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1cnJlbnROb0RhdGEgPT09IFwic3RyaW5nXCIgJiYgY3VycmVudE5vRGF0YSA9PT0gaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbikge1xuXHRcdFx0XHQvLyBXZSBkb24ndCBjaGFuZ2UgdGhlIG5vRGF0YSBhZ2dyZWdhdGlvbiB1bm5lY2Vzc2FyeS5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE5vRGF0YUluZm9ybWF0aW9uKHRhYmxlLCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uKTtcblx0XHR9XG5cdH0sXG5cblx0aGFuZGxlVGFibGVEYXRhUmVjZWl2ZWQ6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKSxcblx0XHRcdGJEYXRhUmVjZWl2ZWRBdHRhY2hlZCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiKTtcblxuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIWJEYXRhUmVjZWl2ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKCgpID0+IHtcblx0XHRcdFx0Ly8gYXMgdGhlIGRhdGFSZWNlaXZlZCBldmVudCBpcyBmaXJlZCBtdWx0aXBsZSB0aW1lcywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZXZlbnQgaXMgb25seSBoYW5kbGVkIG9uY2Vcblx0XHRcdFx0aWYgKCFvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCB0aGUgc2VsZWN0ZWQgY29udGV4dHMgdG8gdHJpZ2dlciByZS1jYWxjdWxhdGlvbiBvZiBlbmFibGVkIHN0YXRlIG9mIGFjdGlvbnMuXG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UodGFibGVBUEkudGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdFx0XHRcdC8vIFJlZnJlc2ggZW5hYmxlbWVudCBvZiBkZWxldGUgYnV0dG9uXG5cdFx0XHRcdFx0XHREZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRjb25zdCBvVGFibGVBUEkgPSBvVGFibGUgPyBvVGFibGUuZ2V0UGFyZW50KCkgOiBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKG9UYWJsZUFQSSkge1xuXHRcdFx0XHRcdFx0XHQob1RhYmxlQVBJIGFzIFRhYmxlQVBJKS5zZXRVcEVtcHR5Um93cyhvVGFibGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMob1RhYmxlKTtcblx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCB0cnVlKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgb3B0aW1pc3RpYyBiYXRjaCBwcm9taXNlIGZvciB0aGUgZW5hYmxlciBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSBUYWJsZUFQSVxuXHQgKi9cblx0c2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbCgpO1xuXHRcdGlmIChtb2RlbCkge1xuXHRcdFx0dGFibGVBUEkuc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UobmV3IFByb21pc2VLZWVwZXI8Ym9vbGVhbj4oKSk7XG5cdFx0XHR0aGlzLnNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsKGNvbnRyb2xsZXIsIG1vZGVsLCB0YWJsZUFQSSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbmFibGUgdGhlIG9wdGltaXN0aWMgYmF0Y2ggbW9kZSBpZiBhdmFpbGFibGUuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKi9cblx0ZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZTogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCB0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJzUHJvcGVydGllc0FzUG90ZW50aWFsbHlTZW5zaXRpdmVEYXRhT3JEYXRlVHlwZSA9XG5cdFx0XHR0YWJsZSAmJiBUYWJsZVV0aWxzLmlzRmlsdGVyRWxpZ2libGVGb3JPcHRpbWlzdGljQmF0Y2godGFibGUsIGNvbnRyb2xsZXIuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXIpO1xuXHRcdCh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UoKT8ucmVzb2x2ZSghZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXR0ZXIgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIGVuYWJsZXIgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWwgVGhlIE9EYXRhIE1vZGVsXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgVGFibGVBUElcblx0ICogQHNlZSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcn0gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hGb3JNb2RlbDogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCBkYXRhTW9kZWw6IE9EYXRhTW9kZWwsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IGlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5pc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpO1xuXHRcdGlmIChkYXRhTW9kZWwuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcigpID09PSBudWxsICYmICF0YWJsZUFQSS5pc09wdGltaXN0aWNCYXRjaERpc2FibGVkKCkgJiYgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXIgPSB0YWJsZUFQSS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpO1xuXHRcdFx0ZGF0YU1vZGVsLnNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoZnVuY3Rpb24gKCk6IFByb21pc2U8Ym9vbGVhbj4gfCB1bmRlZmluZWQge1xuXHRcdFx0XHRyZXR1cm4gb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXI/LnByb21pc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0cmViaW5kOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSBvVGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHRvVGFibGVBUEk/LnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGJJc1N1c3BlbmRlZCk7XG5cdFx0aWYgKCFiSXNTdXNwZW5kZWQpIHtcblx0XHRcdFRhYmxlUnVudGltZS5jbGVhclNlbGVjdGlvbihvVGFibGUpO1xuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UucmViaW5kLmFwcGx5KHRoaXMsIFtvVGFibGUsIG9CaW5kaW5nSW5mb10pO1xuXHRcdFx0VGFibGVVdGlscy5vblRhYmxlQm91bmQob1RhYmxlKTtcblx0XHRcdHJldHVybiBUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdC50aGVuKCh0YWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkKHRhYmxlLCB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSByZWxldmFudCBtZXRhZGF0YSBmb3IgdGhlIHRhYmxlIGFuZCByZXR1cm5zIHByb3BlcnR5IGluZm8gYXJyYXkuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcHJvcGVydHkgaW5mb1xuXHQgKi9cblx0ZmV0Y2hQcm9wZXJ0aWVzOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbCh0YWJsZSlcblx0XHRcdC50aGVuKGFzeW5jIChtb2RlbCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+ID0+IHtcblx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRhYmxlKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4odGFibGUsIFwiZW50aXR5VHlwZVwiKSA/PyBcIlwiLFxuXHRcdFx0XHRcdG1vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChwcm9wZXJ0aWVzKSA9PiB7XG5cdFx0XHRcdCh0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIENvbnRleHQpPy5zZXRQcm9wZXJ0eShcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCB0cnVlKTtcblx0XHRcdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRwcmVJbml0OiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIChUYWJsZURlbGVnYXRlQmFzZS5wcmVJbml0IGFzICh0YWJsZTogVGFibGUpID0+IFByb21pc2U8dm9pZD4pLmFwcGx5KHRoaXMsIFt0YWJsZV0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBTZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvdyB0byBhdm9pZCBpbmhlcml0aW5nXG5cdFx0XHQgKiB0aGUgd3JvbmcgY29udGV4dCBhbmQgcmVxdWVzdGluZyB0aGUgdGFibGUgY29sdW1ucyBvbiB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogU2V0IHRoZSBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBmYXN0Q3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKGZhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRmYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyB1bmtub3duIGFzIENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGVCaW5kaW5nSW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJID0gbmV3IENvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSShiaW5kaW5nSW5mbyk7XG5cdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzRW5hYmxlZFwiLCB0cnVlKTtcblx0XHRUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nSW5mby5hcHBseSh0aGlzLCBbdGFibGUsIGJpbmRpbmdJbmZvXSk7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbyh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5zZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faGFuZGxlUmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cblx0XHRcdHRhYmxlLmdldFBhcmVudCgpPy5maXJlRXZlbnQoXCJiZWZvcmVSZWJpbmRUYWJsZVwiLCB7IGNvbGxlY3Rpb25CaW5kaW5nSW5mbzogY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIH0pO1xuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkuZ2V0QXR0YWNoZWRFdmVudHMoKTtcblx0XHRcdC8qKlxuXHRcdFx0ICogV2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvdyB0byBhdm9pZCBpdCBpbmhlcml0aW5nXG5cdFx0XHQgKiB0aGUgd3JvbmcgY29udGV4dCBhbmQgcmVxdWVzdGluZyB0aGUgdGFibGUgY29sdW1ucyBmb3IgdGhlIHBhcmVudCBlbnRpdHlcblx0XHRcdCAqIFRoZSBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBpcyBzZXQgaW4gT2JqZWN0UGFnZUNvbnRyb2xsZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdGlmICh0YWJsZS5nZXRDcmVhdGlvblJvdygpPy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSBudWxsICYmIGJpbmRpbmdJbmZvLnBhdGggJiYgY29udGV4dCkge1xuXHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cdFx0XHRcdFx0dGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoLFxuXHRcdFx0XHRcdGNvbnRleHQgYXMgdjRDb250ZXh0LFxuXHRcdFx0XHRcdHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCxcblx0XHRcdFx0XHRQcm9taXNlLnJlc29sdmUoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGFibGVBUEkuc2V0QXR0YWNoRXZlbnRzKGF0dGFjaGVkRXZlbnRzKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB1cGRhdGluZyB0aGUgYmluZGluZyBpbmZvXCIsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH0sXG5cblx0X2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHNvcnRlcnM6IFNvcnRlcltdIHwgdW5kZWZpbmVkID0gYmluZGluZ0luZm8uc29ydGVyO1xuXHRcdGNvbnN0IG5ld1NvcnRlcnNUb0JlQXBwbGllZDogU29ydGVyW10gPSBbXTtcblx0XHRpZiAoc29ydGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0Y29uc3QgdGFibGVQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdFx0Zm9yIChjb25zdCBzb3J0ZXIgb2Ygc29ydGVycykge1xuXHRcdFx0XHRjb25zdCB0YWJsZVByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkucGF0aCA9PT0gc29ydGVyLmdldFBhdGgoKSk7XG5cdFx0XHRcdGlmICh0YWJsZVByb3BlcnR5Py51bml0KSB7XG5cdFx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkua2V5ID09PSB0YWJsZVByb3BlcnR5Py51bml0KTtcblx0XHRcdFx0XHRjb25zdCB1bml0U29ydGVyQXZhaWxhYmxlID0gdW5pdFByb3BlcnR5Py5wYXRoICYmIHNvcnRlcnMuc29tZSgoc29ydCkgPT4gc29ydC5nZXRQYXRoKCkgPT09IHVuaXRQcm9wZXJ0eS5wYXRoKTtcblx0XHRcdFx0XHRpZiAoIXVuaXRTb3J0ZXJBdmFpbGFibGUgJiYgdW5pdFByb3BlcnR5Py5zb3J0YWJsZSAhPT0gZmFsc2UgJiYgdW5pdFByb3BlcnR5Py5wYXRoKSB7XG5cdFx0XHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChuZXcgU29ydGVyKHVuaXRQcm9wZXJ0eS5wYXRoLCBmYWxzZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChzb3J0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0YmluZGluZ0luZm8uc29ydGVyID0gbmV3U29ydGVyc1RvQmVBcHBsaWVkO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQ6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBiaW5kaW5nSW5mby5wYXRoICsgXCIvXCI7XG5cdFx0Y29uc3QgZmlsdGVycyA9IGJpbmRpbmdJbmZvLmZpbHRlcnM/LmdldEZpbHRlcnMoKTtcblx0XHRpZiAoZmlsdGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRUYWJsZVV0aWxzLnVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEKG1ldGFNb2RlbCwgZmlsdGVycyBhcyB1bmtub3duIGFzIENvbmRpdGlvbk9iamVjdFtdLCBlbnRpdHlUeXBlUGF0aCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkczogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQST8uZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRpZiAoY29udHJvbGxlcj8ucmVjb21tZW5kYXRpb25zLmlzUmVjb21tZW5kYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCB0YWJsZURlZiA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzID0gYXBwQ29tcG9uZW50XG5cdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHQuZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGVEZWYuYW5ub3RhdGlvbi5lbnRpdHlUeXBlTmFtZSk7XG5cdFx0XHRpZiAocmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzICYmIHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcy5sZW5ndGggPiAwICYmIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgPSBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlbGVjdD8uY29uY2F0KFwiLFwiLCByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMuam9pbigpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgY2FyZHMgd2hlbiB0aGUgYmluZGluZyBpcyByZWZyZXNoZWQuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqL1xuXHRfdXBkYXRlQXZhaWxhYmxlQ2FyZHM6IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpPy5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgY2FyZHM6IFdyYXBwZWRDYXJkW10gPSBbXTtcblx0XHRcdGF3YWl0IHRhYmxlQVBJLmNvbGxlY3RBdmFpbGFibGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uTWFuYWdlciA9IG5ldyBDb2xsYWJvcmF0aW9uTWFuYWdlcigpO1xuXHRcdFx0Y29uc3QgY2FyZE9iamVjdCA9IGNvbGxhYm9yYXRpb25NYW5hZ2VyLnVwZGF0ZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IHBhcmVudEFwcElkID0gYXBwQ29tcG9uZW50LmdldElkKCk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuYWRkQ2FyZHNUb0NvbGxhYm9yYXRpb25NYW5hZ2VyKGNhcmRPYmplY3QsIHBhcmVudEFwcElkKTtcblx0XHRcdGFwcENvbXBvbmVudC5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5zaGFyZUF2YWlsYWJsZUNhcmRzKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGUgaG9vayBpbXBsZW1lbnRlZCBieSBNREMgdGhhdCB3ZSBjYW4gb3ZlcnJpZGUuXG5cdCAqIFRoaXMgYWxsb3dzIHVzIHRvIGRlZmluZSBwcm9wZXJ0aWVzIHRvIGJlIHJlcXVlc3RlZCBpbiB0aGUgTURDIHRhYmxlIChNYWluIGNhc2UgaXMgZm9yIHRoZSBhbmFseXRpY2FsIHRhYmxlKS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZSB0byBiZSByZXF1ZXN0ZWQuXG5cdCAqL1xuXHRnZXRJblJlc3VsdFByb3BlcnR5S2V5czogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0Y29uc3QgYWxsS2tleXNSZXF1ZXN0ZWQgPSB0aGlzLmNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCh0YWJsZUFQSSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdC8vIGlmIGEgcm93cHJlc3MgaXMgb3ZlcnJpZGRlbiwgd2UgIHNob3VsZCBlbmFibGUgdGhlIG5hdmlnYXRpb24gYXQgdGhlIG5vZGUgbGV2ZWxcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFwiaXNOb2RlTGV2ZWxOYXZpZ2FibGVcIiwgdGFibGVBUEkub3ZlcnJpZGVSb3dQcmVzcyA/IHRydWUgOiBhbGxLa2V5c1JlcXVlc3RlZCk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRPYmplY3Qua2V5cyh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3QpXG5cdFx0XHRcdFx0Ly8gZm9yIGFuYWx5dGljIHRhYmxlcyB3aXRoIGFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwgd2Ugc2hvdWxkIG5vdCByZXF1ZXN0IHRoZSBzZW1hbnRpY0tleSBleHBlY3RlZCB3aGVuIGFsbCBrZXlzIGFyZSByZXF1ZXN0ZWQgLT4gIGl0IHdpbGwgcGVybWl0cyB0byBuYXZpZ2F0ZSBmcm9tIGEgbm9kZSBsZXZlbCB3aGVuIHNlbWFudGljS2V5IGFyZSBlbmFibGVkXG5cdFx0XHRcdFx0Ly8gcmVzdHJpY3Rpb24gYXJlIGFsc28gZXhjbHVkZWQgYXMgd2UgY2Fubm90IGRlc3Rpbmd1aXNoIGJldHdlZW4gYSBub2RlIGFuZCBhIGFnZ3JlZ2F0aW9uIGxldmVsXG5cblx0XHRcdFx0XHQuZmlsdGVyKChmaWVsZE5hbWU6IHN0cmluZykgPT5cblx0XHRcdFx0XHRcdCFhbGxLa2V5c1JlcXVlc3RlZFxuXHRcdFx0XHRcdFx0XHQ/IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdFtmaWVsZE5hbWVdLnNvbWUoXG5cdFx0XHRcdFx0XHRcdFx0XHQob3JpZ2luKSA9PiBvcmlnaW4gIT09IFwicmVzdHJpY3Rpb25cIiAmJiBvcmlnaW4gIT09IFwic2VtYW50aWNLZXlcIlxuXHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0OiB0cnVlXG5cdFx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdCA/PyB7fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGFsbCBrZXlzKCkgZXhjZXB0ZWQgSXNBY3RpdmVFbnRpdHkpIGFyZSByZXF1ZXN0ZWQgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIHRhYmxlIEFQSVxuXHQgKiBAcmV0dXJucyAgVHJ1ZSBpZiBhbGwga2V5cyBhcmUgcmVxdWVzdGVkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZDogZnVuY3Rpb24gKHRhYmxlQVBJOiBUYWJsZUFQSSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGFsbENvbHVtbnMgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zIGFzIChUYWJsZUNvbHVtbiAmIHsgaXNLZXk6IGJvb2xlYW47IHJlbGF0aXZlUGF0aDogc3RyaW5nIH0pW107XG5cdFx0Y29uc3Qga2V5UHJvcGVydHlOYW1lcyA9IGFsbENvbHVtbnNcblx0XHRcdC5maWx0ZXIoKGMpID0+IGMuaXNLZXkgJiYgYy5yZWxhdGl2ZVBhdGggJiYgYy5yZWxhdGl2ZVBhdGggIT09IFwiSXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdC5tYXAoKGMpID0+IGMucmVsYXRpdmVQYXRoKTtcblxuXHRcdGNvbnN0IGRpc3BsYXllZENvbHVtbnMgPSB0YWJsZVxuXHRcdFx0LmdldENvbHVtbnMoKVxuXHRcdFx0Lm1hcCgoY29sdW1uKSA9PiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpKTtcblxuXHRcdC8vIFN0b3JlIGFsbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgZGlzcGxheWVkIGNvbHVtbnMgaW4gYSBTZXRcblx0XHRjb25zdCByZWZlcmVuY2VkUHJvcGVydHlQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGZ1bmN0aW9uIHByb2Nlc3NDb2x1bW4oY29sOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0XHRcdC8vIEFkZCB0aGUgcHJvcGVydHkgbmFtZSBmcm9tIGNvbHVtbiBpdHNlbGYgaWYgaXQncyBub3QgYSBjb21wbGV4IHByb3BlcnR5SW5mb1xuXHRcdFx0aWYgKGNvbC5yZWxhdGl2ZVBhdGggJiYgY29sLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZWZlcmVuY2VkUHJvcGVydHlQYXRocy5hZGQoY29sLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sLmV4dGVuc2lvbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmZvckVhY2goKGFkZGl0aW9uYWxDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFkZGl0aW9uYWxDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gYWRkaXRpb25hbENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAoYWRkaXRpb25hbENvbHVtbj8ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRcdFx0cmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuYWRkKGFkZGl0aW9uYWxDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0XHRpZiAoIWNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW4gaXRzZWxmXG5cdFx0XHRwcm9jZXNzQ29sdW1uKGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW5zIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3M/LmZvckVhY2goKHJlbGF0ZWRDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gcmVsYXRlZENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAocmVsYXRlZENvbHVtbikge1xuXHRcdFx0XHRcdHByb2Nlc3NDb2x1bW4ocmVsYXRlZENvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBrZXlQcm9wZXJ0eU5hbWVzLmV2ZXJ5KChwcm9wTmFtZSkgPT4gcHJvcE5hbWUgJiYgcmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuaGFzKHByb3BOYW1lKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzZWFyY2ggcXVlcnkgZm9yIGFuYWx5dGljYWwgYW5kIG5vbiBhbmFseXRpY2FsIG9kYXRhTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBiaW5kaW5nIFRoZSBvRGF0YUxpc3RCaW5kaW5nIGluc3RhbmNlLlxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHF1ZXJ5IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldFNlYXJjaFF1ZXJ5OiBmdW5jdGlvbiAoYmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSBiaW5kaW5nLmdldEFnZ3JlZ2F0aW9uPy4oKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYWdncmVnYXRpb24/LnNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBGb3IgYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBzZWFyY2ggcXVlcnkgaXMgc3RvcmVkIGluIHRoZSBhZ2dyZWdhdGlvblxuXHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uLnNlYXJjaCBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdC8vIElmIG5vdCBmb3VuZCBpbiBhZ2dyZWdhdGlvbiwgY2hlY2sgdGhlIHF1ZXJ5IG9wdGlvbnNcblx0XHRyZXR1cm4gYmluZGluZy5nZXRRdWVyeU9wdGlvbnNGcm9tUGFyYW1ldGVycygpLiRzZWFyY2g7XG5cdH0sXG5cdHVwZGF0ZUJpbmRpbmc6IGZ1bmN0aW9uICh0YWJsZTogTURDVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8sIGJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSB0YWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHQvLyBpZiB0aGUgcm93QmluZGluZ0luZm8gaGFzIGEgJCRnZXRLZWVwQWxpdmVDb250ZXh0IHBhcmFtZXRlciB3ZSBuZWVkIHRvIGNoZWNrIGl0IGlzIHRoZSBvbmx5IFRhYmxlIHdpdGggc3VjaCBhXG5cdFx0XHQvLyBwYXJhbWV0ZXIgZm9yIHRoZSBjb2xsZWN0aW9uTWV0YVBhdGhcblx0XHRcdGlmIChiaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kJGdldEtlZXBBbGl2ZUNvbnRleHQgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpID8/IFwiXCI7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0Y29uc3Qga2VwdEFsaXZlTGlzdHMgPSBpbnRlcm5hbE1vZGVsPy5nZXRPYmplY3QoXCIva2VwdEFsaXZlTGlzdHNcIikgPz8ge307XG5cdFx0XHRcdGlmICgha2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdKSB7XG5cdFx0XHRcdFx0a2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdID0gdGFibGUuZ2V0SWQoKTtcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9rZXB0QWxpdmVMaXN0c1wiLCBrZXB0QWxpdmVMaXN0cyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoa2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdICE9PSB0YWJsZS5nZXRJZCgpKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGxldCBuZWVkTWFudWFsUmVmcmVzaCA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSA9IFwicGVuZGluZ01hbnVhbEJpbmRpbmdVcGRhdGVcIjtcblx0XHRcdGNvbnN0IHBlbmRpbmdNYW51YWxVcGRhdGUgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSkgYXMgYm9vbGVhbjtcblx0XHRcdGNvbnN0IG5ld1NvcnRlcnMgPSBKU09OLnN0cmluZ2lmeShiaW5kaW5nSW5mby5zb3J0ZXIgPz8gW10pO1xuXG5cdFx0XHRpZiAoYmluZGluZykge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTWFudWFsIHJlZnJlc2ggaWYgZmlsdGVycyBhcmUgbm90IGNoYW5nZWQgYnkgYmluZGluZy5yZWZyZXNoKCkgc2luY2UgdXBkYXRpbmcgdGhlIGJpbmRpbmdJbmZvXG5cdFx0XHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0XHRcdCAqIFJlbW92aW5nIGNvbHVtbnMgY3JlYXRlcyBvbmUgYmF0Y2ggcmVxdWVzdCB0aGF0IHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0XHRcdGNvbnN0IG9sZEZpbHRlcnMgPSBiaW5kaW5nLmdldEZpbHRlcnMoXCJBcHBsaWNhdGlvblwiKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNTb3J0ZXJzID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUykgPz8gXCJbXVwiO1xuXG5cdFx0XHRcdGNvbnN0IGZpbHRlck5vdENoYW5nZWQgPVxuXHRcdFx0XHRcdCgoYmluZGluZ0luZm8uZmlsdGVycyA9PT0gbnVsbCAmJiBvbGRGaWx0ZXJzLmxlbmd0aCA9PT0gMCkgfHwgLy8gb24gYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBmaWx0ZXJzIGFyZSBzZXQgdG8gbnVsbCB3aGVuIG5vIGZpbHRlcnNcblx0XHRcdFx0XHRcdGRlZXBFcXVhbChiaW5kaW5nSW5mby5maWx0ZXJzLCBvbGRGaWx0ZXJzWzBdKSkgJiZcblx0XHRcdFx0XHRuZXdTb3J0ZXJzID09PSBwcmV2aW91c1NvcnRlcnMgJiZcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoID09PSBiaW5kaW5nLmdldFBhdGgoKSAmJiAvLyBUaGUgcGF0aCBjYW4gYmUgY2hhbmdlZCBpbiBjYXNlIG9mIGEgcGFyYW1ldHJpemVkIGVudGl0eVxuXHRcdFx0XHRcdHRoaXMuZ2V0U2VhcmNoUXVlcnkoYmluZGluZykgPT09IGJpbmRpbmdJbmZvPy5wYXJhbWV0ZXJzPy4kc2VhcmNoO1xuXHRcdFx0XHRjb25zdCBMUk11bHRpVmlld0VuYWJsZWQgPSAhIXZpZXdEYXRhLnZpZXdzO1xuXG5cdFx0XHRcdG5lZWRNYW51YWxSZWZyZXNoID1cblx0XHRcdFx0XHRmaWx0ZXJOb3RDaGFuZ2VkICYmXG5cdFx0XHRcdFx0KGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCkgfHwgLy8gY2hlY2sgaWYgdGhlIHNlYXJjaCBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCkgfHwgLy8gY2hlY2sgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYWRkZWRcblx0XHRcdFx0XHRcdExSTXVsdGlWaWV3RW5hYmxlZCkgJiYgLy8gaWYgdGhlIG11bHRpIHZpZXcgaXMgZW5hYmxlZCB0aGUgcmVxdWVzdCBzaG91bGQgYmUgcmVmcmVzaGVkIGFzIHdlIGRvbid0IGtub3duIGlmIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZSBpcyBvdXRkYXRlZCBkdWUgdG8gYW4gYWN0aW9uIG9uIGFub3RoZXIgdGFibGVcblx0XHRcdFx0XHQhcGVuZGluZ01hbnVhbFVwZGF0ZTtcblx0XHRcdH1cblx0XHRcdC8vIENsZWFudXAgZ3JvdXBDb25kaXRpb25zIGFuZCBhZ2dyZWdhdGVDb25kaXRpb25zIGlmIHRoZXkgZG9uJ3QgbWFrZSBzZW5zZVxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBBZ2dyZWdhdGUgY29uZGl0aW9ucyBuZXZlciBtYWtlIHNlbnNlIG91dHNpZGUgb2YgYW4gYW5hbHl0aWNhbCB0YWJsZVxuXHRcdFx0XHR0YWJsZS5zZXRBZ2dyZWdhdGVDb25kaXRpb25zKCk7XG5cblx0XHRcdFx0Ly8gR3JvdXAgY29uZGl0aW9ucyBkb24ndCBtYWtlIHNlbnNlIGluIGEgVHJlZSBvciBHcmlkIHRhYmxlXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiR3JpZFRhYmxlXCIgfHxcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGFibGUuc2V0R3JvdXBDb25kaXRpb25zKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcuYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mbywgYmluZGluZ10pO1xuXHRcdFx0Ly8gd2Ugc3RvcmUgdGhlIHRhYmxlIGJpbmRpbmcgaW5mbyB0aGF0IHdhcyB1c2VkIHRvIGJpbmQgdGhlIHRhYmxlIGluIHRoZSB0YWJsZSBBUElcblx0XHRcdC8vIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbCB0byBUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nIG90aGVyIHdpc2Ugd2UgZG9uJ3QgZ2V0IHRoZSBhZ2dyZWdhdGUgcGFyYW1ldGVyc1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXRyaWV2ZSBzb3J0ZXJzIGFkZGVkIGluIHRoZSBvbkJlZm9yZVJlYmluZFRhYmxlIGV2ZW50XG5cdFx0XHR0YWJsZUFQSS5zZXRUYWJsZUJpbmRpbmdJbmZvKGJpbmRpbmdJbmZvKTtcblx0XHRcdC8vIHdlIG1ha2UgdGhlIGNhbGwgdG8gdXBkYXRlIHRoZSBkb3dubG9hZCB1cmwgYnV0IGRvIG5vdCBhd2FpdCBpdFxuXHRcdFx0dGFibGVBUEkuc2V0RG93bmxvYWRVcmwoKTtcblxuXHRcdFx0dGFibGUuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG5cdFx0XHRpZiAobmVlZE1hbnVhbFJlZnJlc2ggJiYgdGFibGUuZ2V0RmlsdGVyKCkgJiYgYmluZGluZykge1xuXHRcdFx0XHRiaW5kaW5nXG5cdFx0XHRcdFx0LnJlcXVlc3RSZWZyZXNoKGJpbmRpbmcuZ2V0R3JvdXBJZCgpKVxuXHRcdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdGFibGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTLCBuZXdTb3J0ZXJzKTtcblxuXHRcdFx0Ly9mb3IgVHJlZXRhYmxlLCBpdCdzIG5lY2Vzc2FyeSB0byBjbGVhciB0aGUgcGFzdGFibGVDb250ZXh0cyBzaW5jZSB0aGUgYmluZGluZyBkZXN0cm95cyBwcmV2aW91cyBjb250ZXh0cy5cblx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJwYXN0YWJsZUNvbnRleHRzXCIsIFtdKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSB0YWJsZUFQSS5zdG9yZWRFdmVudHMgPz8gW107XG5cdFx0XHRhdHRhY2hlZEV2ZW50cy5mb3JFYWNoKCh7IGV2ZW50SWQsIGNhbGxiYWNrLCBsaXN0ZW5lciwgZGF0YSB9KSA9PiB7XG5cdFx0XHRcdHRhYmxlLmdldFJvd0JpbmRpbmcoKT8uYXR0YWNoRXZlbnQoZXZlbnRJZCwgZGF0YSwgY2FsbGJhY2ssIGxpc3RlbmVyKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0fSxcblxuXHRfY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IENvbGxlY3Rpb25CaW5kaW5nSW5mbyB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3Qgcm93QmluZGluZ0luZm8gPSB0YWJsZUFQSS5nZXRUYWJsZVRlbXBsYXRlQmluZGluZ0luZm8oKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCB0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gZmFsc2U7XG5cdFx0aWYgKFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwidWlcIik/LmdldFByb3BlcnR5KFwiaXNFZGl0YWJsZVwiKSA9PT0gZmFsc2UgJiZcblx0XHRcdG9UYWJsZS5nZXRNb2RlbChcInZpZXdEYXRhXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRFbmFibGVkXCIpXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KGJpbmRpbmdDb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0QmluZGluZygpLmdldFVwZGF0ZUdyb3VwSWQoKSA9PSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSURcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0YWJsZUNhbkJlSW5JbmxpbmVFZGl0KSB7XG5cdFx0XHRyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRcdHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCR1cGRhdGVHcm91cElkID0gQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEO1xuXHRcdH1cblxuXHRcdHJldHVybiByb3dCaW5kaW5nSW5mbztcblx0fSxcblx0X2ludGVybmFsVXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdE9iamVjdC5hc3NpZ24ob0JpbmRpbmdJbmZvLCB0aGlzLl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUob1RhYmxlKSk7XG5cdFx0LyoqXG5cdFx0ICogQmluZGluZyBpbmZvIG1pZ2h0IGJlIHN1c3BlbmRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlIGZpcnN0IGJpbmRSb3dzIGlzIGNhbGxlZDpcblx0XHQgKiBUbyBhdm9pZCBkdXBsaWNhdGUgcmVxdWVzdHMgYnV0IHN0aWxsIGhhdmUgYSBiaW5kaW5nIHRvIGNyZWF0ZSBuZXcgZW50cmllcy5cdFx0XHRcdCAqXG5cdFx0ICogQWZ0ZXIgdGhlIGluaXRpYWwgYmluZGluZyBzdGVwLCBmb2xsb3cgdXAgYmluZGluZ3Mgc2hvdWxkIG5vIGxvbmdlciBiZSBzdXNwZW5kZWQuXG5cdFx0ICovXG5cdFx0aWYgKG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5zdXNwZW5kZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gVGhlIHByZXZpb3VzbHkgYWRkZWQgaGFuZGxlciBmb3IgdGhlIGV2ZW50ICdkYXRhUmVjZWl2ZWQnIGlzIG5vdCBhbnltb3JlIHRoZXJlXG5cdFx0Ly8gc2luY2UgdGhlIGJpbmRpbmdJbmZvIGlzIHJlY3JlYXRlZCBmcm9tIHNjcmF0Y2ggc28gd2UgbmVlZCB0byBzZXQgdGhlIGZsYWcgdG8gZmFsc2UgaW4gb3JkZXJcblx0XHQvLyB0byBhZ2FpbiBhZGQgdGhlIGhhbmRsZXIgb24gdGhpcyBldmVudCBpZiBuZWVkZWRcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0bGV0IG9GaWx0ZXI7XG5cdFx0Y29uc3Qgb0ZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8ob1RhYmxlKTtcblx0XHQvLyBQcmVwYXJlIGJpbmRpbmcgaW5mbyB3aXRoIGZpbHRlci9zZWFyY2ggcGFyYW1ldGVyc1xuXHRcdGlmIChvRmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogb0ZpbHRlckluZm8uZmlsdGVycywgYW5kOiB0cnVlIH0pO1xuXHRcdH1cblx0XHRpZiAob0ZpbHRlckluZm8uYmluZGluZ1BhdGgpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5wYXRoID0gb0ZpbHRlckluZm8uYmluZGluZ1BhdGg7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0RhdGFTdGF0ZUluZGljYXRvciA9IG9UYWJsZS5nZXREYXRhU3RhdGVJbmRpY2F0b3IoKTtcblx0XHRpZiAob0RhdGFTdGF0ZUluZGljYXRvciAmJiBvRGF0YVN0YXRlSW5kaWNhdG9yLmlzRmlsdGVyaW5nKCkpIHtcblx0XHRcdC8vIEluY2x1ZGUgZmlsdGVycyBvbiBtZXNzYWdlU3RyaXBcblx0XHRcdGlmICgob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvRmlsdGVyID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IChvQmluZGluZ0luZm8uZmlsdGVycyBhcyB1bmtub3duIGFzIEZpbHRlcltdKS5jb25jYXQob0ZpbHRlckluZm8uZmlsdGVycyksIGFuZDogdHJ1ZSB9KTtcblx0XHRcdFx0dGhpcy51cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeShvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeShvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHR9XG5cblx0XHR0aGlzLmFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMob1RhYmxlLCBvQmluZGluZ0luZm8pO1xuXHR9LFxuXG5cdHVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5OiBmdW5jdGlvbiAoYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgZmlsdGVySW5mbzogSW50ZXJuYWxCaW5kaW5nSW5mbywgZmlsdGVyPzogRmlsdGVyKSB7XG5cdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlcjtcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRpZiAoZmlsdGVySW5mby5zZWFyY2gpIHtcblx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oZmlsdGVySW5mby5zZWFyY2gpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogSWYgc3BlY2lmaWVkIGluIHRoZSBwYXlsb2FkLCBhZGRzIGEgZmlsdGVyIHRvIGRpc3BsYXkgb25seSBhY3RpdmUgZW50aXRpZXMuXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gYmluZGluZ0luZm9cblx0ICovXG5cdGFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBwYXlsb2FkID0gdGFibGUuZ2V0UGF5bG9hZCgpIGFzIHsgZmlsdGVyT25BY3RpdmVFbnRpdGllcz86IGJvb2xlYW4gfTtcblxuXHRcdGlmIChwYXlsb2FkPy5maWx0ZXJPbkFjdGl2ZUVudGl0aWVzID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJPbkFjdGl2ZSA9IG5ldyBGaWx0ZXIoeyBwYXRoOiBcIklzQWN0aXZlRW50aXR5XCIsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogdHJ1ZSB9KTtcblx0XHRcdGlmIChiaW5kaW5nSW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogW2ZpbHRlck9uQWN0aXZlLCBiaW5kaW5nSW5mby5maWx0ZXJzXSwgYW5kOiB0cnVlIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlck9uQWN0aXZlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHRlbXBsYXRlIGZyb20gdGhlIGZyYWdtZW50IG9mIGEgc2xvdCBjb2x1bW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjdXN0b20gdGFibGUgY29sdW1uXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1vZGlmaWVyIFRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIHRhYmxlSWQgVGhlIGlkIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRoZSBsb2FkZWQgZnJhZ21lbnRcblx0ICovXG5cdF90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdGNvbHVtbkluZm86IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sXG5cdFx0dmlldzogVmlldyxcblx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IEpzQ29udHJvbFRyZWVNb2RpZmllcixcblx0XHR0YWJsZUlkOiBzdHJpbmdcblx0KTogUHJvbWlzZTxudWxsIHwgQ29udHJvbCB8IENvbnRyb2xbXSB8IEVsZW1lbnQ+IHtcblx0XHRjb25zdCBzbG90Q29sdW1uc1hNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0U2xvdENvbHVtbih0YWJsZUlkLCBjb2x1bW5JbmZvLCBmYWxzZSkgYXMgdW5rbm93biBhcyBzdHJpbmc7XG5cdFx0XHR9KSxcblx0XHRcdFwidGV4dC94bWxcIlxuXHRcdCk7XG5cdFx0aWYgKCFzbG90Q29sdW1uc1hNTCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2xvdFhNTCA9IHNsb3RDb2x1bW5zWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2xvdFwiKVswXTtcblxuXHRcdGlmIChjb2x1bW5JbmZvLnRlbXBsYXRlKSB7XG5cdFx0XHRpZiAoc2xvdFhNTCkge1xuXHRcdFx0XHRjb25zdCBvVGVtcGxhdGUgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGNvbHVtbkluZm8udGVtcGxhdGUgYXMgc3RyaW5nLCBcInRleHQveG1sXCIpO1xuXHRcdFx0XHRpZiAob1RlbXBsYXRlLmZpcnN0RWxlbWVudENoaWxkICYmIG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZSAhPT0gXCJodG1sXCIpIHtcblx0XHRcdFx0XHRzbG90WE1MLnJlcGxhY2VXaXRoKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZW1vdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoYFBsZWFzZSBwcm92aWRlIGNvbnRlbnQgaW5zaWRlIHRoaXMgQnVpbGRpbmcgQmxvY2sgQ29sdW1uOiAke2NvbHVtbkluZm8uaGVhZGVyfWApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3QgcmVzdWx0WE1MID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRzbG90Q29sdW1uc1hNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdHsgbW9kZWxzOiB7fSB9LFxuXHRcdFx0KHZpZXcuZ2V0Q29udHJvbGxlcigpLmdldE93bmVyQ29tcG9uZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+KS5nZXRQcmVwcm9jZXNzb3JDb250ZXh0KClcblx0XHQpO1xuXHRcdGlmIChtb2RpZmllcj8udGFyZ2V0cyAhPT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHJldHVybiByZXN1bHRYTUwuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0fVxuXHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRkZWZpbml0aW9uOiByZXN1bHRYTUwsXG5cdFx0XHRjb250cm9sbGVyOiB2aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdH0pIGFzIFByb21pc2U8Q29udHJvbCB8IENvbnRyb2xbXT47XG5cdH0sXG5cblx0X2dldEV4cG9ydEZvcm1hdDogZnVuY3Rpb24gKGRhdGFUeXBlPzogc3RyaW5nKSB7XG5cdFx0c3dpdGNoIChkYXRhVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbERhdGVmcm9tSlNEYXRlKCk7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUoKTtcblx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbFRpbWVmcm9tSlNUaW1lKCk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0VkhSZWxldmFudEZpZWxkczogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzTWV0YWRhdGFQYXRoOiBzdHJpbmcsIHNCaW5kaW5nUGF0aD86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHRsZXQgYUZpZWxkczogc3RyaW5nW10gPSBbXSxcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFkYXRhUGF0aCk7XG5cblx0XHRpZiAob0RhdGFGaWVsZERhdGEuJGtpbmQgJiYgb0RhdGFGaWVsZERhdGEuJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0b0RhdGFGaWVsZERhdGEgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0YCk7XG5cdFx0XHRzTWV0YWRhdGFQYXRoID0gYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGA7XG5cdFx0fVxuXHRcdHN3aXRjaCAob0RhdGFGaWVsZERhdGEuJFR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdGlmIChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoYCkuaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpKSB7XG5cdFx0XHRcdFx0b01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhYCkuZm9yRWFjaCgob1ZhbHVlOiB1bmtub3duLCBpSW5kZXg6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdFx0YUZpZWxkcyA9IGFGaWVsZHMuY29uY2F0KFxuXHRcdFx0XHRcdFx0XHR0aGlzLl9nZXRWSFJlbGV2YW50RmllbGRzKG9NZXRhTW9kZWwsIGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YS8ke2lJbmRleH1gKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoVXJsXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb25cIjpcblx0XHRcdFx0YUZpZWxkcy5wdXNoKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1ZhbHVlLyRQYXRoYCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBwcm9wZXJ0eVxuXHRcdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBtYWtlIHN1cmUgVkggcmVsZXZhbnQgZmllbGQgcGF0aCBkbyBub3QgY29udGFpbiB0aGUgYmluZGluZ3BhdGhcblx0XHRcdFx0aWYgKHNCaW5kaW5nUGF0aCAmJiBzTWV0YWRhdGFQYXRoLmluZGV4T2Yoc0JpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0XHRcdGFGaWVsZHMucHVzaChzTWV0YWRhdGFQYXRoLnN1YnN0cmluZyhzQmluZGluZ1BhdGgubGVuZ3RoICsgMSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFGaWVsZHMucHVzaChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgoc01ldGFkYXRhUGF0aCwgdHJ1ZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGFGaWVsZHM7XG5cdH0sXG5cdF9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbjogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIGFDb2x1bW5zOiBUYWJsZUNvbHVtbltdLCBvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoIW9JbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1ucy5maWx0ZXIoKG9Db2x1bW46IFRhYmxlQ29sdW1uKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yKG9Db2x1bW4pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IG9UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0bGV0IHNBZGRWaXNpYmxlQ29sdW1uTmFtZSwgc1Zpc2libGVDb2x1bW5OYW1lLCBiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0LCBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcjtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRzVmlzaWJsZUNvbHVtbk5hbWUgPSBhVmlzaWJsZUNvbHVtbnNbaV0uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdGZvciAoY29uc3QgaiBpbiBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvciA9IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yW2pdLm5hbWU7XG5cdFx0XHRcdGlmIChzVmlzaWJsZUNvbHVtbk5hbWUgPT09IHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdFx0YkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Db2x1bW5JbmZvICYmIG9Db2x1bW5JbmZvLm5hbWUgPT09IHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdFx0c0FkZFZpc2libGVDb2x1bW5OYW1lID0gb0NvbHVtbkluZm8ubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQpIHtcblx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgc1Zpc2libGVDb2x1bW5OYW1lKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCAmJiBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpIHtcblx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNBZGRWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0fVxuXHR9LFxuXHRyZW1vdmVJdGVtOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRvUHJvcGVydHlJbmZvTmFtZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGxldCBkb1JlbW92ZUl0ZW0gPSB0cnVlO1xuXHRcdGlmICghb1Byb3BlcnR5SW5mb05hbWUpIHtcblx0XHRcdC8vIDEuIEFwcGxpY2F0aW9uIHJlbW92ZWQgdGhlIHByb3BlcnR5IGZyb20gdGhlaXIgZGF0YSBtb2RlbFxuXHRcdFx0Ly8gMi4gYWRkSXRlbSBmYWlsZWQgYmVmb3JlIHJldmVydERhdGEgY3JlYXRlZFxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xuXHRcdH1cblx0XHRjb25zdCBvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eSA9IGF3YWl0IG9Nb2RpZmllci5nZXRQcm9wZXJ0eTxzdHJpbmc+KG9Qcm9wZXJ0eUluZm9OYW1lLCBcImRhdGFQcm9wZXJ0eVwiKTtcblx0XHRpZiAoc0RhdGFQcm9wZXJ0eSAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzICYmIHNEYXRhUHJvcGVydHkuaW5jbHVkZXMoXCJJbmxpbmVYTUxcIikpIHtcblx0XHRcdG9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvVGFibGUsIFwiZGVwZW5kZW50c1wiLCBvUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0XHRkb1JlbW92ZUl0ZW0gPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKChvVGFibGUgYXMgVUk1RWxlbWVudCkuaXNBICYmIG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCBvVGFibGUsIHRoaXMuZ2V0Q29sdW1uc0ZvcihvVGFibGUgYXMgVGFibGUpKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xuXHR9LFxuXHRfZ2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAobVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IH0pIHtcblx0XHRyZXR1cm4gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdH0sXG5cdF9zZXREcmFmdEluZGljYXRvclN0YXR1czogZnVuY3Rpb24gKFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdGFDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRcdG9Db2x1bW5JbmZvPzogVGFibGVDb2x1bW5cblx0KSB7XG5cdFx0aWYgKG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW4ob1RhYmxlIGFzIFRhYmxlLCBhQ29sdW1ucywgb0NvbHVtbkluZm8pO1xuXHRcdH1cblx0fSxcblx0X2dldEdyb3VwSWQ6IGZ1bmN0aW9uIChzUmV0cmlldmVkR3JvdXBJZDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNSZXRyaWV2ZWRHcm91cElkIHx8IHVuZGVmaW5lZDtcblx0fSxcblx0X2luc2VydEFnZ3JlZ2F0aW9uOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1ZhbHVlSGVscDogRWxlbWVudCB8IFVJNUVsZW1lbnQgfCBFbGVtZW50W10gfCBVSTVFbGVtZW50W10sXG5cdFx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRcdG9UYWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnRcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9WYWx1ZUhlbHApIHtcblx0XHRcdHJldHVybiBvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1ZhbHVlSGVscCwgMCk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fSxcblxuXHQvKipcblx0ICogSW52b2tlZCB3aGVuIGEgY29sdW1uIGlzIGFkZGVkIHVzaW5nIHRoZSB0YWJsZSBwZXJzb25hbGl6YXRpb24gZGlhbG9nLlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGFkZGVkXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gdGhlIGZsZXhpYmlsaXR5IEFQSVxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIEluc3RhbmNlIG9mIHRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgSW5zdGFuY2Ugb2YgdGhlIGFwcCBjb21wb25lbnRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy52aWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgdGFibGUgY29sdW1uIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcblx0ICovXG5cdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnQsXG5cdFx0cHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHZpZXc/OiBGRVZpZXcgfVxuXHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fZ2V0TWV0YU1vZGVsKG1Qcm9wZXJ0eUJhZyksXG5cdFx0XHRvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXIsXG5cdFx0XHRzVGFibGVJZCA9IG9Nb2RpZmllci5nZXRJZCh0YWJsZSksXG5cdFx0XHRhQ29sdW1ucyA9ICh0YWJsZSBhcyBVSTVFbGVtZW50KS5pc0EgPyB0aGlzLmdldENvbHVtbnNGb3IodGFibGUgYXMgVGFibGUpIDogbnVsbCxcblx0XHRcdHRhYmxlQVBJID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAoIWFDb2x1bW5zKSB7XG5cdFx0XHQvLyBXZSByZXR1cm4gbnVsbCBoZXJlIGJlY2F1c2UgZXZlcnl0aGluZyBzaG91bGQgYXBwbHkgYXQgcnVudGltZVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbikge1xuXHRcdFx0cmV0dXJuIG9Db2x1bW4ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblx0XHRpZiAoIWNvbHVtbkluZm8pIHtcblx0XHRcdExvZy5lcnJvcihgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgZm91bmQgd2hpbGUgYWRkaW5nIGNvbHVtbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRMb2cud2FybmluZyhgQ29sdW1uIGZvciAke3Byb3BlcnR5SW5mb05hbWV9IG5vdCBhZGRlZCBiZWNhdXNlIGl0J3MgaGlkZGVuYCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgdHJ1ZSk7XG5cdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCB0YWJsZSwgYUNvbHVtbnMsIGNvbHVtbkluZm8pO1xuXHRcdGNvbnN0IHNQYXRoID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJtZXRhUGF0aFwiLCBvTW9kaWZpZXIpO1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoISkhO1xuXHRcdC8vIElmIHZpZXcgaXMgbm90IHByb3ZpZGVkIHRyeSB0byBnZXQgaXQgYnkgYWNjZXNzaW5nIHRvIHRoZSBwYXJlbnRhbCBoaWVyYXJjaHlcblx0XHQvLyBJZiBpdCBkb2Vzbid0IHdvcmsgKHRhYmxlIGludG8gYW4gdW5hdHRhY2hlZCBPUCBzZWN0aW9uKSBnZXQgdGhlIHZpZXcgdmlhIHRoZSBBcHBDb21wb25lbnRcblx0XHRjb25zdCB2aWV3ID1cblx0XHRcdG1Qcm9wZXJ0eUJhZy52aWV3IHx8XG5cdFx0XHRDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlIGFzIFVJNUVsZW1lbnQpIHx8XG5cdFx0XHQobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCA/IENvbW1vblV0aWxzLmdldEN1cnJlbnRQYWdlVmlldyhtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50KSA6IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0TG9nLmVycm9yKFwiQ3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgYXJlIG5vdCBzdXBwb3J0ZWQgd2hlbiB1c2luZyBhIHRhYmxlIGJ1aWxkaW5nIGJsb2NrLlwiKTtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJTbG90XCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudChjb2x1bW5JbmZvIGFzIEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sIHZpZXcsIG9Nb2RpZmllciwgc1RhYmxlSWQpO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiQ29tcHV0ZWRcIikge1xuXHRcdFx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gKCh0YWJsZSBhcyBNRENUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcztcblx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihzVGFibGVJZCwgY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCBvVGFibGVDb250ZXh0LCBlbmFibGVBbmFseXRpY3MpO1xuXHRcdH1cblxuXHRcdC8vIGZhbGwtYmFja1xuXHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRsZXQgcHJvcGVydHlJbmZvcyA9IHRhYmxlQVBJLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRpZiAoIXByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHQvLyBJZiB0aGUgcHJvcGVydHlJbmZvcyBhcmUgbm90IGZldGNoZWQgeWV0LCB3ZSBuZWVkIHRvIGZldGNoIHRoZW1cblx0XHRcdC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgdGFibGUgaXMgbm90IGNyZWF0ZWQgeWV0XG5cdFx0XHRhd2FpdCB0aGlzLmZldGNoUHJvcGVydGllcyh0YWJsZSBhcyBNRENUYWJsZSk7XG5cdFx0XHRwcm9wZXJ0eUluZm9zID0gdGFibGVBUEkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zLmZpbmQoZnVuY3Rpb24gKHByb3BJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRyZXR1cm4gcHJvcEluZm8ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5SW5mbyEuYW5ub3RhdGlvblBhdGgpITtcblxuXHRcdGNvbnN0IGZuVGVtcGxhdGVGcmFnbWVudCA9IGFzeW5jIChcblx0XHRcdG9JblByb3BlcnR5SW5mbzogdW5rbm93bixcblx0XHRcdG9WaWV3OiBGRVZpZXdcblx0XHQpOiBQcm9taXNlPFVJNUVsZW1lbnQgfCBFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPiA9PiB7XG5cdFx0XHRsZXQgYkRpc3BsYXlNb2RlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNUYWJsZVR5cGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgc0NyZWF0aW9uTW9kZUN1c3RvbURhdGE6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nIHwgYm9vbGVhbj4odGFibGUsIFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJ0YWJsZVR5cGVcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJjcmVhdGlvbk1vZGVcIiwgb01vZGlmaWVyKVxuXHRcdFx0XSkudGhlbihhc3luYyAoYUN1c3RvbURhdGE6IChzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKVtdKSA9PiB7XG5cdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGFDdXN0b21EYXRhWzBdIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNUYWJsZVR5cGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMV0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzJdIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUmVhZCBPbmx5IGFuZCBDb2x1bW4gRWRpdCBNb2RlIGNhbiBib3RoIGhhdmUgdGhyZWUgc3RhdGVcblx0XHRcdFx0Ly8gVW5kZWZpbmVkIG1lYW5zIHRoYXQgdGhlIGZyYW1ld29yayBkZWNpZGVzIHdoYXQgdG8gZG9cblx0XHRcdFx0Ly8gVHJ1ZSAvIERpc3BsYXkgbWVhbnMgYWx3YXlzIHJlYWQgb25seVxuXHRcdFx0XHQvLyBGYWxzZSAvIEVkaXRhYmxlIG1lYW5zIGVkaXRhYmxlIGJ1dCB3aGlsZSBzdGlsbCByZXNwZWN0aW5nIHRoZSBsb3cgbGV2ZWwgcHJpbmNpcGxlIChpbW11dGFibGUgcHJvcGVydHkgd2lsbCBub3QgYmUgZWRpdGFibGUpXG5cdFx0XHRcdGlmIChiRGlzcGxheU1vZGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgYkRpc3BsYXlNb2RlICE9PSBcImJvb2xlYW5cIikge1xuXHRcdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGJEaXNwbGF5TW9kZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9ICh0YWJsZSBhcyBUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoLFxuXHRcdFx0XHRcdFx0cmVhZE9ubHk6IGJEaXNwbGF5TW9kZSxcblx0XHRcdFx0XHRcdHRhYmxlVHlwZTogc1RhYmxlVHlwZUN1c3RvbURhdGEsXG5cdFx0XHRcdFx0XHRpZDogc1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBwcm9wZXJ0eUluZm9OYW1lLFxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSxcblx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogeyBuYW1lOiBzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSB9LFxuXHRcdFx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXJcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQ6IG9Qcm9wZXJ0eUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9jb2x1bW5JbmZvXCIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLFxuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW46IG9UaGlzXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCB0YWJsZUNvbGxlY3Rpb24gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0XHRvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pIVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVyUHJvdmlkZXIgPSBuZXcgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcihcblx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHR7IGNvbGxlY3Rpb25FbnRpdHk6IHRhYmxlQ29sbGVjdGlvbi50YXJnZXRPYmplY3QhLCBtZXRhTW9kZWw6IG9NZXRhTW9kZWwgfSxcblx0XHRcdFx0XHR0YWJsZUFQSVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBjb21wdXRlZENvbHVtblhNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRcdFx0anN4LnJlbmRlckFzWE1MKCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoZ2V0Q29sdW1uVGVtcGxhdGUoXG5cdFx0XHRcdFx0XHRcdHNUYWJsZUlkLFxuXHRcdFx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSEsXG5cdFx0XHRcdFx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHRcdFx0KSA/PyBcIlwiKSBhcyB1bmtub3duIGFzIHN0cmluZztcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcInRleHQveG1sXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRcdFx0XHRjb21wdXRlZENvbHVtblhNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0XHRcdFx0eyB2aWV3OiBvVmlldyB9LFxuXHRcdFx0XHRcdG9Nb2RpZmllclxuXHRcdFx0XHQpLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9UaGlzLmRlc3Ryb3koKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZuVGVtcGxhdGVGcmFnbWVudChwcm9wZXJ0eUluZm8sIHZpZXcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBQcm92aWRlIHRoZSBUYWJsZSdzIGZpbHRlciBkZWxlZ2F0ZSB0byBwcm92aWRlIGJhc2ljIGZpbHRlciBmdW5jdGlvbmFsaXR5IHN1Y2ggYXMgYWRkaW5nIEZpbHRlckZpZWxkcy5cblx0ICogQHJldHVybnMgT2JqZWN0IGZvciB0aGUgVGFibGVzIGZpbHRlciBwZXJzb25hbGl6YXRpb24uXG5cdCAqL1xuXHRnZXRGaWx0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRhcGlWZXJzaW9uOiAyXG5cdFx0XHR9LFxuXHRcdFx0RmlsdGVyQmFyRGVsZWdhdGUsXG5cdFx0XHR7XG5cdFx0XHRcdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChvUGFyZW50Q29udHJvbDogQ29udHJvbCwgc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHlJbmZvTmFtZS5pbmRleE9mKFwiUHJvcGVydHk6OlwiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Ly8gQ29ycmVjdCB0aGUgbmFtZSBvZiBjb21wbGV4IHByb3BlcnR5IGluZm8gcmVmZXJlbmNlcy5cblx0XHRcdFx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBGaWx0ZXJCYXJEZWxlZ2F0ZS5hZGRJdGVtKG9QYXJlbnRDb250cm9sIGFzIEZpbHRlckJhciwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgVHlwZU1hcCBhdHRhY2hlZCB0byB0aGlzIGRlbGVnYXRlLlxuXHQgKiBAcmV0dXJucyBBbnkgaW5zdGFuY2Ugb2YgVHlwZU1hcFxuXHQgKi9cblx0Z2V0VHlwZU1hcDogZnVuY3Rpb24gKC8qb1BheWxvYWQ6IG9iamVjdCovKSB7XG5cdFx0cmV0dXJuIFR5cGVNYXA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZvcm1hdCB0aGUgdGl0bGUgb2YgdGhlIGdyb3VwIGhlYWRlciAuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEZvcm1hdHRlZCB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyLlxuXHQgKi9cblx0Zm9ybWF0R3JvdXBIZWFkZXIodGFibGU6IE1EQ1RhYmxlLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgcHJvcGVydHk6IHN0cmluZykge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zPy5maW5kKChvYmopID0+IHtcblx0XHRcdHJldHVybiBvYmoubmFtZSA9PT0gcHJvcGVydHk7XG5cdFx0fSk7XG5cdFx0LypGb3IgYSBEYXRlLCBEYXRlVGltZSwgQm9vbGVhbiBvciBEZWNpbWFsIHByb3BlcnR5LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgaW4gZXh0ZXJuYWwgZm9ybWF0IHVzaW5nIGEgVUk1IHR5cGUgZm9yIHRoZVxuXHQgICAgICAgIGdpdmVuIHByb3BlcnR5IHBhdGggdGhhdCBmb3JtYXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5J3MgRURNIHR5cGUgYW5kIGNvbnN0cmFpbnRzKi9cblx0XHRjb25zdCBkYXRhQmFzZVR5cGUgPSBUeXBlTWFwLmdldFR5cGVDb25maWcocHJvcGVydHlJbmZvPy5kYXRhVHlwZSkuYmFzZVR5cGU7XG5cdFx0Y29uc3QgZXh0ZXJuYWxGb3JtYXQgPVxuXHRcdFx0ZGF0YUJhc2VUeXBlID09PSBcIkRhdGVUaW1lXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIkRhdGVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiQm9vbGVhblwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJOdW1lcmljXCI7XG5cdFx0bGV0IHZhbHVlO1xuXHRcdGlmICghY29udGV4dCkge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHRcdH1cblx0XHRpZiAocHJvcGVydHlJbmZvPy5tb2RlKSB7XG5cdFx0XHRzd2l0Y2ggKHByb3BlcnR5SW5mby5tb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gcHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZSA9IHByb3BlcnR5SW5mbz8ucGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnBhdGgsIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlGQSxNQUFNQSw4QkFBOEIsR0FBRywrQkFBK0I7RUFDdEUsTUFB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
|
|
1415
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiT2JqZWN0IiwiYXNzaWduIiwiVGFibGVEZWxlZ2F0ZUJhc2UiLCJhcGlWZXJzaW9uIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAiLCJ0YWJsZSIsInByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb3MiLCJrZXkiLCJpbmRleE9mIiwiY29sdW1uIiwiZ2V0Q29sdW1ucyIsImZpbmQiLCJjb2wiLCJnZXRQcm9wZXJ0eUtleSIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkTWV0YURhdGEiLCJjb252ZXJ0ZWRUeXBlcyIsIm9EYXRhRmllbGQiLCJ0YXJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJhRmllbGRXaWR0aCIsIkRhdGEiLCJmb3JFYWNoIiwib0RhdGEiLCJvRGF0YUZpZWxkV2lkdGgiLCIkVHlwZSIsIlRhYmxlU2l6ZUhlbHBlciIsImdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImdldFdpZHRoRm9yRGF0YUZpZWxkIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsInRvU3RyaW5nIiwicHVzaCIsIm5XaWRlc3QiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIk1hdGgiLCJtYXgiLCJ2aXN1YWxTZXR0aW5ncyIsImRlZXBFeHRlbmQiLCJ3aWR0aENhbGN1bGF0aW9uIiwidmVydGljYWxBcnJhbmdlbWVudCIsIm1pbldpZHRoIiwiY2VpbCIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJwcm9wZXJ0eSIsInRhYmxlQVBJIiwiX2dldFRhYmxlQVBJIiwibWV0YU1vZGVsIiwiZGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwiZ2FwIiwiZ2V0UHJvcGVydHkiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCIsInVuaXQiLCJ1bml0VGV4dCIsInRpbWV6b25lVGV4dCIsIm9UYWJsZUFQSSIsInRleHQiLCJnZXRSZWFkT25seSIsIl9jb21wdXRlTGFiZWwiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSIsInNvbWUiLCJwcm9wIiwicGF0aCIsIm1vZGUiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImFkZGl0aW9uYWxMYWJlbHMiLCJmaWx0ZXJhYmxlIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0aWVzIiwicDEzbk1vZGUiLCJnZXRQMTNuTW9kZSIsInNvcnRhYmxlIiwiZ3JvdXBhYmxlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwiZGF0YVR5cGUiLCJ2aXNpYmxlIiwiZ2V0UGFyZW50IiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0SWQiLCJnZXRDb2x1bW5zRm9yIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29sdW1ucyIsImZldGNoRXhwb3J0Q2FwYWJpbGl0aWVzIiwib1RhYmxlIiwib0NhcGFiaWxpdGllcyIsIlhMU1giLCJvTW9kZWwiLCJEZWxlZ2F0ZVV0aWwiLCJmZXRjaE1vZGVsIiwidGhlbiIsIm1vZGVsIiwiYVN1cHBvcnRlZEZvcm1hdHMiLCJhTG93ZXJGb3JtYXRzIiwibWFwIiwiZWxlbWVudCIsInRvTG93ZXJDYXNlIiwib0Fubm90YXRpb24iLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImNvbHVtbkluZm8iLCJjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNGaWx0ZXJhYmxlIiwiaXNQYXRoRmlsdGVyYWJsZSIsInJlbGF0aXZlUGF0aCIsImlzUGFydE9mTGluZUl0ZW0iLCJpc1BhcnRPZkN1c3RvbUNvbHVtbiIsImlzQ29uc3RhbnQiLCJfZmV0Y2hQcm9wZXJ0eUluZm8iLCJhcHBDb21wb25lbnQiLCJzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCIsIm9OYXZpZ2F0aW9uQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNDb21wbGV4VHlwZSIsInR5cGVDb25maWciLCJjbGFzc05hbWUiLCJiRmlsdGVyYWJsZSIsIkNvbW1vbkhlbHBlciIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiYklzQW5hbHl0aWNhbFRhYmxlIiwiZ2V0Q3VzdG9tRGF0YSIsImdldExvY2FsaXplZFRleHQiLCJ0b29sdGlwIiwiX2dldFR5cGVDb25maWciLCJuYW1lIiwiZm9ybWF0T3B0aW9ucyIsImJhc2VUeXBlIiwic3R5bGUiLCJjb25zdHJhaW50cyIsImF2YWlsYWJpbGl0eSIsImV4cG9ydFNldHRpbmdzIiwiX3NldFByb3BlcnR5SW5mb0V4cG9ydFNldHRpbmdzIiwidHlwZSIsIkNvbHVtblR5cGUiLCJBbm5vdGF0aW9uIiwidGVtcGxhdGUiLCJjbGlwYm9hcmRTZXR0aW5ncyIsImtleXMiLCJleHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSIsIl91cGRhdGVBbmFseXRpY2FsUHJvcGVydHlJbmZvQXR0cmlidXRlcyIsImlzS2V5IiwiaXNHcm91cGFibGUiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJfc2V0VGV4dEFycmFuZ2VtZW50SW5mbyIsImV4dGVuc2lvbiIsInRlY2huaWNhbGx5R3JvdXBhYmxlIiwiY2FzZVNlbnNpdGl2ZSIsImFkZGl0aW9uYWxMYWJlbCIsImV4cG9ydEZvcm1hdCIsIl9nZXRFeHBvcnRGb3JtYXQiLCJmb3JtYXQiLCJUeXBlTWFwIiwiZ2V0VHlwZUNvbmZpZyIsImlzVHlwZUZpbHRlcmFibGUiLCJkZXNjcmlwdGlvbkNvbHVtbiIsIm9Db2wiLCJ0ZXh0UHJvcGVydHkiLCJ2YWx1ZVByb3BlcnR5IiwiZGVzY3JpcHRpb25Qcm9wZXJ0eSIsImFnZ3JlZ2F0YWJsZSIsIl9mZXRjaENvbXB1dGVkUHJvcGVydHlJbmZvIiwiX2ZldGNoQ3VzdG9tUHJvcGVydHlJbmZvIiwiaGVhZGVyIiwic3RhcnRzV2l0aCIsIk1vZGVsSGVscGVyIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsIl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uSW5mbyIsImhhc0RyYWZ0SW5kaWNhdG9yIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwiX3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWwiLCJfb1RhYmxlIiwiX29Db2x1bW5JbmZvIiwiYVZpc2libGVDb2x1bW5zIiwib0ludGVybmFsQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNJbnRlcm5hbFBhdGgiLCJnZXRQYXRoIiwiaW5kZXgiLCJzZXRQcm9wZXJ0eSIsIl9mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJlbnRpdHlUeXBlUGF0aCIsImJpbmRpbmdQYXRoIiwiZ2V0RW50aXR5U2V0UGF0aCIsImZldGNoZWRQcm9wZXJ0aWVzIiwibm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJDb21tb25VdGlscyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJtYXhDb25kaXRpb25zIiwiaXNNdWx0aVZhbHVlIiwiRXJyb3IiLCJzZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zIiwiZ2V0UHJvcGVydHlJbmZvcyIsIl9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eSIsImdldENhY2hlZFByb3BlcnR5SW5mb3MiLCJzdWJGZXRjaGVkUHJvcGVydGllcyIsInNldENhY2hlZFByb3BlcnR5SW5mb3MiLCJzZXROb0RhdGFJbmZvcm1hdGlvbiIsImlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uIiwibm9EYXRhQWdncmVnYXRpb24iLCJnZXROb0RhdGEiLCJpc0EiLCJjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlIiwic2V0VGl0bGUiLCJ0aXRsZSIsInNldERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRJbGx1c3RyYXRpb25UeXBlIiwiaWxsdXN0cmF0aW9uVHlwZSIsInNldElsbHVzdHJhdGlvblNpemUiLCJpbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0ZWRNZXNzYWdlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwic2V0Tm9EYXRhIiwic2V0VGFibGVOb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2UiLCJiaW5kaW5nSW5mbyIsInRhYmxlRmlsdGVySW5mbyIsIlRhYmxlVXRpbHMiLCJnZXRBbGxGaWx0ZXJJbmZvIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJzdWZmaXhSZXNvdXJjZUtleSIsInN1YnN0cmluZyIsImlsbHVzdHJhdGVkSW5mb3JtYXRpb24iLCJnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycyIsImdldFF1aWNrRmlsdGVyIiwiZ2V0VGV4dCIsIklsbHVzdHJhdGVkTWVzc2FnZVR5cGUiLCJOb1NlYXJjaFJlc3VsdHMiLCJmaWx0ZXJBc3NvY2lhdGlvbiIsImdldEZpbHRlciIsImhhc0ZpbHRlck9yU2VhcmNoIiwic2VhcmNoIiwiZmlsdGVycyIsInRlc3QiLCJOb0RhdGEiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0Vmlld0RhdGEiLCJsaXZlTW9kZSIsImdldE5vRGF0YU1lc3NhZ2VNb2RlIiwiY3VycmVudE5vRGF0YSIsImhhbmRsZVRhYmxlRGF0YVJlcXVlc3RlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVxdWVzdGVkQXR0YWNoZWQiLCJhdHRhY2hEYXRhUmVxdWVzdGVkIiwic2V0VGltZW91dCIsInRhYmxlRGVmYXVsdHNQcm9taXNlIiwiZ2V0VGFibGVEZWZhdWx0cyIsImhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkIiwiYkRhdGFSZWNlaXZlZEF0dGFjaGVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsInRhYmxlRGVmaW5pdGlvbiIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiRGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJ0YWJsZURlZmF1bHREYXRhIiwic2V0VXBFbXB0eVJvd3MiLCJfdXBkYXRlQXZhaWxhYmxlQ2FyZHMiLCJzZXRPcHRpbWlzdGljQmF0Y2hQcm9taXNlRm9yTW9kZWwiLCJjb250cm9sbGVyIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJQcm9taXNlS2VlcGVyIiwic2V0T3B0aW1pc3RpY0JhdGNoRm9yTW9kZWwiLCJlbmFibGVPcHRpbWlzdGljQmF0Y2hNb2RlIiwiZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUiLCJpc0ZpbHRlckVsaWdpYmxlRm9yT3B0aW1pc3RpY0JhdGNoIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJnZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSIsImRhdGFNb2RlbCIsImlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQiLCJnZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyIiwiaXNPcHRpbWlzdGljQmF0Y2hEaXNhYmxlZCIsIm9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlS2VlcGVyIiwic2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsInByb21pc2UiLCJyZWJpbmQiLCJvQmluZGluZ0luZm8iLCJiSXNTdXNwZW5kZWQiLCJUYWJsZVJ1bnRpbWUiLCJjbGVhclNlbGVjdGlvbiIsImFwcGx5Iiwib25UYWJsZUJvdW5kIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiZmV0Y2hQcm9wZXJ0aWVzIiwicHJlSW5pdCIsImZhc3RDcmVhdGlvblJvdyIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsImludGVybmFsQmluZGluZ0NvbnRleHQiLCJxdWlja0ZpbHRlciIsImNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSIsIkNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSIsIl9oYW5kbGVTb3J0ZXJzT25DdXJyZW5jaWVzT3JVb00iLCJfaW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbyIsIl9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyIsIl9oYW5kbGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRCIsImZpcmVFdmVudCIsImNvbGxlY3Rpb25CaW5kaW5nSW5mbyIsInF1aWNrRmlsdGVyS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJhdHRhY2hlZEV2ZW50cyIsImdldEF0dGFjaGVkRXZlbnRzIiwiY29udGV4dCIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93Iiwic2V0QXR0YWNoRXZlbnRzIiwiZSIsInNvcnRlcnMiLCJzb3J0ZXIiLCJuZXdTb3J0ZXJzVG9CZUFwcGxpZWQiLCJ0YWJsZVByb3BlcnRpZXMiLCJ0YWJsZVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwidW5pdFNvcnRlckF2YWlsYWJsZSIsInNvcnQiLCJTb3J0ZXIiLCJnZXRGaWx0ZXJzIiwidXBkYXRlRmlsdGVyc0ZvckV4dGVybmFsSUQiLCJnZXRQYWdlQ29udHJvbGxlciIsInJlY29tbWVuZGF0aW9ucyIsImlzUmVjb21tZW5kYXRpb25FbmFibGVkIiwidGFibGVEZWYiLCJyZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyIsImFubm90YXRpb24iLCJlbnRpdHlUeXBlTmFtZSIsInBhcmFtZXRlcnMiLCIkc2VsZWN0IiwiZ2V0VmlldyIsImNvbnZlcnRlclR5cGUiLCJjYXJkcyIsImNvbGxlY3RBdmFpbGFibGVDYXJkcyIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJjYXJkT2JqZWN0IiwidXBkYXRlQ2FyZHMiLCJwYXJlbnRBcHBJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCIkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJjb2xsZWN0aW9uUGF0aCIsImludGVybmFsTW9kZWwiLCJrZXB0QWxpdmVMaXN0cyIsIm5lZWRNYW51YWxSZWZyZXNoIiwidmlldyIsIm1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5IiwicGVuZGluZ01hbnVhbFVwZGF0ZSIsIm5ld1NvcnRlcnMiLCJzdHJpbmdpZnkiLCJ2aWV3RGF0YSIsIm9sZEZpbHRlcnMiLCJwcmV2aW91c1NvcnRlcnMiLCJmaWx0ZXJOb3RDaGFuZ2VkIiwiZGVlcEVxdWFsIiwiTFJNdWx0aVZpZXdFbmFibGVkIiwidmlld3MiLCJlbmFibGVBbmFseXRpY3MiLCJzZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwic2V0R3JvdXBDb25kaXRpb25zIiwic2V0VGFibGVCaW5kaW5nSW5mbyIsInNldERvd25sb2FkVXJsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsInN0b3JlZEV2ZW50cyIsIl9yZWYiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZSIsInJvd0JpbmRpbmdJbmZvIiwiZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvIiwiYmluZGluZ0NvbnRleHQiLCJ0YWJsZUNhbkJlSW5JbmxpbmVFZGl0IiwiZ2V0QmluZGluZyIsImdldFVwZGF0ZUdyb3VwSWQiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJ1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeSIsImFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJJbmZvIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInBheWxvYWQiLCJnZXRQYXlsb2FkIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsImZpbHRlck9uQWN0aXZlIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQiLCJtb2RpZmllciIsInRhYmxlSWQiLCJzbG90Q29sdW1uc1hNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0U2xvdENvbHVtbiIsInNsb3RYTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm9UZW1wbGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwibm9kZU5hbWUiLCJyZXBsYWNlV2l0aCIsInJlbW92ZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJtb2RlbHMiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwidGFyZ2V0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJFeGNlbEZvcm1hdCIsImdldEV4Y2VsRGF0ZWZyb21KU0RhdGUiLCJnZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwiX2dldFZIUmVsZXZhbnRGaWVsZHMiLCJzTWV0YWRhdGFQYXRoIiwic0JpbmRpbmdQYXRoIiwiYUZpZWxkcyIsIm9EYXRhRmllbGREYXRhIiwiJGtpbmQiLCJvVmFsdWUiLCJpSW5kZXgiLCJnZXROYXZpZ2F0aW9uUGF0aCIsIl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbiIsImFDb2x1bW5zIiwiYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uIiwic0FkZFZpc2libGVDb2x1bW5OYW1lIiwic1Zpc2libGVDb2x1bW5OYW1lIiwiYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCIsInNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yIiwiaSIsImoiLCJyZW1vdmVJdGVtIiwib1Byb3BlcnR5SW5mb05hbWUiLCJtUHJvcGVydHlCYWciLCJkb1JlbW92ZUl0ZW0iLCJvTW9kaWZpZXIiLCJzRGF0YVByb3BlcnR5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMiLCJfZ2V0TWV0YU1vZGVsIiwiX2dldEdyb3VwSWQiLCJzUmV0cmlldmVkR3JvdXBJZCIsIl9pbnNlcnRBZ2dyZWdhdGlvbiIsIm9WYWx1ZUhlbHAiLCJhZGRJdGVtIiwicHJvcGVydHlJbmZvTmFtZSIsInNUYWJsZUlkIiwid2FybmluZyIsInNQYXRoIiwiZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllciIsIm9UYWJsZUNvbnRleHQiLCJnZXRDdXJyZW50UGFnZVZpZXciLCJnZXRDb21wdXRlZENvbHVtbiIsImdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJwcm9wSW5mbyIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJmblRlbXBsYXRlRnJhZ21lbnQiLCJvSW5Qcm9wZXJ0eUluZm8iLCJvVmlldyIsImJEaXNwbGF5TW9kZSIsInNUYWJsZVR5cGVDdXN0b21EYXRhIiwic0NyZWF0aW9uTW9kZUN1c3RvbURhdGEiLCJhbGwiLCJhQ3VzdG9tRGF0YSIsIm9UaGlzIiwiSlNPTk1vZGVsIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwicmVhZE9ubHkiLCJ0YWJsZVR5cGUiLCJpZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJjb2xsZWN0aW9uIiwiY3JlYXRpb25Nb2RlIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJ0aGlzIiwidGFibGVDb2xsZWN0aW9uIiwiaGFuZGxlclByb3ZpZGVyIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsImNvbGxlY3Rpb25FbnRpdHkiLCJjb21wdXRlZENvbHVtblhNTCIsImdldENvbHVtblRlbXBsYXRlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJkZXN0cm95IiwiZ2V0RmlsdGVyRGVsZWdhdGUiLCJGaWx0ZXJCYXJEZWxlZ2F0ZSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJyZXBsYWNlIiwiZ2V0VHlwZU1hcCIsImZvcm1hdEdyb3VwSGVhZGVyIiwib2JqIiwiZGF0YUJhc2VUeXBlIiwiZXh0ZXJuYWxGb3JtYXQiLCJWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFdpdGhCcmFja2V0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIERhdGFGaWVsZEZvckFubm90YXRpb24sIEZpZWxkR3JvdXBUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEV4dGVuZFwiO1xuaW1wb3J0IHsgaXNDb25zdGFudCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuXG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Q29sdW1uRXhwb3J0U2V0dGluZ3MsXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sXG5cdFRhYmxlQ29sdW1uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgVmFsdWVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBEZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRXhjZWxGb3JtYXQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRXhjZWxGb3JtYXRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGl6ZWRUZXh0LCBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVHlwZUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyQmFyRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgeyBnZXRDb2x1bW5UZW1wbGF0ZSwgZ2V0Q29tcHV0ZWRDb2x1bW4sIGdldFNsb3RDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9NZGNUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWVcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgSnNDb250cm9sVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDVGFibGUsIE1EQ1RhYmxlUHJvcGVydHlJbmZvIGFzIFByb3BlcnR5SW5mbywgZGVmYXVsdCBhcyBUYWJsZSwgVmlzdWFsU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVHlwZUNvbmZpZyBmcm9tIFwic2FwL3VpL21kYy9UeXBlQ29uZmlnXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBUYWJsZURlbGVnYXRlQmFzZSBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCwgZGVmYXVsdCBhcyB2NENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgUXVpY2tGaWx0ZXJTZWxlY3RvciBmcm9tIFwiLi4vUXVpY2tGaWx0ZXJTZWxlY3RvclwiO1xuaW1wb3J0IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4uL1RhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcIjtcblxuY29uc3QgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SID0gXCIvc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiO1xuY29uc3QgU0VBUkNIX0hBU19CRUVOX0ZJUkVEID0gXCJzZWFyY2hGaXJlZFwiO1xuY29uc3QgQ09MVU1OX0hBU19CRUVOX0FEREVEID0gXCJjb2x1bW5BZGRlZFwiO1xuY29uc3QgUFJFVklPVVNfU09SVEVSUyA9IFwicHJldmlvdXNTb3J0ZXJzXCI7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBzYXAudWkubWRjLlRhYmxlLlxuICogPGgzPjxiPk5vdGU6PC9iPjwvaDM+XG4gKiBUaGUgY2xhc3MgaXMgZXhwZXJpbWVudGFsIGFuZCB0aGUgQVBJIGFuZCB0aGUgYmVoYXZpb3IgYXJlIG5vdCBmaW5hbGl6ZWQuIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIGZvciBwcm9kdWN0aXZlIHVzYWdlLlxuICogQGF1dGhvciBTQVAgU0VcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMS42OS4wXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oe30sIFRhYmxlRGVsZWdhdGVCYXNlLCB7XG5cdGFwaVZlcnNpb246IDIsXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHdpZHRoIG9mIGEgRmllbGRHcm91cCBjb2x1bW4uXG5cdCAqIFRoZSB3aWR0aCBvZiB0aGUgRmllbGRHcm91cCBpcyB0aGUgd2lkdGggb2YgdGhlIHdpZGVzdCBwcm9wZXJ0eSBjb250YWluZWQgaW4gdGhlIEZpZWxkR3JvdXAgKGluY2x1ZGluZyB0aGUgbGFiZWwgaWYgc2hvd0RhdGFGaWVsZHNMYWJlbCBpcyB0cnVlKVxuXHQgKiBUaGUgcmVzdWx0IG9mIHRoaXMgY2FsY3VsYXRpb24gaXMgc3RvcmVkIGluIHRoZSB2aXN1YWxTZXR0aW5ncy53aWR0aENhbGN1bGF0aW9uLm1pbldpZHRoIHByb3BlcnR5LCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBNREN0YWJsZS5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBNREN0YWJsZVxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIEN1cnJlbnQgcHJvcGVydHlJbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm9zIEFycmF5IG9mIHByb3BlcnRpZXNcblx0ICogQHByaXZhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVEZWxlZ2F0ZVxuXHQgKi9cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXA6IGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLFxuXHRcdHByb3BlcnR5SW5mb3M6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXVxuXHQpIHtcblx0XHRpZiAocHJvcGVydHlJbmZvLmtleS5pbmRleE9mKFwiRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjo6RmllbGRHcm91cDo6XCIpID09PSAwKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSB0YWJsZS5nZXRDb2x1bW5zKCkuZmluZCgoY29sKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2wuZ2V0UHJvcGVydHlLZXkoKSA9PT0gcHJvcGVydHlJbmZvLmtleTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgc2hvd0RhdGFGaWVsZHNMYWJlbCA9IGNvbHVtbiA/IGNvbHVtbi5kYXRhKFwic2hvd0RhdGFGaWVsZHNMYWJlbFwiKSA9PT0gXCJ0cnVlXCIgOiBmYWxzZTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQocHJvcGVydHlJbmZvLmFubm90YXRpb25QYXRoKSk7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZWRNZXRhRGF0YSA9IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy5jb252ZXJ0ZWRUeXBlcztcblx0XHRcdGNvbnN0IG9EYXRhRmllbGQgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEZvckFubm90YXRpb247XG5cdFx0XHRjb25zdCBvRmllbGRHcm91cCA9IG9EYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQgYXMgRmllbGRHcm91cFR5cGU7XG5cdFx0XHRjb25zdCBhRmllbGRXaWR0aDogbnVtYmVyW10gPSBbXTtcblx0XHRcdG9GaWVsZEdyb3VwLkRhdGEuZm9yRWFjaChmdW5jdGlvbiAob0RhdGE6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0XHRcdFx0bGV0IG9EYXRhRmllbGRXaWR0aDogeyBsYWJlbFdpZHRoOiBudW1iZXI7IHByb3BlcnR5V2lkdGg6IG51bWJlciB9O1xuXHRcdFx0XHRzd2l0Y2ggKG9EYXRhLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdG9EYXRhLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvcyxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSBUYWJsZVNpemVIZWxwZXIuZ2V0V2lkdGhGb3JEYXRhRmllbGQoXG5cdFx0XHRcdFx0XHRcdG9EYXRhLFxuXHRcdFx0XHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSxcblx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsV2lkdGg6IDAsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5V2lkdGg6IFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgob0RhdGEuTGFiZWw/LnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0RhdGFGaWVsZFdpZHRoISkge1xuXHRcdFx0XHRcdGFGaWVsZFdpZHRoLnB1c2gob0RhdGFGaWVsZFdpZHRoLmxhYmVsV2lkdGggKyBvRGF0YUZpZWxkV2lkdGgucHJvcGVydHlXaWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbldpZGVzdCA9IGFGaWVsZFdpZHRoLnJlZHVjZShmdW5jdGlvbiAoYWNjOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcblx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KGFjYywgdmFsdWUpO1xuXHRcdFx0fSwgMCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBvYmplY3QsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdHZlcnRpY2FsQXJyYW5nZW1lbnQ6IHRydWUsXG5cdFx0XHRcdFx0bWluV2lkdGg6IE1hdGguY2VpbChuV2lkZXN0KVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFZhbHVlSGVscDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRpZiAoIXByb3BlcnR5LnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0aWYgKHByb3BlcnR5LmFubm90YXRpb25QYXRoICYmIG1ldGFNb2RlbCkge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3Byb3BlcnR5LmFubm90YXRpb25QYXRofUBgKTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZCAmJiBkYXRhRmllbGRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXSkge1xuXHRcdFx0XHRcdHByb3BlcnR5LnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyB8fCB7fSwge1xuXHRcdFx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdFx0XHRnYXA6IHRhYmxlQVBJLmdldFByb3BlcnR5KFwicmVhZE9ubHlcIikgPyAwIDogNFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdF9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhVbml0OiBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLFxuXHRcdHVuaXQ/OiBzdHJpbmcsXG5cdFx0dW5pdFRleHQ/OiBzdHJpbmcsXG5cdFx0dGltZXpvbmVUZXh0Pzogc3RyaW5nXG5cdCkge1xuXHRcdGNvbnN0IG9UYWJsZUFQSTogRW5oYW5jZVdpdGhVSTU8VGFibGVBUEk+IHwgbnVsbCA9IHRhYmxlID8gKHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKSBhcyBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4pIDogbnVsbDtcblx0XHQvLyB1cGRhdGUgZ2FwIGZvciBwcm9wZXJ0aWVzIHdpdGggc3RyaW5nIHVuaXRcblx0XHRjb25zdCB0ZXh0ID0gdW5pdFRleHQgfHwgdGltZXpvbmVUZXh0O1xuXHRcdGlmICh0ZXh0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Z2FwOiBNYXRoLmNlaWwoU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0ZXh0KSlcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh1bml0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Ly8gRm9yIHByb3BlcnRpZXMgd2l0aCB1bml0LCBhIGdhcCBuZWVkcyB0byBiZSBhZGRlZCB0byBwcm9wZXJseSByZW5kZXIgdGhlIGNvbHVtbiB3aWR0aCBvbiBlZGl0IG1vZGVcblx0XHRcdFx0XHRnYXA6IG9UYWJsZUFQSSAmJiBvVGFibGVBUEkuZ2V0UmVhZE9ubHkoKSA/IDAgOiA2XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZUxhYmVsOiBmdW5jdGlvbiAocHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0pIHtcblx0XHRpZiAocHJvcGVydHkubGFiZWwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsID0gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdO1xuXHRcdFx0Ly8gVGhpcyBjb21wdXRhdGlvbiBpcyBvbmx5IGZvciBkdXBsaWNhdGUgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0XHRcdC8vIEV4Y2x1ZGUgdGV4dCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyB0ZXh0IG9uIGEgcHJvcGVydHkgYW5ub3RhdGVkIHdpdGggdGV4dCBhcnJhbmdlbWVudCBzZXQgYXMgVGV4dE9ubHkuXG5cdFx0XHQvLyBFeGNsdWRlIG5hdmlnYXRpb24gcHJvcGVydGllcyBjcmVhdGVkIG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3NlcyB3aXRoIGEgdGV4dCBhcnJhbmdlbWVudCBzZXQgdG8gVGV4dE9ubHkuXG5cdFx0XHRjb25zdCBpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSA9IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5zb21lKFxuXHRcdFx0XHQocHJvcCkgPT4gcHJvcC50ZXh0ID09PSBwcm9wZXJ0eS5wYXRoICYmIHByb3A/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIlxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydGllc1dpdGhTYW1lTGFiZWw/Lmxlbmd0aCA+IDEgJiZcblx0XHRcdFx0cHJvcGVydHkucGF0aD8uaW5jbHVkZXMoXCIvXCIpICYmXG5cdFx0XHRcdHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMgJiZcblx0XHRcdFx0IWlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ICYmXG5cdFx0XHRcdCEocHJvcGVydHk/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5LmxhYmVsID0gcHJvcGVydHkubGFiZWwgKyBcIiAoXCIgKyBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzLmpvaW4oXCIgLyBcIikgKyBcIilcIjtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzO1xuXHRcdH1cblx0fSxcblx0Ly9VcGRhdGUgVmlzdWFsU2V0dGluZyBmb3IgY29sdW1uV2lkdGggY2FsY3VsYXRpb24gYW5kIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0X3VwZGF0ZVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKSB7XG5cdFx0Y29uc3QgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSA9IHt9O1xuXHRcdC8vIENoZWNrIGF2YWlsYWJsZSBwMTNuIG1vZGVzXG5cdFx0Y29uc3QgcDEzbk1vZGUgPSB0YWJsZS5nZXRQMTNuTW9kZSgpO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0XHQvLyBPbmx5IGZvciBub24tY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiU29ydFwiKSAmJiBwcm9wZXJ0eS5zb3J0YWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiRmlsdGVyXCIpICYmIHByb3BlcnR5LmZpbHRlcmFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkdyb3VwXCIpICYmIHByb3BlcnR5Lmdyb3VwYWJsZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdID1cblx0XHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSAhPT0gdW5kZWZpbmVkID8gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdLmNvbmNhdChbcHJvcGVydHldKSA6IFtwcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdC8vIEFkZCB0aGUgJGVkaXRTdGF0ZSBwcm9wZXJ0eVxuXHRcdHByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRrZXk6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdFx0Z3JvdXA6IFwiXCIsXG5cdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2Vcblx0XHR9IGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdF9nZXRUYWJsZUFQSSh0YWJsZTogVGFibGUpOiBUYWJsZUFQSSB7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZCA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICghdGFibGVBUEkpIHtcblx0XHRcdHRhYmxlQVBJID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZS5nZXRJZCgpICsgXCI6OlRhYmxlXCIpIGFzIFRhYmxlQVBJO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFibGVBUEk7XG5cdH0sXG5cblx0Z2V0Q29sdW1uc0ZvcjogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFRhYmxlQ29sdW1uW10ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdHJldHVybiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBleHBvcnQgY2FwYWJpbGl0aWVzIGZvciB0aGUgZ2l2ZW4gc2FwLnVpLm1kYy5UYWJsZSBpbnN0YW5jZS5cblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiB0aGUgdGFibGVcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXByZXNlbnRpbmcgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhYmxlIGluc3RhbmNlXG5cdCAqL1xuXHRmZXRjaEV4cG9ydENhcGFiaWxpdGllczogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiBQcm9taXNlPHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfT4ge1xuXHRcdGNvbnN0IG9DYXBhYmlsaXRpZXM6IHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfSA9IHsgWExTWDoge30gfTtcblx0XHRsZXQgb01vZGVsITogT0RhdGFNb2RlbDtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwob1RhYmxlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdFx0XHRvTW9kZWwgPSBtb2RlbCBhcyBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU3VwcG9ydGVkRm9ybWF0c1wiKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGFMb3dlckZvcm1hdHMgPSAoYVN1cHBvcnRlZEZvcm1hdHMgfHwgW10pLm1hcCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYUxvd2VyRm9ybWF0cy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL3BkZlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAY29tLnNhcC52b2NhYnVsYXJpZXMuUERGLnYxLkZlYXR1cmVzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9Bbm5vdGF0aW9uOiB1bmtub3duKSB7XG5cdFx0XHRcdGlmIChvQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNbXCJQREZcIl0gPSBPYmplY3QuYXNzaWduKHt9LCBvQW5ub3RhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyBleHBvcnQgY2FwYWJpbGl0aWVzOiAke2Vycn1gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBvQ2FwYWJpbGl0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIExpbmVJdGVtIGFubm90YXRpb24gbm9yIG9mIHRoZSBjdXN0b20gY29sdW1ucyBpcyBmb3JiaWRkZW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvXG5cdCAqIEBwYXJhbSBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBmaWx0ZXJpbmcgaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNGaWx0ZXJhYmxlID0gaXNQYXRoRmlsdGVyYWJsZShjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0IWNvbHVtbkluZm8ucmVsYXRpdmVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fFxuXHRcdFx0KChjb2x1bW5JbmZvLmlzUGFydE9mTGluZUl0ZW0gPT09IHRydWUgfHwgY29sdW1uSW5mby5pc1BhcnRPZkN1c3RvbUNvbHVtbiA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IShpc0NvbnN0YW50KGlzRmlsdGVyYWJsZSkgJiYgaXNGaWx0ZXJhYmxlLnZhbHVlID09PSBmYWxzZSkpXG5cdFx0KTtcblx0fSxcblxuXHRfZmV0Y2hQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChcblx0XHRtZXRhTW9kZWw6IE1ldGFNb2RlbCxcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8ge1xuXHRcdGNvbnN0IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoID0gY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdG9EYXRhRmllbGQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoKSxcblx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCkgYXMgQ29udGV4dCxcblx0XHRcdGlzQ29tcGxleFR5cGUgPSBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiBjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lPy5pbmRleE9mKFwiRWRtLlwiKSAhPT0gMCxcblx0XHRcdGJGaWx0ZXJhYmxlID0gQ29tbW9uSGVscGVyLmlzUHJvcGVydHlGaWx0ZXJhYmxlKG9OYXZpZ2F0aW9uQ29udGV4dCwgb0RhdGFGaWVsZCksXG5cdFx0XHRiSXNBbmFseXRpY2FsVGFibGUgPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YSh0YWJsZSwgXCJlbmFibGVBbmFseXRpY3NcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8ubGFiZWwgPz8gXCJcIiwgYXBwQ29tcG9uZW50ID8/IHRhYmxlKSxcblx0XHRcdHRvb2x0aXAgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8udG9vbHRpcCA/PyBcIlwiLCBhcHBDb21wb25lbnQgPz8gdGFibGUpLFxuXHRcdFx0dHlwZUNvbmZpZyA9IHRoaXMuX2dldFR5cGVDb25maWcoY29sdW1uSW5mbywgaXNDb21wbGV4VHlwZSksXG5cdFx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdG5hbWU6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogY29sdW1uSW5mby5ncm91cExhYmVsLFxuXHRcdFx0XHRncm91cDogY29sdW1uSW5mby5ncm91cCxcblx0XHRcdFx0bGFiZWw6IGxhYmVsLFxuXHRcdFx0XHR0b29sdGlwOiB0b29sdGlwLFxuXHRcdFx0XHRkYXRhVHlwZTogdHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6XG5cdFx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnPy5iYXNlVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0XHRcdFx0PyB7IHN0eWxlOiBcIm1lZGl1bS9zaG9ydFwiIH0gLyogVGhpcyBjb25kaXRpb24gZG9lc24ndCBoYXZlIGFueSBpbXBhY3QsIHRvIGJlIHJldmlld2VkICovXG5cdFx0XHRcdFx0XHQ6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y29uc3RyYWludHM6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY29uc3RyYWludHMsXG5cdFx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiICYmICFpc0NvbXBsZXhUeXBlLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogdGhpcy5fc2V0UHJvcGVydHlJbmZvRXhwb3J0U2V0dGluZ3MoY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncywgY29sdW1uSW5mbyksXG5cdFx0XHRcdHVuaXQ6IGNvbHVtbkluZm8udW5pdCxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGg6IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoXG5cdFx0XHR9O1xuXHRcdGlmIChwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2xpcGJvYXJkU2V0dGluZ3MgPSB7IHRlbXBsYXRlOiBwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgfTtcblx0XHRcdC8vIGlmIEkgc2V0IHRoaXMgY2xpcEJvYXJkU2V0dGluZ3MgdGhlIGNvcHkgcHJvdmlkZXIgZXh0cmFjdCB0aGUgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlIGluIHRoZSBodG1sIHByb3BlcnR5IGFuZCBpdCBpcyBwcm9wZXJseSBjb3BpZWQgaW4gZXhjZWxcblx0XHRcdC8vIGJ1dCB3aGVuIHdlIGNvcHkgZWxzZXdoZXJlIHdlIG9ubHkgZ2V0IHRoZSByYXcgZGF0YSBhbmQgbm90IHRoZSB0ZW1wbGF0ZWQgZGF0YVxuXHRcdH1cblxuXHRcdC8vIFNldCB2aXN1YWxTZXR0aW5ncyBvbmx5IGlmIGl0IGV4aXN0c1xuXHRcdGlmIChjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzICYmIE9iamVjdC5rZXlzKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3M7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0fVxuXG5cdFx0Ly8gTURDIGV4cGVjdHMgICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcz8ubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXG5cdFx0XHQvL2dldCB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBmb3IgdGhlIGNvbHVtblxuXHRcdFx0Y29uc3QgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRDb250ZXh0KERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcIm1ldGFQYXRoXCIpISlcblx0XHRcdCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0Ly8gVE9ETyB3aXRoIHRoZSBuZXcgY29tcGxleCBwcm9wZXJ0eSBpbmZvLCBhIGxvdCBvZiBcIkRlc2NyaXB0aW9uXCIgZmllbGRzIGFyZSBhZGRlZCBhcyBmaWx0ZXIvc29ydCBmaWVsZHNcblx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGNvbHVtbkluZm8uc29ydGFibGU7XG5cdFx0XHRpZiAoYklzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9XG5cdFx0XHRcdGNvbHVtbkluZm8uZmlsdGVyYWJsZSAhPT0gZmFsc2UgJiZcblx0XHRcdFx0ISFiRmlsdGVyYWJsZSAmJlxuXHRcdFx0XHR0aGlzLl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoY29sdW1uSW5mbywgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uaXNLZXkgPSBjb2x1bW5JbmZvLmlzS2V5O1xuXHRcdFx0cHJvcGVydHlJbmZvLmdyb3VwYWJsZSA9IGNvbHVtbkluZm8uaXNHcm91cGFibGU7XG5cdFx0XHRpZiAoY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0VGV4dEFycmFuZ2VtZW50SW5mbyhwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8sIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eUluZm8uaXNLZXkpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmV4dGVuc2lvbiA9IHtcblx0XHRcdFx0XHQvLyBNREMgbmVlZHMgdG8gZml4IHRoaXMsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgYSBub24gQW5hbHl0aWNhbCBUYWJsZVxuXHRcdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNvbHVtbkluZm8uY2FzZVNlbnNpdGl2ZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmFkZGl0aW9uYWxMYWJlbHMgPSBjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMubWFwKChhZGRpdGlvbmFsTGFiZWw6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBnZXRMb2NhbGl6ZWRUZXh0KGFkZGl0aW9uYWxMYWJlbCwgYXBwQ29tcG9uZW50IHx8IHRhYmxlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCh0YWJsZSwgcHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvLnVuaXQsIGNvbHVtbkluZm8udW5pdFRleHQsIGNvbHVtbkluZm8udGltZXpvbmVUZXh0KTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgZXhwb3J0IHNldHRpbmdzIGJhc2VkIG9uIHRoZSBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSBleHBvcnQgc2V0dGluZ3MgdG8gYmUgZXh0ZW5kZWRcblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBleHRlbmRlZCBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdF9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5nczogZnVuY3Rpb24gKFxuXHRcdGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IHVuZGVmaW5lZCB8IG51bGwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uXG5cdCk6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG5cdFx0Y29uc3QgZXhwb3J0Rm9ybWF0ID0gdGhpcy5fZ2V0RXhwb3J0Rm9ybWF0KGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lKTtcblx0XHRpZiAoZXhwb3J0Rm9ybWF0ICYmIGV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5mb3JtYXQgPSBleHBvcnRGb3JtYXQ7XG5cdFx0fVxuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBjb25maWcgZm9yIHRoZSBnaXZlbiBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gaXNDb21wbGV4VHlwZSBJbmRpY2F0ZXMgaWYgdGhlIGRhdGFUeXBlIGlzIGNvbXBsZXguXG5cdCAqIEByZXR1cm5zIFRoZSBNREMgdHlwZSBjb25maWcuXG5cdCAqL1xuXHRfZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGlzQ29tcGxleFR5cGU/OiBib29sZWFuKTogVHlwZUNvbmZpZyB7XG5cdFx0bGV0IHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIik7IC8vIE1EQyBleHBlY3RzIGFsd2F5cyBhIGRhdGFUeXBlXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGlzVHlwZUZpbHRlcmFibGUoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSkpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiAhaXNDb21wbGV4VHlwZSkge1xuXHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR5cGVDb25maWc7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHRleHQgYXJyYW5nZW1lbnQgaW5mbyBmb3IgdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIFRoZSBjdXJyZW50IHByb3BlcnR5SW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQ29sdW1uID0gdGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKS5maW5kKGZ1bmN0aW9uIChvQ29sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbC5uYW1lID09PSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudD8udGV4dFByb3BlcnR5O1xuXHRcdH0pO1xuXHRcdGlmIChkZXNjcmlwdGlvbkNvbHVtbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLm1vZGUgPSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCEubW9kZTtcblx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA9IChkZXNjcmlwdGlvbkNvbHVtbiBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKS5yZWxhdGl2ZVBhdGg7XG5cdFx0fVxuXHRcdHByb3BlcnR5SW5mby50ZXh0ID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0fSxcblxuXHRfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMocHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sIGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbikge1xuXHRcdGlmIChjb2x1bW5JbmZvLmFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmFnZ3JlZ2F0YWJsZSA9IGNvbHVtbkluZm8uYWdncmVnYXRhYmxlO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby5leHRlbnNpb24pIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHRlbnNpb24gPSBjb2x1bW5JbmZvLmV4dGVuc2lvbjtcblx0XHR9XG5cdH0sXG5cblx0X2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUpIHtcblx0XHRjb25zdCBsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5sYWJlbCwgdGFibGUpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0bGFiZWw6IGxhYmVsLnRvU3RyaW5nKCksXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRjbGlwYm9hcmRTZXR0aW5nczogY29sdW1uSW5mby5jbGlwYm9hcmRTZXR0aW5ncyBhcyBQcm9wZXJ0eUluZm9bXCJjbGlwYm9hcmRTZXR0aW5nc1wiXVxuXHRcdH07XG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblxuXHRfZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0bGV0IGxhYmVsO1xuXHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlcikge1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uaGVhZGVyLnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0XHRsYWJlbCA9IE1vZGVsSGVscGVyLmZldGNoVGV4dEZyb21NZXRhTW9kZWwoY29sdW1uSW5mby5oZWFkZXIsIHVuZGVmaW5lZCwgKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8uaGVhZGVyLCBhcHBDb21wb25lbnQpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGdyb3VwTGFiZWw6IHVuZGVmaW5lZCxcblx0XHRcdGdyb3VwOiB1bmRlZmluZWQsXG5cdFx0XHRsYWJlbDogbGFiZWwgPz8gXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdHZpc3VhbFNldHRpbmdzOiBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcInZpc3VhbFNldHRpbmdzXCJdXG5cdFx0fTtcblxuXHRcdC8vIE1EQyBleHBlY3RzICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAmJiBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRwcm9wZXJ0eUluZm8uc29ydGFibGUgPSBmYWxzZTtcblx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cdF9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3I6IGZ1bmN0aW9uIChvQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISEoXG5cdFx0XHQob0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyAmJiBvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zLmhhc0RyYWZ0SW5kaWNhdG9yKSB8fFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgpXG5cdFx0KTtcblx0fSxcblx0X3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWw6IGZ1bmN0aW9uIChfb1RhYmxlOiBUYWJsZSwgX29Db2x1bW5JbmZvOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IF9vVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gX29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKGFWaXNpYmxlQ29sdW1ucyAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Zm9yIChjb25zdCBpbmRleCBpbiBhVmlzaWJsZUNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihfb0NvbHVtbkluZm8pICYmXG5cdFx0XHRcdFx0X29Db2x1bW5JbmZvLm5hbWUgPT09IGFWaXNpYmxlQ29sdW1uc1tpbmRleF0uZ2V0UHJvcGVydHlLZXkoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAob0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUikgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgX29Db2x1bW5JbmZvLm5hbWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Ly8gd2hlbiBmZXRjaGluZyBwcm9wZXJ0aWVzLCB0aGlzIGJpbmRpbmcgY29udGV4dCBpcyBuZWVkZWQgLSBzbyBsZXRzIGNyZWF0ZSBpdCBvbmx5IG9uY2UgYW5kIHVzZSBpZiBmb3IgYWxsIHByb3BlcnRpZXMvZGF0YS1maWVsZHMvbGluZS1pdGVtc1xuXHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChlbnRpdHlUeXBlUGF0aCk7XG5cdFx0bGV0IGZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGJpbmRpbmdQYXRoLCBtZXRhTW9kZWwpLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKSlcblx0XHRcdC50aGVuKChjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSA9PiB7XG5cdFx0XHRcdC8vIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIGRvZXMgbm90IHdvcmsgdmlhICdlbnRpdHlTZXQvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEnXG5cdFx0XHRcdGlmIChjb2x1bW5zKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5SW5mbztcblx0XHRcdFx0XHRjb2x1bW5zLmZvckVhY2goKGNvbHVtbkluZm8pID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWwodGFibGUsIGNvbHVtbkluZm8pO1xuXHRcdFx0XHRcdFx0c3dpdGNoIChjb2x1bW5JbmZvLnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaFByb3BlcnR5SW5mbyhtZXRhTW9kZWwsIGNvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlJbmZvICYmICFub25GaWx0ZXJhYmxlUHJvcGVydGllcy5pbmNsdWRlcygocHJvcGVydHlJbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5tYXhDb25kaXRpb25zID0gRGVsZWdhdGVVdGlsLmlzTXVsdGlWYWx1ZShwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKSA/IC0xIDogMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJDb21wdXRlZFwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJTbG90XCI6XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBzd2l0Y2ggY2FzZSAke2NvbHVtbkluZm8udHlwZX1gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGhpcy5fdXBkYXRlUHJvcGVydHlJbmZvKHRhYmxlLCBmZXRjaGVkUHJvcGVydGllcyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRcdFx0dGFibGVBUEkuc2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyhmZXRjaGVkUHJvcGVydGllcyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pO1xuXHRcdFx0XHRmZXRjaGVkUHJvcGVydGllcyA9IHRhYmxlQVBJLmdldFByb3BlcnR5SW5mb3MoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHVwZGF0aW5nIGZldGNoZWQgcHJvcGVydGllczogJHtlcnIgYXMgc3RyaW5nfWApO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIGZldGNoZWRQcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0X2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0Y29uc3QgZmV0Y2hlZFByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRDYWNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0aWYgKGZldGNoZWRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkodGFibGUsIGVudGl0eVR5cGVQYXRoLCBtZXRhTW9kZWwsIGFwcENvbXBvbmVudCkudGhlbihmdW5jdGlvbiAoXG5cdFx0XHRzdWJGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW11cblx0XHQpIHtcblx0XHRcdHRhYmxlQVBJLnNldENhY2hlZFByb3BlcnR5SW5mb3Moc3ViRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRcdFx0cmV0dXJuIHN1YkZldGNoZWRQcm9wZXJ0aWVzO1xuXHRcdH0pO1xuXHR9LFxuXHRzZXROb0RhdGFJbmZvcm1hdGlvbjogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb246ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyk6IHZvaWQge1xuXHRcdGNvbnN0IG5vRGF0YUFnZ3JlZ2F0aW9uID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0aWYgKHR5cGVvZiBub0RhdGFBZ2dyZWdhdGlvbiAhPSBcInN0cmluZ1wiICYmIChub0RhdGFBZ2dyZWdhdGlvbiBhcyBDb250cm9sKT8uaXNBKFwic2FwLm0uSWxsdXN0cmF0ZWRNZXNzYWdlXCIpKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlID0gbm9EYXRhQWdncmVnYXRpb24gYXMgSWxsdXN0cmF0ZWRNZXNzYWdlO1xuXHRcdFx0Ly8gV2Ugb3ZlcnJpZGUgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSBJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0VGl0bGUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24udGl0bGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXREZXNjcmlwdGlvbihpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbik7XG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldElsbHVzdHJhdGlvblR5cGUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uVHlwZSk7XG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldElsbHVzdHJhdGlvblNpemUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uU2l6ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGlsbHVzdHJhdGVkTWVzc2FnZSA9IG5ldyBJbGx1c3RyYXRlZE1lc3NhZ2Uoe1xuXHRcdFx0XHQuLi5pbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvblxuXHRcdFx0fSk7XG5cdFx0XHR0YWJsZS5zZXROb0RhdGEoaWxsdXN0cmF0ZWRNZXNzYWdlKTtcblx0XHR9XG5cdH0sXG5cblx0c2V0VGFibGVOb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2U6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8odGFibGUpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJpbmRpbmdJbmZvLnBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpID8gYmluZGluZ0luZm8ucGF0aC5zdWJzdHJpbmcoMSkgOiBiaW5kaW5nSW5mby5wYXRoO1xuXHRcdGxldCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3M7XG5cblx0XHRjb25zdCBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycyA9IGZ1bmN0aW9uICgpOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3Mge1xuXHRcdFx0aWYgKHRhYmxlLmRhdGEoXCJoaWRkZW5GaWx0ZXJzXCIpIHx8IHRhYmxlLmdldFF1aWNrRmlsdGVyKCkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX01VTFRJX1ZJRVdcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX1dJVEhfRklMVEVSXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Y29uc3QgZmlsdGVyQXNzb2NpYXRpb24gPSB0YWJsZS5nZXRGaWx0ZXIoKTtcblx0XHRjb25zdCBoYXNGaWx0ZXJPclNlYXJjaCA9IHRhYmxlRmlsdGVySW5mby5zZWFyY2ggfHwgdGFibGVGaWx0ZXJJbmZvLmZpbHRlcnM/Lmxlbmd0aDtcblx0XHRpZiAoZmlsdGVyQXNzb2NpYXRpb24gJiYgIS9CYXNpY1NlYXJjaCQvLnRlc3QoZmlsdGVyQXNzb2NpYXRpb24pKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBhIEZpbHRlckJhciBpcyBhc3NvY2lhdGVkIHRvIHRoZSBUYWJsZSAoYmFzaWMgc2VhcmNoIG9uIHRvb2xCYXIgaXMgZXhjbHVkZWQpXG5cdFx0XHRpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdFx0Ly8gY2hlY2sgaWYgdGFibGUgaGFzIGFueSBGaWx0ZXJiYXIgZmlsdGVycyBvciBwZXJzb25hbGl6YXRpb24gZmlsdGVyc1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdC8vY2hlY2sgaWYgdGFibGUgaGFzIGFueSBwZXJzb25hbGl6YXRpb24gZmlsdGVyc1xuXHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9EQVRBXCIpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fRklMVEVSU19OT19EQVRBX1RFWFRcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9EYXRhXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkuZ2V0Vmlld0RhdGEoKS5saXZlTW9kZSkge1xuXHRcdFx0aWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fRklMVEVSU19OT19EQVRBX1RFWFRcIiksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5pbGx1c3RyYXRpb25TaXplID0gdGFibGVBUEkuZ2V0Tm9EYXRhTWVzc2FnZU1vZGUoKTtcblxuXHRcdGlmIChpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPT09IFwidGV4dFwiKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Tm9EYXRhID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1cnJlbnROb0RhdGEgPT09IFwic3RyaW5nXCIgJiYgY3VycmVudE5vRGF0YSA9PT0gaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbikge1xuXHRcdFx0XHQvLyBXZSBkb24ndCBjaGFuZ2UgdGhlIG5vRGF0YSBhZ2dyZWdhdGlvbiB1bm5lY2Vzc2FyeS5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE5vRGF0YUluZm9ybWF0aW9uKHRhYmxlLCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGRhdGFSZXF1ZXN0ZWQgZXZlbnQgZm9yIHRoZSB0YWJsZSBiaW5kaW5nIHRvIHNldCB1cCB0YWJsZSBkZWZhdWx0cy5cblx0ICogQHBhcmFtIG9UYWJsZSBUaGUgTURDIHRhYmxlIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHQgZm9yIHRoZSB0YWJsZVxuXHQgKi9cblx0aGFuZGxlVGFibGVEYXRhUmVxdWVzdGVkOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nID0gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0XHRiRGF0YVJlcXVlc3RlZEF0dGFjaGVkID0gb0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRhdGFSZXF1ZXN0ZWRBdHRhY2hlZFwiKTtcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0ICYmICFiRGF0YVJlcXVlc3RlZEF0dGFjaGVkKSB7XG5cdFx0XHRvQmluZGluZy5hdHRhY2hEYXRhUmVxdWVzdGVkKCgpID0+IHtcblx0XHRcdFx0aWYgKCFvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVxdWVzdGVkVGltZW91dFNldFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZXF1ZXN0ZWRUaW1lb3V0U2V0XCIsIHRydWUpO1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlcXVlc3RlZFRpbWVvdXRTZXRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1RhYmxlQVBJID0gb1RhYmxlID8gKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkgOiBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKG9UYWJsZUFQSSkge1xuXHRcdFx0XHRcdFx0XHRvVGFibGVBUEkudGFibGVEZWZhdWx0c1Byb21pc2UgPSAob1RhYmxlQVBJLmdldFRhYmxlRGVmYXVsdHMob1RhYmxlKSA/PyBQcm9taXNlLnJlc29sdmUoe30pKSBhcyBQcm9taXNlPG9iamVjdD47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlcXVlc3RlZEF0dGFjaGVkXCIsIHRydWUpO1xuXHRcdH1cblx0fSxcblxuXHRoYW5kbGVUYWJsZURhdGFSZWNlaXZlZDogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0YkRhdGFSZWNlaXZlZEF0dGFjaGVkID0gb0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIpO1xuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIWJEYXRhUmVjZWl2ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKCgpID0+IHtcblx0XHRcdFx0Ly8gYXMgdGhlIGRhdGFSZWNlaXZlZCBldmVudCBpcyBmaXJlZCBtdWx0aXBsZSB0aW1lcywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZXZlbnQgaXMgb25seSBoYW5kbGVkIG9uY2Vcblx0XHRcdFx0aWYgKCFvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCB0aGUgc2VsZWN0ZWQgY29udGV4dHMgdG8gdHJpZ2dlciByZS1jYWxjdWxhdGlvbiBvZiBlbmFibGVkIHN0YXRlIG9mIGFjdGlvbnMuXG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkob1RhYmxlKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdFx0XHRcdFx0XHQvLyBSZWZyZXNoIGVuYWJsZW1lbnQgb2YgZGVsZXRlIGJ1dHRvblxuXHRcdFx0XHRcdFx0RGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlRGVmYXVsdERhdGEgPSBhd2FpdCB0YWJsZUFQSS50YWJsZURlZmF1bHRzUHJvbWlzZT8uY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGFibGVBUEkuc2V0VXBFbXB0eVJvd3Mob1RhYmxlLCBmYWxzZSwgdGFibGVEZWZhdWx0RGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVBdmFpbGFibGVDYXJkcyhvVGFibGUpO1xuXHRcdFx0XHRcdH0sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIsIHRydWUpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2V0IHRoZSBvcHRpbWlzdGljIGJhdGNoIHByb21pc2UgZm9yIHRoZSBlbmFibGVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIFRhYmxlQVBJXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hQcm9taXNlRm9yTW9kZWw6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgdGFibGVBUEk6IFRhYmxlQVBJKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kZWwgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKCk7XG5cdFx0aWYgKG1vZGVsKSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZShuZXcgUHJvbWlzZUtlZXBlcjxib29sZWFuPigpKTtcblx0XHRcdHRoaXMuc2V0T3B0aW1pc3RpY0JhdGNoRm9yTW9kZWwoY29udHJvbGxlciwgbW9kZWwsIHRhYmxlQVBJKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEVuYWJsZSB0aGUgb3B0aW1pc3RpYyBiYXRjaCBtb2RlIGlmIGF2YWlsYWJsZS5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqL1xuXHRlbmFibGVPcHRpbWlzdGljQmF0Y2hNb2RlOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlID1cblx0XHRcdHRhYmxlICYmIFRhYmxlVXRpbHMuaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCh0YWJsZSwgY29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIEZpbHRlckJhcik7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0dGFibGVBUEkuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UoKT8ucmVzb2x2ZSghZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXR0ZXIgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIGVuYWJsZXIgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWwgVGhlIE9EYXRhIE1vZGVsXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgVGFibGVBUElcblx0ICogQHNlZSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcn0gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hGb3JNb2RlbDogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCBkYXRhTW9kZWw6IE9EYXRhTW9kZWwsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IGlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5pc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpO1xuXHRcdGlmIChkYXRhTW9kZWwuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcigpID09PSBudWxsICYmICF0YWJsZUFQSS5pc09wdGltaXN0aWNCYXRjaERpc2FibGVkKCkgJiYgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXIgPSB0YWJsZUFQSS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpO1xuXHRcdFx0ZGF0YU1vZGVsLnNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoZnVuY3Rpb24gKCk6IFByb21pc2U8Ym9vbGVhbj4gfCB1bmRlZmluZWQge1xuXHRcdFx0XHRyZXR1cm4gb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXI/LnByb21pc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0cmViaW5kOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkob1RhYmxlKTtcblxuXHRcdGNvbnN0IGJJc1N1c3BlbmRlZCA9IHRhYmxlQVBJPy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIik7XG5cdFx0dGFibGVBUEk/LnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGJJc1N1c3BlbmRlZCk7XG5cdFx0aWYgKCFiSXNTdXNwZW5kZWQpIHtcblx0XHRcdFRhYmxlUnVudGltZS5jbGVhclNlbGVjdGlvbihvVGFibGUpO1xuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UucmViaW5kLmFwcGx5KHRoaXMsIFtvVGFibGUsIG9CaW5kaW5nSW5mb10pO1xuXHRcdFx0VGFibGVVdGlscy5vblRhYmxlQm91bmQob1RhYmxlKTtcblx0XHRcdHJldHVybiBUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdC50aGVuKCh0YWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVRhYmxlRGF0YVJlcXVlc3RlZCh0YWJsZSwgdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVUYWJsZURhdGFSZWNlaXZlZCh0YWJsZSwgdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fSxcblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgcmVsZXZhbnQgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSBhbmQgcmV0dXJucyBwcm9wZXJ0eSBpbmZvIGFycmF5LlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHByb3BlcnR5IGluZm9cblx0ICovXG5cdGZldGNoUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwodGFibGUpXG5cdFx0XHQudGhlbihhc3luYyAobW9kZWwpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiA9PiB7XG5cdFx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcImVudGl0eVR5cGVcIikgPz8gXCJcIixcblx0XHRcdFx0XHRtb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocHJvcGVydGllcykgPT4ge1xuXHRcdFx0XHQodGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KT8uc2V0UHJvcGVydHkoXCJ0YWJsZVByb3BlcnRpZXNBdmFpbGFibGVcIiwgdHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0cHJlSW5pdDogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiAoVGFibGVEZWxlZ2F0ZUJhc2UucHJlSW5pdCBhcyAodGFibGU6IFRhYmxlKSA9PiBQcm9taXNlPHZvaWQ+KS5hcHBseSh0aGlzLCBbdGFibGVdKS50aGVuKCgpID0+IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogU2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3cgdG8gYXZvaWQgaW5oZXJpdGluZ1xuXHRcdFx0ICogdGhlIHdyb25nIGNvbnRleHQgYW5kIHJlcXVlc3RpbmcgdGhlIHRhYmxlIGNvbHVtbnMgb24gdGhlIHBhcmVudCBlbnRpdHlcblx0XHRcdCAqIFNldCB0aGUgY29ycmVjdCBiaW5kaW5nIGNvbnRleHQgaW4gT2JqZWN0UGFnZUNvbnRyb2xsZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgZmFzdENyZWF0aW9uUm93ID0gdGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChmYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0ZmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwgYXMgdW5rbm93biBhcyBDb250ZXh0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9KTtcblx0fSxcblx0dXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRjb25zdCBxdWlja0ZpbHRlciA9IHRhYmxlLmdldFF1aWNrRmlsdGVyKCkgYXMgUXVpY2tGaWx0ZXJTZWxlY3RvciB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkgPSBuZXcgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJKGJpbmRpbmdJbmZvKTtcblx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNFbmFibGVkXCIsIHRydWUpO1xuXHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmdJbmZvLmFwcGx5KHRoaXMsIFt0YWJsZSwgYmluZGluZ0luZm9dKTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5faGFuZGxlU29ydGVyc09uQ3VycmVuY2llc09yVW9NKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLnNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQodGFibGUsIGJpbmRpbmdJbmZvKTtcblxuXHRcdFx0dGFibGVBUEk/LmZpcmVFdmVudChcImJlZm9yZVJlYmluZFRhYmxlXCIsIHtcblx0XHRcdFx0Y29sbGVjdGlvbkJpbmRpbmdJbmZvOiBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEksXG5cdFx0XHRcdHF1aWNrRmlsdGVyS2V5OiBxdWlja0ZpbHRlcj8uZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhdHRhY2hlZEV2ZW50cyA9IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSS5nZXRBdHRhY2hlZEV2ZW50cygpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBXZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93IHRvIGF2b2lkIGl0IGluaGVyaXRpbmdcblx0XHRcdCAqIHRoZSB3cm9uZyBjb250ZXh0IGFuZCByZXF1ZXN0aW5nIHRoZSB0YWJsZSBjb2x1bW5zIGZvciB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogVGhlIGNvcnJlY3QgYmluZGluZyBjb250ZXh0IGlzIHNldCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBjb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXHRcdFx0aWYgKHRhYmxlLmdldENyZWF0aW9uUm93KCk/LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IG51bGwgJiYgYmluZGluZ0luZm8ucGF0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdFRhYmxlSGVscGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdyhcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdFx0XHR0YWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGgsXG5cdFx0XHRcdFx0Y29udGV4dCBhcyB2NENvbnRleHQsXG5cdFx0XHRcdFx0dGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsLFxuXHRcdFx0XHRcdFByb21pc2UucmVzb2x2ZSgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUFQSS5zZXRBdHRhY2hFdmVudHMoYXR0YWNoZWRFdmVudHMpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHVwZGF0aW5nIHRoZSBiaW5kaW5nIGluZm9cIiwgZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlU29ydGVyc09uQ3VycmVuY2llc09yVW9NOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3Qgc29ydGVyczogU29ydGVyW10gfCB1bmRlZmluZWQgPSBiaW5kaW5nSW5mby5zb3J0ZXI7XG5cdFx0Y29uc3QgbmV3U29ydGVyc1RvQmVBcHBsaWVkOiBTb3J0ZXJbXSA9IFtdO1xuXHRcdGlmIChzb3J0ZXJzPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy5fZ2V0VGFibGVBUEkodGFibGUpO1xuXHRcdFx0Y29uc3QgdGFibGVQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdFx0Zm9yIChjb25zdCBzb3J0ZXIgb2Ygc29ydGVycykge1xuXHRcdFx0XHRjb25zdCB0YWJsZVByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkucGF0aCA9PT0gc29ydGVyLmdldFBhdGgoKSk7XG5cdFx0XHRcdGlmICh0YWJsZVByb3BlcnR5Py51bml0KSB7XG5cdFx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkua2V5ID09PSB0YWJsZVByb3BlcnR5Py51bml0KTtcblx0XHRcdFx0XHRjb25zdCB1bml0U29ydGVyQXZhaWxhYmxlID0gdW5pdFByb3BlcnR5Py5wYXRoICYmIHNvcnRlcnMuc29tZSgoc29ydCkgPT4gc29ydC5nZXRQYXRoKCkgPT09IHVuaXRQcm9wZXJ0eS5wYXRoKTtcblx0XHRcdFx0XHRpZiAoIXVuaXRTb3J0ZXJBdmFpbGFibGUgJiYgdW5pdFByb3BlcnR5Py5zb3J0YWJsZSAhPT0gZmFsc2UgJiYgdW5pdFByb3BlcnR5Py5wYXRoKSB7XG5cdFx0XHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChuZXcgU29ydGVyKHVuaXRQcm9wZXJ0eS5wYXRoLCBmYWxzZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChzb3J0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0YmluZGluZ0luZm8uc29ydGVyID0gbmV3U29ydGVyc1RvQmVBcHBsaWVkO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQ6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBiaW5kaW5nSW5mby5wYXRoICsgXCIvXCI7XG5cdFx0Y29uc3QgZmlsdGVycyA9IGJpbmRpbmdJbmZvLmZpbHRlcnM/LmdldEZpbHRlcnMoKTtcblx0XHRpZiAoZmlsdGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRUYWJsZVV0aWxzLnVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEKG1ldGFNb2RlbCwgZmlsdGVycyBhcyB1bmtub3duIGFzIENvbmRpdGlvbk9iamVjdFtdLCBlbnRpdHlUeXBlUGF0aCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkczogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0aWYgKGNvbnRyb2xsZXI/LnJlY29tbWVuZGF0aW9ucy5pc1JlY29tbWVuZGF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgdGFibGVEZWYgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyA9IGFwcENvbXBvbmVudFxuXHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0LmdldFJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzKHRhYmxlRGVmLmFubm90YXRpb24uZW50aXR5VHlwZU5hbWUpO1xuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyAmJiByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMubGVuZ3RoID4gMCAmJiBvQmluZGluZ0luZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VsZWN0ID0gb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiRzZWxlY3Q/LmNvbmNhdChcIixcIiwgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzLmpvaW4oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIG1kYyB0YWJsZSBjb250cm9sLlxuXHQgKi9cblx0X3VwZGF0ZUF2YWlsYWJsZUNhcmRzOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0aWYgKHRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLmdldFZpZXdEYXRhKCk/LmNvbnZlcnRlclR5cGUgPT09IFwiTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0YWJsZUFQST8uZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCBjYXJkczogV3JhcHBlZENhcmRbXSA9IFtdO1xuXHRcdFx0YXdhaXQgdGFibGVBUEkuY29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyID0gbmV3IENvbGxhYm9yYXRpb25NYW5hZ2VyKCk7XG5cdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gY29sbGFib3JhdGlvbk1hbmFnZXIudXBkYXRlQ2FyZHMoY2FyZHMpO1xuXHRcdFx0Y29uc3QgcGFyZW50QXBwSWQgPSBhcHBDb21wb25lbnQuZ2V0SWQoKTtcblx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKClcblx0XHRcdFx0LmFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlcihjYXJkT2JqZWN0LCBwYXJlbnRBcHBJZCwgdGFibGVBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRWaWV3KCkuZ2V0SWQoKSk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuc2hhcmVBdmFpbGFibGVDYXJkcygpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVGhlIGhvb2sgaW1wbGVtZW50ZWQgYnkgTURDIHRoYXQgd2UgY2FuIG92ZXJyaWRlLlxuXHQgKiBUaGlzIGFsbG93cyB1cyB0byBkZWZpbmUgcHJvcGVydGllcyB0byBiZSByZXF1ZXN0ZWQgaW4gdGhlIE1EQyB0YWJsZSAoTWFpbiBjYXNlIGlzIGZvciB0aGUgYW5hbHl0aWNhbCB0YWJsZSkuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWUgdG8gYmUgcmVxdWVzdGVkLlxuXHQgKi9cblx0Z2V0SW5SZXN1bHRQcm9wZXJ0eUtleXM6IGZ1bmN0aW9uICh0YWJsZTogTURDVGFibGUpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSk7XG5cdFx0aWYgKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0XHRjb25zdCBhbGxLa2V5c1JlcXVlc3RlZCA9IHRoaXMuY2hlY2tBbGxLZXlzQXJlUmVxdWVzdGVkKHRhYmxlQVBJKTtcblx0XHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0Ly8gaWYgYSByb3dwcmVzcyBpcyBvdmVycmlkZGVuLCB3ZSAgc2hvdWxkIGVuYWJsZSB0aGUgbmF2aWdhdGlvbiBhdCB0aGUgbm9kZSBsZXZlbFxuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJpc05vZGVMZXZlbE5hdmlnYWJsZVwiLCB0YWJsZUFQSS5vdmVycmlkZVJvd1ByZXNzID8gdHJ1ZSA6IGFsbEtrZXlzUmVxdWVzdGVkKTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdE9iamVjdC5rZXlzKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdClcblx0XHRcdFx0XHQvLyBmb3IgYW5hbHl0aWMgdGFibGVzIHdpdGggYWdncmVnYXRpb25PbkxlYWZMZXZlbCB3ZSBzaG91bGQgbm90IHJlcXVlc3QgdGhlIHNlbWFudGljS2V5IGV4cGVjdGVkIHdoZW4gYWxsIGtleXMgYXJlIHJlcXVlc3RlZCAtPiAgaXQgd2lsbCBwZXJtaXRzIHRvIG5hdmlnYXRlIGZyb20gYSBub2RlIGxldmVsIHdoZW4gc2VtYW50aWNLZXkgYXJlIGVuYWJsZWRcblx0XHRcdFx0XHQvLyByZXN0cmljdGlvbiBhcmUgYWxzbyBleGNsdWRlZCBhcyB3ZSBjYW5ub3QgZGVzdGluZ3Vpc2ggYmV0d2VlbiBhIG5vZGUgYW5kIGEgYWdncmVnYXRpb24gbGV2ZWxcblxuXHRcdFx0XHRcdC5maWx0ZXIoKGZpZWxkTmFtZTogc3RyaW5nKSA9PlxuXHRcdFx0XHRcdFx0IWFsbEtrZXlzUmVxdWVzdGVkXG5cdFx0XHRcdFx0XHRcdD8gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0W2ZpZWxkTmFtZV0uc29tZShcblx0XHRcdFx0XHRcdFx0XHRcdChvcmlnaW4pID0+IG9yaWdpbiAhPT0gXCJyZXN0cmljdGlvblwiICYmIG9yaWdpbiAhPT0gXCJzZW1hbnRpY0tleVwiXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gT2JqZWN0LmtleXModGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0ID8/IHt9KTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYWxsIGtleXMoKSBleGNlcHRlZCBJc0FjdGl2ZUVudGl0eSkgYXJlIHJlcXVlc3RlZCBpbiB0aGUgdGFibGUuXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgdGFibGUgQVBJXG5cdCAqIEByZXR1cm5zICBUcnVlIGlmIGFsbCBrZXlzIGFyZSByZXF1ZXN0ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0Y2hlY2tBbGxLZXlzQXJlUmVxdWVzdGVkOiBmdW5jdGlvbiAodGFibGVBUEk6IFRhYmxlQVBJKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0YWJsZUFQSS5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgYWxsQ29sdW1ucyA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMgYXMgKFRhYmxlQ29sdW1uICYgeyBpc0tleTogYm9vbGVhbjsgcmVsYXRpdmVQYXRoOiBzdHJpbmcgfSlbXTtcblx0XHRjb25zdCBrZXlQcm9wZXJ0eU5hbWVzID0gYWxsQ29sdW1uc1xuXHRcdFx0LmZpbHRlcigoYykgPT4gYy5pc0tleSAmJiBjLnJlbGF0aXZlUGF0aCAmJiBjLnJlbGF0aXZlUGF0aCAhPT0gXCJJc0FjdGl2ZUVudGl0eVwiKVxuXHRcdFx0Lm1hcCgoYykgPT4gYy5yZWxhdGl2ZVBhdGgpO1xuXG5cdFx0Y29uc3QgZGlzcGxheWVkQ29sdW1ucyA9IHRhYmxlXG5cdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHQubWFwKChjb2x1bW4pID0+IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBjb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSkpO1xuXG5cdFx0Ly8gU3RvcmUgYWxsIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBieSBkaXNwbGF5ZWQgY29sdW1ucyBpbiBhIFNldFxuXHRcdGNvbnN0IHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0ZnVuY3Rpb24gcHJvY2Vzc0NvbHVtbihjb2w6IEFubm90YXRpb25UYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdFx0Ly8gQWRkIHRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gY29sdW1uIGl0c2VsZiBpZiBpdCdzIG5vdCBhIGNvbXBsZXggcHJvcGVydHlJbmZvXG5cdFx0XHRpZiAoY29sLnJlbGF0aXZlUGF0aCAmJiBjb2wucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzLmFkZChjb2wucmVsYXRpdmVQYXRoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRoZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBieSB0aGUgY29sdW1uXG5cdFx0XHRjb2wuZXh0ZW5zaW9uPy5hZGRpdGlvbmFsUHJvcGVydGllcz8uZm9yRWFjaCgoYWRkaXRpb25hbENvbHVtbk5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgYWRkaXRpb25hbENvbHVtbiA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBhZGRpdGlvbmFsQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGlmIChhZGRpdGlvbmFsQ29sdW1uPy5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdFx0XHRyZWZlcmVuY2VkUHJvcGVydHlQYXRocy5hZGQoYWRkaXRpb25hbENvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0ZGlzcGxheWVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRcdGlmICghY29sdW1uKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIFByb2Nlc3MgdGhlIGNvbHVtbiBpdHNlbGZcblx0XHRcdHByb2Nlc3NDb2x1bW4oY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cblx0XHRcdC8vIFByb2Nlc3MgdGhlIGNvbHVtbnMgcmVmZXJlbmNlZCBieSB0aGUgY29sdW1uXG5cdFx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcz8uZm9yRWFjaCgocmVsYXRlZENvbHVtbk5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZENvbHVtbiA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSByZWxhdGVkQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGlmIChyZWxhdGVkQ29sdW1uKSB7XG5cdFx0XHRcdFx0cHJvY2Vzc0NvbHVtbihyZWxhdGVkQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGtleVByb3BlcnR5TmFtZXMuZXZlcnkoKHByb3BOYW1lKSA9PiBwcm9wTmFtZSAmJiByZWZlcmVuY2VkUHJvcGVydHlQYXRocy5oYXMocHJvcE5hbWUpKTtcblx0fSxcblx0LyoqXG5cdCAqIEdldHMgdGhlIHNlYXJjaCBxdWVyeSBmb3IgYW5hbHl0aWNhbCBhbmQgbm9uIGFuYWx5dGljYWwgb2RhdGFMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGJpbmRpbmcgVGhlIG9EYXRhTGlzdEJpbmRpbmcgaW5zdGFuY2UuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWFyY2ggcXVlcnkgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0U2VhcmNoUXVlcnk6IGZ1bmN0aW9uIChiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IGJpbmRpbmcuZ2V0QWdncmVnYXRpb24/LigpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChhZ2dyZWdhdGlvbj8uc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEZvciBhbmFseXRpY2FsIHRhYmxlcywgdGhlIHNlYXJjaCBxdWVyeSBpcyBzdG9yZWQgaW4gdGhlIGFnZ3JlZ2F0aW9uXG5cdFx0XHRyZXR1cm4gYWdncmVnYXRpb24uc2VhcmNoIGFzIHN0cmluZztcblx0XHR9XG5cdFx0Ly8gSWYgbm90IGZvdW5kIGluIGFnZ3JlZ2F0aW9uLCBjaGVjayB0aGUgcXVlcnkgb3B0aW9uc1xuXHRcdHJldHVybiBiaW5kaW5nLmdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzKCkuJHNlYXJjaDtcblx0fSxcblx0dXBkYXRlQmluZGluZzogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgYmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSB0YWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHQvLyBpZiB0aGUgcm93QmluZGluZ0luZm8gaGFzIGEgJCRnZXRLZWVwQWxpdmVDb250ZXh0IHBhcmFtZXRlciB3ZSBuZWVkIHRvIGNoZWNrIGl0IGlzIHRoZSBvbmx5IFRhYmxlIHdpdGggc3VjaCBhXG5cdFx0XHQvLyBwYXJhbWV0ZXIgZm9yIHRoZSBjb2xsZWN0aW9uTWV0YVBhdGhcblx0XHRcdGlmIChiaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kJGdldEtlZXBBbGl2ZUNvbnRleHQgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpID8/IFwiXCI7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0Y29uc3Qga2VwdEFsaXZlTGlzdHMgPSBpbnRlcm5hbE1vZGVsPy5nZXRPYmplY3QoXCIva2VwdEFsaXZlTGlzdHNcIikgPz8ge307XG5cdFx0XHRcdGlmICgha2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdKSB7XG5cdFx0XHRcdFx0a2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdID0gdGFibGUuZ2V0SWQoKTtcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9rZXB0QWxpdmVMaXN0c1wiLCBrZXB0QWxpdmVMaXN0cyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoa2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdICE9PSB0YWJsZS5nZXRJZCgpKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGxldCBuZWVkTWFudWFsUmVmcmVzaCA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSA9IFwicGVuZGluZ01hbnVhbEJpbmRpbmdVcGRhdGVcIjtcblx0XHRcdGNvbnN0IHBlbmRpbmdNYW51YWxVcGRhdGUgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSkgYXMgYm9vbGVhbjtcblx0XHRcdGNvbnN0IG5ld1NvcnRlcnMgPSBKU09OLnN0cmluZ2lmeShiaW5kaW5nSW5mby5zb3J0ZXIgPz8gW10pO1xuXG5cdFx0XHRpZiAoYmluZGluZykge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTWFudWFsIHJlZnJlc2ggaWYgZmlsdGVycyBhcmUgbm90IGNoYW5nZWQgYnkgYmluZGluZy5yZWZyZXNoKCkgc2luY2UgdXBkYXRpbmcgdGhlIGJpbmRpbmdJbmZvXG5cdFx0XHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0XHRcdCAqIFJlbW92aW5nIGNvbHVtbnMgY3JlYXRlcyBvbmUgYmF0Y2ggcmVxdWVzdCB0aGF0IHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0XHRcdGNvbnN0IG9sZEZpbHRlcnMgPSBiaW5kaW5nLmdldEZpbHRlcnMoXCJBcHBsaWNhdGlvblwiKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNTb3J0ZXJzID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUykgPz8gXCJbXVwiO1xuXG5cdFx0XHRcdGNvbnN0IGZpbHRlck5vdENoYW5nZWQgPVxuXHRcdFx0XHRcdCgoYmluZGluZ0luZm8uZmlsdGVycyA9PT0gbnVsbCAmJiBvbGRGaWx0ZXJzLmxlbmd0aCA9PT0gMCkgfHwgLy8gb24gYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBmaWx0ZXJzIGFyZSBzZXQgdG8gbnVsbCB3aGVuIG5vIGZpbHRlcnNcblx0XHRcdFx0XHRcdGRlZXBFcXVhbChiaW5kaW5nSW5mby5maWx0ZXJzLCBvbGRGaWx0ZXJzWzBdKSkgJiZcblx0XHRcdFx0XHRuZXdTb3J0ZXJzID09PSBwcmV2aW91c1NvcnRlcnMgJiZcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoID09PSBiaW5kaW5nLmdldFBhdGgoKSAmJiAvLyBUaGUgcGF0aCBjYW4gYmUgY2hhbmdlZCBpbiBjYXNlIG9mIGEgcGFyYW1ldHJpemVkIGVudGl0eVxuXHRcdFx0XHRcdHRoaXMuZ2V0U2VhcmNoUXVlcnkoYmluZGluZykgPT09IGJpbmRpbmdJbmZvPy5wYXJhbWV0ZXJzPy4kc2VhcmNoO1xuXHRcdFx0XHRjb25zdCBMUk11bHRpVmlld0VuYWJsZWQgPSAhIXZpZXdEYXRhLnZpZXdzO1xuXG5cdFx0XHRcdG5lZWRNYW51YWxSZWZyZXNoID1cblx0XHRcdFx0XHRmaWx0ZXJOb3RDaGFuZ2VkICYmXG5cdFx0XHRcdFx0KGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCkgfHwgLy8gY2hlY2sgaWYgdGhlIHNlYXJjaCBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCkgfHwgLy8gY2hlY2sgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYWRkZWRcblx0XHRcdFx0XHRcdExSTXVsdGlWaWV3RW5hYmxlZCkgJiYgLy8gaWYgdGhlIG11bHRpIHZpZXcgaXMgZW5hYmxlZCB0aGUgcmVxdWVzdCBzaG91bGQgYmUgcmVmcmVzaGVkIGFzIHdlIGRvbid0IGtub3duIGlmIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZSBpcyBvdXRkYXRlZCBkdWUgdG8gYW4gYWN0aW9uIG9uIGFub3RoZXIgdGFibGVcblx0XHRcdFx0XHQhcGVuZGluZ01hbnVhbFVwZGF0ZTtcblx0XHRcdH1cblx0XHRcdC8vIENsZWFudXAgZ3JvdXBDb25kaXRpb25zIGFuZCBhZ2dyZWdhdGVDb25kaXRpb25zIGlmIHRoZXkgZG9uJ3QgbWFrZSBzZW5zZVxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBBZ2dyZWdhdGUgY29uZGl0aW9ucyBuZXZlciBtYWtlIHNlbnNlIG91dHNpZGUgb2YgYW4gYW5hbHl0aWNhbCB0YWJsZVxuXHRcdFx0XHR0YWJsZS5zZXRBZ2dyZWdhdGVDb25kaXRpb25zKCk7XG5cblx0XHRcdFx0Ly8gR3JvdXAgY29uZGl0aW9ucyBkb24ndCBtYWtlIHNlbnNlIGluIGEgVHJlZSBvciBHcmlkIHRhYmxlXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiR3JpZFRhYmxlXCIgfHxcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGFibGUuc2V0R3JvdXBDb25kaXRpb25zKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcuYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mbywgYmluZGluZ10pO1xuXHRcdFx0Ly8gd2Ugc3RvcmUgdGhlIHRhYmxlIGJpbmRpbmcgaW5mbyB0aGF0IHdhcyB1c2VkIHRvIGJpbmQgdGhlIHRhYmxlIGluIHRoZSB0YWJsZSBBUElcblx0XHRcdC8vIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbCB0byBUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nIG90aGVyIHdpc2Ugd2UgZG9uJ3QgZ2V0IHRoZSBhZ2dyZWdhdGUgcGFyYW1ldGVyc1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXRyaWV2ZSBzb3J0ZXJzIGFkZGVkIGluIHRoZSBvbkJlZm9yZVJlYmluZFRhYmxlIGV2ZW50XG5cdFx0XHR0YWJsZUFQSS5zZXRUYWJsZUJpbmRpbmdJbmZvKGJpbmRpbmdJbmZvKTtcblx0XHRcdC8vIHdlIG1ha2UgdGhlIGNhbGwgdG8gdXBkYXRlIHRoZSBkb3dubG9hZCB1cmwgYnV0IGRvIG5vdCBhd2FpdCBpdFxuXHRcdFx0dGFibGVBUEkuc2V0RG93bmxvYWRVcmwoKTtcblxuXHRcdFx0dGFibGUuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG5cdFx0XHRpZiAobmVlZE1hbnVhbFJlZnJlc2ggJiYgdGFibGUuZ2V0RmlsdGVyKCkgJiYgYmluZGluZykge1xuXHRcdFx0XHRiaW5kaW5nXG5cdFx0XHRcdFx0LnJlcXVlc3RSZWZyZXNoKGJpbmRpbmcuZ2V0R3JvdXBJZCgpKVxuXHRcdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdGFibGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTLCBuZXdTb3J0ZXJzKTtcblxuXHRcdFx0Ly9mb3IgVHJlZXRhYmxlLCBpdCdzIG5lY2Vzc2FyeSB0byBjbGVhciB0aGUgcGFzdGFibGVDb250ZXh0cyBzaW5jZSB0aGUgYmluZGluZyBkZXN0cm95cyBwcmV2aW91cyBjb250ZXh0cy5cblx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJwYXN0YWJsZUNvbnRleHRzXCIsIFtdKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSB0YWJsZUFQSS5zdG9yZWRFdmVudHMgPz8gW107XG5cdFx0XHRhdHRhY2hlZEV2ZW50cy5mb3JFYWNoKCh7IGV2ZW50SWQsIGNhbGxiYWNrLCBsaXN0ZW5lciwgZGF0YSB9KSA9PiB7XG5cdFx0XHRcdHRhYmxlLmdldFJvd0JpbmRpbmcoKT8uYXR0YWNoRXZlbnQoZXZlbnRJZCwgZGF0YSwgY2FsbGJhY2ssIGxpc3RlbmVyKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0fSxcblxuXHRfY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IENvbGxlY3Rpb25CaW5kaW5nSW5mbyB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSShvVGFibGUpO1xuXHRcdGNvbnN0IHJvd0JpbmRpbmdJbmZvID0gdGFibGVBUEkuZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvKCk7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRsZXQgdGFibGVDYW5CZUluSW5saW5lRWRpdCA9IGZhbHNlO1xuXHRcdGlmIChcblx0XHRcdGJpbmRpbmdDb250ZXh0ID09PSB1bmRlZmluZWQgJiZcblx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpPy5nZXRQcm9wZXJ0eShcImlzRWRpdGFibGVcIikgPT09IGZhbHNlICYmXG5cdFx0XHRvVGFibGUuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKT8uZ2V0UHJvcGVydHkoXCIvaXNJbmxpbmVFZGl0RW5hYmxlZFwiKVxuXHRcdCkge1xuXHRcdFx0dGFibGVDYW5CZUluSW5saW5lRWRpdCA9IHRydWU7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdChiaW5kaW5nQ29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCk/LmdldEJpbmRpbmcoKS5nZXRVcGRhdGVHcm91cElkKCkgPT0gQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAodGFibGVDYW5CZUluSW5saW5lRWRpdCkge1xuXHRcdFx0cm93QmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0XHRyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkdXBkYXRlR3JvdXBJZCA9IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcm93QmluZGluZ0luZm87XG5cdH0sXG5cdF9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRPYmplY3QuYXNzaWduKG9CaW5kaW5nSW5mbywgdGhpcy5fY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlKG9UYWJsZSkpO1xuXHRcdC8qKlxuXHRcdCAqIEJpbmRpbmcgaW5mbyBtaWdodCBiZSBzdXNwZW5kZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZSBmaXJzdCBiaW5kUm93cyBpcyBjYWxsZWQ6XG5cdFx0ICogVG8gYXZvaWQgZHVwbGljYXRlIHJlcXVlc3RzIGJ1dCBzdGlsbCBoYXZlIGEgYmluZGluZyB0byBjcmVhdGUgbmV3IGVudHJpZXMuXHRcdFx0XHQgKlxuXHRcdCAqIEFmdGVyIHRoZSBpbml0aWFsIGJpbmRpbmcgc3RlcCwgZm9sbG93IHVwIGJpbmRpbmdzIHNob3VsZCBubyBsb25nZXIgYmUgc3VzcGVuZGVkLlxuXHRcdCAqL1xuXHRcdGlmIChvVGFibGUuZ2V0Um93QmluZGluZygpKSB7XG5cdFx0XHRvQmluZGluZ0luZm8uc3VzcGVuZGVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIFRoZSBwcmV2aW91c2x5IGFkZGVkIGhhbmRsZXIgZm9yIHRoZSBldmVudCAnZGF0YVJlY2VpdmVkJyBpcyBub3QgYW55bW9yZSB0aGVyZVxuXHRcdC8vIHNpbmNlIHRoZSBiaW5kaW5nSW5mbyBpcyByZWNyZWF0ZWQgZnJvbSBzY3JhdGNoIHNvIHdlIG5lZWQgdG8gc2V0IHRoZSBmbGFnIHRvIGZhbHNlIGluIG9yZGVyXG5cdFx0Ly8gdG8gYWdhaW4gYWRkIHRoZSBoYW5kbGVyIG9uIHRoaXMgZXZlbnQgaWYgbmVlZGVkXG5cdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkQXR0YWNoZWRcIiwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdGxldCBvRmlsdGVyO1xuXHRcdGNvbnN0IG9GaWx0ZXJJbmZvID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKG9UYWJsZSk7XG5cdFx0Ly8gUHJlcGFyZSBiaW5kaW5nIGluZm8gd2l0aCBmaWx0ZXIvc2VhcmNoIHBhcmFtZXRlcnNcblx0XHRpZiAob0ZpbHRlckluZm8uZmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRvRmlsdGVyID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IG9GaWx0ZXJJbmZvLmZpbHRlcnMsIGFuZDogdHJ1ZSB9KTtcblx0XHR9XG5cdFx0aWYgKG9GaWx0ZXJJbmZvLmJpbmRpbmdQYXRoKSB7XG5cdFx0XHRvQmluZGluZ0luZm8ucGF0aCA9IG9GaWx0ZXJJbmZvLmJpbmRpbmdQYXRoO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9EYXRhU3RhdGVJbmRpY2F0b3IgPSBvVGFibGUuZ2V0RGF0YVN0YXRlSW5kaWNhdG9yKCk7XG5cdFx0aWYgKG9EYXRhU3RhdGVJbmRpY2F0b3IgJiYgb0RhdGFTdGF0ZUluZGljYXRvci5pc0ZpbHRlcmluZygpKSB7XG5cdFx0XHQvLyBJbmNsdWRlIGZpbHRlcnMgb24gbWVzc2FnZVN0cmlwXG5cdFx0XHRpZiAoKG9CaW5kaW5nSW5mby5maWx0ZXJzIGFzIHVua25vd24gYXMgRmlsdGVyW10pLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ZpbHRlciA9IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiAob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkuY29uY2F0KG9GaWx0ZXJJbmZvLmZpbHRlcnMpLCBhbmQ6IHRydWUgfSk7XG5cdFx0XHRcdHRoaXMudXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0fVxuXG5cdFx0dGhpcy5hZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzKG9UYWJsZSwgb0JpbmRpbmdJbmZvKTtcblx0fSxcblxuXHR1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeTogZnVuY3Rpb24gKGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8sIGZpbHRlckluZm86IEludGVybmFsQmluZGluZ0luZm8sIGZpbHRlcj86IEZpbHRlcikge1xuXHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBmaWx0ZXI7XG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0aWYgKGZpbHRlckluZm8uc2VhcmNoKSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKGZpbHRlckluZm8uc2VhcmNoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIElmIHNwZWNpZmllZCBpbiB0aGUgcGF5bG9hZCwgYWRkcyBhIGZpbHRlciB0byBkaXNwbGF5IG9ubHkgYWN0aXZlIGVudGl0aWVzLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGJpbmRpbmdJbmZvXG5cdCAqL1xuXHRhZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgcGF5bG9hZCA9IHRhYmxlLmdldFBheWxvYWQoKSBhcyB7IGZpbHRlck9uQWN0aXZlRW50aXRpZXM/OiBib29sZWFuIH07XG5cblx0XHRpZiAocGF5bG9hZD8uZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyT25BY3RpdmUgPSBuZXcgRmlsdGVyKHsgcGF0aDogXCJJc0FjdGl2ZUVudGl0eVwiLCBvcGVyYXRvcjogXCJFUVwiLCB2YWx1ZTE6IHRydWUgfSk7XG5cdFx0XHRpZiAoYmluZGluZ0luZm8uZmlsdGVycykge1xuXHRcdFx0XHRiaW5kaW5nSW5mby5maWx0ZXJzID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IFtmaWx0ZXJPbkFjdGl2ZSwgYmluZGluZ0luZm8uZmlsdGVyc10sIGFuZDogdHJ1ZSB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBmaWx0ZXJPbkFjdGl2ZTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIHRoZSBmcmFnbWVudCBvZiBhIHNsb3QgY29sdW1uLlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY3VzdG9tIHRhYmxlIGNvbHVtblxuXHQgKiBAcGFyYW0gdmlldyBUaGUgY3VycmVudCB2aWV3XG5cdCAqIEBwYXJhbSBtb2RpZmllciBUaGUgY29udHJvbCB0cmVlIG1vZGlmaWVyXG5cdCAqIEBwYXJhbSB0YWJsZUlkIFRoZSBpZCBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgbG9hZGVkIGZyYWdtZW50XG5cdCAqL1xuXHRfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRjb2x1bW5JbmZvOiBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4+LFxuXHRcdHZpZXc6IFZpZXcsXG5cdFx0bW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfCBKc0NvbnRyb2xUcmVlTW9kaWZpZXIsXG5cdFx0dGFibGVJZDogc3RyaW5nXG5cdCk6IFByb21pc2U8bnVsbCB8IENvbnRyb2wgfCBDb250cm9sW10gfCBFbGVtZW50PiB7XG5cdFx0Y29uc3Qgc2xvdENvbHVtbnNYTUwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKFxuXHRcdFx0anN4LnJlbmRlckFzWE1MKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldFNsb3RDb2x1bW4odGFibGVJZCwgY29sdW1uSW5mbywgZmFsc2UpIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHRcdFx0fSksXG5cdFx0XHRcInRleHQveG1sXCJcblx0XHQpO1xuXHRcdGlmICghc2xvdENvbHVtbnNYTUwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IHNsb3RYTUwgPSBzbG90Q29sdW1uc1hNTC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNsb3RcIilbMF07XG5cblx0XHRpZiAoY29sdW1uSW5mby50ZW1wbGF0ZSkge1xuXHRcdFx0aWYgKHNsb3RYTUwpIHtcblx0XHRcdFx0Y29uc3Qgb1RlbXBsYXRlID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhjb2x1bW5JbmZvLnRlbXBsYXRlIGFzIHN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0XHRcdFx0aWYgKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCAmJiBvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUgIT09IFwiaHRtbFwiKSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZXBsYWNlV2l0aChvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNsb3RYTUwucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmVycm9yKGBQbGVhc2UgcHJvdmlkZSBjb250ZW50IGluc2lkZSB0aGlzIEJ1aWxkaW5nIEJsb2NrIENvbHVtbjogJHtjb2x1bW5JbmZvLmhlYWRlcn1gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdFhNTCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0c2xvdENvbHVtbnNYTUwuZmlyc3RFbGVtZW50Q2hpbGQsXG5cdFx0XHR7IG1vZGVsczoge30gfSxcblx0XHRcdCh2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRPd25lckNvbXBvbmVudCgpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50PikuZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCgpXG5cdFx0KTtcblx0XHRpZiAobW9kaWZpZXI/LnRhcmdldHMgIT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0WE1MLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdH1cblx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0ZGVmaW5pdGlvbjogcmVzdWx0WE1MLFxuXHRcdFx0Y29udHJvbGxlcjogdmlldy5nZXRDb250cm9sbGVyKClcblx0XHR9KSBhcyBQcm9taXNlPENvbnRyb2wgfCBDb250cm9sW10+O1xuXHR9LFxuXG5cdF9nZXRFeHBvcnRGb3JtYXQ6IGZ1bmN0aW9uIChkYXRhVHlwZT86IHN0cmluZykge1xuXHRcdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxEYXRlZnJvbUpTRGF0ZSgpO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxEYXRlVGltZWZyb21KU0RhdGVUaW1lKCk7XG5cdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxUaW1lZnJvbUpTVGltZSgpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0X2dldFZIUmVsZXZhbnRGaWVsZHM6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc01ldGFkYXRhUGF0aDogc3RyaW5nLCBzQmluZGluZ1BhdGg/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0bGV0IGFGaWVsZHM6IHN0cmluZ1tdID0gW10sXG5cdFx0XHRvRGF0YUZpZWxkRGF0YSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNZXRhZGF0YVBhdGgpO1xuXG5cdFx0aWYgKG9EYXRhRmllbGREYXRhLiRraW5kICYmIG9EYXRhRmllbGREYXRhLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGApO1xuXHRcdFx0c01ldGFkYXRhUGF0aCA9IGAke3NNZXRhZGF0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgO1xuXHRcdH1cblx0XHRzd2l0Y2ggKG9EYXRhRmllbGREYXRhLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aGApLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiKSkge1xuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YWApLmZvckVhY2goKG9WYWx1ZTogdW5rbm93biwgaUluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRcdGFGaWVsZHMgPSBhRmllbGRzLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0VkhSZWxldmFudEZpZWxkcyhvTWV0YU1vZGVsLCBgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvJHtpSW5kZXh9YClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCI6XG5cdFx0XHRcdGFGaWVsZHMucHVzaChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9WYWx1ZS8kUGF0aGApKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gcHJvcGVydHlcblx0XHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgdG8gbWFrZSBzdXJlIFZIIHJlbGV2YW50IGZpZWxkIHBhdGggZG8gbm90IGNvbnRhaW4gdGhlIGJpbmRpbmdwYXRoXG5cdFx0XHRcdGlmIChzQmluZGluZ1BhdGggJiYgc01ldGFkYXRhUGF0aC5pbmRleE9mKHNCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRhRmllbGRzLnB1c2goc01ldGFkYXRhUGF0aC5zdWJzdHJpbmcoc0JpbmRpbmdQYXRoLmxlbmd0aCArIDEpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRhRmllbGRzLnB1c2goQ29tbW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNNZXRhZGF0YVBhdGgsIHRydWUpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBhRmllbGRzO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW46IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBhQ29sdW1uczogVGFibGVDb2x1bW5bXSwgb0NvbHVtbkluZm8/OiBUYWJsZUNvbHVtbikge1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aWYgKCFvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yID0gYUNvbHVtbnMuZmlsdGVyKChvQ29sdW1uOiBUYWJsZUNvbHVtbikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihvQ29sdW1uKTtcblx0XHR9KTtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBvVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGxldCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUsIHNWaXNpYmxlQ29sdW1uTmFtZSwgYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCwgc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3I7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFWaXNpYmxlQ29sdW1ucykge1xuXHRcdFx0c1Zpc2libGVDb2x1bW5OYW1lID0gYVZpc2libGVDb2x1bW5zW2ldLmdldFByb3BlcnR5S2V5KCk7XG5cdFx0XHRmb3IgKGNvbnN0IGogaW4gYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0c0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcltqXS5uYW1lO1xuXHRcdFx0XHRpZiAoc1Zpc2libGVDb2x1bW5OYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvQ29sdW1uSW5mbyAmJiBvQ29sdW1uSW5mby5uYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdHNBZGRWaXNpYmxlQ29sdW1uTmFtZSA9IG9Db2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgJiYgc0FkZFZpc2libGVDb2x1bW5OYW1lKSB7XG5cdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpO1xuXHRcdH1cblx0fSxcblx0cmVtb3ZlSXRlbTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9UYWJsZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0b1Byb3BlcnR5SW5mb05hbWU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRsZXQgZG9SZW1vdmVJdGVtID0gdHJ1ZTtcblx0XHRpZiAoIW9Qcm9wZXJ0eUluZm9OYW1lKSB7XG5cdFx0XHQvLyAxLiBBcHBsaWNhdGlvbiByZW1vdmVkIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZWlyIGRhdGEgbW9kZWxcblx0XHRcdC8vIDIuIGFkZEl0ZW0gZmFpbGVkIGJlZm9yZSByZXZlcnREYXRhIGNyZWF0ZWRcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0XHR9XG5cdFx0Y29uc3Qgb01vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRcdGNvbnN0IHNEYXRhUHJvcGVydHkgPSBhd2FpdCBvTW9kaWZpZXIuZ2V0UHJvcGVydHk8c3RyaW5nPihvUHJvcGVydHlJbmZvTmFtZSwgXCJkYXRhUHJvcGVydHlcIik7XG5cdFx0aWYgKHNEYXRhUHJvcGVydHkgJiYgc0RhdGFQcm9wZXJ0eS5pbmNsdWRlcyAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzKFwiSW5saW5lWE1MXCIpKSB7XG5cdFx0XHRvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0ZG9SZW1vdmVJdGVtID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICgob1RhYmxlIGFzIFVJNUVsZW1lbnQpLmlzQSAmJiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgb1RhYmxlLCB0aGlzLmdldENvbHVtbnNGb3Iob1RhYmxlIGFzIFRhYmxlKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0fSxcblx0X2dldE1ldGFNb2RlbDogZnVuY3Rpb24gKG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9KSB7XG5cdFx0cmV0dXJuIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXM6IGZ1bmN0aW9uIChcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRhQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0XHRvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uXG5cdCkge1xuXHRcdGlmIChvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uKG9UYWJsZSBhcyBUYWJsZSwgYUNvbHVtbnMsIG9Db2x1bW5JbmZvKTtcblx0XHR9XG5cdH0sXG5cdF9nZXRHcm91cElkOiBmdW5jdGlvbiAoc1JldHJpZXZlZEdyb3VwSWQ6IHN0cmluZykge1xuXHRcdHJldHVybiBzUmV0cmlldmVkR3JvdXBJZCB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pbnNlcnRBZ2dyZWdhdGlvbjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9WYWx1ZUhlbHA6IEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdLFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IEVsZW1lbnQgfCBVSTVFbGVtZW50XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChvVmFsdWVIZWxwKSB7XG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9UYWJsZSwgXCJkZXBlbmRlbnRzXCIsIG9WYWx1ZUhlbHAsIDApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH0sXG5cblx0LyoqXG5cdCAqIEludm9rZWQgd2hlbiBhIGNvbHVtbiBpcyBhZGRlZCB1c2luZyB0aGUgdGFibGUgcGVyc29uYWxpemF0aW9uIGRpYWxvZy5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb05hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSBjb2x1bW4gaXMgYWRkZWRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiBwcm9wZXJ0eSBiYWcgZnJvbSB0aGUgZmxleGliaWxpdHkgQVBJXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcubW9kaWZpZXIgSW5zdGFuY2Ugb2YgdGhlIGNvbnRyb2wgdHJlZSBtb2RpZmllclxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCBJbnN0YW5jZSBvZiB0aGUgYXBwIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLnZpZXcgSW5zdGFuY2Ugb2YgdGhlIHZpZXdcblx0ICogQHJldHVybnMgT25jZSByZXNvbHZlZCwgYSB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbiBpcyByZXR1cm5lZFxuXHQgKi9cblx0YWRkSXRlbTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBFbGVtZW50IHwgVUk1RWxlbWVudCxcblx0XHRwcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdFx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgdmlldz86IEZFVmlldyB9XG5cdCkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLl9nZXRNZXRhTW9kZWwobVByb3BlcnR5QmFnKSxcblx0XHRcdG9Nb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcixcblx0XHRcdHNUYWJsZUlkID0gb01vZGlmaWVyLmdldElkKHRhYmxlKSxcblx0XHRcdGFDb2x1bW5zID0gKHRhYmxlIGFzIFVJNUVsZW1lbnQpLmlzQSA/IHRoaXMuZ2V0Q29sdW1uc0Zvcih0YWJsZSBhcyBUYWJsZSkgOiBudWxsLFxuXHRcdFx0dGFibGVBUEkgPSB0aGlzLl9nZXRUYWJsZUFQSSh0YWJsZSBhcyBUYWJsZSk7XG5cdFx0aWYgKCFhQ29sdW1ucykge1xuXHRcdFx0Ly8gV2UgcmV0dXJuIG51bGwgaGVyZSBiZWNhdXNlIGV2ZXJ5dGhpbmcgc2hvdWxkIGFwcGx5IGF0IHJ1bnRpbWVcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pIHtcblx0XHRcdHJldHVybiBvQ29sdW1uLm5hbWUgPT09IHByb3BlcnR5SW5mb05hbWU7XG5cdFx0fSk7XG5cdFx0aWYgKCFjb2x1bW5JbmZvKSB7XG5cdFx0XHRMb2cuZXJyb3IoYCR7cHJvcGVydHlJbmZvTmFtZX0gbm90IGZvdW5kIHdoaWxlIGFkZGluZyBjb2x1bW5gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGlmIChjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0TG9nLndhcm5pbmcoYENvbHVtbiBmb3IgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgYWRkZWQgYmVjYXVzZSBpdCdzIGhpZGRlbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9ICh0YWJsZSBhcyBUYWJsZSkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQsIHRydWUpO1xuXHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgdGFibGUsIGFDb2x1bW5zLCBjb2x1bW5JbmZvKTtcblx0XHRjb25zdCBzUGF0aCA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4odGFibGUsIFwibWV0YVBhdGhcIiwgb01vZGlmaWVyKTtcblx0XHRjb25zdCBvVGFibGVDb250ZXh0OiBDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpITtcblx0XHQvLyBJZiB2aWV3IGlzIG5vdCBwcm92aWRlZCB0cnkgdG8gZ2V0IGl0IGJ5IGFjY2Vzc2luZyB0byB0aGUgcGFyZW50YWwgaGllcmFyY2h5XG5cdFx0Ly8gSWYgaXQgZG9lc24ndCB3b3JrICh0YWJsZSBpbnRvIGFuIHVuYXR0YWNoZWQgT1Agc2VjdGlvbikgZ2V0IHRoZSB2aWV3IHZpYSB0aGUgQXBwQ29tcG9uZW50XG5cdFx0Y29uc3QgdmlldyA9XG5cdFx0XHRtUHJvcGVydHlCYWcudmlldyB8fFxuXHRcdFx0Q29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSBhcyBVSTVFbGVtZW50KSB8fFxuXHRcdFx0KG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgPyBDb21tb25VdGlscy5nZXRDdXJyZW50UGFnZVZpZXcobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCkgOiB1bmRlZmluZWQpO1xuXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdExvZy5lcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiU2xvdFwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQoY29sdW1uSW5mbyBhcyBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4+LCB2aWV3LCBvTW9kaWZpZXIsIHNUYWJsZUlkKTtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIkNvbXB1dGVkXCIpIHtcblx0XHRcdGNvbnN0IGVuYWJsZUFuYWx5dGljcyA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlIGFzIFRhYmxlKS5nZXRUYWJsZURlZmluaXRpb24oKS5lbmFibGVBbmFseXRpY3M7XG5cdFx0XHRyZXR1cm4gZ2V0Q29tcHV0ZWRDb2x1bW4oc1RhYmxlSWQsIGNvbHVtbkluZm8gYXMgQ29tcHV0ZWRUYWJsZUNvbHVtbiwgb1RhYmxlQ29udGV4dCwgZW5hYmxlQW5hbHl0aWNzKTtcblx0XHR9XG5cblx0XHQvLyBmYWxsLWJhY2tcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXG5cdFx0bGV0IHByb3BlcnR5SW5mb3MgPSB0YWJsZUFQSS5nZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0aWYgKCFwcm9wZXJ0eUluZm9zLmxlbmd0aCkge1xuXHRcdFx0Ly8gSWYgdGhlIHByb3BlcnR5SW5mb3MgYXJlIG5vdCBmZXRjaGVkIHlldCwgd2UgbmVlZCB0byBmZXRjaCB0aGVtXG5cdFx0XHQvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gdGhlIHRhYmxlIGlzIG5vdCBjcmVhdGVkIHlldFxuXHRcdFx0YXdhaXQgdGhpcy5mZXRjaFByb3BlcnRpZXModGFibGUgYXMgTURDVGFibGUpO1xuXHRcdFx0cHJvcGVydHlJbmZvcyA9IHRhYmxlQVBJLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gcHJvcGVydHlJbmZvcy5maW5kKGZ1bmN0aW9uIChwcm9wSW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbykge1xuXHRcdFx0cmV0dXJuIHByb3BJbmZvLm5hbWUgPT09IHByb3BlcnR5SW5mb05hbWU7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBvUHJvcGVydHlDb250ZXh0OiBDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChwcm9wZXJ0eUluZm8hLmFubm90YXRpb25QYXRoKSE7XG5cblx0XHRjb25zdCBmblRlbXBsYXRlRnJhZ21lbnQgPSBhc3luYyAoXG5cdFx0XHRvSW5Qcm9wZXJ0eUluZm86IHVua25vd24sXG5cdFx0XHRvVmlldzogRkVWaWV3XG5cdFx0KTogUHJvbWlzZTxVSTVFbGVtZW50IHwgRWxlbWVudCB8IFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXT4gPT4ge1xuXHRcdFx0bGV0IGJEaXNwbGF5TW9kZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBzVGFibGVUeXBlQ3VzdG9tRGF0YTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChbXG5cdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZyB8IGJvb2xlYW4+KHRhYmxlLCBcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIsIG9Nb2RpZmllciksXG5cdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4odGFibGUsIFwidGFibGVUeXBlXCIsIG9Nb2RpZmllciksXG5cdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4odGFibGUsIFwiY3JlYXRpb25Nb2RlXCIsIG9Nb2RpZmllcilcblx0XHRcdF0pLnRoZW4oYXN5bmMgKGFDdXN0b21EYXRhOiAoc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZClbXSkgPT4ge1xuXHRcdFx0XHRiRGlzcGxheU1vZGUgPSBhQ3VzdG9tRGF0YVswXSBhcyBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRzVGFibGVUeXBlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzFdIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0c0NyZWF0aW9uTW9kZUN1c3RvbURhdGEgPSBhQ3VzdG9tRGF0YVsyXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIFJlYWQgT25seSBhbmQgQ29sdW1uIEVkaXQgTW9kZSBjYW4gYm90aCBoYXZlIHRocmVlIHN0YXRlXG5cdFx0XHRcdC8vIFVuZGVmaW5lZCBtZWFucyB0aGF0IHRoZSBmcmFtZXdvcmsgZGVjaWRlcyB3aGF0IHRvIGRvXG5cdFx0XHRcdC8vIFRydWUgLyBEaXNwbGF5IG1lYW5zIGFsd2F5cyByZWFkIG9ubHlcblx0XHRcdFx0Ly8gRmFsc2UgLyBFZGl0YWJsZSBtZWFucyBlZGl0YWJsZSBidXQgd2hpbGUgc3RpbGwgcmVzcGVjdGluZyB0aGUgbG93IGxldmVsIHByaW5jaXBsZSAoaW1tdXRhYmxlIHByb3BlcnR5IHdpbGwgbm90IGJlIGVkaXRhYmxlKVxuXHRcdFx0XHRpZiAoYkRpc3BsYXlNb2RlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGJEaXNwbGF5TW9kZSAhPT0gXCJib29sZWFuXCIpIHtcblx0XHRcdFx0XHRiRGlzcGxheU1vZGUgPSBiRGlzcGxheU1vZGUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgb1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdFx0XHRcdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5lbmFibGVBdXRvQ29sdW1uV2lkdGgsXG5cdFx0XHRcdFx0XHRyZWFkT25seTogYkRpc3BsYXlNb2RlLFxuXHRcdFx0XHRcdFx0dGFibGVUeXBlOiBzVGFibGVUeXBlQ3VzdG9tRGF0YSxcblx0XHRcdFx0XHRcdGlkOiBzVGFibGVJZCxcblx0XHRcdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHByb3BlcnR5SW5mb05hbWUsXG5cdFx0XHRcdFx0XHRjb2x1bW5JbmZvOiBjb2x1bW5JbmZvLFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpLFxuXHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlOiB7IG5hbWU6IHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhIH0sXG5cdFx0XHRcdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlclxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9UYWJsZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9UYWJsZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZDogb1Byb3BlcnR5Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0dGhpczogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW46IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL2NvbHVtbkluZm9cIilcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdFx0XHRcdGVudGl0eVNldDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbjogb1RoaXNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnRcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0IHRhYmxlQ29sbGVjdGlvbiA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk+KFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbikhXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJQcm92aWRlciA9IG5ldyBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKFxuXHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbkVudGl0eTogdGFibGVDb2xsZWN0aW9uLnRhcmdldE9iamVjdCEsIG1ldGFNb2RlbDogb01ldGFNb2RlbCB9LFxuXHRcdFx0XHRcdHRhYmxlQVBJXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGNvbXB1dGVkQ29sdW1uWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhcblx0XHRcdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChnZXRDb2x1bW5UZW1wbGF0ZShcblx0XHRcdFx0XHRcdFx0c1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5JbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpISxcblx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHQpID8/IFwiXCIpIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFwidGV4dC94bWxcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRcdFx0XHRcdGNvbXB1dGVkQ29sdW1uWE1MLmZpcnN0RWxlbWVudENoaWxkLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdFx0XHR7IHZpZXc6IG9WaWV3IH0sXG5cdFx0XHRcdFx0b01vZGlmaWVyXG5cdFx0XHRcdCkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b1RoaXMuZGVzdHJveSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZm5UZW1wbGF0ZUZyYWdtZW50KHByb3BlcnR5SW5mbywgdmlldyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFByb3ZpZGUgdGhlIFRhYmxlJ3MgZmlsdGVyIGRlbGVnYXRlIHRvIHByb3ZpZGUgYmFzaWMgZmlsdGVyIGZ1bmN0aW9uYWxpdHkgc3VjaCBhcyBhZGRpbmcgRmlsdGVyRmllbGRzLlxuXHQgKiBAcmV0dXJucyBPYmplY3QgZm9yIHRoZSBUYWJsZXMgZmlsdGVyIHBlcnNvbmFsaXphdGlvbi5cblx0ICovXG5cdGdldEZpbHRlckRlbGVnYXRlOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7XG5cdFx0XHRcdGFwaVZlcnNpb246IDJcblx0XHRcdH0sXG5cdFx0XHRGaWx0ZXJCYXJEZWxlZ2F0ZSxcblx0XHRcdHtcblx0XHRcdFx0YWRkSXRlbTogYXN5bmMgZnVuY3Rpb24gKG9QYXJlbnRDb250cm9sOiBDb250cm9sLCBzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eUluZm9OYW1lLmluZGV4T2YoXCJQcm9wZXJ0eTo6XCIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHQvLyBDb3JyZWN0IHRoZSBuYW1lIG9mIGNvbXBsZXggcHJvcGVydHkgaW5mbyByZWZlcmVuY2VzLlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5SW5mb05hbWUgPSBzUHJvcGVydHlJbmZvTmFtZS5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIEZpbHRlckJhckRlbGVnYXRlLmFkZEl0ZW0ob1BhcmVudENvbnRyb2wgYXMgRmlsdGVyQmFyLCBzUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBUeXBlTWFwIGF0dGFjaGVkIHRvIHRoaXMgZGVsZWdhdGUuXG5cdCAqIEByZXR1cm5zIEFueSBpbnN0YW5jZSBvZiBUeXBlTWFwXG5cdCAqL1xuXHRnZXRUeXBlTWFwOiBmdW5jdGlvbiAoLypvUGF5bG9hZDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gVHlwZU1hcDtcblx0fSxcblxuXHQvKipcblx0ICogRm9ybWF0IHRoZSB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyIC5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcGFyYW0gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHJldHVybnMgRm9ybWF0dGVkIHRpdGxlIG9mIHRoZSBncm91cCBoZWFkZXIuXG5cdCAqL1xuXHRmb3JtYXRHcm91cEhlYWRlcih0YWJsZTogTURDVGFibGUsIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvcyA9IHRoaXMuX2dldFRhYmxlQVBJKHRhYmxlKS5nZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gcHJvcGVydHlJbmZvcz8uZmluZCgob2JqKSA9PiB7XG5cdFx0XHRyZXR1cm4gb2JqLm5hbWUgPT09IHByb3BlcnR5O1xuXHRcdH0pO1xuXHRcdC8qRm9yIGEgRGF0ZSwgRGF0ZVRpbWUsIEJvb2xlYW4gb3IgRGVjaW1hbCBwcm9wZXJ0eSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIGluIGV4dGVybmFsIGZvcm1hdCB1c2luZyBhIFVJNSB0eXBlIGZvciB0aGVcblx0ICAgICAgICBnaXZlbiBwcm9wZXJ0eSBwYXRoIHRoYXQgZm9ybWF0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSdzIEVETSB0eXBlIGFuZCBjb25zdHJhaW50cyovXG5cdFx0Y29uc3QgZGF0YUJhc2VUeXBlID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKHByb3BlcnR5SW5mbz8uZGF0YVR5cGUpLmJhc2VUeXBlO1xuXHRcdGNvbnN0IGV4dGVybmFsRm9ybWF0ID1cblx0XHRcdGRhdGFCYXNlVHlwZSA9PT0gXCJEYXRlVGltZVwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJEYXRlXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIkJvb2xlYW5cIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiTnVtZXJpY1wiO1xuXHRcdGxldCB2YWx1ZTtcblx0XHRpZiAoIWNvbnRleHQpIHtcblx0XHRcdHZhbHVlID0gZ2V0UmVzb3VyY2VNb2RlbChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFX1ZBTFVFXCIpO1xuXHRcdFx0cmV0dXJuIGdldFJlc291cmNlTW9kZWwodGFibGUpLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRVwiLCBbcHJvcGVydHlJbmZvPy5sYWJlbCwgdmFsdWVdKTtcblx0XHR9XG5cdFx0aWYgKHByb3BlcnR5SW5mbz8ubW9kZSkge1xuXHRcdFx0c3dpdGNoIChwcm9wZXJ0eUluZm8ubW9kZSkge1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHR2YWx1ZSA9IHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5ID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbDtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRcdHZhbHVlID0gVmFsdWVGb3JtYXR0ZXIuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gVmFsdWVGb3JtYXR0ZXIuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSBwcm9wZXJ0eUluZm8/LnBhdGggPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5wYXRoLCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHRcdHZhbHVlID0gZ2V0UmVzb3VyY2VNb2RlbChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFX1ZBTFVFXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHR9XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrRkEsTUFBTUEsOEJBQThCLEdBQUcsK0JBQStCO0VBQ3RFLE1BQU1DLHFCQUFxQixHQUFHLGFBQWE7RUFDM0MsTUFBTUMscUJBQXFCLEdBQUcsYUFBYTtFQUMzQyxNQUFNQyxnQkFBZ0IsR0FBRyxpQkFBaUI7O0VBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVJBLE9BU2VDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsRUFBRTtJQUNuREMsVUFBVSxFQUFFLENBQUM7SUFDYjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxtQ0FBbUMsRUFBRSxTQUFBQSxDQUNwQ0MsS0FBWSxFQUNaQyxZQUFvQyxFQUNwQ0MsYUFBdUMsRUFDdEM7TUFDRCxJQUFJRCxZQUFZLENBQUNFLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzNFLE1BQU1DLE1BQU0sR0FBR0wsS0FBSyxDQUFDTSxVQUFVLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUVDLEdBQUcsSUFBSztVQUMvQyxPQUFPQSxHQUFHLENBQUNDLGNBQWMsQ0FBQyxDQUFDLEtBQUtSLFlBQVksQ0FBQ0UsR0FBRztRQUNqRCxDQUFDLENBQUM7UUFDRixNQUFNTyxtQkFBbUIsR0FBR0wsTUFBTSxHQUFH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
|